fix(#562): guard hero pill + releases metric against version drift#563
Conversation
- Correct stale site/index.html strings: hero pill v2.2→v3.0, releases metric count 12→14 and range (v0.1 → v2.2)→(v0.1 → v3.0). - Extend test_site_counts.sh to assert the hero pill (major.minor), releases-shipped count, and range against CHANGELOG — previously only softwareVersion was guarded, so six of the seven /release §3.5 strings could drift with green CI (how v2.2 survived the v3.0.0 cut). - Update /release SKILL §3.5 guard note to match the expanded coverage. Refs #562
atlas-apex
left a comment
There was a problem hiding this comment.
Code Review: PR #563 — Verdict: APPROVED
(Submitted as a comment because GitHub blocks self-approval on this account; the code-review verdict is APPROVED and the Rex approval marker is written.)
Commit: d876035c4574d2fc6ca8361306c33733e4f1a889
Summary
Corrects two stale marketing-site version strings that shipped with v3.0.0 (hero pill v2.2→v3.0; releases metric 12 / (v0.1 → v2.2)→14 / (v0.1 → v3.0)), and — the more durable part — extends test_site_counts.sh so the same drift can't recur. The guard previously asserted only the JSON-LD softwareVersion, leaving the pill and the releases metric unguarded; that's exactly how they drifted while CI stayed green. SKILL.md §3.5's guard note is updated to match.
Checklist Results
- ✅ Architecture & Design: Pass (no architectural surface; test/doc/site strings only)
- ✅ Code Quality: Pass
- ✅ Testing: Pass (guard hardened; verified clean pass + exit-1 on forced drift)
- ✅ Security: Pass (no secrets; "token" match is a pre-existing
llm:token-countcomment) - ✅ Performance: Pass (N/A)
- ✅ PR Description & Glossary: Pass (clear narrative summary, glossary present)
- ✅ Summary Bullet Narrative: Pass (all bullets state what + why)
- ✅ Technical Decisions (AgDR):N/A (bug fix + test hardening, no new decision)
- ✅ Adopter Handbooks: N/A (only always-load handbooks exist; none of their triggers fire on this diff — no migration files, no architecture-layer code)
Verification performed locally (at HEAD d876035)
- CHANGELOG facts confirmed: top entry
## [3.0.0],grep -cE '^## \[[0-9]' CHANGELOG.md= 14, major.minor3.0. - Site strings confirmed: pill
apexyard v3.0(L1568),<strong>14</strong>+ range(v0.1 → v3.0)(L1695–1696). - Each new extraction run standalone:
PILL_MM=3.0,RANGE_MM=3.0(arrow-agnostic[^)]*works;tail -1correctly picks the end version),SHIPPED_COUNT=14(grep -B1grabs the<strong>line above the metric). - Full guard: exit 0 clean; forced pill drift to
v2.2: exit 1 with the expectedFAILmessage; restored: exit 0. markdownlint-cli2 .claude/skills/release/SKILL.md: 0 errors.- SKILL.md prose matches the implementation (count source
grep -cE '^## \[[0-9]' CHANGELOG.mdis stated verbatim).
Issues Found
None.
Suggestions (non-blocking)
- nit:
RANGE_MATCHanchors on the literalv0.1(\(v0\.1). Correct for today'sv0.1start, but if the start version ever becamev0.10the prefix would still match andRANGE_MM'stail -1would silently keep working — fine now, just a latent coupling to the literal start version. No action needed unless the start anchor ever changes.
Verdict
APPROVED
The fix is correct, the version strings match the CHANGELOG, and the hardened guard is robust (arrow-agnostic, correct end-version selection, correct count extraction) and verified to fail on drift — which closes the recurrence path that #562 identified. The test change is the real value here, not just the string bump.
🤖 Reviewed by Rex (Code Reviewer Agent)
📌 Reviewed commit: d876035c4574d2fc6ca8361306c33733e4f1a889
Summary
apexyard v2.2(next to a correctv3.0.0link) and the releases-shipped metric read12 / (v0.1 → v2.2). Nowv3.0and14 / (v0.1 → v3.0).test_site_counts.shso this can't recur: it previously asserted only the JSON-LDsoftwareVersion, leaving six of the seven/release§3.5 version strings unguarded — which is exactly how the pill + metric drifted while CI stayed green. The guard now also checks the hero pill (major.minor), the releases-shipped count (vsgrep -cE '^## \[[0-9]' CHANGELOG.md), and the range against the CHANGELOG top entry./release§3.5's guard note to match the expanded coverage.Root cause + analysis filed as #562.
Testing
bash .claude/hooks/tests/test_site_counts.sh→ PASS (4 version asserts green: softwareVersion, pill, releases count, range).v2.2→ guard exits 1 withFAIL: site hero pill 'apexyard v2.2' but CHANGELOG major.minor is 3.0. Restored → PASS.markdownlint-cli2 .claude/skills/release/SKILL.md→ 0 errors.Refs #562
Glossary
site/index.html(<span class="pill">apexyard vX.Y</span>).N·(v0.1 → vX.Y)).test_site_counts.sh, run on every PR viasite-counts-check.yml, that fails CI when site version strings drift fromCHANGELOG.md./releaseskill step that bumps the seven hard-coded site version strings on each cut.X.Yportion of a semverX.Y.Z— what the pill and range display.