Ticket graphs

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.

← all ticket-graphs

DONE#463 congruency

pair_loop selftest 179/180: the '#457 GATE (a)' check pinned the resolver bug as PASSING ('resolver holds NO ref to ticket_artifacts'); #461 FIXED it, flipping the check to FAIL. Invert the assertion — same tripwire, correct polarity — back to 180/180.

goal

Update a STALE pair_loop selftest check that now FAILS because the bug it pinned was FIXED. This is NOT a regression — it is a check that was written to fail once the fix landed, and the fix landed. Restore the tripwire to green so it stops poisoning harvest checks. WHAT HAPPENED (both tickets are CORRECT; do not revert either): * #457 (the mint hook) added a pair_loop selftest check, "#457 GATE (a)", asserting that resolver.py holds NO reference to `ticket_artifacts` — encoding, as a PASSING check, the fact that the resolver could not see the mint table. Its own text: "FAIL here = resolver.py changed; re-read THE DIRECTORY-SERVICE GATE in this docstring and close #457's gate." * #461 (DONE, merged 775bf55) CLOSED that gap: resolver.py now reads ticket_artifacts and returns a VM as a real match (verified: `resolver.py <noble sha>` -> "0 blob(s) + 1 artifact(s) -> 1 de-overlapped match(es)", resolver --acceptance 32/32). * So the check flipped to FAIL. pair_loop --selftest is now 179/180 (stable across 3 runs, not flaky). The check was designed to fail exactly at this moment. WHY IT MATTERS: a red harness baseline poisons every harvest. The per-cycle protocol reverts on a red cycle-start harness; a permanently-red 179/180 would either mask a real future regression or trigger false reverts. The tripwire must be GREEN and mean something. DELIVERABLE: checkouts/current/congruency/tools/pair_loop.py — MINIMAL. Change ONLY the "#457 GATE (a)" selftest check. 1. INVERT the assertion to match reality: the gate is now that resolver.py DOES reference ticket_artifacts (the mint table), i.e. the directory-service tether is CLOSED. Passing condition becomes "resolver.py references ticket_artifacts" (was: "holds NO reference"). Update the check's message so it documents the CLOSED state and cites #461, not the open gap. 2. DO NOT weaken or remove the check — it should still guard something real: that the resolver remains wired to the mint table, so a future edit that silently unwires it FAILS. Same tripwire, correct polarity. 3. TOUCH NOTHING ELSE in pair_loop.py. Not the #279 guard (line ~978, "guarded at its source"), not the assign-before-ACTIVE ordering, not the mint hook, not commit_deliverable. One check, inverted. 4. Do NOT touch resolver.py — #461 is correct and merged. ACCEPTANCE: * `pair_loop.py --selftest` is back to 180/180 (the previously-failing "#457 GATE (a)" now PASSES against the CURRENT resolver.py, which references ticket_artifacts). * A live dispatch still reaches the governance path (braked ticket -> "== HALT ==", exit 3). * The check still FAILS if resolver.py is hypothetically reverted to not reference ticket_artifacts (prove the tripwire still has teeth — e.g. point it at a fixture without the reference). * git diff touches ONLY the one check block; the #279 guard string is byte-identical. RUN ON CLAUDE. This is the orchestrator — patch one check, do not reimagine it.

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)

checkouts/current/congruency/tools/pair_loop.py:3ed4d72c8c forge-source · forge f2a0a9f87d7e

source (forge tree)

browse congruency source (forge-parked tree)

children

not yet recorded — lands with the ticket-class build