# Issue 24096 frozen-head evidence

Executed 2026-10-25 06:36–06:57 UTC on fs-29, Linux, within the requested 30-minute budget. Evidence only; no source edits, forge writes, PR, merge, or watch. Worktree `/home/ubuntu/wt/issue-24096`, branch `fix/issue-24096` remained clean.

Head [fa25715dd2](https://git.cafe/pingdotgg/t3code/commit/fa25715dd22f36b375cb5a4fb4613b6d17d8ac6e), base [c79ef8c454](https://git.cafe/pingdotgg/t3code/commit/c79ef8c454e1268ff79da5a9dcb74572e86f7861). The accepted base artifacts come from the preceding reproduction handoff; this step started only the frozen proposed build. Actual Codex gpt-6.1-sol parent/child tasks, actual native async and blocking input tools, and actual T3 parent responses were used. No fake wire summaries, event injection, or database writes.

## Observed result

| Changed path / control | Actual evidence and result |
|---|---|
| Ordinary async child, running/queued parent | Request created 06:38:18.668, persisted sequence554. Actual summary `kind=user_input, blocking=false, secret=false`; parent latest run queued with older active running. Parent stayed Working, no human Input/banner; genuine child A/B card remained usable. Parent answered A at06:39:24.679 seq593; child explicitly received A at06:40:00.298. Parent verified at06:40:06.723. Latest queued wake was cancelled after original run completed; do not interpret final cancelled shell status as failure to answer. |
| Idle parent wake and complete answer lifecycle | Clean retry parent completed06:44:02.750 seq1149. Child async request persisted06:44:27.580 seq1245; applied shell06:44:27.750 seq1257 already showed parent running from automatic wake and child running with false/false summary. Settings observer saw no input toast/announcement during pending window. Parent answered A06:45:22.333 seq1403; child acknowledged and completed06:46:06.482 seq1473. Parent woke on child completion and completed06:46:13.751 seq1502. Tiny initial stopped/request interval was batched by transport, so this run alone does not prove that interval. |
| Async child working after parent completed | Additional real run: parent completed06:51:39.551 seq1602, question created06:51:40.915, parent automatically woke then completed again06:51:44.551 seq1635. At06:51:49.646 the live app shell showed parent completed/no activity and child running with pending false/false request. Derived attention map excluded this parent; no human alert. Parent screenshot shows Waiting on subagent/Show/Stop, which is a background-work banner, not a human question banner. This held until child stopped working06:53:47.575 seq1660, when human input attention appeared. Child pending A/B card was captured after that boundary. Explicitly resumed parent answered A06:54:10.867 seq1724; response receipt sequence1733; child and parent both completed by06:54:15.132 seq1774. |
| Blocking child boundary / reverse state | Real native request_user_input, persisted06:40:49.897 seq810; summary `blocking=true, secret=false`, responseCapability live. Suppressed with direct parent running/queued. Parent naturally entered waiting06:42:32.967 seq995 then completed06:42:33.450 seq999 while child remained live. Input/sidebar, child-input banner, toast and live announcement appeared at06:42:32.905. Correct Open question navigation reached genuine blocking A/B card. Resumed parent running06:43:37.761 seq1025 suppressed attention again while same request pending; answered A06:44:20.487 seq1204, then both completed. |
| Ordinary discriminator | Actual async and blocking shells above carried secret:false. Secret marker came from the actual server projection, not an invented test envelope. |
| Background notification positive controls | In-app notifications enabled06:38:53. Settings stayed focused/visible for observation. Own pending async question created06:42:51.238 seq1008; positive toast/live announcement at06:43:41.655 on own turn waiting/completion. Do not claim immediate own-request delivery. Secret control emitted Input toast/announcement06:45:09.608 while parent running, actual shell seq1331 secret:true/blocking:true. Approval child emitted Approval toast/announcement06:45:20.493, actual command request seq1400 blocking:true/secret:false while parent running. Approval parent banner and actual pending Decline/Approve card captured; approval never granted. |
| Snooze compatibility | Real Snooze > In1hour command persisted future snoozedUntil; parent moved to Snoozed. A later user steer message woke it/cleared snooze. Availability, snooze storage and user-message wake observed. Attention-driven early wake and timed expiry not verified. |
| Narrow/dark web | 390x844 CSS viewport, dark, actual blocking banner/card navigation. Title truncates, Open question remains reachable. This is web, not native mobile. |

## Before and after

Baseline and proposed parent/card pairs are 1280x800 light. Each pair has amplified and threshold diffs. Blocking running→completed and completed→resumed also have both diffs. All retained stills/diffs were inspected; all recordings decoded and inspected using sampled contact sheets plus exact positive-toast frames.

**Before — actual base parent pending**

![Before parent pending](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/31b9f4b7f414db41/before-parent-pending.png)

**After — actual frozen-head parent pending**

![After parent pending](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d4209e46a79d308f/after-parent-pending.png)

## What else changed / comparison limits

Source delta is five files, +128/-8: contracts discriminator, server ProjectionStore summaries, shared threadShell attention predicate, and their focused tests. No web markup, provider adapter, notification delivery, navigation handler, responder authorization, or Electron bridge source changed. Source remained frozen for this whole step. Screenshots naturally differ in synthetic prompt/title, time, sidebar population, selection/scroll and source diff count; these are not pixel-identical visual-regression fixtures. Diff amplification is x4; threshold uses max RGB channel difference >24. Baseline notification control was not reused as proof for the proposed build.

## Focused checks

Shared threadShell test file: 11/11 passed (7.46s). Targeted ProjectionStore cases: 2 passed,42 skipped (9.06s), covering interruptible activeRunId and latest waiting secret from active runs. No repo-wide checks. Desktop `vp pack` succeeded; generated files stayed ignored. Logs and exact source/startup/verification commands are linked below.

## Unverified / FRICTION

- Native iOS/Android: unverified. Device access unavailable and EAS native artifacts returned403; no phone-web substitution.
- Actual Electron44.9.3 launched the built desktop main/preload, title T3 Code (Dev), desktopBridge true. OS keyring-backed environment pairing blocked shared-server connection. Desktop ancestor attention, OS notifications, badges and audio are unverified. Browser Notification permission denied; no OS delivery/audio claim.
- Unmarked old-server fallback, recursive/grandchild and mixed-priority branches have no actual-runtime capture in this step; focused shared tests supply only their covered branch evidence. Other providers, relay/tunnel/multidevice not exercised.
- Secret true summary and in-app alert were observed, but request tool became cancelled as child finished; retained secret-card navigation/lifecycle not verified. No secret value was entered. Approval card captured but approval/decline completion not exercised.
- Snooze attention-driven early wake and expiry unverified. First idle test was accidentally interrupted after snooze changed selection; recording is explicitly named as interrupted. Stop cascaded to the child and cancelled its request, so manual stop was unsuitable for a live-child boundary. Clean idle retry and natural blocking waiting/completed boundary replaced that proof.
- Fresh browser had in-app notifications off; enabled before the meaningful observer/control runs. First async negative is status/card evidence, not notification proof. Startup pairing needed explicit isolated --base-dir; wrong ambient-base token rejected401. Tokens and raw provider/server logs excluded.
- Applied app trace samples at100ms and batches transitions; exact persisted event timestamps are separately retained. Browser trace ends during final answer start; persisted final events and screenshot establish answer/completion.

## Ownership and cleanup

No-watch backend listener PID1762704/session48298 port13967; Vite listener PID1762965/session83715 port5927. No test restarted the backend. Both retained sessions stopped with Ctrl-C; both PIDs absent and `ss` showed neither listener afterward. All Electron smoke sessions stopped. No server ownership transferred. Isolated worktree `.t3` retained for lead completion; live developer userdata was never opened read-write. Public package contains only synthetic verification data; runtime/provider IDs replaced by aliases and credential/native metadata omitted. Private handoff/logs/tokens/database were not uploaded.

## Public artifact index

- [before-parent-pending.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/31b9f4b7f414db41/before-parent-pending.png) (322097 bytes)
- [after-parent-pending.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d4209e46a79d308f/after-parent-pending.png) (326983 bytes)
- [after-async-navigation.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b977289c758af43/after-async-navigation.mp4) (2796101 bytes)
- [after-child-pending-card.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/40c6211a345cbe27/after-child-pending-card.png) (291859 bytes)
- [approval-pending-card.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d3b4d0c38934bb14/approval-pending-card.png) (326470 bytes)
- [approval-running-parent.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/df82e062aefa99e7/approval-running-parent.png) (364210 bytes)
- [async-completed-parent-lifecycle.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f665ad83cb6a8b0f/async-completed-parent-lifecycle.mp4) (4667112 bytes)
- [async-completed-parent-pending.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e139b44c60035945/async-completed-parent-pending.png) (362845 bytes)
- [async-final-answer.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5ebfdb3d2ae2048b/async-final-answer.png) (347918 bytes)
- [async-parent-diff-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c788f1a67a627bfe/async-parent-diff-amplified.png) (77107 bytes)
- [async-parent-diff-threshold.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54d82382dc07f8d7/async-parent-diff-threshold.png) (24055 bytes)
- [async-stopped-child-pending-card.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e26a10e7d63870a6/async-stopped-child-pending-card.png) (325554 bytes)
- [before-async-navigation.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e32b40653cc224bc/before-async-navigation.mp4) (2909609 bytes)
- [before-child-pending-card.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1306a08ccf36c75/before-child-pending-card.png) (272190 bytes)
- [blocking-boundary-diff-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c0c2251cf8da5c93/blocking-boundary-diff-amplified.png) (146174 bytes)
- [blocking-boundary-diff-threshold.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7bcb40fdfb93b45b/blocking-boundary-diff-threshold.png) (31520 bytes)
- [blocking-boundary-includes-interrupted-idle.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bf161313a2643d03/blocking-boundary-includes-interrupted-idle.mp4) (8193331 bytes)
- [blocking-completed.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/394ea1b6879eae29/blocking-completed.png) (332018 bytes)
- [blocking-input-toast-frame.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f3e6582d7cf02e8f/blocking-input-toast-frame.png) (588395 bytes)
- [blocking-pending-card.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/68291255e885d122/blocking-pending-card.png) (301134 bytes)
- [blocking-resume-diff-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/58d61be4330166e0/blocking-resume-diff-amplified.png) (103716 bytes)
- [blocking-resume-diff-threshold.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ce453d7df8a0f0c9/blocking-resume-diff-threshold.png) (27009 bytes)
- [blocking-resumed.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0727ccecb9341f75/blocking-resumed.png) (342380 bytes)
- [blocking-running.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4ddcca6132942c0c/blocking-running.png) (341613 bytes)
- [child-card-diff-amplified.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0f90cc881f6ee0aa/child-card-diff-amplified.png) (47240 bytes)
- [child-card-diff-threshold.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/84984500f334e466/child-card-diff-threshold.png) (14567 bytes)
- [idle-completed.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/01c699df1692a5eb/idle-completed.png) (345270 bytes)
- [narrow-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee3199904bd78a8d/narrow-dark.png) (125912 bytes)
- [own-input-toast-frame.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/74987f7752eeb47b/own-input-toast-frame.png) (817036 bytes)
- [projection-tests.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5216de4729245eca/projection-tests.txt) (327 bytes)
- [resume-idle-controls.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b62332bd93975794/resume-idle-controls.mp4) (4387529 bytes)
- [runtime-sanitized.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/72c11d3f60dde37d/runtime-sanitized.json) (192062 bytes)
- [threadShell-tests.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/39275c0330328cce/threadShell-tests.txt) (314 bytes)
- [capture-runtime-readonly.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/645efb104804b5a0/capture-runtime-readonly.py) (986 bytes)
- [sanitize-evidence.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7c05f4a415d29e38/sanitize-evidence.py) (2725 bytes)
- [commands.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3912373e83207da1/commands.txt) (2130 bytes)
