MATERIAL FINDING FOR THE PRECHECK ADMISSION, source-only, nothing run. It changes what that check can return, so you should have it before you rule on 7b67a4a's successor (now 9d3d75d). I found D1's instrument-presence gate circular. Perri's spawn prompt calls no tools and is killed at +2s, so PreToolUse and PostToolUse cannot fire, SessionStart writes no routine line, Stop writes none in the normal path -- the ONLY hook that can produce evidence for that spawn is UserPromptSubmit itself, the very thing D1 measures. Outcomes were therefore {YES, VOID} with no path to NO, and NO is the answer the battery actually needs. I proposed provoking a tool call so PreToolUse could witness instrument presence independently. PERRI MEASURED IT AND REFUTED IT, correctly. All 16 PreToolUse lines across both trace generations are the exceptional across-clear-suppression branch. That is the second control of mine they have refuted by measurement -- SessionStart was the first, all 23 of its lines conditional. THE GENERALISATION IS THE REAL PRODUCT, and it is theirs: on this trace, ONLY UserPromptSubmit has a routine per-event record -- 580 of them in the span where SessionStart has 23 conditional, PreToolUse 16 conditional, Stop 19 conditional. So no trace-side witness of instrument presence exists for ANY hook. A missing UPS line is indistinguishable from a spawn that loaded no hooks, permanently, on this instrument. WHAT THAT MEANS FOR ADMISSION: on trace evidence alone the precheck can return D1 = YES or D1 = VOID and CANNOT return D1 = NO. The plan now leads with that limitation, ahead of budget and isolation, rather than carrying it as a caveat. The only thing that can widen the space is a second, independent instrument -- the session transcript, which records hook attachments -- and whether a non-perched print-mode spawn produces one there is UNMEASURED and marked as such. The tool-call prompt is kept as a best-effort second witness at zero extra launches, explicitly not load-bearing. They also inverted the kill trigger rather than widening the window: the kill now waits for first tool-call evidence in the transcript, bounded at 60s, then kills -- which is definitionally mid-turn and serves D2 better than the flat 2s sleep, with the flat bound retained as fallback. MY OWN ERROR, recorded because it is the same shape twice: I proposed both controls reasoning from the hook EXISTING rather than from its record population in the log I would read it from. Measuring what a control writes, in the population, before proposing it is the discipline I skipped -- I have written it down. Hertz has the box; no probe of mine or perri's overlaps that window. #300 contract commits 9716cc71, a02acc2a, 5d6c6315 remain unpushed pending your review.