v0.8.0
forge v0.8.0 tightens the env-drift gate, sharpens the docs, and removes dead code — a correctness-and-honesty release.
Changed
env_scandetects the env reads it was silently missing. The drift scan now recognisesos.environ.pop(...)andos.environ.setdefault(...)(both read the variable, just like.get()), and captures variable names in any case rather thanUPPER_CASEonly. Environment variables are case-sensitive on POSIX, so a read likeos.getenv("debug_mode")is real config that onboarding must document — matching only[A-Z…]quietly dropped every lower/mixed-case read on the floor. The drift check compares names verbatim, the way the OS resolves them (pydantic-settings stays case-folded, since it resolves env vars case-insensitively). This makes the/forge:auditenv check and the Stop gate's drift check catch undocumented configuration they previously let through.
Removed
lib/state.clear_dirty— dead code with no caller (record_passclears the dirty set inline). No command, hook, or documented behaviour referenced it.
Documentation
- README now states plainly that only two agents are evidence-bound —
doc-sync-auditorandreference-auditormust cite afile:linefor every finding — whilepython-quality-auditor,doc-gap-scanner, andpython-test-authorare advisory/generative. - README's Stop gate description now says when it fires (turn-end), what it runs (format/lint whole-tree, mypy scoped to changed files and skipped when nothing is dirty, env drift — never the test suite), and that failures are fed back rather than walling off.
docs/state-schema.mddocuments thatdirty_pyclears only on a greencheck, so it intentionally accumulates pastaudit/reviewpasses./forge:docsreport header no longer looks like a subcommand;/forge:releasegives the concrete command for listing commits since the last tag; thelib/layout list now includesstatus(caught by the doc-sync auditor during this release).
Internal
- Closed branch-coverage gaps in
lib/cmdscan(91%→98%) andlib/state(89%→96%); suite total 94%→96%, 272 tests.
Full changelog: v0.7.0...v0.8.0