Skip to content

feat: version_skew checks compatibility floor vs newest release tag#96

Merged
Jammy2211 merged 1 commit into
mainfrom
claude/wake-up-u53v8z
Jul 19, 2026
Merged

feat: version_skew checks compatibility floor vs newest release tag#96
Jammy2211 merged 1 commit into
mainfrom
claude/wake-up-u53v8z

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Why

Under the pre-2026-07 model version_skew compared a workspace's recorded pin (workspace_version/version.txt) against the library __init__.py __version__ stamp. Both artifacts are now frozen — releases no longer commit either back to main (PyAutoConf#119 / PyAutoBuild#121, which removed the daily "Update version to X" commits that drove the CI-storm / cron-pause incident). So the check was inert: permanently MATCH on stale values, unfailable by any release.

Build-chain #155 Phase 4 task 2, fork (b) "mains authoritative".

What

Re-point the check at the live invariant — each workspace's version.minimum_library_version floor vs the newest YYYY.M.D.B git tag on its library:

Status Meaning Verdict
UNSATISFIABLE floor > newest released version — no installable release satisfies it RED
OK floor ≤ newest release green
UNKNOWN newest release unresolvable (lib not checked out / no tags) STALE, never blocks
BAD unparseable floor/tag RED

Drops the obsolete AHEAD / BEHIND / MISMATCH legs. Reads local git tags only — no library import, no network — so it stays inside the <30s tick budget.

Also updates heart/readiness.py (RED/STALE mapping + score key skew_unsatisfiable), heart/dashboard.py rendering, health_agent/capabilities.yaml gate_role, and the test suites.

Out of scope (noted for follow-up)

  • Yank-awareness — whether a floor names a released-then-yanked version needs the PyPI API, not git tags.
  • Removing the legacy workspace_version/version.txt from the 7 workspaces (separate task, handled alongside this branch's workspace changes).

Testing

Full Heart suite 289 passed. Live smoke against real checkouts: all floors 2026.7.9.1 ≤ newest release 2026.7.19.1 → OK, floor-less workspaces skipped gracefully.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Vx4gezFDNdXP39Q8WzqnTA


Generated by Claude Code

The old version_skew compared a workspace's recorded pin (workspace_version /
version.txt) against the library __init__.py __version__ stamp. Both artifacts
are now frozen — releases no longer commit either back to main (PyAutoConf#119 /
PyAutoBuild#121) — so the check was inert: permanently MATCH on stale values,
unfailable by any release.

Re-point it at the live invariant (build-chain #155 Phase 4 task 2, fork (b)
"mains authoritative"): each workspace's version.minimum_library_version floor
vs the newest YYYY.M.D.B git tag on its library. Flag UNSATISFIABLE (RED) when a
floor exceeds the newest released version — no installable release can satisfy it
(the one invariant nothing guarded before); OK when satisfiable; UNKNOWN (STALE)
when the newest release can't be resolved; BAD on unparseable input. Drops the
now-obsolete AHEAD/BEHIND/MISMATCH legs. No library import, no network — reads
local git tags only, inside the <30s tick budget.

Also updates readiness.py (RED/STALE mapping + score key skew_unsatisfiable),
dashboard.py rendering, capabilities.yaml gate_role, and the test suites.
Yank-awareness (does the floor name a yanked release) is noted as a deeper,
non-tick check left for follow-up.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vx4gezFDNdXP39Q8WzqnTA
@Jammy2211
Jammy2211 merged commit 11f806f into main Jul 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants