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.
Go TreeView re-sync: TestTagEquivalence FAILs on TreeView only — #448 added title='registry head_commit (resolved on open)' to the PHP sha span; the Go port renders the pre-#448 span. Add the attribute, restore the gate to green.
goal
Re-sync the Go engine's TreeView render to the PHP TreeView after #448 changed it, restoring the tag
equivalence gate to GREEN. TestTagEquivalence is currently FAIL — on exactly ONE subtest, TreeView.
MEASURED (re-runnable):
cd congruency-go && CONGRUENCY_STATE_DB=<state>/congruency.sqlite go test ./tags/ -run TestTagEquivalence
-> FAIL. Coverage: 46 tags scanned, 42 in the Go engine, 4 SKIP (unported, never FAIL). The ONLY
failing ported tag is TreeView (go=44892B vs php=57516B).
THE DIFFERENCE IS ONE ATTRIBUTE, and nothing else (verified: every non-title line is byte-identical,
the shas match on both sides). On the ?page=tree repo-list, the sha span differs:
go : <span style='color:#888;font-size:.85em'>@ 888d3447c6ba</span>
php: <span style='color:#888;font-size:.85em' title='registry head_commit (resolved on open)'>@ 888d3447c6ba</span>
i.e. the PHP span now carries title='registry head_commit (resolved on open)' and the Go span does
not. This attribute was added by #448 (the TreeView ref-resolution + telemetry rebuild): the PHP now
shows the registry's stored head_commit in the list and explains, on hover, that the real ref is
resolved when the repo is opened. The Go port renders the pre-#448 span.
DELIVERABLE: congruency-go/tags/engine.go (the tree render lives there; confirm — it is the file that
emits `?page=tree&repo=` list items with the `@ <sha>` span).
1. Add title='registry head_commit (resolved on open)' to the repo-list sha span, byte-for-byte
matching the PHP (checkouts/current/congruency/invocators/tags/dev/TreeView.php as merged by #448).
Match the exact attribute text and quoting — this is a BYTE equivalence gate.
2. DO NOT reimplement ref resolution in Go. The list page shows the stored head_commit (including the
literal 'HEAD' for dangling-symref repos) plus this explanatory title; the actual per-repo tree
drill-in resolution is PHP-side runtime behaviour the equivalence harness does not exercise. Match
the RENDER, not the resolution.
3. Change ONLY what the diff requires. Do not touch other tags' renders in engine.go. The 41 other
ported tags PASS and must stay byte-identical.
ACCEPTANCE:
* `go test ./tags/ -run TestTagEquivalence` is GREEN (TreeView PASS; the 4 SKIPs remain SKIP:
ArtifactRegistry, BodyTag, Catalog_Controller, Style — those are unported, not this ticket).
* The go vs php byte-diff for TreeView is empty.
* No other TestTagEquivalence subtest regresses from PASS.
RUN ON CLAUDE.
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