You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
id(chat): PoC — two CLI nodes exchanging channel frames with a blob link #2808
Follow-up from the IRC-first chat investigation (#2049, doc in PR #2807 §2.2/§2.3/§5; synthesis consumer #2051).
Build: two CLI nodes exchanging §2.2 channel frames over the existing /id-envelope/1 transport, including one blob link resolved from the recipient's local store. No new ALPN, no permanent feature code — per program rules, do NOT build the permanent feature on top of this PoC before review.
Done when: the exchange transcript (frames + link resolution) is pasted or linked here and the orchestrator signs off. Hand the result to #2051.
Acceptance criteria
Two CLI nodes exchange §2.2 channel frames over the existing /id-envelope/1 transport (no new ALPN), including one blob link resolved from the recipient's local store.
The exchange transcript (frames + link resolution) is pasted or linked on this issue and the orchestrator signs off.
No permanent feature code is built on top of this PoC before review, per program rules; result handed to id: design: ID chat v1 #2051.
Notes: A true PoC: existing /id-envelope/1 transport, no new ALPN, transcript is the deliverable. The body's "Done when" is formalized into the acceptance criteria section.
Risks: PoC code quietly becoming the permanent feature is the named program risk — the sign-off gate in the criteria guards it.
Suggested approach: Smallest two-node harness that produces a readable transcript; stop at sign-off.
Task: Resume id(chat): PoC — two CLI nodes exchanging channel frames with a blob link #2808 PoC from the not_reproduced checkpoint: the prior attempt's test-only two-endpoint harness exists as uncommitted work in the laptop worktree ~/git/fleet/5792 (branch queue/5792-2808-id-chat-protocol-poc, +142 lines in pkgs/id/src/envelope_net.rs tests). This shift: run it, capture the transcript, commit + PR it as an explicitly review-gated PoC, and report the harness-vs-CLI gap for orchestrator sign-off.
Task: Handed off the existing uncommitted test-only harness in the shared laptop worktree to lane B, which has claimed attempt 2.
Expectation: Resume and verify the harness, capture its transcript, then open the explicitly review-gated PoC PR. It uses in-process Iroh endpoints and a non-verified fixture signature; stock CLI and production-handler compatibility remain unproven.
Execution note: The targeted cargo test reached compilation but failed on two harness errors: CaptureFrames needs Debug, and iroh_blobs::Hash uses Hash::new (not Hash::digest). The file was rustfmt-formatted after that compile attempt. Workspace-wide cargo fmt --check also reports unrelated pre-existing formatting differences.
Task:id(chat): PoC — two CLI nodes exchanging channel frames with a blob link #2808 PoC — signed channel frame + local blob-link resolution. Resumed the prior attempt's uncommitted harness in ~/git/fleet/5792, fixed its two compile errors (Debug derive for the test receiver; Hash::new for content hashing in iroh-blobs 0.103), and ran it.
Alice -> Bob /id-envelope/1 frame bytes (UTF-8): {"after":[],"author":"7d5a4dbcd596303f51c0b3671499dbd41b51ba0e05a86df9879e280af2cc45b5","channel":"group:local-poc","links":[{"author":"7d5a4dbcd596303f51c0b3671499dbd41b51ba0e05a86df9879e280af2cc45b5","hash":"59a5b70231213588dbba0ef2679c41f63d9d2a0d1ae821cabeeeea5d9f1f5b51","kind":"blob"}],"seq":1,"sig":"test-only; no signature verification","text":"blob link fixture","v":1}
Bob -> Alice /id-envelope/1 frame bytes (UTF-8): {"after":[],"author":"7d72423722ad5b4820a12df32898ba174d785594a5ac230c66b4d0fd10db7529","channel":"group:local-poc","links":[],"seq":1,"sig":"test-only; no signature verification","text":"acknowledged","v":1}
Bob local blob resolution: hash=59a5b70231213588dbba0ef2679c41f63d9d2a0d1ae821cabeeeea5d9f1f5b51 bytes=32 hash_verified=true
Both directions delivered (Outcome::Delivered) and received byte-for-byte; the linked blob resolved from the recipient's local store and its recomputed BLAKE3 hash matches the frame's hash.
The gap, plainly (sign-off requested)
This proves the transport shape only. The receiver is a test-only CaptureFrames handler on the existing ALPN: as the prior attempt found, the production EnvelopeProtocol parses bodies as directory::Envelope and refuses chat-frame JSON, and the CLI has no arbitrary-frame command — so the "two CLI nodes" acceptance is not met, and the frame's sig is a placeholder (no signature verification tested).
Decision for the orchestrator/Drew: (a) accept this transport proof as the PoC's result and close the PoC there [recommended — the frame format and local resolution are the unknowns the PoC was for; the CLI/protocol surface is a product decision], or (b) scope a follow-up that gives a real surface (CLI command or a protocol branch) the ability to carry chat frames, with real signing. PR #3887 is the review vehicle either way; nothing permanent should be built on it before that call.
agent-note:v1 — orchestrator sign-off (queue worker lane D, reviewing as the user/review owner for task 5794's gate)
Decision: (a) — the transport proof is accepted as the #2808 PoC result.
What was proven (task 5792, PR #3887, merged as a74322a after its two Codex P1 findings were fixed in 3b78696): §2.2-shaped channel frames round-trip in both directions over the existing /id-envelope/1 ALPN between two endpoints, and a blob link resolves against the recipient's local store by content hash. Transcript is in task 5792's done note above (2026-11-01T17:39Z). That is the question this PoC existed to answer, and it is answered.
Two caveats, accepted explicitly rather than silently:
The harness used in-process Iroh endpoints, not two stock CLI binaries — the stock CLI / production EnvelopeProtocol refuses chat-frame JSON today.
The frame signature was a non-verified fixture; chat-frame signature verification is unproven here.
Neither caveat blocks the PoC verdict: closing them requires production-surface work, and this issue's own rules forbid building permanent feature code on the PoC before review. Both caveats are carried as named design constraints into #3799 (ID chat v1 core — its 'durable signed' requirement owns caveat 2, and its surface design owns caveat 1) and are visible to the #2051 synthesis consumer, which this result is handed to per the issue body.
#2808 is closed as completed: transcript posted ✓, orchestrator sign-off ✓ (this note), handoff to #2051 + #3799 ✓. Task 5794's gate is cleared.
Activity
dezren39 commentedon Oct 31, 2026
Intake review
dezren39 commentedon Nov 1, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 1, 2026
Agent note · picked up
dezren39 commentedon Nov 1, 2026
🤖 Agent note · picked up
not_reproducedcheckpoint: the prior attempt's test-only two-endpoint harness exists as uncommitted work in the laptop worktree~/git/fleet/5792(branchqueue/5792-2808-id-chat-protocol-poc, +142 lines inpkgs/id/src/envelope_net.rstests). This shift: run it, capture the transcript, commit + PR it as an explicitly review-gated PoC, and report the harness-vs-CLI gap for orchestrator sign-off.EnvelopeProtocolrefuses chat-frame JSON) stated plainly.dezren39 commentedon Nov 1, 2026
🤖 Agent note · handed off
CaptureFramesneedsDebug, andiroh_blobs::HashusesHash::new(notHash::digest). The file was rustfmt-formatted after that compile attempt. Workspace-widecargo fmt --checkalso reports unrelated pre-existing formatting differences.queue/5792-2808-id-chat-protocol-poc; worktree~/git/fleet/5792dezren39 commentedon Nov 1, 2026
🤖 Agent note · done
~/git/fleet/5792, fixed its two compile errors (Debugderive for the test receiver;Hash::newfor content hashing in iroh-blobs 0.103), and ran it.pkgs/id/src/envelope_net.rs, commitf8f4356c1.cargo test --lib envelope_net::tests::review_gated_chat_frame_round_trips_and_resolves_local_blob1 passed on the laptop (baseec305bf00).Transcript (exact output)
Both directions delivered (
Outcome::Delivered) and received byte-for-byte; the linked blob resolved from the recipient's local store and its recomputed BLAKE3 hash matches the frame's hash.The gap, plainly (sign-off requested)
This proves the transport shape only. The receiver is a test-only
CaptureFrameshandler on the existing ALPN: as the prior attempt found, the productionEnvelopeProtocolparses bodies asdirectory::Envelopeand refuses chat-frame JSON, and the CLI has no arbitrary-frame command — so the "two CLI nodes" acceptance is not met, and the frame'ssigis a placeholder (no signature verification tested).Decision for the orchestrator/Drew: (a) accept this transport proof as the PoC's result and close the PoC there [recommended — the frame format and local resolution are the unknowns the PoC was for; the CLI/protocol surface is a product decision], or (b) scope a follow-up that gives a real surface (CLI command or a protocol branch) the ability to carry chat frames, with real signing. PR #3887 is the review vehicle either way; nothing permanent should be built on it before that call.
test(id): address Codex review on #3887 — test_ prefix + import groups (
test(id): review-gated chat-frame PoC harness on /id-envelope/1 (#2808)…
dezren39 commentedon Nov 1, 2026
agent-note:v1 — orchestrator sign-off (queue worker lane D, reviewing as the user/review owner for task 5794's gate)
Decision: (a) — the transport proof is accepted as the #2808 PoC result.
What was proven (task 5792, PR #3887, merged as a74322a after its two Codex P1 findings were fixed in 3b78696): §2.2-shaped channel frames round-trip in both directions over the existing
/id-envelope/1ALPN between two endpoints, and abloblink resolves against the recipient's local store by content hash. Transcript is in task 5792's done note above (2026-11-01T17:39Z). That is the question this PoC existed to answer, and it is answered.Two caveats, accepted explicitly rather than silently:
EnvelopeProtocolrefuses chat-frame JSON today.Neither caveat blocks the PoC verdict: closing them requires production-surface work, and this issue's own rules forbid building permanent feature code on the PoC before review. Both caveats are carried as named design constraints into #3799 (ID chat v1 core — its 'durable signed' requirement owns caveat 2, and its surface design owns caveat 1) and are visible to the #2051 synthesis consumer, which this result is handed to per the issue body.
#2808 is closed as completed: transcript posted ✓, orchestrator sign-off ✓ (this note), handoff to #2051 + #3799 ✓. Task 5794's gate is cleared.
feat(id): chat.message.v1 message shape + causal projection (#3799) (#…