Parent epic: #21
Depends on: #53
Parity contract: #52
Objective
Move the read/render/timeline half of existing OMP Native Chat from transcript decoding to ACP while preserving every #52 parity row owned by this issue.
Scope
Migrate and test:
- session history/load replay;
- user/assistant message ordering;
- assistant streaming;
- reasoning/thinking blocks;
- tool start/update/end;
- tool errors/interruption;
- edit/file-change cards;
- model/provider metadata attached to messages;
- token/context usage;
- compaction/reset boundaries;
- timestamps/identity where required by current UI;
- replay/live transition.
Source-of-truth change
Old:
OMP session JSONL
→ transcript decoder/tailer
→ NativeChatMessage projection
New:
OMP ACP load/live updates
→ shared ACP translator
→ shared timeline assembler
→ journal
Do not keep both sources authoritative for the same structured ACP session.
Replay guarantees
Prove:
- history loads once;
- live messages arriving around load do not duplicate replayed rows;
- repeated attach/restart is idempotent;
- abandoned/incomplete provider activity is represented consistently with generic structured-provider rules;
- compaction/history boundaries are not lost.
Parity tests
For representative recorded OMP conversations, compare the old transcript projection with the ACP projection at the semantic level:
- visible conversation order;
- reasoning presence;
- tool/edit meaning;
- usage/model metadata;
- completion state.
Exact internal row formats need not match if ACP is semantically stronger.
Acceptance criteria
Parent epic: #21
Depends on: #53
Parity contract: #52
Objective
Move the read/render/timeline half of existing OMP Native Chat from transcript decoding to ACP while preserving every #52 parity row owned by this issue.
Scope
Migrate and test:
Source-of-truth change
Old:
New:
Do not keep both sources authoritative for the same structured ACP session.
Replay guarantees
Prove:
Parity tests
For representative recorded OMP conversations, compare the old transcript projection with the ACP projection at the semantic level:
Exact internal row formats need not match if ACP is semantically stronger.
Acceptance criteria