Skip to content

Two released nodes can't key a pair room: peers stay ADVISORY, frames fail the transport-destination binding, the KeyPackage never replicates #698

Description

@emooreatx

What was measured

2026-09-28, CIRISClient's two-node test fixture (testing/gate/two_node.py, a Docker-free port of harness/mesh-repro/scenarios/chat.sh) on v0.5.217, the binary the client's five-platform live QA downloads. Two fresh nodes on one host (4242/4243 and 5242/5243), separate homes, unique key ids.

Everything up to the room succeeds: owner claim on both, announce, peering both ways (via the production self-key-record route), owner-key replication, and POST /v1/contacts on each side. The pair room then stays chat.state.awaiting_peer for 480 s:

  • each node admits the other advisory, not conferred;
  • inbound frames fail no hybrid-verified SignedTransportDestination binds this (peer, dest) pair (CIRISEdge#393 item 2);
  • the joiner's KeyPackage never replicates.

harness/mesh-repro's chat ladder is green only on a test-anchor build with a test trust root (test-blessed-self-record / test-admit-peer are cfg(feature = "test-anchor")), so the server's own gate doesn't cover this path on a released binary.

Question

Is this expected for two unconferred released nodes? If so:

  • how do two real people on their own released nodes key a pair room (what confers the peers), and
  • could harnesses get a released knob for a test trust root, so client QA can exercise chat against the binary users run?

If it isn't expected, this is a repro.

Client impact

CIRISClient CSD-091's "a room with a real message" can't pass on the matrix; recorded in evidence/blocked_upstream.tsv, closes when the fixture reports message_arrived=true against a released binary.

Also noticed: scratch nodes on the released binary dial the public canonical by default, so CI fixture nodes contact the production mesh. Is there a supported way to run a node with no default bootstrap (tests, air-gapped setups)?

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions