# Process-exit proof

Both commits ran their own real dev server and fresh isolated database with T3CODE_DEV_SEED=0. Synthetic projects and threads were created with the app CLI. The Claude provider binaryPath selected the attached controlled executable. The real Claude SDK, adapter, orchestrator, persistence and web client handled every turn; no failed-turn text was injected.

The compatible executable acknowledges SDK initialization and MCP control requests, emits partial assistant output, writes SYNTHETIC_STDERR_MUST_STAY_PRIVATE to stderr, records its own PID and cwd, then waits. SIGABRT kills that exact process; SIGUSR1 in exit7 mode invokes process.exit(7). PID ownership was checked against /proc/PID/cwd before every signal. A preliminary base exit7 run used a 12-second timer; the paired recorded exit7 runs use the attached signal-triggered exit handler so recording begins before the exit.

The browser viewport was 1280x800, light theme, on both sides. Final stills use the same conversation crop after dismissing the transient error banner. Two full screenshots at least 500ms apart were pixel-identical before each final still. Recordings show partial output transitioning to the failed turn. The identical video crop excludes the sidebar and provider selector. Private selector metadata was hidden before recording; failure text was never edited. Every capture and recording was visually inspected.

Base: both cases display Provider turn failed. Head: the signal case displays Claude Code process terminated by signal SIGABRT.; exit7 displays Claude Code process exited with code 7. The synthetic stderr marker is absent from the visible failures.

Configure the isolated home before starting dev: providerInstances.claudeAgent = {driver: "claudeAgent", enabled: true, config: {binaryPath: ABSOLUTE_FIXTURE_PATH}}. Disable other providers. Use the supplied reproduce.sh with environment parameters on each checkout; pair the browser with the fresh dev server and open the returned thread. No external model call is needed.

This proves real process exits through the Claude SDK using a compatible executable. It does not prove a first-party authenticated Claude inference session, whose OAuth account was unavailable.

AI-assisted; verified with the tests and tools listed above.
