Skip to content

id: design: framing & fragmentation per carrier class (from #5674) #5810

Open

Description

@dezren39

Summary

Follow-on design ticket from #5674 — its decomposition sketch names this as a separate design, and the parent's acceptance requires these tickets to be filed and linked. Filed in the 2026-11-04 gap pass (WS-F) so the design work exists and can be prioritised on its own merits; implementation timing is a separate decision, possibly months out.

What this design must settle

Framing and fragmentation for the three carrier classes — stream, datagram, and store-and-forward — with their different loss and ordering realities.

Context from the parent

The parent design fixes the postcard wire-format family and the transport-adapter model that carries ID over non-UDP transports and relays. The parent issue carries the surrounding decisions this ticket must not re-decide; where this ticket's answer would change a parent decision, record that explicitly rather than silently forking it.

Decision record expected

Close this design with a recorded decision (on this issue or in a doc/ record linked from it): the chosen shape, the alternatives rejected and why, and the invariants implementation must hold. If the design splits further, file the splits and link them here rather than growing this issue.

Relations

Parent: #5674. Programme: epic #2056. Filed by WS-F (2026-11-04 ID design gap & expansion pass).

Activity

  1. added
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    on Nov 5, 2026
  2. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  3. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  4. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · triaged

  5. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    Agent note — picked up, handed off to opencode execution lane (lane code-u, task 12311, 2026-11-07)

    Task 12311 (triage: re-queued under triage doctrine — queue task 10213 was marked done with no landed evidence) was claimed by lane code-u and assigned by the execution-lane system to the opencode lane (assigned_lane: opencode). Per the worker runbook §1b, the bound opencode session launched by the laptop claimant owns this task from here: revalidation against current state, triage verdict, and any scoped follow-up packet are that session's to produce.

    This note is the pickup/handoff record only — no triage verdict is implied. If the claimant has not launched by lease expiry, the task returns to the queue on its own.

  6. 28 remaining items

  7. dezren39 commented on Nov 9, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: repo queue worker, lane code-l (repo-worker-code)
    • Task: task 13585 (small_fix) — execution lane assigned opencode per runbook 1b; handed off to opencode claimant (session ses_e5e425ae66effe8gDytBNKvAA8 bound).
    • Revalidation: issue id: design: framing & fragmentation per carrier class (from #5674) #5810 OPEN, no hard-stop labels (fresh gh, 2026-11-09T02:2xZ).
    • Next: claimant session drives the task; task 13585 parked pending session work.
  8. dezren39 commented on Nov 9, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: repo queue worker, lane code-l (repo-worker-code)
    • Session / ID: cron repo-queue-worker-shift-l run 2026-11-08; task 13585
    • Found via: claimed task 13585 this shift; execution-lane assignment returned opencode
    • Task: task 13585 for issue id: design: framing & fragmentation per carrier class (from #5674) #5810 (small_fix). Fresh check: {"labels":["task/small-fix","status/in-progress","status/parked","queue/claimed","queue/parked","app/id","work/assigned"],"state":"OPEN"}. No hard-stop labels (held / user/owned / do-not-merge / do-not-auto-edit). Handed off to the opencode claimant — the claimant launches the bound opencode session; this lane does not work it directly.
    • Expectation: claimant session drives task 13585 to a terminal state.
    • Links: task 13585 · issue id: design: framing & fragmentation per carrier class (from #5674) #5810
  9. dezren39 commented on Nov 9, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  10. dezren39 commented on Nov 9, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  11. dezren39 commented on Nov 9, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    task: 13585
    lane: code-h
    state: handed_off

    Task 13585 picked up by lane code-h; execution lane assigned opencode. Handed off to the opencode claimant; task 13585 parked 1200s meanwhile. Issue #5810 revalidated OPEN, no hard-stop labels at pickup, 2026-11-09.

  12. added
    queue/claimedQueue worker lifecycle state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 9, 2026
  13. dezren39 commented on Nov 9, 2026

    @dezren39
    MemberAuthor

    Decision recorded: framing & fragmentation across carrier classes

    Design record: doc/2026-11-09_decision_id5810_carrier_framing.md (PR: see linked pull request).

    Decision in one line. The adapter boundary carries one canonical serialized postcard frame. An adapter adds only the framing its carrier needs and removes it before handing the frame to ID; a frame is never re-encoded (no JSON/base64 variants) and never given carrier-specific message semantics.

    Carrier class Chosen shape Exposed to ID
    Stream One length-prefixed canonical frame; incremental reads; no application fragmentation Reliable ordered bytes; clean EOF between frames = close, EOF mid-frame = truncation
    Datagram Whole frame in one datagram when it fits the negotiated/safe payload; otherwise the existing checked-chunk/reassembly representation; never IP fragmentation Loss/duplication/reorder tolerated; frames exposed in completion order
    Store-and-forward Opaque whole frame, or checked chunks under the existing transfer identity when constrained; assembled before decode Any arrival order, duplicates idempotent, no partial delivery, expiry is terminal

    Rejected: per-read-as-a-message, reject-oversize-datagrams, IP fragmentation, per-adapter chunk formats, re-encoding for constrained carriers, and inferring ordering/exactly-once from unreliable carriers.

    Invariants implementation must hold: canonical bytes after deframing/assembly; one frame one decode (only after length/digest validation within the shared 1 MiB frame cap); bounded resources and pre-allocation length checks; chunk identity with idempotent duplicates; arrival order is never order; no accidental reliability promise; expiry is terminal for an assembly; sender obeys carrier-negotiated datagram limits; security stays layered over the fully reconstructed frame.

    Parent #5674: this record consumes the parent's adapter direction and fills in the per-carrier mapping. It changes no frozen parent decision. The envelope layout, chunk metadata encoding, fragmented flag semantics and size/extension rules stay with #5674/#5808/#5809; if the parent contract cannot express this shape with the existing checked-chunk representation, that is resolved there before implementation.

    Scope: does not split further. Adjacent ownership: #5808 (schema/golden vectors), #5809 (version negotiation), #5813 (relay/proxy), #5814 (conformance harness), #5815 (security binding). Implementation timing remains a separate decision.

    Posted by repo-health-code-pilot worker repo-worker-code (task 13585).

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

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)queue/claimedQueue worker lifecycle statestatus/in-progressQueue worker lifecycle statestatus:in-reviewtask/small-fixQueue packet kind: bounded fix with reproduction and targeted testswork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions