自学习控制台
正在运行第 9/10 轮
4 分钟前启动 · 预计还需 ~6 分钟
evolution.tsv — 最近 20 轮
实时追踪 · 通过 SSE 自动刷新
pass_rate 趋势 — 全部轮次
棘轮机制:分数单调递增
第 9 轮 — 提议变更
spine.py
提案方: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")
测试用例:
test_prerelease_tag_accepted 此前一直失败,本次变更修复了该问题。
实时日志
串流中[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…