Record the composed bundle identity in the session transcript, so a run joins to an exact bundle #350

Open
opened 2026-08-26 02:16:16 +00:00 by coilyco-ops · 0 comments
Member

Need

Session transcripts can be mined for evidence that the composed bundle needs adjustment: the human's own corrections are labelled defects, produced in real time at no grading cost. Turning that into an iterative loop needs a before-and-after comparison across a bundle change, and today that join is fuzzy.

What the transcripts carry today

Measured against the local Claude Code transcript store, 418 sessions over 50k, 1.4GB total:

  • timestamp on every record, ISO 8601.
  • agent-name and custom-title records carrying the composed seat label, in the richest form Angie [she] (Developer Platform Engineer) cb47. That is name, pronoun, role title, and session short id.
  • No bundle digest and no manifest logical content ID. Grepping for bundle, composeMark, bundleDigest, and logical_content_id across a transcript returns nothing.

So a reader can recover the role a session ran under, and the date, but not the bundle. The role title is a weak proxy: the corpus spans a roster rename (Engineer to Developer Platform Engineer, DevOps to Systems Administrator, AI Engineer to Agent Evaluation Engineer, Executive Strategist to Technical Program Manager, with QA and Director retired), and any other bundle change landing in the same window is indistinguishable from the rename.

What the software must do

Make the exact composed bundle recoverable from a session transcript, without inferring it from date or role label.

The pieces already exist. acompose whoami reads the selected bundle manifest to print the seat label, and per docs/bundle-protocol.md the manifest already carries a logical content ID and digest. The gap is that the identity reaching the transcript is the human-facing label rather than the bundle identity behind it.

Implementation is the owner's call. Two shapes that would satisfy it:

  • whoami gains a machine-readable form carrying the bundle identity, and the SessionStart hook records it.
  • Composition emits a separate identity marker that the hook records alongside the name.

Acceptance conditions

  • Given a session transcript alone, a reader recovers the manifest logical content ID and digest of the bundle that composed that session.
  • The recovered identity verifies against agent-compose verify for that bundle, so a transcript cannot name a bundle that never existed.
  • A session with no projection records no identity rather than a synthesised one, matching the existing whoami silence rule in docs/whoami.md.
  • Two sessions composed from the same inputs record the same identity, and a session on either side of a roster change records a different one.
  • The recorded value is metadata only: no instructions, skill bodies, private overlay content, host paths, or credentials.

Why this shape

docs/bundle-protocol.md makes bundles immutable and content addressed, which means a transcript only ever needs to point at a bundle rather than copy any of it. The quote stays reconstructible from the bundle itself. That keeps this consistent with the metadata-only rule in the agent-proxy adapter at docs/agent-compose-ingestion.md, which already ingests manifest.json and trace.json and joins on bundle and decision hashes.

Out of scope

  • Any mining, classification, or grading of transcripts. This issue is only the join key.
  • Any write path back into a bundle. Bundles stay immutable.
  • Routing transcript content anywhere off the local machine. The corpus is private conversation and stays local.

Provenance

Specified by the eval seat from a read-only pass over the local transcript store on 2026-08-25. Counts above are measured, not estimated. Filed as a bounded buildable definition under boundary-build-foundational-software, so the build and the shape belong to platform.

## Need Session transcripts can be mined for evidence that the composed bundle needs adjustment: the human's own corrections are labelled defects, produced in real time at no grading cost. Turning that into an iterative loop needs a before-and-after comparison across a bundle change, and today that join is fuzzy. ## What the transcripts carry today Measured against the local Claude Code transcript store, 418 sessions over 50k, 1.4GB total: * `timestamp` on every record, ISO 8601. * `agent-name` and `custom-title` records carrying the composed seat label, in the richest form `Angie [she] (Developer Platform Engineer) cb47`. That is name, pronoun, role title, and session short id. * No bundle digest and no manifest logical content ID. Grepping for `bundle`, `composeMark`, `bundleDigest`, and `logical_content_id` across a transcript returns nothing. So a reader can recover the role a session ran under, and the date, but not the bundle. The role title is a weak proxy: the corpus spans a roster rename (`Engineer` to `Developer Platform Engineer`, `DevOps` to `Systems Administrator`, `AI Engineer` to `Agent Evaluation Engineer`, `Executive Strategist` to `Technical Program Manager`, with `QA` and `Director` retired), and any other bundle change landing in the same window is indistinguishable from the rename. ## What the software must do Make the exact composed bundle recoverable from a session transcript, without inferring it from date or role label. The pieces already exist. `acompose whoami` reads the selected bundle manifest to print the seat label, and per `docs/bundle-protocol.md` the manifest already carries a logical content ID and digest. The gap is that the identity reaching the transcript is the human-facing label rather than the bundle identity behind it. Implementation is the owner's call. Two shapes that would satisfy it: * `whoami` gains a machine-readable form carrying the bundle identity, and the SessionStart hook records it. * Composition emits a separate identity marker that the hook records alongside the name. ## Acceptance conditions * Given a session transcript alone, a reader recovers the manifest logical content ID and digest of the bundle that composed that session. * The recovered identity verifies against `agent-compose verify` for that bundle, so a transcript cannot name a bundle that never existed. * A session with no projection records no identity rather than a synthesised one, matching the existing `whoami` silence rule in `docs/whoami.md`. * Two sessions composed from the same inputs record the same identity, and a session on either side of a roster change records a different one. * The recorded value is metadata only: no instructions, skill bodies, private overlay content, host paths, or credentials. ## Why this shape `docs/bundle-protocol.md` makes bundles immutable and content addressed, which means a transcript only ever needs to point at a bundle rather than copy any of it. The quote stays reconstructible from the bundle itself. That keeps this consistent with the metadata-only rule in the agent-proxy adapter at `docs/agent-compose-ingestion.md`, which already ingests `manifest.json` and `trace.json` and joins on bundle and decision hashes. ## Out of scope * Any mining, classification, or grading of transcripts. This issue is only the join key. * Any write path back into a bundle. Bundles stay immutable. * Routing transcript content anywhere off the local machine. The corpus is private conversation and stays local. ## Provenance Specified by the eval seat from a read-only pass over the local transcript store on 2026-08-25. Counts above are measured, not estimated. Filed as a bounded buildable definition under `boundary-build-foundational-software`, so the build and the shape belong to platform.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agent-compose#350
No description provided.