Orbiplex Whisper¶
Orbiplex Whisper is a Node-attached solution component for privacy-bounded
social-signal exchange and small provenance statements. It prepares rumor-style
signals for publication, preserves their weaker epistemic status, coordinates
thresholded association bootstrap, and may carry bounded whisper-trace.v1
assertions without silently escalating either signals or traces into evidence.
Whisper does not own transport anonymity. It only declares routing and privacy intent on outgoing artifacts and relies on Node egress to satisfy that intent through whatever outbound privacy capability is available.
For public or federation-scoped signals, Whisper may use Orbiplex Agora as
the durable public/federated record substrate. Agora carries accepted
agora-record.v1 envelopes and feeds projections; Whisper still owns the
social-signal semantics, threshold lifecycle, and consent boundary.
Threshold and association artifacts are public meta-signals, not public gossip.
whisper-threshold-reached.v1 states that an issuer or projection observed a
policy-defined correlation. association-room-proposal.v1 states that there is a
redacted/bootstrap-only coordination proposal. Neither artifact is a public social
narrative; promotion to public-gossip.v1 requires a later, explicit publication
decision.
public-gossip.v1 is an explicit publication act, not an automatic projection
product. It may be published independently on a public weak-signal path, or after
an opt-in association room decides to make a public statement. An
association-room-proposal.v1 is therefore a possible precursor to public gossip,
not a prerequisite.
Purpose¶
The component is responsible for the solution-level execution path of:
- rumor intake and local preparation,
- redaction, paraphrase, and idiolect flattening with user approval,
- publication of bounded
whisper-signalartifacts, - reception of interest signals,
- threshold recognition,
- and bootstrap of opt-in association rooms.
Scope¶
This document defines solution-level responsibilities of the Whisper component.
It does not define:
- concrete module layout in an implementation repository,
- the implementation of transport privacy or onion-like relay,
- final evidentiary case management,
- automatic human enrollment into shared rooms,
- semantic duplicate detection for rumors in v1.
Post-MVP Extensions¶
Artifact Trace Statements¶
Related schema:
whisper-trace.v1
Whisper trace statements provide a low-cost way to disclose that an artifact was created, handed to a transport, received, or held. They are signed assertions by the envelope author, not receipts, attestations, proof of possession, or proof that the artifact content is true.
The default form contains only SHA-256, byte length, and optional content type or
schema. Digest-only disclosure reduces transferred data but is not anonymous:
predictable content may still be guessed or correlated by digest. Full inline
bytes are allowed only under digest-and-content, with an explicit
sender-host-validated consent/ref, a hard 32 KiB wire cap, and exact digest and
length verification. The full trace JSON is capped at 128 KiB and the explicit
extension namespace at 8 KiB before signing or admission. The referenced decision must bind the digest, scope,
subject/authority, and validity window; a reference string alone grants no
authority. The ref is sender-local audit linkage, not a network-visible consent
proof, and should not expose a participant id. A trace may reference
execution-receipt.v1, an AD delivery fact, or another attestation through
evidence/refs; those artifacts remain the evidence authorities.
Trace authoring uses the ordinary signed envelope and existing carriers:
- public or federated traces use
record/kind = "whisper-trace"andcontent/schema = "whisper-trace.v1"underai.orbiplex.whisper-traces/<trace-kind>; - private/direct traces use Artifact Delivery and INAC;
- trace records are excluded from Whisper similarity, threshold, and association projections.
Status: implemented. The canonical schemas and fixtures, Node schema gate,
transport-independent integrity validation, exact sender-host consent
resolution, authoring and inspection surfaces, metadata-only local read model,
and public Agora plus private AD/INAC carrier smoke are implemented. Trace
publish retries use an atomic idempotency reservation: an active request returns
conflict, a completed request replays its result, and only a failed request may
be reserved again. The local read model applies a 30-day default retention
sweep at startup and on writes; inline content is never retained there.
Must Implement¶
Rumor Intake and Publication¶
Based on:
doc/project/20-memos/orbiplex-whisper.mddoc/project/30-stories/story-005-whisper-rumor-intake.mddoc/project/40-proposals/013-whisper-social-signal-exchange.md
Related schemas:
whisper-signal.v1
Responsibilities:
- capture rumor-style input without flattening it into evidence,
- run bounded local redaction and idiolect-reduction workflows,
- require user approval before publication,
- implement the bounded intake/redaction path as a separately supervised Rust middleware package, with its own operator UI surface and without folding raw private intake into Agora or the daemon trusted core,
- store raw user input and intermediate redaction drafts only in local/private Memarium state before publication, under explicit retention and quarantine policy,
- persist private intake stages as sealed
personalMemarium facts through host capabilities rather than by embedding cryptography inwhisper-intake; the stable fact/artifact kinds arewhisper-intake.raw-private.v1,whisper-intake.redaction-draft.v1,whisper-intake.quarantine.v1, andwhisper-intake.candidate-ready.v1, with idempotency keys derived fromintake_id + stage, - allow the redaction/sanitization step to be supplied by another configured middleware package, so deterministic fixtures, JSON-e/Sensorium actions, and future Inquirium-backed model-assisted redaction can share the same downstream contract,
- expose model-assisted redaction through a narrow capability boundary,
preferably
whisper.redaction.prepare, where the provider returns a local redaction draft and never publishes to Agora or marks a candidate approved, - allow
whisper.redaction.prepareto be implemented by JSON-e Flow backed by a bounded Sensorium OS action, so the first implementation can run a deterministic script or local model command while preserving a future path to stronger Inquirium/model-runtime providers, - emit
whisper-signalartifacts with explicit epistemic class, node-scoped routing, nym-authored pseudonymous participation, envelope-levelauthor/nym-proof, and routing/privacy intent, - for Agora M4, publish
whisper-signal.v1directly as the public/federated payload, with envelope authorship bynym:did:key:...and with nym proof attached at the envelope/policy boundary using an inline-first proof with optional refs for longer lineage or reputation history, - keep private-correlation and direct-only whispers off public Agora topics,
- publish only sanitized public/federated signals through Agora when disclosure policy allows that surface.
Status:
donefor Agora M4. The sharedwhisper-coreimplementation boundary now owns Agora-independent public/private posture parsing, public Agora disclosure denial forprivate-correlationand direct-only signals, and deterministic M4 threshold/proposal id derivation. Agora consumes that core at ingress/signing and in replay-fed projections. The Node workspace now also has the first bounded supervisedwhisper-intakeRust middleware seed: it owns local-private intake, redaction drafts, quarantine/retention metadata, a server-owned UI surface, optional supervised middleware auth-token enforcement for non-health routes, and a publishable-candidate guard that reuseswhisper-core. The private persistence boundary is now closed at the middleware level: private stages are sealed through hostsealer.seal, written aspersonalMemarium facts throughmemarium.write, tracked with local sync status/error state, and retried through an operator action. The Node workspace also shipswhisper-intakeas an opt-in bundled supervised middleware package so Story-005 profiles can enable it without manual binary wiring. M4 intentionally stops at a deterministic local provider boundary: JSON-e Flow can routewhisper.redaction.prepareinto Sensorium OS, and Sensorium OS can run the local fixture or a locally configured model command. The post-M4 productization slice adds the host-owned provider-policy shape for Inquirium/model-runtime providers and a secretless local Inquirium simulator acceptance bridge. Production remote model deployments remain an operator configuration and runtime concern.
Model-assisted redaction/paraphrase now has a stable host-capability boundary.
The first concrete M4 provider path is deliberately configuration-driven and
local-only: JSON-e Flow calls sensorium.directive.invoke, and Sensorium OS runs
a bounded deterministic whisper.redaction.prepare action that returns a draft
for human review. The target contract is:
whisper-intake
-> host capability whisper.redaction.prepare
-> configured provider
-> redaction draft
-> operator approval
-> publishable candidate
The provider may be JSON-e Flow plus sensorium.directive.invoke, where
Sensorium OS invokes a finite,
timeout-governed script or local model command. This keeps redaction algorithm
choice outside the daemon and Agora. whisper-core still validates the final
candidate posture, so a provider cannot bypass the private-correlation or
direct-only guards.
The boundary uses whisper-redaction-prepare-request.v1 and
whisper-redaction-prepare-response.v1. In the M4 implementation,
whisper-intake sends raw private material by value over the loopback
host-capability call, validates the provider response, persists the returned
draft locally, and leaves publication blocked until explicit operator approval.
raw/private-material intentionally accepts any JSON value while the
redaction-preparation contract is still settling across deterministic fixtures,
JSON-e Flow, Sensorium OS actions, and future Inquirium-backed model-assisted
providers. Once the stable provider interface is proven, the field should be narrowed to
object|string; scalar, array, and null payloads are compatibility slack, not
the intended long-term shape.
When model-assisted preparation is explicitly enabled, missing
whisper.redaction.prepare support should fail closed through readiness rather
than presenting a misleading prepare button.
Post-M4 productization is tracked in
doc/project/60-solutions/011-whisper/011-whisper-impl.md. The closed
productization slice keeps Whisper's domain contract separate from model
adapters: callers still ask for whisper.redaction.prepare, while host policy
selects local deterministic, local model, supervised HTTP model-adapter, or
external model-adapter providers. Inquirium/model-runtime provider calls are
authorized by host-owned runtime/ref or profile policy and must not accept a
caller-supplied raw model name as an override. The remaining productization
tracker lives with the Whisper implementation note rather than in a workspace
root draft file.
Interest and Threshold Coordination¶
Based on:
doc/project/20-memos/orbiplex-whisper.mddoc/project/30-stories/story-005-whisper-rumor-intake.mddoc/project/40-proposals/013-whisper-social-signal-exchange.md
Related schemas:
whisper-interest.v1whisper-threshold-reached.v1association-room-proposal.v1
Responsibilities:
- register local relevance without premature disclosure,
- recognize threshold crossings under policy,
- implement the M4 smoke rule as data: at least two distinct eligible nodes,
same
topic/class, same deterministicsignal/similarity-key, and a bounded time window, - derive deterministic bootstrap sets,
- publish
association-room-proposal.v1as an Agora record on a public/federated proposal topic with redacted/bootstrap-only content, - emit deterministic
whisper-threshold-reached.v1andassociation-room-proposal.v1derived Agora records as projection-authority-signed, issuer-scoped meta-signal claims when policy allows automatic low-impact derived publication, - prevent derived-record loops with deterministic derived ids, source-record-kind exclusion, and derivation refs,
- preserve opt-in enrollment and never create automatic human enrollment,
- expose enough projection state for the Story-005 three-node smoke: node A and node B publish similar signals, node C runs Agora, and threshold/proposal state is rebuilt from accepted public records,
- keep threshold/proposal artifacts semantically below
public-gossip.v1: they may be replayed, disputed, moderated, weighted by reputation, or ignored by local policy, but they do not publish the underlying story.
Status:
donefor Agora M4. Node's Agora projection store can project publicwhisper-signal.v1records, derive deterministic threshold state for two distinct source nodes in the sametopic/class+signal/similarity-keygroup, create association-room proposal projection state, and expose derived threshold/proposal drafts for projection-authority signing. Agora service can sign and ingest those derived records when a host signer is available. Direct and daemon-hosted Story-005 smoke coverage proves the same path with a real daemon HostSigner.
Projection Authority for Threshold and Proposal Claims¶
Whisper source records are authored by their nym or other admitted source identity. Threshold and association-room proposal records are different: they are derived meta-signals and must be signed by a projection authority.
For M4, that projection authority can be the local projection node or a short-lived delegated projection key. The signature means "this authority applied this deterministic Whisper projection rule to these source records"; it does not mean that the community has accepted the underlying story as public truth.
The same contract should admit stronger future authority without changing the Whisper schemas. A static committee or reputation-selected committee can provide selection and quorum proofs beside the derived record, and local policy can decide whether a single authority, a community-trusted quorum, or a stricter authority class is required for a given UI or moderation consequence.
May Implement¶
Aggregate Topic Notices¶
Based on:
doc/project/20-memos/orbiplex-whisper.mddoc/project/40-proposals/013-whisper-social-signal-exchange.md
Related schemas:
whisper-threshold-reached.v1
Responsibilities:
- emit coarse aggregate notices after threshold crossing,
- keep those notices weaker than case disclosure,
- separate aggregate discovery hints from raw rumor exchange.
Status:
optional
Out of Scope¶
- transport-layer anonymity and relay topology
- final governance or adjudication
- automatic exposure of identities to one another
- hard semantic duplicate suppression in v1
- using Agora for private/direct or
private-correlationwhisper bodies
Consumes¶
whisper-signal.v1whisper-interest.v1
Produces¶
whisper-signal.v1whisper-interest.v1whisper-threshold-reached.v1association-room-proposal.v1
Related Capability Data¶
whisper-caps.edn
Notes¶
Whisper intake/redaction is implemented as a supervised channel_json middleware
service with a separately owned intake/trace/operator HTTP surface. Shared, transport-independent
semantics belong in whisper-core; Agora remains the public/federated record
substrate, and the daemon remains the host/supervisor and capability boundary.
The private persistence boundary is:
whisper-intake
-> host capability sealer.seal
-> host capability memarium.write(space = personal)
whisper-intake should authenticate to the host capability API with the
host-provided capability token and identify itself as whisper-intake, so the
daemon can apply the runtime component context. Missing sealer.seal or
memarium-space-access grants for memarium/write on personal should surface
in the local readiness gate. Runtime sync is automatic best-effort, but the UI
must provide a manual retry action for operators.
The redaction preparation boundary is:
whisper-intake
-> host capability whisper.redaction.prepare
-> configured provider
-> whisper-redaction-prepare-response.v1
-> local redaction draft
The provider is not a publication authority. It may return draft-ready,
needs-human-review, unsafe-output, policy-denied, model-unavailable,
retryable-timeout, or failed; only the first two statuses may carry a draft,
and even then the operator approval transition remains separate.
The request schema currently leaves raw/private-material deliberately broad so
early providers can pass structured intake envelopes, raw strings, or fixture
values through the same loopback-only boundary. The intended stable contract is
to narrow that field to object|string after provider behavior and tests have
converged.
When Monus is present, Whisper should treat it as an upstream local draft
preparation module rather than as a peer publication authority. Monus may prepare
candidate concern drafts, but Whisper and the host still own the bounded outgoing
publication path.
whisper-core now carries production-shaped policy primitives for source class,
routing failure mode, relay evidence, forwarding budget, privacy downgrade
decisions, correlation policy explanations, association-room proposal lifecycle,
and public-gossip promotion. These are data contracts and pure decision helpers;
concrete UI affordances and real relay execution belong in later runtime/product
layers that consume the same data rather than changing Whisper's core semantics.