Skip to content

approval_trace_id on a live envelope is bound to no resolution trace (PG-2, post-GO) #64

Description

@GodSpeed313

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:

  1. a trace identifier added to pi_script/trace.py (changes shared core used by every governed system, not just moltbook);
  2. a content digest over the ruling (self-verifying, but binds to content rather than to a retrievable record);
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions