# H03: Harness: delayed native supplier, fallback, recovery

Before [e9236274a3](https://git.cafe/pingdotgg/t3code/commit/e9236274a3a6e0c731a7df4092db1e686f039068); after [63e44670dd](https://git.cafe/pingdotgg/t3code/commit/63e44670dd1d222cf63619d5e02415f2a9fd3bc2).

Before run: `/tmp/lead-24640-r1/capture/2026-10-27T14-33-22.378Z-before-H03`. After run: `/tmp/lead-24640-r1/capture/2026-10-27T14-33-26.204Z-after-H03`.

Environment: fs-31 Linux x86_64, Node v26.12.1; real TerminalManager harness, controlled runner/fake PTY/TestClock; no server, RPC, or database. Viewport/theme/DPR/font scaling=N/A.

Labelled injected processTable Effect harness, not the native client. The 2s supplier delay fits within the shipped native client's 5s request limit, but this harness bypasses that client. Only the 500ms fallback duration enters the floor; native recovery resets the next failure gap to 2s. Native closeIdle success itself takes 2s rather than the fallback-only 1s budget.

Wrapper timings exclude Python startup and stream drain. Acquisition timings use the real terminal.posixProcessTableSnapshot trace span. An idle gap is END→next START, never start-to-start. Before delay=min(1000×2^failureCount,60000)ms; after delay=min(max(1000×2^failureCount,4×measured fallback acquisition),60000)ms. Native-failed production ticks increment failureCount even when fallback succeeds; successful absent-supplier harness ticks reset it. Native requests and terminal processing can add overhead.

| Event | Before ([e9236274a3](https://git.cafe/pingdotgg/t3code/commit/e9236274a3a6e0c731a7df4092db1e686f039068)) | After ([63e44670dd](https://git.cafe/pingdotgg/t3code/commit/63e44670dd1d222cf63619d5e02415f2a9fd3bc2)) | Δ |
|---|---|---|---|
| Harness event 1 | `{"kind":"pty-spawn","pid":9000,"integer":true}` | `{"kind":"pty-spawn","pid":9000,"integer":true}` | Same native exclusion and reset; budget 1s→15s |
| Harness event 2 | `{"kind":"event","phase":"native-slow-success","test_ms":0,"event":{"type":"started","threadId":"harness-thread","terminalId":"native","sequence":1,"snapshot":{"threadId":"harness-thread","terminalId":"native","cwd":"/tmp/lead-24640-r1/capture/2026-10-27T14-33-22.378Z-before-H03","worktreePath":null,"status":"running","pid":9000,"history":"","exitCode":null,"exitSignal":null,"label":"native","updatedAt":"2026-10-27T14:33:22.456Z","sequence":1}}}` | `{"kind":"event","phase":"native-slow-success","test_ms":0,"event":{"type":"started","threadId":"harness-thread","terminalId":"native","sequence":1,"snapshot":{"threadId":"harness-thread","terminalId":"native","cwd":"/tmp/lead-24640-r1/capture/2026-10-27T14-33-26.204Z-after-H03","worktreePath":null,"status":"running","pid":9000,"history":"","exitCode":null,"exitSignal":null,"label":"native","updatedAt":"2026-10-27T14:33:26.242Z","sequence":1}}}` | See event values |
| Harness event 3 | `{"kind":"native-start","phase":"native-slow-success","test_ms":1000}` | `{"kind":"native-start","phase":"native-slow-success","test_ms":1000}` | See event values |
| Harness event 4 | `{"kind":"native-end","phase":"native-slow-success","test_ms":3000}` | `{"kind":"native-end","phase":"native-slow-success","test_ms":3000}` | See event values |
| Harness event 5 | `{"kind":"event","phase":"native-slow-success","test_ms":3000,"event":{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}}` | `{"kind":"event","phase":"native-slow-success","test_ms":3000,"event":{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}}` | See event values |
| Harness event 6 | `{"kind":"native-start","phase":"native-slow-success","test_ms":4000}` | `{"kind":"native-start","phase":"native-slow-success","test_ms":4000}` | See event values |
| Harness event 7 | `{"kind":"native-end","phase":"native-slow-success","test_ms":6000}` | `{"kind":"native-end","phase":"native-slow-success","test_ms":6000}` | See event values |
| Harness event 8 | `{"kind":"native-delay-excluded","phase":"native-slow-success","test_ms":6000}` | `{"kind":"native-delay-excluded","phase":"native-slow-success","test_ms":6000}` | See event values |
| Harness event 9 | `{"kind":"counts","phase":"native-slow-success","query":0,"nativeCalls":2,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | `{"kind":"counts","phase":"native-slow-success","query":0,"nativeCalls":2,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | See event values |
| Harness event 10 | `{"kind":"native-start","phase":"native-failure-fallback-500ms","test_ms":7000}` | `{"kind":"native-start","phase":"native-failure-fallback-500ms","test_ms":7000}` | See event values |
| Harness event 11 | `{"kind":"native-end","phase":"native-failure-fallback-500ms","test_ms":9000}` | `{"kind":"native-end","phase":"native-failure-fallback-500ms","test_ms":9000}` | See event values |
| Harness event 12 | `{"kind":"query-start","phase":"native-failure-fallback-500ms","q":1,"test_ms":9000,"mode":"valid","delay":500,"budget":"1 second"}` | `{"kind":"query-start","phase":"native-failure-fallback-500ms","q":1,"test_ms":9000,"mode":"valid","delay":500,"budget":"15 seconds"}` | See event values |
| Harness event 13 | `{"kind":"query-end","phase":"native-failure-fallback-500ms","q":1,"test_ms":9500,"elapsed":500,"outcome":"success"}` | `{"kind":"query-end","phase":"native-failure-fallback-500ms","q":1,"test_ms":9500,"elapsed":500,"outcome":"success"}` | See event values |
| Harness event 14 | `{"kind":"native-start","phase":"native-failure-fallback-500ms","test_ms":11500}` | `{"kind":"native-start","phase":"native-failure-fallback-500ms","test_ms":11500}` | See event values |
| Harness event 15 | `{"kind":"native-end","phase":"native-failure-fallback-500ms","test_ms":13500}` | `{"kind":"native-end","phase":"native-failure-fallback-500ms","test_ms":13500}` | See event values |
| Harness event 16 | `{"kind":"query-start","phase":"native-failure-fallback-500ms","q":2,"test_ms":13500,"mode":"valid","delay":500,"budget":"1 second"}` | `{"kind":"query-start","phase":"native-failure-fallback-500ms","q":2,"test_ms":13500,"mode":"valid","delay":500,"budget":"15 seconds"}` | See event values |
| Harness event 17 | `{"kind":"query-end","phase":"native-failure-fallback-500ms","q":2,"test_ms":14000,"elapsed":500,"outcome":"success"}` | `{"kind":"query-end","phase":"native-failure-fallback-500ms","q":2,"test_ms":14000,"elapsed":500,"outcome":"success"}` | See event values |
| Harness event 18 | `{"kind":"native-failure-fallback","phase":"native-failure-fallback-500ms","test_ms":14000}` | `{"kind":"native-failure-fallback","phase":"native-failure-fallback-500ms","test_ms":14000}` | See event values |
| Harness event 19 | `{"kind":"counts","phase":"native-failure-fallback-500ms","query":2,"nativeCalls":4,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | `{"kind":"counts","phase":"native-failure-fallback-500ms","query":2,"nativeCalls":4,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | See event values |
| Harness event 20 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":18000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":18000}` | See event values |
| Harness event 21 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":18000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":18000}` | See event values |
| Harness event 22 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":19000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":19000}` | See event values |
| Harness event 23 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":19000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":19000}` | See event values |
| Harness event 24 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":20000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":20000}` | See event values |
| Harness event 25 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":20000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":20000}` | See event values |
| Harness event 26 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":21000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":21000}` | See event values |
| Harness event 27 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":21000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":21000}` | See event values |
| Harness event 28 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":22000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":22000}` | See event values |
| Harness event 29 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":22000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":22000}` | See event values |
| Harness event 30 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":23000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":23000}` | See event values |
| Harness event 31 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":23000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":23000}` | See event values |
| Harness event 32 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":24000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":24000}` | See event values |
| Harness event 33 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":24000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":24000}` | See event values |
| Harness event 34 | `{"kind":"native-recovered","phase":"native-recovery-reset","test_ms":24000}` | `{"kind":"native-recovered","phase":"native-recovery-reset","test_ms":24000}` | See event values |
| Harness event 35 | `{"kind":"counts","phase":"native-recovery-reset","query":2,"nativeCalls":11,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | `{"kind":"counts","phase":"native-recovery-reset","query":2,"nativeCalls":11,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | See event values |
| Harness event 36 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":25000}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":25000}` | See event values |
| Harness event 37 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":25000}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":25000}` | See event values |
| Harness event 38 | `{"kind":"query-start","phase":"native-recovery-reset","q":3,"test_ms":25000,"mode":"valid","delay":500,"budget":"1 second"}` | `{"kind":"query-start","phase":"native-recovery-reset","q":3,"test_ms":25000,"mode":"valid","delay":500,"budget":"15 seconds"}` | See event values |
| Harness event 39 | `{"kind":"query-end","phase":"native-recovery-reset","q":3,"test_ms":25500,"elapsed":500,"outcome":"success"}` | `{"kind":"query-end","phase":"native-recovery-reset","q":3,"test_ms":25500,"elapsed":500,"outcome":"success"}` | See event values |
| Harness event 40 | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":27500}` | `{"kind":"native-start","phase":"native-recovery-reset","test_ms":27500}` | See event values |
| Harness event 41 | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":27500}` | `{"kind":"native-end","phase":"native-recovery-reset","test_ms":27500}` | See event values |
| Harness event 42 | `{"kind":"query-start","phase":"native-recovery-reset","q":4,"test_ms":27500,"mode":"valid","delay":500,"budget":"1 second"}` | `{"kind":"query-start","phase":"native-recovery-reset","q":4,"test_ms":27500,"mode":"valid","delay":500,"budget":"15 seconds"}` | See event values |
| Harness event 43 | `{"kind":"query-end","phase":"native-recovery-reset","q":4,"test_ms":28000,"elapsed":500,"outcome":"success"}` | `{"kind":"query-end","phase":"native-recovery-reset","q":4,"test_ms":28000,"elapsed":500,"outcome":"success"}` | See event values |
| Harness event 44 | `{"kind":"failure-after-recovery","phase":"native-recovery-reset","test_ms":28000}` | `{"kind":"failure-after-recovery","phase":"native-recovery-reset","test_ms":28000}` | See event values |
| Harness event 45 | `{"kind":"counts","phase":"native-recovery-reset","query":4,"nativeCalls":13,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | `{"kind":"counts","phase":"native-recovery-reset","query":4,"nativeCalls":13,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | See event values |
| Harness event 46 | `{"kind":"native-start","phase":"native-closeIdle-not-fallback-budget","test_ms":28000}` | `{"kind":"native-start","phase":"native-closeIdle-not-fallback-budget","test_ms":28000}` | See event values |
| Harness event 47 | `{"kind":"native-end","phase":"native-closeIdle-not-fallback-budget","test_ms":30000}` | `{"kind":"native-end","phase":"native-closeIdle-not-fallback-budget","test_ms":30000}` | See event values |
| Harness event 48 | `{"kind":"native-closeIdle-complete","phase":"native-closeIdle-not-fallback-budget","test_ms":30000}` | `{"kind":"native-closeIdle-complete","phase":"native-closeIdle-not-fallback-budget","test_ms":30000}` | See event values |
| Harness event 49 | `{"kind":"counts","phase":"native-closeIdle-not-fallback-budget","query":4,"nativeCalls":14,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | `{"kind":"counts","phase":"native-closeIdle-not-fallback-budget","query":4,"nativeCalls":14,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"}]}` | See event values |
| Harness event 50 | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":32000}` | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":32000}` | See event values |
| Harness event 51 | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":32000}` | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":32000}` | See event values |
| Harness event 52 | `{"kind":"event","phase":"native-recovery-quiet-eligibility","test_ms":32000,"event":{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}}` | `{"kind":"event","phase":"native-recovery-quiet-eligibility","test_ms":32000,"event":{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}}` | See event values |
| Harness event 53 | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":33000}` | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":33000}` | See event values |
| Harness event 54 | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":33000}` | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":33000}` | See event values |
| Harness event 55 | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":63000}` | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":63000}` | See event values |
| Harness event 56 | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":63000}` | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":63000}` | See event values |
| Harness event 57 | `{"kind":"quiet-native-refresh","phase":"native-recovery-quiet-eligibility","test_ms":64000}` | `{"kind":"quiet-native-refresh","phase":"native-recovery-quiet-eligibility","test_ms":64000}` | See event values |
| Harness event 58 | `{"kind":"counts","phase":"native-recovery-quiet-eligibility","query":4,"nativeCalls":17,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"},{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}]}` | `{"kind":"counts","phase":"native-recovery-quiet-eligibility","query":4,"nativeCalls":17,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"},{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}]}` | See event values |
| Harness event 59 | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | `{"kind":"native-start","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | See event values |
| Harness event 60 | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | `{"kind":"native-end","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | See event values |
| Harness event 61 | `{"kind":"quiet-input-wake","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | `{"kind":"quiet-input-wake","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | See event values |
| Harness event 62 | `{"kind":"counts","phase":"native-recovery-quiet-eligibility","query":4,"nativeCalls":18,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"},{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}]}` | `{"kind":"counts","phase":"native-recovery-quiet-eligibility","query":4,"nativeCalls":18,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"},{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}]}` | See event values |
| Harness event 63 | `{"kind":"pty-kill","pid":9000,"signal":"SIGTERM"}` | `{"kind":"pty-kill","pid":9000,"signal":"SIGTERM"}` | See event values |
| Harness event 64 | `{"kind":"pty-kill","pid":9000,"signal":"SIGKILL"}` | `{"kind":"pty-kill","pid":9000,"signal":"SIGKILL"}` | See event values |
| Harness event 65 | `{"kind":"event","phase":"native-recovery-quiet-eligibility","test_ms":65000,"event":{"type":"closed","threadId":"harness-thread","terminalId":"native","sequence":4}}` | `{"kind":"event","phase":"native-recovery-quiet-eligibility","test_ms":65000,"event":{"type":"closed","threadId":"harness-thread","terminalId":"native","sequence":4}}` | See event values |
| Harness event 66 | `{"kind":"cleanup","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | `{"kind":"cleanup","phase":"native-recovery-quiet-eligibility","test_ms":65000}` | See event values |
| Harness event 67 | `{"kind":"counts","phase":"native-recovery-quiet-eligibility","query":4,"nativeCalls":18,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"},{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}]}` | `{"kind":"counts","phase":"native-recovery-quiet-eligibility","query":4,"nativeCalls":18,"customCalls":0,"activities":[{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":2,"hasRunningSubprocess":true,"label":"fixture-child"},{"type":"activity","threadId":"harness-thread","terminalId":"native","sequence":3,"hasRunningSubprocess":false,"label":"native"}]}` | See event values |
| Harness event 68 | `{"kind":"complete"}` | `{"kind":"complete"}` | See event values |

## Behaviour difference
Same native exclusion and reset; budget 1s→15s
Raw UTC/monotonic RPC, query, signal, metadata, warnings, and cleanup records are in the paired transcripts. PID, randomly generated script terminal suffix, database path, UTC, sequence batching, and scheduler jitter naturally vary between fresh runs. No visual comparison is applicable.