What the previous candidates taught us
v2.4.0-rc.1 made refusals actionable. This candidate tightens the other half of that contract: the proof must stay bound to the candidate the operator is actually trying to deliver, even when the repository moves underneath it.
The changes remain within the 2.4.0 line. They harden negotiated review, delivery and recovery behavior without widening the public Go API or weakening fail-closed admission.
Pre-PR review now follows moving bases
A pre-PR review used to bind the candidate to the base tip. That made an unrelated base advance invalidate an otherwise unchanged candidate, and it left room for a reviewed diff to diverge from the merge result.
Pre-PR identity now binds to the merge base. Compatible base advances preserve the reviewed candidate, while malformed or unavailable proofs still fail closed. The bench corpus exercises both the moving-base transition and its typed denial diagnostics.
Reviewed subsets can ship safely
Delivery no longer requires the staged tree to be byte-for-byte identical to the full reviewed tree when the staged candidate is a monotonic subset of it. The proof checks the actual merge result and rejects unreviewed merge resolution, so narrowing a reviewed change is allowed without admitting new bytes.
Recovery exits are executable
Consecutive SDD rescope recovery now keeps its continuation delimiter-safe and bound to the exact published RC fixture. Compact-budget and post-remediation paths preserve their native contracts instead of sending the operator toward an impossible transition.
Provider defects no longer force reporting
The provider-defect handoff now offers three explicit outcomes: report and continue, continue without reporting, or stop. Both continuation paths reuse the provider-captured candidate-scoped decline invocation exactly once, validate its result and target, then re-enter through negotiated STATUS. Continuing never disables receipt-driven development.
Windows no longer needs a PowerShell ACL module
Managed-file permission handling on Windows depended on the optional PowerShell ACL module being present. Where it was absent the check failed for reasons unrelated to the property under test. Permissions are now asserted without that dependency, and ACL inheritance provenance is ignored rather than compared, because it varies by host policy and never described the guarantee. Review snapshot repository templates are stabilized alongside it.
Also in this candidate
The minimum TUI layout keeps its selected action visible on short viewports, atomic one-line corrections are admitted, transient empty Engram PID files get a bounded retry, linked-worktree handoff paths are canonicalized on Windows, and stable/prerelease channel documentation is current.
Install
go install github.com/gentleman-programming/gentle-ai/v2/cmd/gentle-ai@v2.4.0-rc.3Or download a binary below and verify it against SHA256SUMS.txt.
After upgrading, run gentle-ai sync. Managed assets are version-bound to the binary.
A note on v2.4.0-rc.2
v2.4.0-rc.2 was published without binaries and could not be repaired: its release is immutable, so assets can never be attached after publication, and deleting it burned the tag name permanently. This candidate carries everything rc.2 contained plus the Windows work above. Use this one; rc.2 has no artifacts and will not get any.
Known open
Negotiated recovery can still print --agent <your-runtime-identity> when the runtime is unbound. Supplying a logical orchestrator role there fails closed correctly but strands the workflow; #2885 tracks replacing that free-form guess with provider-owned recovery.