From 28af5f9477ea816d5a840cd208251a2c90d13462 Mon Sep 17 00:00:00 2001 From: Yeming Tang Date: Sat, 15 Aug 2026 02:11:57 +0000 Subject: [PATCH 1/2] fix(version): stop hardcoding v1.0.0-rc1 in write_firstrun_report write_firstrun_report.py had its own "ACTION_VERSION = v1.0.0-rc1" that never got bumped, so every FirstRun gate_report.json shipped with a version string that was never released. Same bug class that scripts/_version.py was introduced to fix -- but the guard test only covered compare_runs and detect_test_set_drift, so the drift here slipped through v1.0.0..v1.0.3. Route write_firstrun_report through scripts/_version like the other two writers, and extend tests/test_action_version.py to enforce the invariant on all three so it cannot regress. --- scripts/write_firstrun_report.py | 5 ++++- tests/test_action_version.py | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/write_firstrun_report.py b/scripts/write_firstrun_report.py index 0f73f9a..144df76 100644 --- a/scripts/write_firstrun_report.py +++ b/scripts/write_firstrun_report.py @@ -12,7 +12,10 @@ import sys from pathlib import Path -ACTION_VERSION = "v1.0.0-rc1" +try: + from _version import ACTION_VERSION +except ImportError: # invoked as a module rather than a script + from scripts._version import ACTION_VERSION def _find_file(root: Path, name: str) -> Path | None: diff --git a/tests/test_action_version.py b/tests/test_action_version.py index 917048c..325f644 100644 --- a/tests/test_action_version.py +++ b/tests/test_action_version.py @@ -41,6 +41,7 @@ def test_both_report_writers_agree() -> None: assert load("compare_runs").ACTION_VERSION == expected assert load("detect_test_set_drift").ACTION_VERSION == expected + assert load("write_firstrun_report").ACTION_VERSION == expected def test_version_matches_the_newest_release_tag() -> None: @@ -70,6 +71,6 @@ def test_version_matches_the_newest_release_tag() -> None: def test_the_stamp_actually_reaches_a_gate_report() -> None: """A constant nothing writes out would pass every check above and still be useless.""" - source = (ROOT / "scripts" / "compare_runs.py").read_text(encoding="utf-8") - - assert '"action_version": ACTION_VERSION' in source + for name in ("compare_runs", "write_firstrun_report"): + source = (ROOT / "scripts" / f"{name}.py").read_text(encoding="utf-8") + assert '"action_version": ACTION_VERSION' in source, name From 6ba55745c183a55b22889242f78f3f8550835f49 Mon Sep 17 00:00:00 2001 From: Yeming Tang Date: Sat, 15 Aug 2026 02:12:11 +0000 Subject: [PATCH 2/2] chore(release): bump ACTION_VERSION to v1.0.4 Cutting v1.0.4 (patch). Since v1.0.3 all changes are fixes or additive input options -- no breaking changes: #11 fix(compare): prefer newest per-generation dir; skip baseline gen output in warm-cache #10 fix(cache): warm assert-ai's artifact cache from the baseline so paired McNemar can reach PASS #9 fix(baseline): anchor _find_run_dir on suite.json for nested layouts #8 feat(baseline): event-aware default for baseline-branch #7 feat(gate): add run-timeout-minutes input to cap eval-step wall clock #6 feat(install): add assert-ai-ref and assert-ai-repo inputs for git installs Plus the v1.0.0-rc1 hardcode fix in the previous commit. tests/test_action_version.py will fail against local tags until v1.0.4 is tagged from this commit; that is expected per docs/release-procedure.md (bump then tag). --- scripts/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_version.py b/scripts/_version.py index 3fc79d8..6a60822 100644 --- a/scripts/_version.py +++ b/scripts/_version.py @@ -10,4 +10,4 @@ tests/test_action_version.py fails if the two consumers ever disagree again. """ -ACTION_VERSION = "v1.0.3" +ACTION_VERSION = "v1.0.4"