Jeffy Loop 1.7.0
Three gates that were prose, or were shell that could not fire, become shell that can. Every item here was found by auditing the engine against its own eval corpus rather than by using it.
Breaking. Evaluator: unavailable no longer converges a run. A session that cannot spawn the adversarial sub-agent records the reason and ends blocked; the declaration waits for a session where the gate can actually run. One receipt in the corpus converged under the old fallback and says so - that receipt is why the escape is closed.
The evaluator gate leaves an artifact. Before returning any verdict the sub-agent writes .jeffy/evaluator/<run-id>.md - every command it ran, each command's real exit status - and the Stop hook refuses a PASS whose artifact is missing, empty, uncommitted, or older than the commit the Converged line certifies. Who wrote the file cannot be proven in shell and the docs say so plainly; what changes is the price of a false PASS, from eleven typed characters to a fabricated forensic record the repository keeps.
The stall gate can actually fire now. It used to ask whether HEAD had moved - but the engine commits every iteration, so a gate that watched HEAD watched itself, and both strikes were unreachable in every git project. Progress is now a path moved outside the loop's own memory, with the convergence-sequence iterations exempt and that exemption capped. Both tree gates also now work in a project below the repository root.
The +2 closing extension has exactly one legal convergence shape, enforced. The clean audit a declaration cites must predate the window; an audit run inside it ends the run out of budget before any promise is read. Prompt prose alone had failed twice.
Validator grew from 125 to 165 behavioural checks per CI leg. Two independent adversarial review passes over the new gates found 27 defects between them before anything shipped; the eleven worth reading are in the commit messages. First production arc (a four-run convergence on a private repo) exercised every new gate live - including one lesson promoted straight into the prompt: a PASS with observations declares, and the observations travel to the next run.
Full details in the commit history. Upgrade: git pull, then re-run the installer.