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
Design the durable encoding for checkpointed live sessions — the input everything else in the #2034 family depends on.
Why
#2034 investigation (doc: doc/2026-10-29T10-45-00Z_investigation_ephemeral_live_data_retention/) concluded on a two-tier model: durable facts stay on the per-author signed hash chain (ChainExt), keystroke/cursor/input traffic moves to an ephemeral per-session stream authenticated by a session header + per-session MAC key, closed by intermittent segment checkpoints. Nothing in the tree defines what a session header or a checkpoint is.
Scope
Define SessionHeader and SegmentCheckpoint records and a new ChainExt.kind (session.checkpoint), with canonical-CBOR encoding and golden test vectors, verified the same way as any other signed event (pkgs/id/src/chain.rs:282-342).
Decide the open question from the investigation: is a checkpoint an ordinary graph event, or a parallel signed artifact in the artifact.rs shape referenced from the graph? State the trade-off and pick one.
Decide the session-header MAC key scheme: committed in the header vs derived per session from a long-term key; behaviour on key rotation mid-session.
Specify segment policy defaults (N events / T seconds, plus emission on commit/blur/disconnect) and whether it is world-configurable like WorldLimits (pkgs/id/src/world/mod.rs:59-99).
Specify how checkpoints interact with fork proofs and the waiting pool (pkgs/id/src/event_store/mod.rs:12-22, waiting.rs) so a later compaction cannot break after resolution.
Expectation: claim-by-claim verdict posted on this issue this shift; the design production routed as one follow-up packet with the PoC explicitly gated behind it.
Claims re-verified against main d85e4098cf113ec7c3add1a74c0c03fd9840d429 (gh api contents + code search, 2026-11-01):
✅ The id: investigate: ephemeral live data vs the chained event graph — retention and intermittent signing #2034 investigation doc exists (doc/2026-10-29T10-45-00Z_investigation_ephemeral_live_data_retention/); its §5 sketches SessionHeader / SegmentCheckpoint / LiveFrame and leans graph-event, but its §9 explicitly leaves the deciding questions open "for the synthesis issue" — that synthesis is this issue. The design work is real and un-done.
✅ Nothing in the tree defines these records: code search for SegmentCheckpoint and session.checkpoint matches only the investigation doc — no definition in pkgs/id or anywhere else.
✅ The extension pattern the design must use exists: pkgs/id/src/chain.rs — ChainExt carries a free-form kind: String with kind-specific payload validation (tag/document/removal kinds) in validate(), and sign() at :282 as cited.
✅ WorldLimits confirmed at pkgs/id/src/world/mod.rs:59-99; event_store/mod.rs describes the forks/waiting tables as cited; pkgs/id/src/artifact.rs exists (the parallel-artifact alternative is a real in-tree shape).
⚠️ One stale citation: the waiting pool is event_store/waiting_rows.rs on current main — there is no waiting.rs. Filename only; the substance is unchanged.
Design route DECIDED: one follow-up packet produces the design doc (investigation follow-on 1 — this issue's own deliverable). The packet pins that the doc must decide, with trade-offs stated, all five questions the issue scopes: (1) graph event vs parallel artifact.rs-shape artifact; (2) MAC key committed vs derived, plus mid-session rotation behaviour (§6's "rotation = new session header" settled or replaced); (3) segment policy defaults (N events / T seconds, emission on commit/blur/disconnect) and WorldLimits-configurability; (4) fork-proof / waiting-pool interaction so compaction cannot break after resolution; (5) the peer_signature required-classes table for id: investigate: match-result attestation — mutual concession, witness adjudication, offline play #2037/id: investigate: match audit — netcode log format, replay validation, and cheating signals #2038. Encoding + golden vectors are required as spec; no code, per the issue's own acceptance.
Review record: the doc decides all five pinned questions with trade-offs (graph events over a parallel artifact chain; fresh per-session MAC key with a signed commitment and rotation-by-new-session; 256-frame/2-second boundaries with WorldLimits ceilings pinned in the signed header; fork/waiting/compaction via protected prune_behind_cut roots; the peer_signature required-classes table), gives concrete SessionHeader/SegmentCheckpoint wire shapes, the exact MAC/root formulas, and an 8-step verifier walk. Golden vectors are specified as a freeze-list with the exact hash formulas (implementation step 1 of the doc's phased plan produces the literal vectors with the typed schema). Codex review: clean on the original head, one P2 on re-review (no keyless verification path for retained segment bodies) — fixed in 047786e1e by splitting keyless root/replay verification from MAC-authenticated verification plus a post-close key-disclosure path, replied on the thread, re-review clean. Earlier "Drew-owned" parks on task 5240 were the known authorship misread: no held/user/owned/do-not-* labels exist on issue id: design: session header + segment checkpoint event kind #2240 or PR design(id): #2240 session checkpoint encoding #3867.
Activity
developing-today commentedon Oct 29, 2026
CODE-1108
dezren39 commentedon Nov 1, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 1, 2026
🤖 Agent note · triaged — CONFIRMED; design production routed as one packet (task 5240), PoC explicitly gated
d85e4098cf113ec7c3add1a74c0c03fd9840d429(gh api contents + code search, 2026-11-01):doc/2026-10-29T10-45-00Z_investigation_ephemeral_live_data_retention/); its §5 sketchesSessionHeader/SegmentCheckpoint/LiveFrameand leans graph-event, but its §9 explicitly leaves the deciding questions open "for the synthesis issue" — that synthesis is this issue. The design work is real and un-done.SegmentCheckpointandsession.checkpointmatches only the investigation doc — no definition inpkgs/idor anywhere else.pkgs/id/src/chain.rs—ChainExtcarries a free-formkind: Stringwith kind-specific payload validation (tag/document/removal kinds) invalidate(), andsign()at :282 as cited.WorldLimitsconfirmed atpkgs/id/src/world/mod.rs:59-99;event_store/mod.rsdescribes the forks/waiting tables as cited;pkgs/id/src/artifact.rsexists (the parallel-artifact alternative is a real in-tree shape).event_store/waiting_rows.rson current main — there is nowaiting.rs. Filename only; the substance is unchanged.peer_signaturedecision), epic: ID platform expansion — apps, comms, currency, hosting, boards (2026-10-28 directive, LIST 6–15) #2056 open (epic; its program rule bars building the PoC into the permanent feature before a review round).artifact.rs-shape artifact; (2) MAC key committed vs derived, plus mid-session rotation behaviour (§6's "rotation = new session header" settled or replaced); (3) segment policy defaults (N events / T seconds, emission on commit/blur/disconnect) and WorldLimits-configurability; (4) fork-proof / waiting-pool interaction so compaction cannot breakafterresolution; (5) thepeer_signaturerequired-classes table for id: investigate: match-result attestation — mutual concession, witness adjudication, offline play #2037/id: investigate: match audit — netcode log format, replay validation, and cheating signals #2038. Encoding + golden vectors are required as spec; no code, per the issue's own acceptance.packets/task3461-2240-session-checkpoint-design.json, enqueued as queue task 5240. This issue stays open until the design doc lands.82 remaining items
dezren39 commentedon Nov 2, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 2, 2026
🤖 Agent note · picked up for metadata-only ownership revalidation
dezren39 commentedon Nov 2, 2026
🤖 Agent note · parked — Drew-owned PR remains open
design/id-2240.dezren39 commentedon Nov 2, 2026
🤖 Agent note · picked up
held/user/owned/do-not-merge/do-not-auto-editlabels on issue id: design: session header + segment checkpoint event kind #2240 or PR design(id): #2240 session checkpoint encoding #3867, so the earlier "Drew-owned" park (authorship/assignee based) does not hold — hard stops are labels. I have reviewed PR design(id): #2240 session checkpoint encoding #3867's design doc against the packet's five pinned decisions, record shapes, verifier walk, and encoding spec; requesting Codex re-review on the current head, then merging if clean.design/id-2240docs: define keyless vs MAC-authenticated verification for #2240 segm…
design(id): #2240 session checkpoint encoding (#3867)
dezren39 commentedon Nov 2, 2026
🤖 Agent note · done
2dcbb4ee, addingdoc/2026-11-01_design_id2240.md.047786e1e), design docdoc/2026-11-01_design_id2240.mdprune_behind_cutroots; thepeer_signaturerequired-classes table), gives concrete SessionHeader/SegmentCheckpoint wire shapes, the exact MAC/root formulas, and an 8-step verifier walk. Golden vectors are specified as a freeze-list with the exact hash formulas (implementation step 1 of the doc's phased plan produces the literal vectors with the typed schema). Codex review: clean on the original head, one P2 on re-review (no keyless verification path for retained segment bodies) — fixed in047786e1eby splitting keyless root/replay verification from MAC-authenticated verification plus a post-close key-disclosure path, replied on the thread, re-review clean. Earlier "Drew-owned" parks on task 5240 were the known authorship misread: noheld/user/owned/do-not-*labels exist on issue id: design: session header + segment checkpoint event kind #2240 or PR design(id): #2240 session checkpoint encoding #3867.