# P18 — Identical raw MCP ingest, updated after side

Real Codex app-server replay → CodexAdapterV2 item/completed → turn_item.updated. The uploaded prior driver is identical apart from relocating imports into the capturer checkout; raw inputs and four scenarios are unchanged. No paid provider call. After is [9e73e3c088](https://git.cafe/pingdotgg/t3code/commit/9e73e3c0886dd12acc8bc79852dec548f7808edf); before is unchanged at [d1aeed2492](https://git.cafe/pingdotgg/t3code/commit/d1aeed249288585390dbac4fde5b54c35bd5fc06).

| Raw structuredContent | Ordinary before | Ordinary after | App before / after |
|---|---|---|---|
| `{}` plus text content | `{}`; text lost | Text content preserved | Complete raw envelope preserved |
| `[]` plus text content | `[]`; text lost | Text content preserved | Complete raw envelope preserved |

All four after scenarios passed: ordinary object/array cases normalize to `[{"type":"text","text":"EMPTY-STRUCTURED-TEXT"}]`; app object/array cases retain the text and original structuredContent shape and have an app reference.

Before: [reused ingest-before.log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eff46948397087fa/ingest-before.log). After: [new ingest-after.log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/41d435f369f536ca/ingest-after.log). Diff0 / DiffT: not applicable to transcript evidence.

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