# Test 1 Report Date: 2026-06-24 ## Status - Result: pass for the minimal callback wakeup test. - Parent observed report time: 2026-06-24T20:44:15.6912187+08:00 - Parent polling used after dispatch: no. ## Parent-Side Observation The parent session ended its dispatch turn after sending the formal start message to child thread: ```text 019ef9a5-5efc-7500-9a7d-4e7ec6920e84 ``` The next input received by the parent thread was the child callback: ```text Video Workbench wakeup Test 1 callback from child thread 019ef9a5-5efc-7500-9a7d-4e7ec6920e84. If this message activated the parent thread without polling, record the result in investigations/2026-06-24-thread-notification-wakeup/test-1-report.md. Child result path: investigations/2026-06-24-thread-notification-wakeup/test-1-child-result.md Parent thread id: 019ef999-07d2-7333-99b4-d5d2da040406 ``` This indicates the parent thread was activated by the child callback path, not by parent-side polling. ## Child-Side Evidence Child result file: ```text investigations/2026-06-24-thread-notification-wakeup/test-1-child-result.md ``` Recorded child result: ```text status: slept 2 minutes and sent callback parent_thread_id: 019ef999-07d2-7333-99b4-d5d2da040406 child_thread_id: 019ef9a5-5efc-7500-9a7d-4e7ec6920e84 sleep duration: 120 seconds callback method: Codex app send_message_to_thread callback target: 019ef999-07d2-7333-99b4-d5d2da040406 callback sent / failed: sent any tool limitation: send_message_to_thread was not initially exposed; tool_search exposed it successfully ``` ## Finding For a minimal two-minute test, a clean visible child Codex thread can wake the parent thread by calling `send_message_to_thread` with the parent thread id. The parent thread id can be obtained by the parent session at runtime through Codex app thread-list observation, under the user-controlled precondition that only one active main Video Workbench session is running. ## Limits This test does not yet prove the full production slide workflow should replace polling immediately. Remaining questions: - whether the same callback behavior remains reliable after 30-60 minute child runs; - whether callback delivery behaves the same when the child has heavy tool use, image generation, or internal SubAgents; - whether a production child session should send the callback only after writing `child-session-handoff.md` and passing the completion gate; - how to handle callback send failure without falling back to hidden parent polling; - whether the parent should still keep a very long safety timeout outside normal workflow execution. ## Workflow Implication Candidate replacement for routine parent polling: ```text parent observes current parent_thread_id -> parent creates clean child session -> parent sends task packet containing parent_thread_id and callback contract -> parent ends turn -> child writes compact handoff after completion gate -> child calls send_message_to_thread(parent_thread_id, callback) -> parent wakes and reads compact handoff ``` Do not promote this into `docs/workflows/slide-task-orchestration.md` until at least one production-shaped child-session test confirms the callback after a real slide package.