Skip to content

docs(design): membership & identity convergence — nessie rides agent-mesh; routing corrected - #111

Open
hartsock wants to merge 1 commit into
mainfrom
docs/membership-identity-convergence
Open

docs(design): membership & identity convergence — nessie rides agent-mesh; routing corrected#111
hartsock wants to merge 1 commit into
mainfrom
docs/membership-identity-convergence

Conversation

@hartsock

Copy link
Copy Markdown
Member

Summary

Resolves the "coordinate swarm-join with agent-mesh before building a router" decision — grounded against the real, present-day types of agent-mesh and agent-bridle (read directly), plus the live newt-web/newt-agent membership story (web-authz epic newt-agent#1354 / #1365, agent-bridle 0.7.13).

New docs/design/membership-and-identity.md pins a three-layer stack in which nessie invents no identity and no membership:

Layer Owner Type
L1 operator agent-bridle HumanPrincipal { issuer, subject, email, groups }
L1↔L2 edge agent-bridle PrincipalBinding (signed, mesh AgentKey, Fingerprint, issued_generation)
L2 peer + membership agent-mesh AgentKey/Fingerprint/CertChain/MeshSigner; auto-team under one user_fp
L3 content-location nessie ContentRouter — the one net-new primitive

nessie's opaque identity newtypes map straight onto mesh types: SignerId ← Fingerprint bytes; SignatureVerifier/AttestationSigner ← AgentKey/MeshSigner (retiring DevSelfSigner/TestKeyring from non-test paths); k-of-n = k distinct Fingerprints under one user_fp; attestation GC by issued_generation + CertChain::verify_at(gen) — which answers the design's open "attestation garbage collection" question. Swarm-join = mesh-join (ensure_trustable handshake); no roster.

The correction

The fleet's fabric is iroh-QUIC + mDNS + cert-chain membership — NOT NATS, NOT libp2p (async-nats is only a comparison dev-dep in agent-mesh). So the earlier "settled: hybrid NATS + Kademlia, both first-class" is revised:

  • Primary = a mesh-native Bus router (signed provider records on Topic(user_fp, "nessie/providers/v1")).
  • NATS = a legitimate alternative for NATS-running environments, behind the same seam — not the default fabric.
  • Kademlia/DHT = later, nessie-specific open-swarm variant (the mesh itself declined a DHT).

The ContentRouter seam is unchanged; only the ranking of implementations moves toward the fabric that exists. p2p-cas-swarm.md's routing section, tracker rows, closing prose, and the attestation-GC open question are all updated to match.

Convergence bonus flagged: nessie's AC attestation-CRDT is structurally the same primitive as the unbuilt agent-mesh-store RFC (per-writer signed BLAKE3-chained logs + head-vector gossip) — an opportunity to share one signed-log-over-a-bus-topic substrate rather than build two.

Test plan

Docs-only (no code). just check passes trivially (no Rust changed); the design tracker + prose are internally consistent and cross-linked.

Note for review

This revises a previously-"settled" routing decision based on grounding — surfaced explicitly for your call. No routers are built here; this is the coordination the "agent-mesh first" choice asked for. Implementation waits on a running mesh + the shared-log conversation with agent-mesh.

risk:low — documentation only.

…mesh, routing corrected

Resolves the "coordinate swarm-join with agent-mesh before building a router"
decision, grounded against the REAL present-day types of both systems (read
directly, not assumed) and the live newt-web/newt-agent membership story
(web-authz epic #1354 / #1365, agent-bridle 0.7.13).

New docs/design/membership-and-identity.md pins the three-layer stack and the
seam mapping:
  - L1 operator = agent-bridle HumanPrincipal (OIDC issuer/subject/groups)
  - L1<->L2 edge = agent-bridle PrincipalBinding (signed, mesh AgentKey,
    Fingerprint, issued_generation = causal not wall-clock)
  - L2 peer = agent-mesh AgentKey/Fingerprint/CertChain/MeshSigner; membership
    is the implicit "auto-team under one user_fp" (no roster/CRDT/DHT);
    swarm-join = mesh-join (ensure_trustable handshake)
  - L3 content-location = nessie ContentRouter, the ONE net-new primitive

nessie's opaque identity newtypes map straight onto mesh types: SignerId <-
Fingerprint bytes, SignatureVerifier/AttestationSigner <- AgentKey/MeshSigner
(retiring DevSelfSigner/TestKeyring from non-test paths), k-of-n = k distinct
Fingerprints under one user_fp, attestation GC by issued_generation +
CertChain::verify_at(gen) (answers the design's open "attestation GC" question).

**Routing corrected.** The fleet's fabric is iroh-QUIC + mDNS + cert-chain
membership — NOT NATS, NOT libp2p (async-nats is only a comparison dev-dep in
agent-mesh). So the primary ContentRouter is a mesh-native Bus router (signed
provider records on a Topic), NATS becomes an alternative for NATS-running
environments, and Kademlia/DHT stays a later nessie-specific open-swarm variant
(the mesh itself declined a DHT). The p2p-cas-swarm.md routing section, the
implementation-status tracker, the closing prose, and the attestation-GC open
question are all updated to match; the ContentRouter seam is unchanged.

Convergence bonus flagged: nessie's AC attestation-CRDT is structurally the
same primitive as the unbuilt agent-mesh-store RFC (per-writer signed
BLAKE3-chained logs + head-vector gossip) — an opportunity to share one
signed-log-over-a-bus-topic substrate rather than build two.

Co-authored-by: Shawn Hartsock <[email protected]>
@hartsock hartsock added the risk:low Low-risk change (autonomy-mergeable) label Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:low Low-risk change (autonomy-mergeable)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant