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.
STOP: #236 agent.register + #242 doc.record are SATISFIED — #451 proved all 24 POST routes byte-identical Go vs PHP (27 subtests PASS, 0 skips). They were held open as unverifiable; they are now verified.
goal
STOP brake on #236 (Port route agent.register to Go) and #242 (Port route doc.record to Go).
These are now SATISFIED and PROVEN. They were deliberately NOT braked with #235/#237/#238/#239/#240/
#243 (see #450) because at that time they were UNVERIFIABLE, not done: TestRouteEquivalence skipped
ALL 24 write (POST) routes, so agent.register and doc.record had zero Go/PHP equivalence proof.
#451 closed that gap and MERGED (1d20d5b). Measured, re-runnable:
cd congruency-go && CONGRUENCY_STATE_DB=<state>/congruency.sqlite go test . -run TestRouteEquivalence
-> ok. 27 write subtests PASS, 0 SKIP, 0 FAIL, including:
--- PASS: TestRouteEquivalence/write_POST_routes/agent.register
--- PASS: TestRouteEquivalence/write_POST_routes/doc.record
-> "WRITE SUMMARY: 24/24 POST routes PROVEN (response bytes AND resulting rows identical, Go vs
PHP, from the same pristine snapshot); 0 skipped with a NAMED reason (none); 0 unnamed skips."
WHY THEY WERE NEVER REAL WORK (same reason as #450's six): a route is a ROW of api_routes (62 rows),
not code. boot/rest.php and congruency-go/db.go are TWO ENGINES over ONE table. The engine was ported
once; every row came with it. Porting a route was never per-route work. The only thing missing was
PROOF for the write half, and #451 delivered it - including response bytes AND resulting rows, each
route driven from its api_routes row and forked into two byte-identical scratch dbs so neither engine
sees the other's writes.
#451 also added, unprompted, a test named _279_governance_guard - pinning the process_status->ACTIVE
before ticket.assign ordering that broke EVERY dispatch. The class of defect that motivated leaving
these two open is now covered by a passing test.
WHY BRAKE RATHER THAN CLOSE: there is no close/resolve route (ticket.* offers create/kind/progress/
assign/approve/lesson; DONE requires a registered pair via process_status). Braking is the available
and honest mechanism, and it stops a dispatcher burning a worker to redo finished work.
DO NOT re-dispatch #236 or #242.
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