Post-GO engineering debt. Not a prerequisite for GO-1. Ruled post-GO and filed as its own dated item by operator direction, 2026-08-08.
Tracked in TODO.md under "M7 — post-GO engineering debt" as PG-2.
The gap
as_client_transport (moltbook/transport.py) defaults approval_trace_id_fn to lambda: str(uuid.uuid4()). An envelope built on the live path therefore carries a fresh random identifier that references no RESOLUTION TRACE.
The injection seam exists and is unused. Nothing in the repository derives the id from resolve()'s output — and a RESOLUTION TRACE carries no identifier of its own for it to be derived from (pi_script/trace.py builds no id field).
Consequence
An envelope's stated approval provenance is not currently traversable back to the ruling that authorized it. The audit chain has a break at exactly the join between the governance decision and the execution record.
This is a gap in binding, not in enforcement: the resolver still rules, the pre-send gates still block, and the envelope is still validated (§4). Nothing is unguarded — the link between the guard and the record is what is missing.
How it surfaced
Raised during the §A4 rehearsal on 2026-08-08. The exercise harness (tools/go-checklist-exercises/a4_first_post_rehearsal.py) had to perform the trace-to-envelope binding locally, precisely because no shipped path does. That harness-local binding is disclosed in the transcript, in the module docstring, and in the exercises README, and explicitly does not assert that shipped code performs the join.
Deliberately not decided here
What an approval_trace_id should be is a governance decision, not an implementation detail. At least three shapes are viable and they are not equivalent:
- a trace identifier added to
pi_script/trace.py (changes shared core used by every governed system, not just moltbook);
- a content digest over the ruling (self-verifying, but binds to content rather than to a retrievable record);
- a reference into a persisted trace store (requires a store, and a retention policy).
Choosing among these requires a ruling. This issue records the gap; it does not propose the resolution.
Scope
Does not move the GO-1 preparation baseline.
Post-GO engineering debt. Not a prerequisite for GO-1. Ruled post-GO and filed as its own dated item by operator direction, 2026-08-08.
Tracked in
TODO.mdunder "M7 — post-GO engineering debt" as PG-2.The gap
as_client_transport(moltbook/transport.py) defaultsapproval_trace_id_fntolambda: str(uuid.uuid4()). An envelope built on the live path therefore carries a fresh random identifier that references no RESOLUTION TRACE.The injection seam exists and is unused. Nothing in the repository derives the id from
resolve()'s output — and a RESOLUTION TRACE carries no identifier of its own for it to be derived from (pi_script/trace.pybuilds no id field).Consequence
An envelope's stated approval provenance is not currently traversable back to the ruling that authorized it. The audit chain has a break at exactly the join between the governance decision and the execution record.
This is a gap in binding, not in enforcement: the resolver still rules, the pre-send gates still block, and the envelope is still validated (§4). Nothing is unguarded — the link between the guard and the record is what is missing.
How it surfaced
Raised during the §A4 rehearsal on 2026-08-08. The exercise harness (
tools/go-checklist-exercises/a4_first_post_rehearsal.py) had to perform the trace-to-envelope binding locally, precisely because no shipped path does. That harness-local binding is disclosed in the transcript, in the module docstring, and in the exercises README, and explicitly does not assert that shipped code performs the join.Deliberately not decided here
What an
approval_trace_idshould be is a governance decision, not an implementation detail. At least three shapes are viable and they are not equivalent:pi_script/trace.py(changes shared core used by every governed system, not just moltbook);Choosing among these requires a ruling. This issue records the gap; it does not propose the resolution.
Scope
Does not move the GO-1 preparation baseline.