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.
Tag-equivalence harness: Go RenderTag vs live PHP ?page=tags, per registered tag [go-port:tags:harness]
goal
Enabler for the 45 tag units (#246+): a runnable tag-equivalence harness, the tag analogue of the route sweep in congruency-go/equivalence_test.go (#227). #226 landed 10 tags "ported-not-measured" and every tag unit otherwise re-hits the synthetic-DB wall (the worktree lacks php + the state DB, both gitignored). This harness gives every tag unit ONE proven way to measure equivalence: for each registered tag T, render it via the Go engine (tags.RenderTag / the engine's render entry) against the live state DB at /Users/stevenpeterson/code/installed/jazz-project/congruency/checkouts/current/state/congruency.sqlite, AND fetch the golden PHP render from the LIVE server (curl the running rest.php / ?page=tags&tag=T at http://127.0.0.1:8899 with X-Api-Key from ../.secrets/ats.env), then byte-diff. t.Skip cleanly if the server/DB/key are unavailable so it never false-fails in CI. Report per-tag identical/differ; mark tags not yet ported as skipped, not failed. Deliverable: congruency-go/tags/equivalence_test.go (a new *_test.go in the tags package). Reuse the #227 stability-sandwich pattern to filter concurrent-write churn. This does NOT port any tag; it is the measurement instrument the tag units call.
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