# H3 — typed post-registration blocked primary — labelled driver harness

Before [701e13c](https://git.cafe/pingdotgg/t3code/commit/701e13cebb040d8433cd9aefb803ddd0d58c41d6); after [37441e9](https://git.cafe/pingdotgg/t3code/commit/37441e905194b062345c76d81caacd00d77ef5e5).

Environment: Linux x86_64 (fs-33); Chromium 148.0.7778.96 / Playwright headless shell build1223; no device emulation; DPR1; zoom/font scale100%; dark; prefers-reduced-motion: reduce; full viewport1440×900 except W6 390×844. Actual Electron44.10.0 under headless-desktop/Xvfb, --no-sandbox --disable-gpu, ImageMagick import, measured renderer1440×900/DPR1. Paired sides share synthetic data, scroll position and rendered clock within each run. Retained web clock20:00 UTC, desktop22:19 UTC; round2 rendered clock00:00 UTC, native Date.now/timers for grace/backoff. This row is1440×900.

LABELLED DRIVER-BOUNDARY HARNESS: real pinned app primary is discovered/registered, then a Vite response hook injects typed ConnectionBlockedError(reason permission, hop server) before resolver.prepare. Actual supervisor/catalog/presentation/diagnosis/composer banner are unchanged. It is not a real server authorization denial. False startup: base parks offline; head reaches blocked/unknown and shows server permission diagnosis. Set fault false, click real Reconnect: head connects, base remains offline. Both blocked and recovered whole-app scenes captured.

Steps and UTC checkpoints (relative seconds from each side’s recording start; a dash means state-only capture):

| Side | UTC | t(s) | Action/state checkpoint |
|---|---|---:|---|
| before | 2026-11-03T00:10:41.412Z | 0.00 | H3-short-labelled-harness-video-start  |
| before | 2026-11-03T00:10:48.241Z | 6.83 | H3-short-labelled-permission-blocked PrimaryConnectionTarget:offline |
| before | 2026-11-03T00:10:49.919Z | 8.51 | settled-still H3-short-blocked  |
| before | 2026-11-03T00:10:49.920Z | 8.51 | H3-short-fault-fixed  |
| before | 2026-11-03T00:10:50.006Z | 8.59 | H3-short-Reconnect-clicked  |
| before | 2026-11-03T00:10:53.017Z | 11.61 | H3-short-after-Reconnect PrimaryConnectionTarget:offline |
| before | 2026-11-03T00:10:53.893Z | 12.48 | settled-still H3-short-recovered  |
| before | 2026-11-03T00:10:54.309Z | 12.90 | H3-short-labelled-harness-video-stop  |
| after | 2026-11-03T00:11:01.757Z | 0.00 | H3-short-labelled-harness-video-start  |
| after | 2026-11-03T00:11:09.007Z | 7.25 | H3-short-labelled-permission-blocked PrimaryConnectionTarget:blocked |
| after | 2026-11-03T00:11:11.565Z | 9.81 | settled-still H3-short-blocked  |
| after | 2026-11-03T00:11:11.566Z | 9.81 | H3-short-fault-fixed  |
| after | 2026-11-03T00:11:11.821Z | 10.06 | H3-short-Reconnect-clicked  |
| after | 2026-11-03T00:11:13.177Z | 11.42 | H3-short-after-Reconnect PrimaryConnectionTarget:connected |
| after | 2026-11-03T00:11:15.036Z | 13.28 | settled-still H3-short-recovered  |
| after | 2026-11-03T00:11:15.577Z | 13.82 | H3-short-labelled-harness-video-stop  |

Recordings, with the steps/timestamps above: before [H3-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c2ab38ea1687e24c/H3-before.mp4); after [H3-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/56af7aaeebe80f69/H3-after.mp4).

| Checkpoint | Before | After | Diff0 | DiffT16 |
|---|---|---|---|---|
| H3-blocked | ![H3-blocked-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a9bcfd9721c3468/H3-blocked-before.png)<br>[701e13c](https://git.cafe/pingdotgg/t3code/commit/701e13cebb040d8433cd9aefb803ddd0d58c41d6) | ![H3-blocked-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/13b896a11a9ef9be/H3-blocked-after.png)<br>[37441e9](https://git.cafe/pingdotgg/t3code/commit/37441e905194b062345c76d81caacd00d77ef5e5) | ![H3-blocked-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8a90a5942c52209/H3-blocked-diff0.png)<br>[701e13c](https://git.cafe/pingdotgg/t3code/commit/701e13cebb040d8433cd9aefb803ddd0d58c41d6) → [37441e9](https://git.cafe/pingdotgg/t3code/commit/37441e905194b062345c76d81caacd00d77ef5e5) | ![H3-blocked-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b43f194262a8eddb/H3-blocked-diff16.png)<br>[701e13c](https://git.cafe/pingdotgg/t3code/commit/701e13cebb040d8433cd9aefb803ddd0d58c41d6) → [37441e9](https://git.cafe/pingdotgg/t3code/commit/37441e905194b062345c76d81caacd00d77ef5e5) |
| H3-recovered | ![H3-recovered-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/63539ddd1bbadbac/H3-recovered-before.png)<br>[701e13c](https://git.cafe/pingdotgg/t3code/commit/701e13cebb040d8433cd9aefb803ddd0d58c41d6) | ![H3-recovered-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c0c0eaa64cf3b6fc/H3-recovered-after.png)<br>[37441e9](https://git.cafe/pingdotgg/t3code/commit/37441e905194b062345c76d81caacd00d77ef5e5) | ![H3-recovered-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/16a032a2beea6add/H3-recovered-diff0.png)<br>[701e13c](https://git.cafe/pingdotgg/t3code/commit/701e13cebb040d8433cd9aefb803ddd0d58c41d6) → [37441e9](https://git.cafe/pingdotgg/t3code/commit/37441e905194b062345c76d81caacd00d77ef5e5) | ![H3-recovered-diff16.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95104a5c93cdeddf/H3-recovered-diff16.png)<br>[701e13c](https://git.cafe/pingdotgg/t3code/commit/701e13cebb040d8433cd9aefb803ddd0d58c41d6) → [37441e9](https://git.cafe/pingdotgg/t3code/commit/37441e905194b062345c76d81caacd00d77ef5e5) |

Before every selected still: fonts and network idle, reduced motion where supported, then two byte-identical screenshots500ms apart. All selected stills/diffs were opened and recordings skimmed. Diff0 amplifies every nonzero max-RGB delta (including one-level changes) in magenta; DiffT16 uses delta>16/255; unchanged after pixels dimmed to20%. Comparisons are within each row/pair, not across round1/round2 fixture variants. Transient splash/sync frames in recordings are actual startup transitions; selected stills exclude them.

Protocol/state transcript: [web-protocol-r2.jsonl](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bf1fdba4db4934f3/web-protocol-r2.jsonl).

Reproduction: [runbook-r2.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/87a66f49edaafd9e/runbook-r2.md); [capture-scripts-r1.tar.gz](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/35d67210cb0f10ea/capture-scripts-r1.tar.gz); [capture-scripts-r2.tar.gz](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e4dbccb05066738/capture-scripts-r2.tar.gz).
