Issue 29778: manual runtime reproduction Environment: Linux, real T3 dev servers and CLI, real Codex app-server. No replay provider, mocks, copied T3 databases, or modified timeouts. AI-assisted; verified with the tests and tools listed above. Base: 62dc589d6dff48c73002842e4603c5ab89a6880f Head: ba1fc174546c1a693833a1d28f305eef9c6521e6 Each side used its own installed worktree, fresh T3 state and scratch Codex home. The scratch Codex homes had equivalent API authentication/configuration and no existing conversations. Credentials/configuration are intentionally omitted. A single shared synthetic git project was used on both sides. Commands run on each side (paths and private model selection parameterized): vp i T3CODE_DEV_SEED=0 CODEX_HOME="$SCRATCH_CODEX_HOME" vp run dev node apps/server/src/bin.ts project add "$SYNTHETIC_PROJECT" \ --base-dir "$CHECKOUT/.t3" --title 'Delegation evidence' node apps/server/src/bin.ts thread start "$SYNTHETIC_PROJECT" \ "Delegate exactly one task to a Codex child using T3's delegate_task tool: 'Act as the implementation subagent. Reply with the single word DONE.' Use the same provider and model as yourself. Wait for the child result and relay its single word answer. Do not use native subagent tools or shell commands." \ --provider codex --model "$ADVERTISED_CODEX_MODEL" \ --title 'Delegation evidence' --base-dir "$CHECKOUT/.t3" --wait --json The chosen model was advertised by the real Codex model/list endpoint and was the same for both sides and their children. Private runtime identifiers omitted. Both start commands returned status=completed and reply=DONE. Save the command's JSON output as "$RUN_OUTPUT/start.json" for the driver. python3 evidence-driver.py "$CHECKOUT" "$SCRATCH_CODEX_HOME" \ "$RUN_OUTPUT" "$SIDE" "$SHA" The driver reads only allowlisted fields from the fresh synthetic databases. It polls at 10-second intervals through 31 minutes after the child completed. The real server's default 30-minute idle timeout is unchanged. The driver never sends thread/archive. Database reads do not extend T3's provider activity timer. A live GNOME terminal showing this driver was screen-recorded on Xvfb at the same 1920x1080 viewport, font size and theme for both commits. Exported videos are labeled 60x time lapses; timestamps show the actual observation times. python3 native-list.py "$SCRATCH_CODEX_HOME" "$RUN_OUTPUT/native-final.json" This launches the real Codex app-server, initializes it and calls thread/list with archived=false and archived=true, selecting only id/source for publication. The same query was also run before the idle timeout. python3 evidence-driver.py "$CHECKOUT" "$SCRATCH_CODEX_HOME" \ "$RUN_OUTPUT" "$SIDE" "$SHA" --resume Continuation uses the real T3 CLI to send 'Reply with the single word CHILD-OK.' to the existing child, then 'Reply with the single word PARENT-OK.' to its parent. Both commands use --wait --json. The driver publishes status/reply/error only, then re-reads native state so resumed IDs can be compared with original IDs. Limits: this observes real Codex local persistence and native listing semantics, not the separately authenticated ChatGPT desktop Recents screen.