Skip to main content

Updates

forge verify --deep now reports a four-state result. The multi-lens consensus run no longer collapses to a binary pass/fail. You’ll see one of PASS, FAIL, INCOMPLETE, or NOT_CONFIGURED, so a stalled lens or an unconfigured repo can’t quietly read as green. Only PASS counts as verified, and PASS now also requires the underlying forge verify tests status to be PASS — a green deep run can never outrun a red base run.See Quality commands and Verification gates.Completion gate requires test evidence for code changes. For any session that touched source code, the Stop-path completion gate no longer accepts a forge handoff snapshot on its own. You’ll need either a test file in the session’s diff or a fresh passing forge verify against the current changes. Doc-only, config-only, and other non-code sessions are unaffected.When the gate blocks, the repair checklist now leads with forge verify so the evidence gets recorded before the handoff snapshot. See Cross-session memory.Clearer positioning for hooks and guardrails. Forge’s automatic hooks are Claude Code-specific, and — like every other advisory signal — they’re off-by-default until you opt in with FORGE_ENFORCE=1. The guardrails are defence in depth, not a security sandbox. Nothing about the runtime changed; the docs and CLI copy just match what the tool actually does. See CLI overview and the Pre-action gate.

Fixes

Secret redactor now preserves structured tool output. Built-in tools like Bash, Read, and Grep return structured objects, and the previous redactor stringified those responses — which meant Claude Code silently discarded the rewrite and the unredacted output stayed visible. The redactor now walks the response recursively: strings are scrubbed in place, arrays and objects keep their keys and shape, and non-string leaves pass through untouched. Plain-string responses redact byte-identically to before, and a response with nothing to redact emits no rewrite at all.FORGE_GUARD_STRICT=1 exit status is no longer swallowed. The redactor’s shell wrapper used to force a clean exit, hiding the strict-mode failure code from Claude Code so the DEGRADED signal never surfaced. The child’s exit status is now propagated end-to-end, so strict mode’s stderr feedback actually reaches you. Note that this hook runs after the tool has already executed — strict mode makes redactor degradation loud, but blocking a call before it runs is the job of the Pre-action gate.