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: #250/#254/#313/#314 'Port tag to Go' are SATISFIED — BugCatalog, CategoryBrowse, ForgeView, FormTag all PASS TestTagEquivalence (byte-equivalent Go vs PHP). Same category as the route ports: the tag engine was ported once.
goal
STOP brake on #250 (BugCatalog), #254 (CategoryBrowse), #313 (ForgeView), #314 (FormTag) — all four are 'Port tag <X> to Go' tickets and all four are SATISFIED. Measured, re-runnable:
cd congruency-go && go test ./tags/ -run TestTagEquivalence -v
-> --- PASS: TestTagEquivalence/BugCatalog
--- PASS: TestTagEquivalence/CategoryBrowse
--- PASS: TestTagEquivalence/ForgeView
--- PASS: TestTagEquivalence/FormTag
Each renders byte-equivalent Go vs PHP. Same category error as the 8 route-port tickets (#450, #460): a tag is handled by the data-driven engine (execute_all_tags / tags/engine.go), which was ported ONCE; individual tags came with it. Porting a tag was never per-tag work.
(The tag harness overall is currently FAIL, but ONLY on TreeView — a separate #448-caused divergence, fixed by its own ticket. These four PASS.)
No close route exists; braking is the honest mechanism. DO NOT re-dispatch #250/#254/#313/#314.
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