CLAUDE.md's Versioning section justifies the sync-version workflow committing straight to main with:
version bumps are mechanical; the PR round-trip adds no signal
Two problems:
- "Mechanical" is equated with "risk-free." A PR round-trip provides more than review signal — it runs required CI before merge. The bot commit bypasses that, so a malformed payload lands on
main unreviewed. The exception is fine; the accurate justification is "low risk, validated input, CI still runs post-merge," not "no signal."
workflow_dispatch accepts an arbitrary version: X.Y.Z input for manual/recovery runs, and neither the doc nor (apparently) the workflow mentions validating that the input is a well-formed semver string before it is written to VERSION and committed. A typo'd manual run would ship a broken version string straight to main.
Suggested fix: add semver-shape validation to sync-version.yml (reject and fail the run on a non-matching input) and reword the CLAUDE.md rationale.
CLAUDE.md's Versioning section justifies the sync-version workflow committing straight to
mainwith:Two problems:
mainunreviewed. The exception is fine; the accurate justification is "low risk, validated input, CI still runs post-merge," not "no signal."workflow_dispatchaccepts an arbitraryversion: X.Y.Zinput for manual/recovery runs, and neither the doc nor (apparently) the workflow mentions validating that the input is a well-formed semver string before it is written toVERSIONand committed. A typo'd manual run would ship a broken version string straight tomain.Suggested fix: add semver-shape validation to
sync-version.yml(reject and fail the run on a non-matching input) and reword the CLAUDE.md rationale.