AI Initiative logoAI Initiative
Reading room / Manthan

R-215 — Cross-recipient genesis-pinning gossip protocol

Proposes cross-log gossip and joiner checks for conflicting trace-genesis claims and first-observation pinning failures.

Research report / proposal; not independently verified publication
This is the retained source text, not a new validation of its claims. Numerical results and comparative claims require the accompanying source review before public reuse.

Read the connected case study or article →

Not explicitly stated in source · Date not established

Provenance, authorship and editorial notes

R-215 — Cross-recipient genesis-pinning gossip protocol

Id

manthan-herald-protocol-research-genesis-gossip

Project

Manthan

Source path

manthan/herald-protocol/research/genesis-gossip.md

Source sha256

bd159dba199408795e493cd494b4cb85367efb64098f3dd3102f3df9d9a808b5

Local copy sha256

bd159dba199408795e493cd494b4cb85367efb64098f3dd3102f3df9d9a808b5

Repo head

3a94084024a3434cef331fecac91c2c3b43f0313

Date
Not recorded
Date basis

Original publication date not established; Git revision date retained separately.

Author

Not explicitly stated in source

Author basis

Unknown; Git committer not substituted for document author.

Last source commit

8b75d1b0157c20a0a463f0e31008ef9f73099beb

Last source commit date

2026-06-08T07:40:14Z

Document status

Research report / proposal; not independently verified publication

Summary

Proposes cross-log gossip and joiner checks for conflicting trace-genesis claims and first-observation pinning failures.

Topics
  • Trust and collective intelligence research
  • Problem statement
  • Design constraints
  • Proposed design — three-layer
Theme

Trust and collective intelligence research

Priority

deep

Related ids
  • manthan-herald-protocol-research-confession-alignment
  • manthan-herald-protocol-research-dkim-analogy
  • manthan-herald-protocol-research-patina-formula
Evidence concerns
  • Recovered source text is preserved verbatim. Assertions, comparisons, commands and results belong to its original context; they were not re-executed or externally re-verified during this corpus review.
  • Research/design document, not proof of deployed capability, peer review, novelty or improved outcomes. External citations and dated maturity claims need independent verification before public reuse.
Word count

2042

Bytes

14109

Source relative

herald-protocol/research/genesis-gossip.md

Remote mirror

manthan/herald-protocol/research/genesis-gossip.md

Full text preserved

True

R-215 — Cross-recipient genesis-pinning gossip protocol

Status: research; proposes a protocol shape, identifies decisions, leaves implementation to a future T-task.
Motivates: THREATS §4.14 (genesis confusion / forking traces) residual risk: "A new joiner with no prior state cannot distinguish the original trace from a fork. They will pin whichever they see first."


Problem statement

Per [SPEC §3.3a], a trace is fixed by the genesis envelope's id. Recipients pin first-seen: the first envelope they observe for a conversation establishes the trace-to-genesis.id binding for the rest of that conversation. This works for established participants.

It fails for:

1. New joiners entering an existing conversation. If an attacker has emitted a fork (a divergent envelope with a different trace pointing at a doctored genesis), the joiner sees both candidates and has no information to decide which is canonical.
2. Returning participants whose pinned state has been lost (cleared cache, fresh device, restored from old backup before the fork).
3. Heralds and conduits asked to attest about a trace they have not previously observed.

Cross-recipient gossip — "here is the genesis I have for trace T" — is the canonical defence flagged by THREATS but not specified by EXT v0.2. R-215's job is to design that defence.

Design constraints

1. Reuse existing infrastructure where possible. EXT §2.5 already defines STH gossip across DNS TXT, P2P, and cross-log channels. A genesis-gossip primitive should not invent parallel transport.
2. Don't leak conversation participants. Gossip must reveal the (trace_id, genesis_id) binding without revealing who is in the conversation. The trace_id and genesis_id are themselves opaque hashes; that's the privacy budget.
3. Don't push; pull. Gossip-on-demand (joiner queries) scales better than continuous push (every recipient broadcasts every genesis they hold).
4. Cryptographic, not consensus. No global agreement on "the canonical trace genesis" — that's reputation/governance. The protocol provides the query primitive; deployment policy decides what to do with conflicts.
5. Address the new-joiner case directly. The joiner with no prior state must be able to query some independent source and get a verifiable answer.

Proposed design — three-layer

Layer 1: CT-log index extension

Every conformant HERALD CT log SHOULD support a /trace_genesis/<trace_id> query endpoint. The endpoint returns:

Why this works:

The query primitive:

GET /trace_genesis/<trace_id>
→ {
    "trace_id": "<bytes>",
    "candidates": [
      { "envelope_id": "<bytes>",
        "canonical_body": "<base64-cbor>",
        "sct": { ... },
        "inclusion_proof": { ... },
        "first_logged": <Unix seconds>
      },
      ...
    ],
    "log_id": "<this-log's-id>",
    "queried_at": <Unix seconds>,
    "log_signature": "<sig over (trace_id, candidates_digest, queried_at)>"
  }

The log_signature lets a joiner verify the response came from the claimed log without re-checking every inclusion proof.

Layer 2: Cross-log gossip of trace-genesis claims

When a CT log records a genesis envelope, it SHOULD propagate the (trace_id, envelope_id) tuple to its gossip peers via the existing EXT §2.5 channels:

The DNS TXT path is most useful for high-traffic traces; it lets a joiner with only DNS to query the gossip view without contacting any specific log.

Privacy mitigation: gossip carries only (trace_id, envelope_id, sct) — no participant identifiers, no content hashes beyond envelope_id (which is content-addressed but reveals nothing about who's in the conversation since it's just a hash). The DNS TXT path leaks the existence of a trace at a log domain; that's already revealed by any inclusion proof, so no new privacy loss.

Layer 3: Joiner query discipline

A new joiner observing a non-genesis envelope E with E.trace == T:

1. Query at least two independent CT logs for /trace_genesis/<T>.
2. Union the candidate sets. Verify the inclusion proof for each candidate.
3. Apply policy:
- Single candidate across logs (consistent): pin it. Standard case.
- Multiple candidates: the trace has been forked. The joiner must apply a policy:
- Conservative: refuse to participate in any fork — abort.
- Reputation-system policy: ask a reputation aggregator which fork has more endorsements / weight.
- Operator-trust: pick the fork whose genesis sigil has been verified via Herald endorsement.
- Empty across logs: the genesis was never logged. Per [EXT §2.4], state-transition envelopes MUST be logged; a non-logged genesis is non-conformant. Refuse.
4. Record the chosen genesis as pinned for trace T.

This is the "verifiable-by-query, decided-by-policy" pattern. The protocol gives joiners the information; deployments choose what to do with it.

Why three layers

Layer 1 (CT log query endpoint) is the substrate primitive — without it, the gossip is opaque to joiners. It's a small extension to the existing CT log API.

Layer 2 (cross-log gossip) is where the equivocation defence lives. If only one log knows about a genesis, that log can lie to a joiner. Gossip across multiple logs makes equivocation expensive: the attacker would need to compromise enough logs to silence them all simultaneously, which is exactly the EXT §2.5 split-view defence at the trace level instead of the STH level.

Layer 3 (joiner discipline) is the user-visible behaviour — what verifiers actually do. It mirrors the existing EXT §2.5 "consult at least two independent gossip sources" rule but applies it to genesis pinning rather than STH consistency.

Decisions left to deployment

The protocol says:

It does not say:

This matches HERALD's "legibility, not prevention" doctrine (D-307 thesis): the protocol makes forks observable; deployments decide how to weigh them.

Privacy analysis

What does the gossip leak?

What does it NOT leak?

The privacy budget is therefore comparable to existing CT inclusion proofs. R-215 does not introduce new leakage beyond what the audit log already exposes.

Threat model

Attacks the design defends against:

Attacks the design does NOT defend against:

Comparison with prior art

Implementation roadmap

If this design is adopted, the path is:

1. EXT §2.8 — Trace-genesis query endpoint (small extension, ~half a page).
2. EXT §2.5 amendment — Trace-genesis gossip in addition to STH gossip (one paragraph).
3. SPEC §3.3a amendment — New-joiner discipline ("a verifier joining an existing trace MUST query at least two CT logs for /trace_genesis/<trace_id> and apply fork-handling policy"; one paragraph).
4. T-task — reference implementation of the query endpoint as part of T-009 (audit-log reference implementation, future).
5. Test vectors — fork scenarios in T-027 / T-028 (reserved-sigil and conformance test additions).
6. R-task follow-on — Fork-resolution-policy survey (R-218 candidate): catalogue the policies a deployment might apply (reputation-weighted, Herald-quorum-witness, conservative-abort).

Estimated effort:

Open questions for cohort-2

1. Should the query endpoint include the genesis sigil's birth attestation in the response, or just the genesis envelope itself? Including it lets a joiner verify the genesis sigil's identity in one round-trip; excluding it keeps the endpoint single-purpose. Recommendation: exclude — keep endpoints orthogonal — and let the joiner make a separate birth_attestation/<sigil> query.
2. Is the gossip "per-trace" or "per-log-batch"? Per-trace is simpler; per-log-batch is more efficient. Recommendation: per-trace (the message is small, traces are sparse).
3. Should joiners cache fork-positive responses? A joiner who learns trace T is forked may want to remember that across sessions to avoid re-querying. Recommendation: yes, cache; the cache key is (trace_id, fork_status, queried_at).
4. What's the joiner's behaviour if logs disagree about whether a fork exists? (Log A returns 1 candidate; log B returns 2.) This is itself fork evidence — log A is suppressing a candidate, OR log B is fabricating one. Recommendation: treat as fork-positive; alert monitors.

Closes

Cross-references


— R-215 research output, by driver-claude, 2026-05-05.

Continue exploring