Real web client, Chromium 1280×800, light theme; independent fresh databases and identical synthetic fixtures on both commits. The replay agent negotiates each specified protocol version, sends real session/update notifications, and the real ACP adapter/server persists and renders them.

Steps: seed an old-name tool with title, read kind, in_progress status, OLD OUTPUT, rawInput {path:'/workspace/old.txt',obsolete:true}, and _meta {old:true}; then independently clear all seven fields, replace rawInput with {path:'/workspace/new.txt'}, or omit fields. Open each thread, expand the work group and available tool details, wait for loading to finish, and capture that case separately.

Supplemental cases make otherwise hidden state visible: generic kind 'other' exposes replacement/input keys and the title; MCP identity metadata makes _meta clearing visible; a failed initial status makes status clearing visible through the failure icon. Synthetic /workspace paths avoid exposing internal directories. The empty all-clear Tool row has no disclosure control; input-only/output-only cases retain details and are expanded on both sides.

Observed: base retains obsolete:true and nulled values; head drops the obsolete key and clears the visible fields. Omitted fields retain their old input/output on both sides. Both v2 and v1 show this change; the v1 run documents changed behavior, not preservation of the base's v1 behavior. The arbitrary name field has no visible representation, so its clearing and the v1 null-name exception remain visually unverified.


## Negotiated ACP v2

### Scenario: ACP tool updates clear explicit nulls and replace input

**Proven: the scenario fails on base [2755a951a1](https://github.com/pingdotgg/t3code/commit/2755a951a18b7b1725cf165718d014c3b7261245) and passes on head [aa3c4c3b7f](https://github.com/pingdotgg/t3code/commit/aa3c4c3b7f524161e5654b8f86268cfb05439c8f).**

|  | Before [2755a951a1](https://github.com/pingdotgg/t3code/commit/2755a951a18b7b1725cf165718d014c3b7261245) | After [aa3c4c3b7f](https://github.com/pingdotgg/t3code/commit/aa3c4c3b7f524161e5654b8f86268cfb05439c8f) |
| --- | --- | --- |
| Result | ❌ failed<br>ASSERTION_FAILED: expected "AgentAgentApply replacement-visible updateWorked for 839ms3:41 AMOriginal title3:41 AMpath /workspace/new.txtobsolete true[\n  {\n    \"type\": \"content\",\n    \"content\": {\n      \"type\": \"text\",\n      \"text\": \"OLD OUTPUT\"\n    }\n  }\n]T3 Codereplacement-visible update applied.3:41 AM" not to contain "obsolete" | ✅ passed |
| protocol 2 input visible | ![Base 2755a951a1: protocol 2 input visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/726150b7b363e79e/001-protocol-2-input-visible.png) | ![Head aa3c4c3b7f: protocol 2 input visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ab08cc291436e23d/001-protocol-2-input-visible.png) |
| protocol 2 replacement visible | ![Base 2755a951a1: protocol 2 replacement visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e3f777b95574a793/002-protocol-2-replacement-visible.png) | ![Head aa3c4c3b7f: protocol 2 replacement visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2bbdea580ec8a807/002-protocol-2-replacement-visible.png) |
| protocol 2 title visible | ![Base 2755a951a1: protocol 2 title visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/286c8eab27a4a638/003-protocol-2-title-visible.png) | ![Head aa3c4c3b7f: protocol 2 title visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2331e38e7720379c/003-protocol-2-title-visible.png) |
| protocol 2 replacement | ![Base 2755a951a1: protocol 2 replacement](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/28aef6203302b876/004-protocol-2-replacement.png) | ![Head aa3c4c3b7f: protocol 2 replacement](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/34ab02158e7a9942/004-protocol-2-replacement.png) |
| protocol 2 clear | ![Base 2755a951a1: protocol 2 clear](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1f3776a37462d763/005-protocol-2-clear.png) | ![Head aa3c4c3b7f: protocol 2 clear](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/010a7771f6b7bd80/005-protocol-2-clear.png) |
| protocol 2 omitted | ![Base 2755a951a1: protocol 2 omitted](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c419135e2755f4e7/006-protocol-2-omitted.png) | ![Head aa3c4c3b7f: protocol 2 omitted](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7b21b4a5a0c4c05/006-protocol-2-omitted.png) |
| protocol 2 input | ![Base 2755a951a1: protocol 2 input](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/28ae9aac17f9b95e/007-protocol-2-input.png) | ![Head aa3c4c3b7f: protocol 2 input](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6d490e1a13f31477/007-protocol-2-input.png) |
| protocol 2 content | ![Base 2755a951a1: protocol 2 content](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/067019d84039064e/008-protocol-2-content.png) | ![Head aa3c4c3b7f: protocol 2 content](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/409801ed1ba1f726/008-protocol-2-content.png) |
| protocol 2 title | ![Base 2755a951a1: protocol 2 title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/24fdaba0fc730f45/009-protocol-2-title.png) | ![Head aa3c4c3b7f: protocol 2 title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/98d2a34a10524f38/009-protocol-2-title.png) |
| protocol 2 kind | ![Base 2755a951a1: protocol 2 kind](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3f2794ffb0146c23/010-protocol-2-kind.png) | ![Head aa3c4c3b7f: protocol 2 kind](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/84875e7471ce5c60/010-protocol-2-kind.png) |
| protocol 2 name | ![Base 2755a951a1: protocol 2 name](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/344df6f07228dfc6/011-protocol-2-name.png) | ![Head aa3c4c3b7f: protocol 2 name](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f1c0028537958d68/011-protocol-2-name.png) |
| protocol 2 meta | ![Base 2755a951a1: protocol 2 meta](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6805941f3caac9eb/012-protocol-2-meta.png) | ![Head aa3c4c3b7f: protocol 2 meta](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee0c8a231c68e166/012-protocol-2-meta.png) |
| protocol 2 status | ![Base 2755a951a1: protocol 2 status](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/037fb465babd3420/013-protocol-2-status.png) | ![Head aa3c4c3b7f: protocol 2 status](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1dad9c8279a6406d/013-protocol-2-status.png) |
| failure | ![Base 2755a951a1: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1e149297ad454d3a/014-failure.png) |  |


[v2 base complete recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8745ff0e0b8c1626/video.webm) | [v2 head complete recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/03389f397ced3bd2/video.webm)

## Negotiated ACP v1

### Scenario: ACP tool updates clear explicit nulls and replace input

**Proven: the scenario fails on base [2755a951a1](https://github.com/pingdotgg/t3code/commit/2755a951a18b7b1725cf165718d014c3b7261245) and passes on head [aa3c4c3b7f](https://github.com/pingdotgg/t3code/commit/aa3c4c3b7f524161e5654b8f86268cfb05439c8f).**

|  | Before [2755a951a1](https://github.com/pingdotgg/t3code/commit/2755a951a18b7b1725cf165718d014c3b7261245) | After [aa3c4c3b7f](https://github.com/pingdotgg/t3code/commit/aa3c4c3b7f524161e5654b8f86268cfb05439c8f) |
| --- | --- | --- |
| Result | ❌ failed<br>ASSERTION_FAILED: expected "AgentAgentApply replacement-visible updateWorked for 624ms3:44 AMOriginal title3:44 AMpath /workspace/new.txtobsolete true[\n  {\n    \"type\": \"content\",\n    \"content\": {\n      \"type\": \"text\",\n      \"text\": \"OLD OUTPUT\"\n    }\n  }\n]T3 Codereplacement-visible update applied.3:44 AM" not to contain "obsolete" | ✅ passed |
| protocol 1 input visible | ![Base 2755a951a1: protocol 1 input visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6c7631a73f39ad6d/001-protocol-1-input-visible.png) | ![Head aa3c4c3b7f: protocol 1 input visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2790daa1c3594fe3/001-protocol-1-input-visible.png) |
| protocol 1 replacement visible | ![Base 2755a951a1: protocol 1 replacement visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/93736b7a95c841f2/002-protocol-1-replacement-visible.png) | ![Head aa3c4c3b7f: protocol 1 replacement visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bbf1ae7dbd786151/002-protocol-1-replacement-visible.png) |
| protocol 1 title visible | ![Base 2755a951a1: protocol 1 title visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/89a32360051f39f8/003-protocol-1-title-visible.png) | ![Head aa3c4c3b7f: protocol 1 title visible](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1e2ccfd898ca51dc/003-protocol-1-title-visible.png) |
| protocol 1 replacement | ![Base 2755a951a1: protocol 1 replacement](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/01bf9e66219a605c/004-protocol-1-replacement.png) | ![Head aa3c4c3b7f: protocol 1 replacement](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/74c9933002fc8977/004-protocol-1-replacement.png) |
| protocol 1 clear | ![Base 2755a951a1: protocol 1 clear](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8a27c4bf7dc60865/005-protocol-1-clear.png) | ![Head aa3c4c3b7f: protocol 1 clear](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ab5f6e9e168ecdb4/005-protocol-1-clear.png) |
| protocol 1 omitted | ![Base 2755a951a1: protocol 1 omitted](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d0ee0b382d4f3035/006-protocol-1-omitted.png) | ![Head aa3c4c3b7f: protocol 1 omitted](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d4c53cd437657f8b/006-protocol-1-omitted.png) |
| protocol 1 input | ![Base 2755a951a1: protocol 1 input](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd212a262e8baee8/007-protocol-1-input.png) | ![Head aa3c4c3b7f: protocol 1 input](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cbbcb869fcbe8c54/007-protocol-1-input.png) |
| protocol 1 content | ![Base 2755a951a1: protocol 1 content](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d5f757f5a8d857aa/008-protocol-1-content.png) | ![Head aa3c4c3b7f: protocol 1 content](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/04fd9538ae819766/008-protocol-1-content.png) |
| protocol 1 title | ![Base 2755a951a1: protocol 1 title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cfdf7141d4596530/009-protocol-1-title.png) | ![Head aa3c4c3b7f: protocol 1 title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/73c7202d1a492501/009-protocol-1-title.png) |
| protocol 1 kind | ![Base 2755a951a1: protocol 1 kind](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/97d94ddd54326d98/010-protocol-1-kind.png) | ![Head aa3c4c3b7f: protocol 1 kind](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49f0cc983c889314/010-protocol-1-kind.png) |
| protocol 1 name | ![Base 2755a951a1: protocol 1 name](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8e14b10ba87a7cb5/011-protocol-1-name.png) | ![Head aa3c4c3b7f: protocol 1 name](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/20fb0e6f9cb11a28/011-protocol-1-name.png) |
| protocol 1 meta | ![Base 2755a951a1: protocol 1 meta](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/611c4e4364b85c91/012-protocol-1-meta.png) | ![Head aa3c4c3b7f: protocol 1 meta](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/429bc38ad30713de/012-protocol-1-meta.png) |
| protocol 1 status | ![Base 2755a951a1: protocol 1 status](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b4f8005616dc219/013-protocol-1-status.png) | ![Head aa3c4c3b7f: protocol 1 status](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b470127dbe3fd330/013-protocol-1-status.png) |
| failure | ![Base 2755a951a1: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dc4da2c14d45ab8c/014-failure.png) |  |


[v1 base complete recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0eccfd266374e58d/video.webm) | [v1 head complete recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5bb97d22542b7e68/video.webm)

[Scenario](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9d64edcbbc7760a4/acp-cleared-fields.e2e.ts) · [Replay driver, fixtures and harness patch](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5db4df6ff7eab1de/acp-proof-driver.zip)