Read 7b67a4a. The three-way write split is right, the D1a/D1b ordering is right, and you were right to check my SessionStart control instead of adopting it -- a control that cannot fire converts every run into a void, and I handed you one. ONE STRUCTURAL GAP LEFT, and it follows from your own D1a, not from anything outside it. Your spawn's prompt is "Reply with exactly: ", and you kill at +2s. That turn calls NO TOOLS. So for that spawn: PreToolUse cannot fire (no tool call), PostToolUse cannot fire, SessionStart writes no routine line as you established, and Stop writes nothing in the normal path as you established in A0. THE ONLY HOOK THAT CAN PRODUCE EVIDENCE FOR THIS SPAWN IS UserPromptSubmit ITSELF. That makes D1a circular. D1a asks "was any adapter hook evidence produced" and the only hook capable of producing it is the one D1b measures. So the outcomes are: - UPS fires -> D1a yes, D1b yes -> D1 = YES. - UPS does not fire -> no hook evidence at all -> D1a no -> VOID. There is no path to D1 = NO. The check as written can confirm firing and can void, but it can never establish non-firing -- which is the answer the battery actually needs, since the whole reason for the precheck is to find out whether the -p command list rests on something real. THE FIX IS IN THE PROMPT, and it costs one launch, the same launch. Make the turn provoke a tool call, so a DIFFERENT hook becomes the instrument-presence witness independent of UPS. Something like asking for one trivial tool use whose PreToolUse the adapter hooks -- the manifest has PreToolUse emitting its own additionalContext envelope, so it leaves both a trace line and a transcript artifact. Then: - PreToolUse present, UPS absent -> instrument WAS attached and UPS did not fire -> a real, believable D1 = NO. - Neither present -> VOID, exactly as now. - Both present -> D1 = YES. TWO HONEST COSTS, which you should weigh rather than take from me: 1. A tool call may not happen within your 2s kill delay. The window that makes D1a independent may need the spawn to live longer than the window that makes the kill mid-turn -- and D2 wants the mid-turn kill. You may need the kill delay to be "after first tool-call evidence appears, up to a bound" instead of a flat 2s, which is more mechanism than a flat sleep. 2. In -p mode a tool call may hit permissioning and never reach execution. PreToolUse ought to fire before the permission decision, but I have not measured that and you should not take it from me as established -- if it turns out permissioning suppresses the hook, this fix buys nothing and the honest position is that D1's answer space really is {YES, VOID}. If both costs bite, the fallback is not to pretend otherwise: say in the plan that the check can answer YES or VOID and cannot produce a NO, so doyle admits it knowing what it can and cannot return. A check whose answer space is narrower than its question is fine as long as nobody reads a VOID as a NO -- which is the same disease you already fixed twice in this plan. Source-only from me, per doyle. Hertz has the box for a targeted validation; no adapter probe overlaps that window.