← Commit history

pup-bridge-test: 11c the worker stall (port.json read with no deadline), its fingerprint, the winvm test, and gates on winvm

John Lauer ·a37672ed97 ·1mo ago ·parent 1b89e1f
1 file changed +21
dev-skills/pup-bridge-test/SKILL.md+21
@@ -171,6 +171,27 @@ you killed. The first cut of this proof "passed" on stale bookkeeping. Also run the boot half: with the lane dead and a session file on disk, restart pup and expect `reopening its other N tab(s)` and `Recovery complete. 1 session(s) active`, never `another caller`. +## 11c. The worker that goes quiet after a cold launch or an update (found and fixed 2026-09-15, 2.0.590)++Symptom: minutes after a cold open, or right after `bridge_install` asked the worker to reload in place,+every ext verb times out; with 2.0.589's standalone hello the log still shows `hello from the lane browser`+every 30 s with the right token while `/extcmd` is never hit. That combination is the fingerprint: the+service worker is alive and waking on its alarm; the DRAIN never reaches its fetch. Cause: `packagedPort()`+fetched the extension's own `port.json` with no deadline, memoized on success, so only a FRESH worker+instance ever read it, and that read hangs after a reload in place. Fix: a 2 s deadline, the last good lane+and port remembered in `chrome.storage.local`, and every poll step bounded (50 s). The earlier 2.0.574 hang+(a debugger capture that never settled) was the same class from a different call, which is why 2.0.589+also gave every command a deadline and made the busy guard unstickable.++**Test:** on the unattended VM (winvm; NEVER on John's laptop, the reload churn takes his windows), open a+window, `bridge_install` the next version, and read `pup_status.extensionLane.lastPollMsAgo` every 10 s for+two minutes: it must stay under ~1.5 s across the reload and `workerVersion` must flip. Then two cold opens+with a 60 s watch each. Measured 2.0.590: 120 s across the reload, every sample under 1.2 s.+**Diagnosis trap:** `connected` is computed from `/extcmd` polls, not hellos. Hellos with no polls is the+stall; no hellos at all is a dead lane (11b). Do not conflate them.+**Gates now run on winvm** (`tools/parity.py --target winvm`, `tools/ab-smoke.sh winvm`): they open+example.com windows, some on the CDP lane, and John saw every one of them on his laptop.+ ## 12. TORTURE (the "never crash" push, 2026-07-28) The full brutal load, with an INDEPENDENT monitor thread proving pup never goes frozen mid-storm. From thread `pup-monitor`, sample `pup_list_windows` every 3s for the whole run. From thread