Every ticket as the root of its provenance graph — goal, patch, approval, runs and (as the ticket-class build lands) mandate, manifestations, guarantees, journey, artifacts and children. Rendered through the <<<TicketGraphList>>> tag.
Build checkouts/current/congruency/tools/ticket_status.py — a READ-ONLY CLI answering 'how far from done?' for one ticket at a glance. Required behavior (the tester will prove each point): (1) Invocation: python3 checkouts/current/congruency/tools/ticket_status.py <ticket_id> [--db PATH]; default db is <repo>/checkouts/current/state/congruency.sqlite where the repo root is found by walking UP from the tool's own location to registry.json, throwing if it cannot be found (note-for-claude rule). (2) Opens sqlite STRICTLY read-only (URI mode=ro); it must never write to the db or create files. (3) Prints, clearly labeled: the ticket header (id, kind, status, title); the crew (agent_id + role in assignment order); the journal (localtime datetime, agent, event, note, in order); the manifest (UID, kind, ref); lessons if any; and PROGRESS as 'steps remaining: X of Y' where X is the latest steps_remaining in the journal and Y is the total lifecycle steps for the ticket's kind from ticket_lifecycles version 1. Any missing piece prints '(none)' instead of crashing. (4) Exit 0 when the ticket exists; exit 2 with a one-line message for a missing ticket id — never a traceback. (5) Pure python stdlib, one file. Prove it against settled tickets 151 and 152 (crew, journal, manifest, lessons all populated) and a missing id like 999999.
patch
none
approval
unapproved
runs
no runs recorded
mandate (clauses)
not yet recorded — lands with the ticket-class build
manifestations
not yet recorded — lands with the ticket-class build
guarantees
not yet recorded — lands with the ticket-class build
journey (blunders & successes)
not yet recorded — lands with the ticket-class build
artifacts (forge)
not yet recorded — lands with the ticket-class build