Skip to content

v0.9.1

Choose a tag to compare

@prabhuakshay prabhuakshay released this 25 Jun 08:13

A correctness-and-clarity patch.

Fixed

  • Concurrent /forge:decide runs can no longer collide on an ADR number. Number allocation was the one state mutation that ran without the .forge lock, so two racing decisions could both claim 0004 — duplicate ADRs and an ambiguous directive back-reference. Allocation and the ADR/directive/index writes now run together under state.locked via a new decisions.record_decision, and the ADR is written atomically (temp + os.replace) and first, so a crash mid-write can at worst orphan an ADR — never leave a directive pointing at a number that was never written.
  • The coverage-floor check no longer trips on a comment. Detection of whether a project sets its own floor is now section-scoped: fail_under only counts in [tool.coverage.report], --cov-fail-under only in [tool.pytest.ini_options], comments ignored.
  • The commit-time gate now measures coverage like the rest. forge's prek pytest hook ran without --cov; it now runs pytest -q --cov, matching the dev command and the in-session gate.

Changed

  • Clearer command guidance. /forge:build states the two --no-docs skip conditions as independent; /forge:init lists concrete type-detection markers instead of "from any existing files"; and the scaffolded CLAUDE.md now documents the scripts/check_env_sync.py guard that was already wired into pre-commit.

Full changelog: v0.9.0...v0.9.1