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
What was measured
2026-09-28, CIRISClient's two-node test fixture (
testing/gate/two_node.py, a Docker-free port ofharness/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-recordroute), owner-key replication, andPOST /v1/contactson each side. The pair room then stayschat.state.awaiting_peerfor 480 s:no hybrid-verified SignedTransportDestination binds this (peer, dest) pair(CIRISEdge#393 item 2);harness/mesh-repro's chat ladder is green only on atest-anchorbuild with a test trust root (test-blessed-self-record/test-admit-peerarecfg(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:
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 reportsmessage_arrived=trueagainst 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