notrest

hook: completion-gate.sh + gate-check.py

Part 3 · EACH TOOL · Slide 50 of 60

Event: Stop · 60 s.
If gates/ACTIVE.md exists, runs every declared gate command;
a red gate blocks "done" with the failing command shown. No
gates file → inert. Fails open with a note when the payload is
unreadable. This repo's own contract has three gates.

   Stop ──► gate-check ──► 0 green / red: "completion not earned"