RUL-009 — Never run tests without live observation
Ruling
"do not run tests without it — only by force" (verbatim, 2026-07-10). Every pytest/suite-runner invocation must carry the live-observer plugin and run in the background, then be attached to via scripts/observe_pytest.py — never fire-and-wait on a batched run.
Evidence
- Project memory
feedback-force-test-observation: enforced by a deny-hook with "NO escape hatch by design". - Global memory
feedback-observe-tests-live: batched pytest hides progress/hangs/failures until the exit code; the live observer (built session 201, commit 8215fe22) exists precisely to watch runs while they execute.
Enforcement
- hook .claude/hooks/force-test-observation.sh
Verification
.claude/hooks/force-test-observation.sh (PreToolUse Bash guard, registered in .claude/settings.json) denies (1) a direct pytest invocation missing -p orchestrata_ultimate.core.threading.pytest_live_observer (exempting the suite runners, which inject it themselves) and (2) any test invocation launched in the foreground (run_in_background != true).