Skip to content

fix(#493): release site-version bump + correct issue-filing version on dev + tracker shape-only fallback#505

Merged
atlas-apex merged 1 commit into
devfrom
fix/GH-493-batch
Jun 4, 2026
Merged

fix(#493): release site-version bump + correct issue-filing version on dev + tracker shape-only fallback#505
atlas-apex merged 1 commit into
devfrom
fix/GH-493-batch

Conversation

@atlas-apex

Copy link
Copy Markdown
Collaborator

Three independent framework fixes batched on one branch (all touch .claude/ paths only).

Summary

  • [Chore] /release should bump marketing-site version strings (root cause of #491) #493/release auto-bumps the marketing-site version strings + a durable drift guard. The release flow bumped the git tag and CHANGELOG but never touched site/index.html's hard-coded version, so the site advertised a stale version that drifted across ~5 release cycles before anyone noticed ([Chore] Fix stale framework version on marketing site (1.3.0/v1.1 → 2.2.0) #491). A new step 3.5 in .claude/skills/release/SKILL.md updates all seven version locations (JSON-LD softwareVersion + dateModified, hero pill apexyard vX.Y, hero version link text + releases/tag/vX.Y.Z href, releases-shipped count + (v0.1 → vX.Y) range) — derived from the version being cut, not hand-edited — and explicitly leaves historical strings (CHANGELOG entries, migration filenames, AgDR examples) untouched. test_site_counts.sh now asserts the site's softwareVersion equals the top ## [X.Y.Z] CHANGELOG entry, so any future cut that bumps one without the other fails CI instead of drifting silently. The existing site-counts-check.yml workflow already runs this test, so no workflow change is needed.
  • [Bug] Issue-filing skills capture the wrong framework version on dev (git describe misses release tags) #503 — issue-filing skills capture the correct version on dev. Under the release-cut model, release tags live on main and are not ancestors of dev, so git describe --tags --abbrev=0 from a dev checkout returned a stale version (v1.1.0 when the line was actually v2.2.0), mislabeling every issue filed from dev. Both report-apexyard-bug and request-apexyard-feature now derive the version from the top ## [X.Y.Z] in CHANGELOG.md (carried main → dev by /release-sync, so always current on dev), with robust fallbacks: highest semver tag across all refs (git tag --sort=-v:refname) → short HEAD → unknown. The v prefix the field renders today is preserved.
  • [Feature] Make ticket-existence hooks tracker-aware (don't require a GitHub issue when the configured tracker isn't GitHub) #501 — shape-only fallback for non-GitHub trackers. validate-pr-create.sh and verify-commit-refs.sh hardwired a GitHub-issue existence check, so a project with .tracker.kind = linear/jira/etc. could not open a PR or commit referencing a real tracker key when the tracker CLI was absent or not queryable — the hook looked for a GitHub issue that would never exist and blocked at creation. Now, when TRACKER_KIND != gh and tracker_view returns empty, both hooks fall back to shape-only validation (the key already passed the title/commit regex against tracker_id_pattern), emit a one-line advisory to stderr, and exit 0. The hard existence block is retained only for TRACKER_KIND == gh — GitHub behaviour is entirely unchanged.

Testing

Glossary

Term Definition
Release-cut model Branch model where dev accumulates daily merges and main receives tagged release PRs (vX.Y.Z); tags are not ancestors of dev.
Release-cut drift Version labels going stale because the release flow updates the tag but not hard-coded site strings.
softwareVersion The JSON-LD SoftwareApplication field in site/index.html that advertises the current framework version.
git describe --tags --abbrev=0 Returns the most recent tag reachable from the current HEAD — misses release tags that aren't ancestors of dev.
.tracker.kind Project-config field selecting the active tracker (gh, jira, linear, asana, custom, none).
Shape-only validation Confirming a ticket key matches tracker_id_pattern without asserting it exists in a tracker.
tracker_view _lib-tracker.sh function that dispatches the configured tracker's view command and emits normalised JSON; empty output = not found / not queryable.

Closes #493
Closes #503
Closes #501

…n dev + tracker shape-only fallback

- #493: /release now bumps site/index.html version strings (JSON-LD
  softwareVersion + dateModified, hero pill, hero version link text/href,
  releases-shipped count + range) from the version being cut, as a new
  step 3.5; test_site_counts.sh asserts site softwareVersion == CHANGELOG
  top entry so drift fails CI.
- #503: report-apexyard-bug + request-apexyard-feature derive the framework
  version from CHANGELOG.md's top `## [X.Y.Z]` (carried main->dev by
  /release-sync) instead of `git describe`, which returns a stale tag on dev.
- #501: validate-pr-create.sh + verify-commit-refs.sh fall back to shape-only
  (advisory, exit 0) when a non-gh tracker returns empty; gh existence
  enforcement unchanged.

Closes #493
Closes #503
Closes #501

@atlas-apex atlas-apex left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review: PR #505

Commit: 0e2bbd6b37327cee9e0e19d07d560f58a953da7c

Summary

Three independent .claude/-only framework fixes batched on one branch (base dev): #493 (/release auto-bumps site/index.html version strings + durable drift guard), #503 (issue-filing skills capture the correct version on dev via CHANGELOG instead of git describe), #501 (non-gh trackers fall back to shape-only validation when unqueryable). All claims independently verified on this checkout.

Checklist Results

  • Architecture & Design: Pass
  • Code Quality: Pass
  • Testing: Pass
  • Security: Pass (no secrets, no injection surface; doc/test/hook edits)
  • Performance: Pass (N/A — shell + markdown)
  • PR Description & Glossary: Pass (7-term glossary, ticket links, testing steps)
  • Summary Bullet Narrative: Pass (every bullet = what changed + why it matters)
  • Technical Decisions (AgDR): N/A (bug fixes implementing already-decided models — release-cut AgDR-0007, tracker abstraction AgDR-0033; no new decision)
  • Adopter Handbooks: N/A (no migration files → blocking migration-safety handbook does not fire; no language files → no language handbooks)

Verification performed (not taken on trust)

#493 — site-version drift guard is NOT a no-op.

  • bash test_site_counts.sh → green; prints ok site softwareVersion=2.2.0 matches CHANGELOG top entry 2.2.0.
  • Synthesized drift by mutating CHANGELOG top to ## [3.0.0] → test went red with FAIL: site/index.html softwareVersion=2.2.0 but CHANGELOG.md top entry is 3.0.0 and exit 1. Restored CHANGELOG cleanly. The assertion ([ "$SITE_VERSION" != "$CHANGELOG_VERSION" ] && exit 1) is a real comparison, not a tautology.
  • Step 3.5 is correctly placed between the CHANGELOG-draft step (3) and Open-the-release-PR step (4); it derives all seven version locations from the version being cut and explicitly leaves historical strings (CHANGELOG entries, migrate-v1-to-v2.ts, AgDR examples) untouched.

#503 — snippets identical and correct.

  • The bash code blocks in report-apexyard-bug/SKILL.md (L88–98) and request-apexyard-feature/SKILL.md (L77–87) are byte-identical, including the surrounding "Do NOT use git describe" prose.
  • Ran the new snippet on this dev checkout → FW_VERSION = v2.2.0 (correct). The old git describe --tags --abbrev=0 yields the stale v1.1.0 — exactly the bug #503 fixes (release tags live on main, not ancestors of dev).
  • v-prefix consistent: CHANGELOG top is bare 2.2.0, primary path adds vv2.2.0; the git tag --sort=-v:refname fallback already returns v2.2.0. Both paths render the same v-prefixed value the field shows today.

#501 — shape-only fallback is correctly scoped; gh is NOT loosened.

  • bash test_tracker_aware_hooks.sh22 passed, 0 failed.
  • The one modified existing test ("linear: missing → blocked" → "tracker CLI returns empty → shape-only PASS") is the correct #501 contract: a non-gh CLI returning empty is indistinguishable from "not queryable / unauthenticated", so it cannot hard-block a real ticket. This is not a gh weakening.
  • Confirmed gh stays hard: in validate-pr-create.sh the shape-only branch is if [ -z "$ISSUE_JSON" ] && [ "$TRACKER_KIND" != "gh" ]; the existence-block is the elif below it, structurally unreachable for non-gh and fully intact (exit 2) for gh. Case 12 (live) proves gh fabricated #N still BLOCKS in both hooks.
  • Closed-state still blocks: the done|cancelled|resolved|completed → exit 2 path is reached only when the tracker returned a ticket (non-empty ISSUE_JSON), so a returned-but-closed non-gh ticket still hard-blocks. Live: "linear closed (Done) → blocked" and "jira closed (Resolved) → blocked" both PASS.

Scope & hygiene.

  • All 7 changed files are under .claude/ — confirmed no other paths in the diff.
  • shellcheck 0.11.0: verify-commit-refs.sh is warning-clean; validate-pr-create.sh carries SC1091/SC2059/SC2086 — verified identical on the dev merge-base, so zero new warnings.
  • PR title fix(#493): … matches format; body Closes #493 / #503 / #501; Glossary + narrative Summary present.

Issues Found

None.

Suggestions

  • Minor (non-blocking): step 3.5's table lists approximate line numbers (~L54, ~L1568, …). These will drift as site/index.html evolves; the softwareVersion drift guard backstops only that one location. Consider a follow-up that anchors the other six on stable markers (or extends the guard) so the operator isn't hunting by line number. Not a merge blocker — the durable softwareVersion guard is the load-bearing one.

Verdict

APPROVED


🤖 Reviewed by Rex (Code Reviewer Agent)
📌 Reviewed commit: 0e2bbd6b37327cee9e0e19d07d560f58a953da7c

@atlas-apex atlas-apex merged commit 5bc7882 into dev Jun 4, 2026
6 of 7 checks passed
@atlas-apex atlas-apex deleted the fix/GH-493-batch branch June 4, 2026 18:32
me2resh added a commit that referenced this pull request Jun 5, 2026
…n dev + tracker shape-only fallback (#505)

- #493: /release now bumps site/index.html version strings (JSON-LD
  softwareVersion + dateModified, hero pill, hero version link text/href,
  releases-shipped count + range) from the version being cut, as a new
  step 3.5; test_site_counts.sh asserts site softwareVersion == CHANGELOG
  top entry so drift fails CI.
- #503: report-apexyard-bug + request-apexyard-feature derive the framework
  version from CHANGELOG.md's top `## [X.Y.Z]` (carried main->dev by
  /release-sync) instead of `git describe`, which returns a stale tag on dev.
- #501: validate-pr-create.sh + verify-commit-refs.sh fall back to shape-only
  (advisory, exit 0) when a non-gh tracker returns empty; gh existence
  enforcement unchanged.

Closes #493
Closes #503
Closes #501

Co-authored-by: me2resh <ahmed.abdelaliem@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants