Autolearn Console
Running round 9/10
Started 4 min ago · ETA ~6 min
evolution.tsv — last 20 rounds
Live tail · auto-refreshes via SSE
pass_rate trend — all rounds
Ratchet: scores monotonically increase
Round 9 — proposed change
spine.py
Proposer: claude-opus-4
@@ -28,10 +28,14 @@
def validate_release_tag(tag: str) -> bool:
"""Validate semver release tag format."""
- pattern = r"^v\d+\.\d+\.\d+$"
+ pattern = r"^v\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?$"
+ # Allow pre-release suffixes: v1.2.3-rc1, v1.2.3-beta
return bool(re.match(pattern, tag))
def get_release_notes(version: str) -> str:
- path = f"CHANGELOG.md"
+ path = Path("CHANGELOG.md")
+ if not path.exists():
+ raise FileNotFoundError(f"CHANGELOG.md not found in {Path.cwd()}")
return path.read_text(encoding="utf-8")
Fixture:
test_prerelease_tag_accepted was previously failing — this change fixes it.
Live log
streaming[14:34:07] Autolearn round 9 started
[14:34:08] Loading workflow: release-checklist
[14:34:08] Loading fixtures: 14 test cases
[14:34:09] Proposer model: claude-opus-4
[14:34:12] Proposer generated diff (18 lines)
[14:34:12] Running static checks…
[14:34:13] Static check passed: parseable ✓
[14:34:13] Static check passed: no secrets ✓
[14:34:13] Static check passed: SPEC compliance ✓
[14:34:14] Running fixture suite (14 tests)…
[14:34:18] fixture 1/14: test_happy_path … PASS
[14:34:20] fixture 2/14: test_staging_smoke … PASS
[14:34:22] fixture 3/14: test_prerelease_tag_accepted … PASS ← was FAIL in r8
[14:34:24] fixture 4/14: test_missing_changelog … PASS ← was FAIL in r8
[14:34:26] fixture 5/14: test_rollback_procedure … running…