Repository navigation
Tracking: OMP Native Chat → ACP migration (v3 plan) #67
Description
Summary
Tracks the v3 plan for 44madfire/orca#20. New OMP chats move to Orca's structured ACP stack (omp acp) once every gating parity row passes and the provider satisfies the contract orca-native-chat-v1. Existing legacy sessions stay legacy. Adopting them, Terminal↔ACP handoff and legacy retirement are post-cutover migration (phase C). This body is the authoritative parity ownership checklist.
Invariant: "For every environment and workflow migrated from legacy OMP Chat to ACP, ACP must preserve or strengthen all existing user-visible and reliability guarantees. Workflows not yet at parity remain explicitly routed to the legacy implementation."
Transport ownership: "v1 does not change transport ownership for an already-existing legacy OMP session. Existing sessions stay legacy; new supported sessions use ACP. Legacy→ACP adoption is a separate migration feature."
Context
- Design:
44madfire/orca#20. Provider-side gap tracker named by DESIGN — Migrate OMP Native Chat from terminal/transcript to ACP #20:44madfire/oh-my-pi#8. - Bases:
stablyai/orca@76d1b7bandcan1357/oh-my-pi@53f253f. pi-packages has no DESIGN — Migrate OMP Native Chat from terminal/transcript to ACP #20 work (DESIGN — Migrate OMP Native Chat from terminal/transcript to ACP #20 non-goal "no Pi work"). - Plan:
docs/plans/omp-acp-migration/v3/plan.md. Risk findings:docs/plans/omp-acp-migration/v2/risk-findings/. - Phases:
- Tracking.
- A: gate + registration.
- B: the cutover critical path.
- C: everything after cutover — adoption, handoff, retirement, OMP extensions, native images/skills, upstream.
- Critical path: Structured launch availability per registered agent, with legacy-chat fallback on decline #78 → Register omp acp as an opt-in structured ACP agent behind the availability gate #68 → (Resting model catalog for registered structured agents from their model probe spec #79, OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70, ACP compaction updates → compaction boundary and usage invalidation (provider-neutral) #80, OMP commands, options and composer over ACP #71, ACP elicitation forms and OMP approval-policy parity #81, OMP dialect: mid-turn "Send now" steers via OMP's ACP steer extension #82, Mobile: render and drive registered structured agents (provider-neutral) #72, OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73, Single-writer protection for ACP-held OMP sessions (resume guards, AI Vault ownership) #83 in parallel) → ACP contract orca-native-chat-v1: define, test, and advertise oh-my-pi#17 (
orca-native-chat-v1) → New OMP chats default to ACP when the provider satisfies orca-native-chat-v1 #74 (new OMP chats default to ACP). - Contract: Orca requests
orca-native-chat-v1ininitialize→clientCapabilities._meta["ohmypi.acp/contracts"]. OMP confirms it inagentCapabilities._meta["ohmypi.acp/contracts"]and applies contract semantics only to clients that requested it. Standard ACP capabilities are probed normally. Orca never reads granular OMP markers. Later contracts (e.g.omp-subagents-v1,omp-execution-cells-v1) are separate.
Scope
Phase A: #78 launch availability gate + fallback; #68 opt-in omp acp registration.
Phase B (cutover critical path):
- Resting model catalog for registered structured agents from their model probe spec #79 resting model catalog
- OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70 live timeline
- ACP compaction updates → compaction boundary and usage invalidation (provider-neutral) #80 ACP compaction (generic)
- OMP commands, options and composer over ACP #71 commands/options/composer
- ACP elicitation forms and OMP approval-policy parity #81 elicitation + approvals (generic)
- OMP dialect: mid-turn "Send now" steers via OMP's ACP steer extension #82 OMP steer dialect
- Mobile: render and drive registered structured agents (provider-neutral) #72 mobile registered agents
- OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73 lifecycle/reattach
- Single-writer protection for ACP-held OMP sessions (resume guards, AI Vault ownership) #83 single-writer protection
- New OMP chats default to ACP when the provider satisfies orca-native-chat-v1 #74 new OMP chats default to ACP
Phase C (post-cutover):
- Post-cutover migration: adopt existing legacy OMP sessions into ACP chat #69 legacy→ACP adoption
- Post-cutover migration: persisted ACP↔Terminal handoff for OMP chats #84 persisted ACP↔Terminal handoff
- Legacy OMP chat retirement criteria, dead-code removal, upstream submission #77 retirement + upstream
- OMP ACP dialect: classify and bound the extension surface #75 OMP extensions
- Native image prompts for ACP agents + OMP skills #76 native images + skills
Provider (oh-my-pi):
- In
orca-native-chat-v1: ACP: emit compaction updates live and usage after compaction oh-my-pi#10, ACP extension _omp/session/steer: inject a message into the running turn oh-my-pi#13, ACP permission gate follows the configured approval policy for orca-native-chat-v1 clients oh-my-pi#14, ACP: reject TUI-only slash commands explicitly; implement /clear in text mode oh-my-pi#15, ACP: stream non-assistant transcript entries live; accept !/python execution input oh-my-pi#16, defined and advertised by ACP contract orca-native-chat-v1: define, test, and advertise oh-my-pi#17. - Post-cutover: ACP reopen of adopted sessions: Windows cwd normalization, resource-not-found, usage after load/resume oh-my-pi#12.
- Retired: ACP conformance: implement session/set_model, accept boolean config values oh-my-pi#9, Replay identity: isReplay stamps + stable message IDs oh-my-pi#11.
Decisions to record here (recommended default in parentheses):
- D1 manual
omp --resumein a plain shell while a chat holds the session (accept; Orca refuses its own second writers, Single-writer protection for ACP-held OMP sessions (resume guards, AI Vault ownership) #83) - D2 in-tab Terminal↔Chat toggle for new ACP chats (not migrated in v1: terminal OMP keeps it; ACP chats show a notice + "Open OMP in a terminal tab"; handoff in Post-cutover migration: persisted ACP↔Terminal handoff for OMP chats #84)
- D3 TUI-only slash commands (explicit message + "Open OMP in a terminal tab";
/newopens a new chat;/plan→ ACP plan mode;/clearvia ACP: reject TUI-only slash commands explicitly; implement /clear in text mode oh-my-pi#15;/traceclaimed) - D4 stale mobile builds after cutover (cut over after the Mobile: render and drive registered structured agents (provider-neutral) #72 mobile release; accept "Update to view")
- D5 approval policy owner (OMP config via ACP permission gate follows the configured approval policy for orca-native-chat-v1 clients oh-my-pi#14)
- D6 mid-turn send semantics — decided: OMP steer extension + dialect (ACP extension _omp/session/steer: inject a message into the running turn oh-my-pi#13, OMP dialect: mid-turn "Send now" steers via OMP's ACP steer extension #82)
- D7 legacy retirement (keep legacy for WSL, runtime-owned SSH, Windows without start-time proof, terminal/mobile-launched OMP, stale mobile; Legacy OMP chat retirement criteria, dead-code removal, upstream submission #77 only after adoption + handoff)
- D8 re-import fidelity after terminal turns (post-cutover; accept)
- D9 gate mechanism — decided: single contract
orca-native-chat-v1 - D10 16 MiB adoption bound (post-cutover; keep, explicit fallback)
- D11
!cmd/python cells inorca-native-chat-v1(include; richer cells →omp-execution-cells-v1) - D12 contract negotiation (two-way: Orca requests, OMP confirms; semantics only for requesting clients)
- D13 reattach after OMP store drift (refuse with a named reason; journal stays readable)
- D14 steer extension name (
_omp/session/steer)
Non-goals
- No direct
omp --mode rpctransport in Orca. - No raw extension payloads to the renderer.
- No Pi work.
- No removal of ordinary terminal OMP.
- No change of transport for existing legacy sessions before Post-cutover migration: adopt existing legacy OMP sessions into ACP chat #69.
Depends on
- None (tracks all units).
Parity rows owned
Every existing-guarantee (EG) row in docs/plans/omp-acp-migration/v3/parity-audit.md, each owned by exactly one issue. Check a row only with a linked passing test.
Gates cutover
- P-ROPT-01 desktop local, all Windows install shapes — Structured launch availability per registered agent, with legacy-chat fallback on decline #78
- P-ROPT-02 WSL stays legacy — Structured launch availability per registered agent, with legacy-chat fallback on decline #78
- P-ROPT-03 plain SSH gated (negative) — Structured launch availability per registered agent, with legacy-chat fallback on decline #78
- P-ROPT-04 paired runtime — Structured launch availability per registered agent, with legacy-chat fallback on decline #78
- P-ROPT-05 runtime-owned SSH target stays legacy — Structured launch availability per registered agent, with legacy-chat fallback on decline #78
- P-ROPT-06 Windows without start-time proof stays legacy — Structured launch availability per registered agent, with legacy-chat fallback on decline #78
- P-ROPT-07 folder workspaces — Structured launch availability per registered agent, with legacy-chat fallback on decline #78
- P-DISC-03 ACP child writes where terminal OMP writes — Register omp acp as an opt-in structured ACP agent behind the availability gate #68
- P-TUI-01 ordinary terminal OMP unchanged — Register omp acp as an opt-in structured ACP agent behind the availability gate #68
- P-AUTH-01 signed-out OMP recoverable (confirm) — Register omp acp as an opt-in structured ACP agent behind the availability gate #68
- P-MSWC-01 resting model list — Resting model catalog for registered structured agents from their model probe spec #79
- P-DECD-01 role decoding — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-DECD-02 custom messages by display flag — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-DECD-03 fileMention notes — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-DECD-04 bookkeeping skipped — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-ORDR-01 append order — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-ORDR-02 streaming/pending/history order — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-STRM-01 incremental live updates — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-RSNG-01 thinking visible — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-TOOL-01 tool results and errors — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-TOOL-02 bash/python cells — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-TOOL-03 tool arguments — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-TOOL-04
!cmdfrom chat runs a cell — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70 - P-EDIT-01 diff cards for edit tools — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-META-01 provider/model/usage — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-META-02 live context ring — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-ERRS-01 aborted turn text — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-ERRS-02 tool failure styling — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-QUEU-01 pending send bubble — OMP live timeline parity: messages, reasoning, tools, edits, errors, usage #70
- P-CMPX-01 compaction boundary + usage invalidation — ACP compaction updates → compaction boundary and usage invalidation (provider-neutral) #80
- P-MSWC-02 mid-session model switch — OMP commands, options and composer over ACP #71
- P-SCMD-01 22-command catalog — OMP commands, options and composer over ACP #71
- P-SCMD-02 commands execute, none silently become prompts — OMP commands, options and composer over ACP #71
- P-SKIL-02
@mention autocomplete — OMP commands, options and composer over ACP #71 - P-ATTC-01 file/image drop →
@path— OMP commands, options and composer over ACP #71 - P-PLAN-01
/plan— OMP commands, options and composer over ACP #71 - P-LCMD-01
/context— OMP commands, options and composer over ACP #71 - P-LCMD-02
/usage— OMP commands, options and composer over ACP #71 - P-APPR-01 blocked while approval pending — ACP elicitation forms and OMP approval-policy parity #81
- P-APPR-02 approval card answers OMP — ACP elicitation forms and OMP approval-policy parity #81
- P-APPR-03 prompts follow OMP approval policy — ACP elicitation forms and OMP approval-policy parity #81
- P-INTR-01
askquestions — ACP elicitation forms and OMP approval-policy parity #81 - P-PLAN-02 plan proposals await the user (confirm) — ACP elicitation forms and OMP approval-policy parity #81
- P-QUEU-02 mid-turn steer without aborting — OMP dialect: mid-turn "Send now" steers via OMP's ACP steer extension #82
- P-MOBL-01 mobile status — Mobile: render and drive registered structured agents (provider-neutral) #72
- P-MOBL-02 mobile renders and drives OMP chat — Mobile: render and drive registered structured agents (provider-neutral) #72
- P-STRM-02 starting state settles — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-STRM-03 consistent history after reload — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-META-03 ring on reopen without a new turn — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-RSUM-01 reopened chat continues the same OMP session — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-HOOK-01 working/blocked/done — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-HOOK-03 Escape in terminal OMP is not an interrupt — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-HOOK-04 retired pane revives — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-RSUM-02 app-restart restore — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-DDUP-01 no duplicates across reconnect — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-DDUP-02 identical messages never collapsed — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-STOP-01 Stop interrupts, conversation continues — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-LNCH-01 launch prompt exactly once — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-NAME-01 first-prompt auto title — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-STAT-01 one status store for all readers — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-NOTF-01 done/blocked notifications — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-PROC-01 one process per chat, closed with the tab — OMP ACP lifecycle: settlement, Stop, crash, restart, status, notifications #73
- P-VAUL-01 AI Vault/terminal resume of ACP-held sessions refused; legacy unchanged — Single-writer protection for ACP-held OMP sessions (resume guards, AI Vault ownership) #83
- P-TOGL-01 in-tab toggle explicitly routed (D2) — New OMP chats default to ACP when the provider satisfies orca-native-chat-v1 #74
Post-cutover (not regressed: legacy sessions stay legacy)
- P-DISC-01 exact transcript path (adoption) — Post-cutover migration: adopt existing legacy OMP sessions into ACP chat #69
- P-DISC-02 id-based transcript search (adoption) — Post-cutover migration: adopt existing legacy OMP sessions into ACP chat #69
Expansion rows (never gates): P-RSNG-02, P-EDIT-02 (#70); P-THNK-01 (#71); P-RSUM-03 (#73); P-SKIL-01, P-IMAG-01 (#76). #84 strengthens P-TOGL-01.
Acceptance criteria
- Every "Gates cutover" row is checked with a linked passing test before New OMP chats default to ACP when the provider satisfies orca-native-chat-v1 #74 merges.
- Post-cutover rows are checked before Legacy OMP chat retirement criteria, dead-code removal, upstream submission #77 retires anything.
- Decisions D1–D14 are recorded.
- DESIGN — Migrate OMP Native Chat from terminal/transcript to ACP #20 acceptance criteria are each satisfied or explicitly decided.
-
#21and#52–#59are closed or relinked as superseded.
Required tests
- Owned by child issues. New OMP chats default to ACP when the provider satisfies orca-native-chat-v1 #74 re-runs the gating matrix before default-on.
Base branch
acp-migration in 44madfire/orca and 44madfire/oh-my-pi.
The full parity audit (docs/plans/omp-acp-migration/v3/parity-audit.md) is posted as the first comment on this issue.
Activity
44madfire commentedon Oct 7, 2026
OMP Native Chat legacy parity inventory (v3)
Invariant (verbatim,
plan.md§0): "For every environment and workflow migrated from legacy OMP Chat to ACP, ACP must preserve or strengthen all existing user-visible and reliability guarantees. Workflows not yet at parity remain explicitly routed to the legacy implementation."v1 does not change transport ownership for already-existing legacy OMP sessions: they stay legacy, so rows that only concern adopting or handing off existing sessions have post-cutover owners and do not gate cutover (column Gates cutover). Every EG row still has exactly one owner.
Code: Orca
stablyai/orca@76d1b7b(paths relative to repo root), oh-my-pi@53f253f. v1 row ids arekept where the row is right; corrections are noted in the last column. Status:
EG = existing guarantee (must be met at least as strongly before ACP is default, owned by exactly
one issue); NS = not supported today (expansion, never a gate); MECH = legacy mechanism, not
a user-visible guarantee (folded into the EG row named). Lines without a number were not re-read at a
specific line and are cited by symbol.
[INFERENCE]marks unverified claims the owning issue mustconfirm first.
Legend for ACP column: = parity by existing generic code, + stronger, Δ needs work (owner
issue), gap provider fix required (oh-my-pi issue in parentheses).
Inventory
session_file, Orca reads that exact transcript, no scansrc/main/native-chat/session-file-resolver.tsresolveSessionFilePath; testsrc/main/pi/omp-transcript-metadata.test.tssession-file-resolver.ts:315resolveOmpSessionFileOMP_PROFILE≻PI_PROFILE; default-profilePI_CODING_AGENT_DIR;PI_CONFIG_DIR; XDG) mirrored by Orca, plus Orca's ownOMP_CODING_AGENT_DIRread-side override (ranked first; OMP never reads it)src/main/ai-vault/omp-session-root.ts:31-73(:46-47override);docs/reference/omp-session-roots.md; OMPpackages/utils/src/dirs.ts:83-95,306-308,452-481@53f253f; testomp-session-root.test.tsompfrom the same shell writes: pin nothing (launch resolution force-sets[spec.accountHomeVariable],src/main/acp/acp-structured-launch-resolution.ts:85-96), pass directory/profile env through, record the resolved agent dir + profile + session-dir override (risk-findings/account-home.md)OMP_CODING_AGENT_DIRas OMP precedence — it is Orca-only;--session-dir/PI_CODING_AGENT_SESSION_DIR(flat layout) and launch-cwd.envare OMP inputs Orca's mirror does not model (legacy relies on hook exact paths, P-DISC-01)src/main/native-chat/transcript-line-decoders-omp.ts:32; testtranscript-line-decoders.omp.test.tsjournal-legacy-import.ts:152); Δ live mapping verified per rolecustom_messageshown only whendisplay === true; legacycustom/hookMessagetranscript-line-decoders-omp.ts:39acp-event-mapper.ts:193)fileMention→@pathsystem note, no file dumptranscript-line-decoders-omp.ts:102,220transcript-line-decoders-omp.ts:39provider.frame(not rendered)transcript-line-decoders-omp.tsheadersrc/renderer/src/components/native-chat/native-chat-session-assembler.ts:109compareMessages; testnative-chat-preassembled-session-parity.test.tssrc/main/native-chat/transcript-watch.ts,transcript-watch-engine.ts:42transcript-watch.ts:54,84; testtranscript-watch-resolve-poll.test.tstranscript-watch-engine.ts:158onReplace; testtranscript-watch-inplace-drain-race.test.tstranscript-line-decoders-omp.ts:263agent_thought_chunk→ reasoning row (src/main/acp/acp-session-update.ts); must stay discoverable:209-212→:263toolResultoutput;isError→ failed stylingtranscript-line-decoders-omp.ts(toolResult branch)tool_call_updatestatusfailed→ failed tooltranscript-line-decoders-omp.ts:89,192toolCallbranchrawInput→ tool input!cmd/ python input typed in chat runs a TUI execution cellpackages/coding-agent/src/modes/controllers/input-controller.ts:1141(oh-my-pi)!handling inmodes/acp/)src/shared/native-chat-edit-normalize.ts:16,29; testsrc/shared/native-chat-edit-normalize.test.tsdiffcontent → diff card (src/main/acp/acp-tool-timeline.ts:139-144)native-chat-diff.test.tsdoes not existedit/writenative-chat-edit-normalize.ts:16diffcontentompServingsrc/shared/native-chat-context-usage.ts;src/shared/omp-model-list-probe.tsusage_updateat turn end (acp-agent.ts:2167-2182oh-my-pi) →context.usagesession.journal.contextUsage()(src/main/native-chat/agent-session-wire/structured-agent-session-options-read.ts:163); adopted chats needOMP-4usage after load/resume (ORCA-4, C)'Context compacted',presentation: 'compaction') and invalidates usage until next replytranscript-line-decoders-omp.ts:46-51;native-chat-context-usage.tscompaction_update(acp-session-update.ts:86-90):40-48→:46-51; replay drops the summary (not "becomes user message")omp models --jsonsrc/shared/agent-session-option-catalog-omp.ts:28;native-chat-session-option-enrichment.ts:87; testagent-session-option-catalog-omp.test.tsstructured-agent-model-catalog-wiring.ts:77-88), ACPfallbackModels: () => null(acp-structured-agent-definitions.ts:35)/orca-model <selector>)agent-session-option-catalog-omp.ts:23; testomp-model-switch-capability.test.tssession/set_config_optionmodel(acp-structured-options.ts:91-97; OMP selectacp-agent.ts:1739-1786)agent-session-option-catalog-omp.ts:9thought_levelselecthelpexcluded)src/shared/native-chat-slash-commands.ts:100-126; testnative-chat-slash-commands.omp.test.tsstructured-agent-session-composer.ts:136-140,179-181):98-124→:100-126/tokenblockedsrc/shared/native-chat-agent-profiles.ts:104-113risk-findings/acp-commands.md); decision D3use-native-chat-skills.ts:41,102@file-mention autocompletesrc/renderer/src/components/native-chat/use-native-chat-mention-files.ts(+.test.tsx)NativeChatMentionMenu.tsxdoes not existgetAgentImageHandling('omp') === 'unsupported'(src/shared/agent-image-paste.ts:25-27)image: true,acp-agent.ts:649; Orca blocks non-text,acp-structured-turns.ts:36,acp-structured-session-adapter.ts:147)@pathmentions OMP resolves (file-URI form for paths with both quote kinds)agent-image-paste.ts:43-56; OMP expands mentions inAgentSession(agent-session.ts:7791, oh-my-pi)acceptsImagesis false (use-native-chat-resolved-path-attachments.ts:19-20,122-123); Δ verify OMP file-URI quoting formblockedsrc/shared/agent-hook-listener-omp-approval-ownership.test.tsblockednative-chat-interactive-prompt.ts;native-chat-agent-support.ts:57acp-structured-acquire.ts:133-149)session-tools.ts:911-928,acp-permission-gate.ts:7-12(oh-my-pi)askquestions render as interactive cards and are answerednative-chat-interactive-prompt.ts(native-chat-ask)acp-session-runtime.ts:107) so OMP stripsask(acp-agent.ts:1227)/plantoggles plan modenative-chat-slash-commands.ts:106/planis TUI-only over ACP (builtin-modes.ts:326-345@53f253f,handleTuionly; probe: forwarded to the model with 16 tool calls) → claim and map to ACPsession/set_modeplan(acp-agent.ts:746,1829-1839)/plan[INFERENCE]acp-agent.ts:2020)/contextanswered locally, nothing sent to the PTYnative-chat-slash-commands.ts:117;use-native-chat-local-command-answer.ts/contextbuiltin answers in chat via pass-through/usageexecutes (output on the terminal screen only)native-chat-slash-commands.ts:118src/main/agent-hooks/server/server-lifecycle.ts; testserver-pi-normalization.test.tsStructuredAgentSessionStatusFeed→ingestStructuredStatus(src/main/agent-hooks/server/server-ingest-structured.ts:26)server/in v1src/main/native-chat/transcript-turn-lifecycle.tsserver-escape-navigation-inference.test.tssrc/main/agent-hooks/server/server-status-disposition.ts:74; testsserver-omp-retired-ingress.test.ts,server-retired-pane-new-turn.test.tssrc/shared/agent-session-resume.ts,src/shared/agent-resume-argv.ts:53src/main/acp/acp-structured-launch-resolution.ts:105-120,110); legacy sessions keepomp --resume(unchanged); adopted sessions = ORCA-4 (C)src/renderer/src/lib/sleeping-agent-session-launch.ts:129; testai-vault-omp-cold-resume.test.tssrc/renderer/src/components/NativeChatResumeOnRestartModal.tsxsrc/renderer/src/runtime/sync-runtime-graph/agent-status-projection.tsmobile/src/session/mobile-native-chat-eligibility.ts,src/main/runtime/rpc/methods/native-chat.ts:78,108,mobile/src/session/use-mobile-native-chat-stop.ts:102,use-mobile-native-chat-session-options.ts:73mobile-runtime-client-capabilities.ts:16,mobile-native-chat-eligibility.ts:54); decision D4src/main/__fixtures__/shell-wrapper-snapshots/; PTY launches typeompinto a shellcmd.exe /cand%LOCALAPPDATA%\ompis not resolved (risk-findings/windows-spawn.md) — ORCA-2 adds both; any shape that fails the availability handshake stays on legacy chatsrc/main/native-chat/wsl-transcript-fs-gate.tsstructured-native-chat-launch-route.ts:111-113)src/shared/native-chat-agent-support.ts:27;native-chat-availability.ts:53-57structured-native-chat-launch-route.ts:97-99)src/shared/native-chat-transcript-readability.ts:4-8runtime:hosts with capabilitiesruntime-ssh-*): chat readablenative-chat-transcript-readability.ts:7;src/shared/execution-host.ts:67-69acp-structured-launch-resolution.ts:80)supervised-provider-child-location.ts:9,14)native-chat-availability.ts:42-60stopReason: cancelledpresentationisError/ exit codefailedtool statusnative-chat-session-assembler.tsacp-timeline-translator.ts:161-164)native-chat-session-assembler.ts:239mergeOnesrc/renderer/src/components/native-chat/native-chat-pending.ts; testnative-chat-pending.test.tsstreamingBehavior: "steer"(input-controller.ts:1219-1234, oh-my-pi)acp-structured-turns.ts:235-251), OMPprompt()while busy cancels (acp-agent.ts:806-823) → OMP extension_omp/session/steer(OMP-5) via the OMP dialect hook (ORCA-9); composer UX unchanged (Enter mid-turn queues a card, Send now steers without aborting); decision D6 decideduse-native-chat-composer-interrupt.ts; mobileuse-mobile-native-chat-stop.ts:102src/main/provider-process/provider-process-close.ts:43-50,67-89); OMP drains the cancel on EOF; aborted entry persisted 34/34 on 18.6.3/win32 (risk-findings/stop-persistence.md); next send reloads (acp-structured-session-adapter.ts:180)src/renderer/src/lib/native-chat-launch-prompt.tssrc/main/agent-hooks/first-work-workspace-title-rename.ts:14; testfirst-work-branch-rename.test.tsomp --resumesrc/renderer/src/lib/ai-vault-resume-command.ts; testai-vault-omp-cold-resume.test.tssrc/main/ai-vault/structured-session-ownership.ts:96,135; call sitessrc/main/ipc/ai-vault-resume.ts:30,src/main/runtime/rpc/methods/session-tabs.ts:54,terminal/terminal-send-method.ts:41-46); legacy sessions unchangednative-chat-availability.ts:42-60;src/renderer/src/components/terminal-pane/TerminalPaneNativeChatPortal.tsxworktree ps/ dashboard show OMP status from the one hook-server storesrc/main/agent-hooks/server/server-status-application.tsserver-ingest-structured.ts:26)src/main/agent-hooks/server/server-status-update.tssrc/renderer/src/store/terminals/terminal-tab-creation.ts)src/main/acp/acp-launch-specs.ts:64-76scrubs pane/hook env from ACP children[INFERENCE]notSignedInrefusal withloginCommandhint (acp-structured-acquire.ts,AcpAuthRequiredError)Candidate rows reported by research but not verified (cited file missing or behavior unconfirmed);
ORCA-7confirms or drops them: composer drafts per tab (citeduse-native-chat-composer-state.tsdoes not exist), large-paste collapse (
use-native-chat-composer-handle.ts, 41 lines, behaviorunconfirmed). Both concern the shared
NativeChatComposer, so parity is expected by construction.Ownership summary
Expansion (NS) rows, never gates: P-RSNG-02, P-EDIT-02 (ORCA-5); P-THNK-01 (ORCA-7); P-RSUM-03
(ORCA-11); P-SKIL-01, P-IMAG-01 (ORCA-14). Mechanism: P-HOOK-02.
Totals: 73 rows — 66 EG (2 marked confirm, 1 negative), 6 NS, 1 MECH. Gating: 64 EG rows gate cutover; 2 (P-DISC-01, P-DISC-02) are post-cutover (adoption). v1 had 51 rows; 22 added in v2, 0 removed, 1 re-classified (P-HOOK-02 → MECH); v3 added no rows.
Risk-round corrections (2026-10-08)
Rows corrected from
risk-findings/: P-DISC-03 (OMP store precedence;OMP_CODING_AGENT_DIRis Orca-only), P-PLAN-01 (/planis TUI-only over ACP), P-SCMD-02 (40 TUI-only builtins), P-STOP-01 (Stop-persistence risk resolved), P-ROPT-01 (Windows install shapes). Owners unchanged; no rows added or removed.v3 re-framing (user review)
Owner changes: P-META-03 ORCA-4 → ORCA-11 (journal ring on reopen); P-RSUM-01 ORCA-4 → ORCA-11 (reattach of ACP-created chats); P-VAUL-01 ORCA-4 → ORCA-16 (single writer); P-TOGL-01 ORCA-4 → ORCA-12 (not migrated in v1, explicit routing). P-DISC-01/02 stay with ORCA-4, now post-cutover. P-QUEU-02 delta restated for the OMP steer extension. No row added or removed.
Floor that must survive until an explicit retirement decision (D7)
Legacy terminal/transcript chat remains the routed path for: WSL project runtimes (P-ROPT-02),
runtime-owned SSH targets (P-ROPT-05), Windows hosts without start-time proof (P-ROPT-06),
terminal-launched or manually started OMP (P-TOGL-01), mobile-launched OMP (caller-render downgrade,
src/main/runtime/rpc/methods/agent-launch.ts:87-97), existing legacy OMP sessions (until adoption, ORCA-4), hosts whoseompdoes not satisfyorca-native-chat-v1(ORCA-12), and users without the structured-chat preference(
src/shared/structured-native-chat-launch-route.ts:77).3 remaining items
[-]Tracking: OMP Native Chat → ACP migration (v2 plan)[/-][+]Tracking: OMP Native Chat → ACP migration (v3 plan)[/+]