computedriven computedriven/docs/r09-evidence-gate-brief-amendment-3.md
Written by the supervising Mac session, which owns the brief, BEFORE the follow-up turn. It adds to docs/r09-evidence-gate-brief.md (sha256 260038bc…, unchanged) and wins wherev…

The R0.9 evidence gate: brief AMENDMENT 3 (R130 option b), after Codex's review 1

Written by the supervising Mac session, which owns the brief, BEFORE the follow-up turn. It adds to docs/r09-evidence-gate-brief.md (sha256 260038bc…, unchanged) and wins wherever the two differ.

Ruling on containment (Codex review 1, finding 1)

The static gates stay in-process (runpy), and no subprocess stays the rule. The gate's subject is Super's review runner, whose sandbox is the containment: a read-only snapshot of tracked files, no network, and a tmpfs home. The runner's timeout is the time bound. The three static gates import only re, sys and pathlib, and they write nothing, start nothing, set no signal handler, change no directory and replace no stream (measured 2026-10-02). The gate's own duty is to leave the interpreter as it found it between gates, and to fail closed when it cannot.

Added and clarified laws

  • G0, the reference is the pinned reference (new). The SHA-256 of lab/r09close/evidence-gate-reference.json must equal

b8c6abb2f9eb1900e5604cf8b9426c9af7da580685c9c3851fd7964737ac4002. The gate holds this value as a constant. A missing, unreadable or different reference is G0 FAIL. G1–G4 are still evaluated after a G0 failure, wherever the reference can be parsed.

  • The repository root. If the gate cannot make the repository root (the directory above tools/) its working directory,

EVERY law (G0–G4) FAILs. No input may be read relative to any other directory.

  • G4, exactly these three. The reference's static_gates must be exactly tools/rendezvous_boundary_gate.py,

tools/nodeid_map_guard.py and tools/r09_accounting_gate.py, in that order. A shorter, longer or different list is G4 FAIL, before anything runs.

  • G4 restoration. Around each static gate, the gate restores sys.argv, sys.path, sys.stdout, sys.stderr, the

working directory, and sys.modules (removing every module the static gate added). If any of these cannot be restored, that is G4 FAIL, naming what could not be restored. Nothing is silently passed over.

  • G3's context (unchanged, stated). G3 is judged on the runner's snapshot of tracked files. On a working tree that holds

untracked build output inside a frozen crate, G3 fails by design, and it must not be weakened to ignore such files.

  • G5, exact.

  • Each of G0, G1, G2, G3 and G4 prints exactly one line, G<n> ok … or G<n> FAIL …, in that order.

  • Then exactly one of EVIDENCE GATE HELD (exit status exactly 0) or EVIDENCE GATE BROKEN: followed by the failed laws

in order, separated by single spaces (exit status exactly 1).

  • Unchanged: G1–G3's definitions, every constraint in the brief, and the two input files.

Open in the interactive atlas