# Warroom run summary — blank-extension-page (2026-05-11)

**Verdict:** `validated` / high confidence
**Canonical doc:** `toby/incidents/2026-05-11-blank-extension-page.md`
**Status:** closed

## Dispatch trace

| Wave | Agent | Run id | Status | Output |
|---|---|---|---|---|
| 1a | toby-frontend-doctor | `6e2b3eb9-36bf-42d3-8de3-5afa48f4b167` | succeeded | Root cause at `Toby.tsx:304`; defers to backend |
| 1b | toby-backend-doctor | `083ec6d2-63e9-4c3e-b55e-a95301a4aa72` | succeeded | Refutes SW-boot-regression; backend innocent |
| 2 (coord) | toby-incident-coordinator | (this run) | — | Synthesised root cause + 3-layer FE fix |
| 3 | toby-incident-validator | `a28a3690-38d7-4ce9-a9c2-c6d436da1793` | succeeded | Validated, high confidence; 3 non-blocking follow-ups |

## Headline

- **Root cause:** `apps/extension/app/containers/Toby.tsx:304` returns null forever when `isUserHydrated` (added 2026-04-09 in `d68726b29`) never flips. `getUser()` at `state/accessors/user.tsx:45-50` is unbounded; Chrome's "extension context invalidated" state drops the `chrome.storage.local.get` callback on every extension auto-update.
- **Fix:** FE-only, defence-in-depth — bounded hydration promise (5s timeout, fail open), visible recovery screen after 8s ("Your tabs are safe. Tap to recover."), telemetry beacon.
- **Backend NOT implicated.** Prod-api SHA `4b0107858` unchanged since 2026-02-02; 0 5xx in last 24h. Earlier MV3-SW-boot-regression hypothesis (`388c1db4`) refuted.

## Coordination discipline

Every `spawn_agent_run` was paired with `wait_for_run`. Three children, three terminal-status waits, all `succeeded` before publication.
