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

REQUESTED#469 congruency

WIRE + ENABLE regression_capture: the module has ZERO callers — built, merged, inert. My #440 spec called the hook 'secondary' and made the load-bearing part optional. Add the hook, default to auto, set registry enabled=true. Prove it FIRES.

goal

WIRE regression_capture INTO pair_loop, and turn it ON. The tool is built, tested and INERT: it has ZERO callers. MEASURED: `grep -rl regression_capture checkouts/current/congruency/tools/` returns ONLY regression_capture.py itself. Callers: 0. The module passes its own selftest (186/187 — the 1 is a known false positive from a shared __pycache__ dir, not this module) and does nothing, because nothing calls it. WHY IT SHIPPED INERT — MY SPEC'S FAULT, NOT THE PAIR'S: #440's body said "pair_loop.py CHANGE (secondary, MINIMAL): a single hook after a fail verdict". Calling the load-bearing part "secondary" made it optional. The pair built the module, skipped the hook, and the auditor passed it because it met every stated criterion. Do not re-litigate #440 — its module is correct and merged. This ticket adds the caller it was never firmly required to write. (Same shape as #458's tag with no Documents row and #459's migration nobody applied. The pattern is: build the thing, never tether it.) DELIVERABLE: checkouts/current/congruency/tools/pair_loop.py — MINIMAL. Add the hook. Nothing else. 1. THE HOOK. In the round loop, AFTER an auditor returns verdict=fail and its findings are journaled, call regression_capture with the ticket, the fail-findings, and the worker blob that produced them. If a finding carries a structured repro and capture is enabled, regression_capture mints its red test and pair_loop stages it with the commit scope. 2. THE TOGGLE, honored exactly as regression_capture.py already documents it (read its docstring, do not invent): --regression-capture off (its current default) capture off; nothing read/executed/written --regression-capture on forced on regardless of registry.json --regression-capture auto read registry.json {"regression_capture": {"enabled": true|false}} NOTE the module warns that `{"enabled": "false"}` (a STRING) once turned capture ON because bool("false") is True — the section must be an object and `enabled` a real bool. Do not reintroduce that. 3. TURN IT ON: add {"regression_capture": {"enabled": true}} to registry.json (a real JSON bool, not a string), and make pair_loop's flag DEFAULT to `auto` so the registry governs it. Off must remain reachable via --regression-capture off. 4. NEVER FATAL. A regression_capture failure MUST NOT fail the commit, the round, or the pair. Log and continue — instrumentation that can break the pipeline is worse than none. 5. DO NOT TOUCH THE #279 GUARD (pair_loop.py ~line 978, "This is ticket #279's regression, guarded at its source") or the assign-before-ACTIVE ordering or the mint hook. This ticket ADDS a call after a fail verdict; it changes no governance and no ordering. ACCEPTANCE — the point is that it FIRES, not that it exists: * `grep -c regression_capture pair_loop.py` > 0 (it has a caller at last). * pair_loop --selftest >= 180/180 (it is 180/180 on main; do not lose a check) AND a live dispatch still reaches the governance path (a braked ticket prints "== HALT ==", exit 3). * PROVE IT FIRES: in the selftest's THROWAWAY repo, drive a round to a fail verdict carrying a structured repro and assert a red test is minted under tests/regression/ and staged. With --regression-capture off, assert NOTHING is minted (off is byte-for-byte the old behaviour). * registry.json holds {"regression_capture": {"enabled": true}} as a real bool. RUN ON CLAUDE. This is the orchestrator — add one hook, 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)

blunder — not authorized
blunder — not authorized

artifacts (forge)

not yet recorded — lands with the ticket-class build

source (forge tree)

browse congruency source (forge-parked tree)

children

not yet recorded — lands with the ticket-class build