<!-- task=m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution plan=4 tag=REFACTOR milestone-task=inventory,decouple,retain-node -->

# D04 IOP provider 전용 실행 경계와 Chronos 연결점 폐쇄

## For the Implementing Agent

`CODE_REVIEW-cloud-G10.md`의 implementation-owned 섹션 작성은 필수다. predecessor 09의 exact PASS completion을 확인한 뒤 이 계획의 package/proto/config/consumer/contract 변경을 하나의 경계 transaction으로 적용하고 fresh verification output을 기록한다. active pair를 보존하고 review 준비 완료만 보고하며 finalization은 code-review agent만 수행한다. 차단 시 사용자에게 질문하거나 상태를 분류하지 말고 implementation-owned evidence 필드에 exact blocker, 시도한 명령·출력, 재개 조건만 남긴다.

## Background

승인된 D04는 이전 D02의 “IOP Node가 Chronos용 generic CLI execution/session을 계속 제공한다”는 방향을 폐기했다. Chronos Server/Chronos Node가 agent CLI, persistent session, terminal/PTY, workspace/tool 및 원격 제어를 소유하고, IOP는 model/provider/device 운영에 실제 필요한 실행·취소·상태·usage·lifecycle과 Edge wire만 유지한다. 따라서 기존 10의 execution rename, 11의 CLI provider rename, 12의 consumer closure를 이 task 하나로 흡수하되 CLI provider를 중립 이름으로 존치하지 않고 transfer 후 제거한다.

## Archive Evidence Snapshot

- 이 replan 직전에 미착수 active pair `PLAN-cloud-G10.md`와 `CODE_REVIEW-cloud-G10.md`를 각각 `plan_cloud_G10_3.log`, `code_review_cloud_G10_3.log`로 보존했다.
- 보존 pair에는 checked implementation item, actual verification output, verdict가 없었다. 따라서 구현 diff나 PASS evidence를 승계하지 않는다.
- 보존 pair의 감사에서 task-local delta 경로, untracked manifest에 대한 무효한 `git diff`, 실행 불가능한 predecessor prose, 이중 escape regex, 누락 consumer와 약한 audit oracle이 확인됐다. 이 plan은 stable fixture/addendum, executable fail-closed verification과 provider-only behavioral tests로 이를 대체한다.
- 보존 방향의 핵심 오류는 `packages/go/agentprovider/cli -> packages/go/provider/cli`, PTY/session/status 보존, AgentUsageStatus/SESSION_LIST/TERMINATE_SESSION wire compatibility 유지였다. D04가 이를 명시적으로 대체한다.
- 같은 task의 `plan_local_G08_0.log`와 `code_review_cloud_G08_0.log`는 이전 neutralization 분석의 파일 inventory 근거로만 사용하며, 새 책임 경계는 승인 SDD와 이 plan이 우선한다.
- 과거 11/12 child log는 별도 실행하지 않는다. 해당 provider/consumer/contract 범위는 이 plan의 REFACTOR-2~5에 흡수한다.
- 이번 독립 재검토에서 task09가 Task10으로 명시적으로 defer한 `control.proto`→Edge service/controlplane→Control Plane JSON→Flutter RuntimePanel domain-agent status/command chain과 Node `agent_kind=generic-node` 분류가 기존 Task10 write claim·forbidden oracle·review stub에서 누락된 것을 확인했다. REFACTOR-4~6이 이 표면을 provider/device 전용 경계로 닫는다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-chronos-extraction-decoupling.md`
- Milestone link: [Milestone 문서](agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-chronos-extraction-decoupling.md)
- Task ids:
  - `decouple`: task09가 허용한 transitional runtime exception까지 제거하고 IOP Agent/Chronos 작업 surface 부재와 clean build를 최종 증명한다.
  - `retain-node`: IOP provider 전용 Node 실행·취소·상태·usage·lifecycle과 Edge wire만 유지하고 Chronos 연결점을 닫는다.
- Completion mode: `milestone-task` evidence aggregation; this PASS alone does not check any Roadmap Task.

## Analysis

### Files Read

- `agent-roadmap/sdd/automation-runtime-bridge/iop-agent-chronos-extraction-decoupling/SDD.md`
- `agent-roadmap/sdd/automation-runtime-bridge/iop-agent-chronos-extraction-decoupling/user_review_1.log`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-chronos-extraction-decoupling.md`
- `scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv`
- `scripts/fixtures/iop-agent-chronos-transfer-state-v1.schema.json`
- `scripts/fixtures/iop-agent-chronos-transfer-state-v1.json`
- `agent-task/m-iop-agent-chronos-extraction-decoupling/08+07_cleanup_build_contract/PLAN-local-G07.md`
- `agent-task/m-iop-agent-chronos-extraction-decoupling/09+08_remove_agent_ui_close/PLAN-local-G08.md`
- `agent-contract/inner/iop-agent-cli-runtime.md`
- `proto/iop/runtime.proto`
- `packages/go/agentruntime/types.go`
- `packages/go/agentruntime/session.go`
- `packages/go/agentruntime/status.go`
- `packages/go/agentruntime/registry.go`
- `packages/go/agentruntime/failure.go`
- `packages/go/agentruntime/conformance_test.go`
- `packages/go/agentruntime/session_test.go`
- `packages/go/agentprovider/cli/cli.go`
- `packages/go/agentprovider/cli/profile.go`
- `packages/go/agentprovider/cli/persistent.go`
- `packages/go/agentprovider/cli/persistent_process.go`
- `packages/go/agentprovider/cli/codex_app_server.go`
- `packages/go/agentprovider/cli/codex_exec.go`
- `packages/go/agentprovider/cli/opencode_sse.go`
- `packages/go/agentprovider/cli/status/status.go`
- `packages/go/config/adapter_types.go`
- `packages/go/config/provider_types.go`
- `packages/go/config/config.go`
- `packages/go/config/edge_types.go`
- `packages/go/config/load.go`
- `packages/go/config/node_config_test.go`
- `packages/go/config/normalize.go`
- `packages/go/config/validate.go`
- `packages/go/events/events.go`
- `apps/node/internal/adapters/config_set.go`
- `apps/node/internal/adapters/factory.go`
- `apps/node/internal/adapters/vllm/request.go`
- `apps/node/internal/node/runtime_bridge.go`
- `apps/node/internal/node/command_handler.go`
- `apps/node/internal/node/cancel_handler.go`
- `apps/node/internal/router/router.go`
- `apps/edge/internal/node/mapper.go`
- `apps/edge/internal/node/mapper_test.go`
- `apps/edge/internal/edgevalidate/validate.go`
- `apps/edge/internal/service/run_wire.go`
- `apps/edge/internal/service/run_cancel.go`
- `apps/edge/internal/service/node_command.go`
- `apps/edge/internal/service/control_command.go`
- `apps/edge/internal/service/status_provider.go`
- `apps/edge/internal/service/run_command_test.go`
- `apps/edge/internal/service/run_dispatch_internal_test.go`
- `apps/edge/internal/controlplane/connector.go`
- `apps/edge/internal/controlplane/connector_test.go`
- `apps/edge/internal/node/registry.go`
- `apps/edge/internal/node/registry_test.go`
- `apps/edge/internal/node/store.go`
- `apps/edge/internal/node/store_test.go`
- `apps/edge/internal/configrefresh/classify.go`
- `apps/edge/internal/transport/connection_handlers.go`
- `apps/edge/internal/transport/integration_test.go`
- `apps/edge/internal/openai/route_resolution.go`
- `apps/edge/internal/opsconsole/console.go`
- `apps/edge/internal/opsconsole/console_test.go`
- `apps/edge/internal/opsconsole/status.go`
- `apps/control-plane/cmd/control-plane/http_views.go`
- `apps/control-plane/cmd/control-plane/fleet_handler_test.go`
- `apps/control-plane/internal/wire/edge_test.go`
- `apps/client/lib/control_plane_status_dto.dart`
- `apps/client/lib/control_plane_status_repository.dart`
- `apps/client/lib/widgets/runtime_panel.dart`
- `apps/client/lib/widgets/runtime_panel_sections.dart`
- `apps/client/test/control_plane_status_controller_test.dart`
- `apps/client/test/edge_nodes_panels_test.dart`
- `apps/client/test/provider_status_test.dart`
- `apps/client/test/runtime_panel_test.dart`
- `apps/client/test/support/client_test_harness.dart`
- `apps/edge/cmd/edge/root_config_command_test.go`
- `configs/edge.yaml`
- `proto/iop/control.proto`
- `proto/gen/iop/control.pb.go`
- `apps/client/lib/gen/proto/iop/control.pb.dart`
- `apps/client/lib/gen/proto/iop/control.pbjson.dart`
- `agent-contract/index.md`
- `agent-contract/inner/agent-runtime.md`
- `agent-contract/inner/control-plane-edge-wire.md`
- `agent-contract/inner/client-control-plane-wire.md`
- `agent-contract/inner/edge-node-runtime-wire.md`
- `agent-contract/inner/edge-config-runtime-refresh.md`
- `agent-contract/outer/openai-compatible-api.md`
- `agent-spec/input/openai-compatible-surface.md`
- `agent-spec/runtime/edge-node-execution.md`
- `packages/go/config/protocol_profile_test.go`
- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/project/domain/edge/rules.md`
- `agent-ops/rules/project/domain/control-plane/rules.md`
- `agent-ops/rules/project/domain/client/rules.md`
- `agent-ops/rules/project/domain/node/rules.md`
- `agent-ops/rules/project/domain/platform-common/rules.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-test/local/edge-smoke.md`
- `agent-test/local/node-smoke.md`
- `agent-test/local/platform-common-smoke.md`
- `docs/edge-local-dev-guide.md`
- `apps/edge/README.md`
- `README.md`
- `Makefile`
- `go.mod`

### SDD Criteria

- SDD는 `[승인됨]`, 잠금 `해제`이고 D04가 D02를 대체한다.
- 첫 줄 `milestone-task=inventory,decouple,retain-node` 가운데 S03/`decouple`과 S04/`retain-node`는 이 task의 direct closure evidence 범위다. S03 Evidence Map은 removed-path/reference audit와 IOP clean build를 요구하고, S04 Evidence Map은 provider execution focused test, contract regression, bridge/API/proto/config·CLI agent·PTY/terminal·workspace forbidden-reference audit를 요구한다. task09 evidence는 transitional `agentruntime`/CLI provider path를 exception으로 남겼으므로 S03 완료 evidence가 아니며 이 task의 final audit가 이를 흡수·대체한다.
- 같은 metadata의 S01/`inventory`는 D04 byte-baselined original manifest digest, versioned boundary delta/addendum digest와 effective disposition 재구성 조건을 위한 REFACTOR-1 기여 evidence다. original manifest의 10개 `kind=state` logical row와 task05 fixture의 supplemental `state:cache-root|state:temp-root` 2개는 manifest+addendum로 12개 exact logical ID를 이뤄야 한다. 최종 `inventory` 충족 판단은 task13의 effective matrix evidence까지 id별로 집계한 뒤 수행한다.
- 이 기준에 따라 REFACTOR-1이 original manifest를 수정하지 않고 task13용 D04 delta/addendum과 verifier tests를 stable `scripts/fixtures` 경로에 고정하며, REFACTOR-2~5가 최종 IOP remove/retain 결과를 실제 source와 living contract에 적용하고, REFACTOR-6이 S03 removed-path/clean-build와 S04 provider-boundary evidence를 동시에 검증한다.

### Verification Context

- 별도 handoff는 없다. 승인 SDD/Milestone, current manifest, runtime/provider source, Node/Edge consumers, proto/config, contract/spec/rules, local test profiles를 repository-native evidence로 사용했다.
- Task 03 완료 근거는 source revision, 303행, universe/duplicate 0을 증명한다. 이에 대응하는 current 303-row original manifest는 D04 replan이 SHA-256 `7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7`과 `retain-generic=137`로 별도 byte-baseline했으며, untracked 상태에서도 explicit SHA 검증으로 read-only 동일성을 증명한다.
- local checkout의 Go 1.24/protoc/Flutter profiles를 사용한다. 외부 host, provider credential, Chronos repository write나 live runtime은 필요하지 않다.
- proto 생성은 `make proto`와 `make proto-dart`만 사용하고 generated Go/Dart를 직접 편집하지 않는다.
- Confidence: high for ownership decision and symbol coverage; integration breadth가 크므로 focused/race/full tests와 deterministic negative scan을 모두 필수로 둔다.

### Test Coverage Gaps

- 기존 execution tests는 registry/emitter/failure를 커버하지만 session/PTY 제거 자체와 동일 `session_id` 비지속성은 negative scan, dependency pruning, repeated-run behavioral regression이 필요하다.
- 기존 Node tests는 run/cancel/provider registry/tunnel concurrency를 커버한다. CLI session list/terminate/quota/status 제거 뒤 command allowlist를 `capabilities|transport_status|ollama_api`로 닫고 unknown/`agent`/`shell` rejection, run-id-only cancel을 별도 focused tests로 고정한다.
- Edge mapper/config/service/OpenAI/opsconsole tests에 CLI/workspace/session fixtures가 넓게 퍼져 있다. 특히 `root_config_command_test.go`의 `adapters.cli` fixture와 `protocol_profile_test.go`의 silent legacy `cli -> ""` normalization을 neutral fixture 또는 explicit rejection으로 교체하되 standard OpenAI/Anthropic inference와 provider tool-calling tests는 삭제하지 않고 계속 통과시킨다.
- Task09가 명시적으로 Task10에 넘긴 RuntimePanel domain-agent 경계는 기존 plan의 write claim과 oracle에 빠져 있다. `control.proto`의 `EdgeDomainAgentSummary/domain_agents`, Edge `GetDomainAgents`와 `agent.status|agent.command`, Control Plane `domain_agents` HTTP projection, Flutter `EdgeDomainAgentSummaryView`/Domain Agents card·command dialog 및 fixture를 모두 제거하거나 provider/device 전용 `node.status|provider.command` 경계로 바꾸는 proto/Go/Dart regression이 필요하다.
- `agent_kind=generic-node`는 실제로 값 하나만 허용하면서 Node config/store/registry/status/event metadata를 Agent 분류로 노출한다. IOP Node가 Chronos Node와 별개인 provider/device 실행자라는 D04 경계상 이 필드·normalizer·metadata와 관련 fixture를 삭제하고 Node 연결/lifecycle/provider snapshot만 유지하는 회귀가 필요하다.
- historical manifest + delta + addendum merge의 coverage, sort, enum 조합, digest와 effective worktree 판정에는 deterministic verifier와 missing/duplicate/unknown/invalid-combination/wrong-digest/residual-path negative tests가 필요하다. task05 state fixture도 broad category count가 아니라 original 10 logical ID와 supplemental 2 logical ID의 exact set equality로 연결해야 한다.

### Symbol References

- 제거: `packages/go/agentprovider/cli/**` 전체, `packages/go/agentruntime/session.go`, `session_test.go`, `status.go`, quota probe, legacy `agent-contract/inner/iop-agent-cli-runtime.md`, `CLIConf`/`CLIProfileConf`/`CompletionMarkerConf`/`CategoryCLI`, provider command/args/env/mode/resume/output-format, `adapters.cli`/legacy type `cli`, `RunSessionMode`, `TERMINATE_SESSION`, `USAGE_STATUS`, `SESSION_LIST`, `AgentUsageStatus`, `WorkspaceRequired`/`workspace_required`, `metadata.workspace`, `RunRequest.workspace`와 VLLM request의 `client workspace root|current-workspace commands|Do not prepend cd` 실행 지시, `EdgeDomainAgentSummary`/`domain_agents`, `GetDomainAgents`, `agent.status|agent.command`, RuntimePanel domain-agent DTO/section/dialog, Node config/store/registry/status/event의 `agent_kind|AgentKind|generic-node|MetadataAgentKind` 분류.
- 이동/중립화: provider 실행에 필요한 `Provider`, `Registry`, `ExecutionSpec`, events, token Usage, provider snapshot/tunnel/cancel/capability contracts만 `packages/go/execution`으로 이동한다.
- 유지: standard OpenAI/Anthropic inference, tool-calling request/response normalization, provider command allowlist `capabilities|transport_status|ollama_api`, opaque run correlation `session_id`와 generic `background` lifecycle은 persistent agent session ownership으로 사용되지 않는 범위에서 유지한다.
- 모든 old runtime import, CLI/schema, domain-agent status/command, Node agent-kind call site는 Modified Files Summary의 exact claim과 final `rg` audit로 닫는다.

### Split Judgment

- task directory `10+09`의 predecessor 09 exact PASS `complete.log`는 현재 missing이고 구현 시작 전에 active/archive candidate 중 정확히 하나로 확인해야 한다.
- execution types, runtime/control proto, Node mapper/handler, Edge controlplane/service, Control Plane DTO, Flutter RuntimePanel, config와 contract/spec는 같은 wire boundary를 공유한다. 일부만 변경하면 generated code 또는 caller가 제거된 session/CLI/domain-agent 의미를 다시 노출하므로 독립 PASS 가능한 child로 나누지 않는다.
- old 11 provider 및 old 12 consumer closure를 이 task가 흡수한다. 별도 active pair를 만들지 않는다.
- PASS oracle은 delta/addendum exact schema/digest, state fixture의 original 10 + supplemental 2 logical ID exact coverage 및 verifier negative suite, task09 transitional exception을 포함한 effective `transfer-remove` filesystem path zero, provider command/session/cancel behavioral regressions, standard inference regressions, proto/Dart generation, IOP clean build/full Go suite와 구조 검증된 audit가 모두 통과하는 것이다. 이 PASS가 S03과 S04를 동시에 닫고 S01은 닫지 않는다.

### Scope Rationale

- Chronos Server/Node, Chronos API/proto/config/registry/bridge는 이 IOP repository에 구현하지 않는다.
- IOP 외부 inference API는 일반 client가 사용할 수 있게 유지한다. Chronos도 향후 그 API의 특별하지 않은 client일 뿐이며 전용 연결점은 추가하지 않는다.
- process primitive는 concrete model/provider/device lifecycle에 필요한 범위만 non-Agent `execution` 이름으로 남긴다. arbitrary command, shell, PTY, terminal, workspace mutation 또는 agent session gateway는 금지한다.
- `session_id`/`background`는 run correlation/lifecycle에 필요한 generic wire로만 남기며 list/resume/terminate semantics를 갖지 않는다.
- D04 byte-baselined original ownership manifest와 transfer bundle, Chronos repository, roadmap/SDD는 구현 범위에서 수정하지 않는다. task13이 archive를 읽지 않고 소비하도록 delta/addendum/digest/verifier는 task child가 아니라 stable `scripts/**`에 둔다.

### Final Routing

- `evaluation_mode=isolated-reassessment`, finalizer=`finalize-task-policy.sh`, mode=`pair`.
- Build closures 모두 true. Scores=`2,2,2,2,2`, grade=`G10`, base/route=`grade-boundary`, lane=`cloud`.
- Review closures 모두 true. Scores=`2,2,2,2,2`, route=`official-review`, lane=`cloud`, grade=`G10`.
- `large_indivisible_context=false`; positive loop risks=`temporal_state, concurrent_consistency, boundary_contract, structured_interpretation` (4); `review_rework_count=0`; `evidence_integrity_failure=false`; capability gap 없음.
- Canonical files: `PLAN-cloud-G10.md`, `CODE_REVIEW-cloud-G10.md`.

## Dependencies and Execution Order

1. `09+08_remove_agent_ui_close` must have exactly one matching PASS `complete.log`. Resolve only the encoded predecessor index 09 active/archive candidates and do not begin source changes while it is missing or ambiguous.
2. Freeze and validate the stable D04 delta/addendum and their digests against the D04 byte-baselined original manifest before deleting/moving source.
3. Remove CLI/session/terminal/workspace surfaces and move only provider-minimal execution types; regenerate proto consumers.
4. Close Node and Edge/config consumers in the same transaction.
5. Update living contract/spec/project rules through `update-contract` and `update-spec`, then run focused/race/full audits.

## Implementation Checklist

- [ ] Refuse to start until predecessor `09+08_remove_agent_ui_close` has exactly one PASS `complete.log`.
- [ ] Create and digest stable all-and-only `retain-generic` delta plus disjoint D04 surface addendum without modifying the 303-row D04 byte-baselined original manifest; keep its 10 `state:` rows in the original input, add only `state:cache-root|state:temp-root` as supplemental addendum rows, and prove exact 12-ID task05 state-fixture linkage and canonical logical-ID digest plus verifier negative cases as task13-owned S01 evidence without claiming `inventory` completion.
- [ ] Remove CLI agent provider/profile, persistent session, PTY/terminal, workspace/status/quota surfaces, the legacy `iop-agent-cli-runtime` contract and every task09 transitional exception; retain only non-Agent provider lifecycle/execution primitives and close S03 removal scope.
- [ ] Update IOP Node consumers with an explicit `capabilities|transport_status|ollama_api` provider-command allowlist, unknown/agent/shell rejection, non-persistent opaque `session_id`, and run-id-only cancel; remove VLLM workspace execution instructions while preserving provider status/usage/lifecycle and generic caller-provided tool names.
- [ ] Update every runtime/control proto, Edge config/mapper/service/controlplane/OpenAI/opsconsole, Control Plane DTO and Flutter RuntimePanel consumer, including root config and protocol-profile fixtures; remove `domain_agents`, `agent.status|agent.command` and `agent_kind`, expose only `node.status|provider.command` with the provider command allowlist, regenerate Go/Dart, and preserve standard OpenAI/Anthropic inference and tool calling.
- [ ] Reconcile active execution, Edge-Node, Control Plane-Edge contracts, specs, project/client/control-plane/domain rules, docs and readability through update-contract/update-spec; physically delete the legacy standalone contract and state the D04 boundary without adding a Chronos bridge.
- [ ] Run fresh fixture/effective-path, proto, focused, race, IOP clean-build, fail-closed dependency and forbidden-reference verification covering domain-agent/agent-kind source and generated surfaces; absorb task09 evidence and write structurally validated exact command/output/exit evidence with S03/S04 PASS markers to `node-boundary-audit.log`.
- [ ] Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output.

### [REFACTOR-1] Immutable manifest 위의 stable D04 delta/addendum와 verifier

**Problem**

Task 03은 303-row inventory와 universe closure를 증명하고, 이에 대응하는 current original manifest bytes는 D04 replan SHA baseline에 묶여 재작성할 수 없다. 그 `retain-generic` 결정에는 이제 Chronos가 소유해야 하는 CLI/session/terminal/workspace/status 자산이 포함돼 있다. 또한 root config tests, generated consumers, living contract/spec/rule/doc와 새 `packages/go/execution` successor처럼 original manifest 밖 D04 surface도 task13이 archive 없이 재구성할 stable inventory가 필요하다. task05 state fixture가 표현해야 할 logical state는 original manifest의 10개뿐 아니라 cache/temp root 2개도 포함하므로, category-level coverage가 아니라 manifest+addendum와 1:1 대응하는 12-ID 계약이 필요하다.

**Solution**

stable `scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv`는 header `path prior_disposition final_action final_owner final_path reason_code`를 사용하고 original의 all-and-only 137 `retain-generic` path를 bytewise sort/unique로 정확히 한 번 포함한다. action은 `retain-rewrite|transfer-remove`, owner는 `iop|chronos`; 조합은 `retain-rewrite+iop+nonempty final_path` 또는 `transfer-remove+chronos+-`; reason은 `iop-provider-boundary|iop-neutral-surface|chronos-agent-cli|chronos-session-terminal-workspace|chronos-agent-status`만 허용한다.

stable `scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv`는 header `path surface_kind final_action final_owner final_path reason_code`를 사용한다. path는 filesystem path 또는 `state:` logical ID이며 original/delta key와 겹치지 않고 bytewise sort/unique다. `surface_kind=consumer|generated|contract|spec|rule|doc|neutral-successor|verification|state`, `final_action=retain-rewrite|transfer-remove|create-neutral`만 허용한다. 일반 surface 조합은 `retain-rewrite+iop+same-path`, `create-neutral+iop+same-path`, `transfer-remove+chronos+-`이고 reason에는 위 다섯 값과 `boundary-verification`을 허용한다. `surface_kind=state`는 exact key `state:cache-root|state:temp-root`, `transfer-remove+chronos+-`, `chronos-session-terminal-workspace` 조합으로 각각 정확히 한 번만 존재해야 한다. original manifest의 기존 10 `state:` row는 delta/addendum으로 복제하지 않는다. addendum은 REFACTOR-2~5의 original 밖 D04 source/generated/contract/spec/rule/doc 및 neutral successor exact set을 고정하되 task-local review/audit는 제외한다. `create-neutral` path는 delta의 `retain-rewrite.final_path`와 일치할 수 있고 그 외 source key overlap은 금지한다.

`scripts/verify-iop-agent-chronos-boundary.py`는 original을 path key로 delta left join하고 137 override를 강제한 뒤 disjoint addendum을 union한다. unmatched original `transfer`는 `transfer-remove/chronos/-`, `reference`는 `reference/none/-`로 보존한다. required `--state-fixture`에서 unique `.records[].logical_id`를 읽고, original `kind=state` exact 10개와 addendum `surface_kind=state` exact 2개의 union이 fixture의 12개 ID와 정확히 같은지 검증한다. fixture ID를 UTF-8 bytewise/C locale로 sort하고 각 ID 뒤 trailing newline을 둔 canonical stream(`jq -r '.records[].logical_id' <fixture> | LC_ALL=C sort`)의 SHA-256을 재계산해 required `--expected-state-logical-id-sha256=9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9`와 대조한다. missing/unknown/duplicate/unsorted/invalid enum·조합·digest·state linkage를 hard fail한다. `--iop-root` worktree 판정은 `state:` logical ID를 제외한 filesystem surface만 대상으로 모든 effective `transfer-remove` source path absence, `retain-rewrite|create-neutral` final path presence, delta `retain-rewrite`의 final path가 source와 다를 때 old source absence를 확인한다. 두 `.sha256`은 repo root에서 `sha256sum scripts/fixtures/<file>.tsv > scripts/fixtures/<file>.sha256`로 생성해 repo-relative filename을 갖는 single canonical line으로 고정한다. stdout은 manifest/delta/addendum digest, row counts, `state_logical_id_sha256=9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9`, `state_manifest_records=10`, `state_supplemental_records=2`, `state_supplemental_ids=state:cache-root,state:temp-root`, `state_fixture_records=12`, `state_coverage_missing=0`, `state_coverage_unknown=0`, effective action counts와 filesystem residual/missing counts를 deterministic `key=value` 순서로 출력한다. `scripts/verify_iop_agent_chronos_boundary_test.py`는 missing/duplicate/unknown path, invalid action-owner-path, wrong manifest/delta/addendum/logical-ID digest, missing/duplicate/unknown state logical ID, original-state addendum overlap, supplemental-state mismatch, residual/missing worktree와 renamed-source residual fixture가 모두 nonzero인지 검증한다.

**Modified Files and Checklist**

- [ ] `scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv`, `.sha256` — 137-row delta와 canonical digest 생성.
- [ ] `scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv`, `.sha256` — original 밖 D04 surface 및 supplemental `state:cache-root|state:temp-root`와 canonical digest 생성.
- [ ] `scripts/verify-iop-agent-chronos-boundary.py` — original+delta+addendum+12-ID state fixture/effective worktree/audit parser 구현.
- [ ] `scripts/verify_iop_agent_chronos_boundary_test.py` — positive, state linkage 및 필수 negative matrix 구현.

**Test Strategy**

새 Python unittest를 작성한다. temp fixture만 사용하고 real manifest의 expected digest/happy path, original 10 + supplemental 2 state logical ID의 exact equality와 각 malformed/residual case가 nonzero인지 검증한다.

**Verification**

- `printf '%s  %s\n' 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv | sha256sum -c -`
- `sha256sum -c scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256`
- `python3 scripts/verify_iop_agent_chronos_boundary_test.py`
- `python3 scripts/verify-iop-agent-chronos-boundary.py --manifest scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv --expected-manifest-sha256 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 --delta scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv --delta-sha256 scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 --addendum scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv --addendum-sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256 --state-fixture scripts/fixtures/iop-agent-chronos-transfer-state-v1.json --expected-state-logical-id-sha256 9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9 --iop-root . --check-only`

### [REFACTOR-2] CLI/session/terminal 제거와 provider-minimal execution package

**Problem**

`agentprovider/cli`는 Codex/OpenCode/Claude/Antigravity 등 external agent CLI, persistent logical sessions, app-server/SSE, TUI/PTY, workspace CWD와 quota/status를 구현한다. 이를 `provider/cli`로 rename하면 이름만 중립화하고 Chronos 책임을 IOP에 남긴다. `agentruntime`도 provider primitives와 agent session/PTY/status를 섞고 있다.

**Solution**

transfer bundle에 이미 전달된 `packages/go/agentprovider/cli/**` 전체를 IOP에서 삭제하고 successor `packages/go/provider/cli`는 만들지 않는다. `agentruntime` 중 registry/emitter/failure/provider execution/tunnel/cancel/capability/token usage만 `packages/go/execution`으로 옮기며 `session.go`/`session_test.go`/`status.go`와 persistent session/workspace/status interfaces를 제거한다. `ExecutionSpec`에는 provider run에 필요한 target/input/policy/timeout/metadata와 opaque correlation만 남기고 arbitrary command/shell/workspace semantics를 넣지 않는다. 같은 `session_id`로 반복 실행해도 process/worker/store를 재사용하지 않으며 `background`도 한 run의 lifecycle flag일 뿐 resume/list/terminate handle이 아니다. `github.com/creack/pty`와 CLI-only dependency를 `go.mod/go.sum`에서 제거한다.

**Modified Files and Checklist**

- [ ] Modified Files Summary의 모든 `packages/go/agentprovider/cli/**`와 `packages/go/agentruntime/**` exact row — 제거.
- [ ] Modified Files Summary의 모든 `packages/go/execution/*.go` exact row — provider-minimal successor와 tests 생성.
- [ ] `go.mod`, `go.sum` — PTY/CLI-only dependency 제거.

**Test Strategy**

기존 registry/emitter/failure conformance tests를 successor package로 옮기고 opaque correlation 비지속성 test를 추가한다. 삭제 대상 session/PTY/status tests는 의미를 중립화해 보존하지 않는다.

**Verification**

- `go test -count=1 ./packages/go/execution`
- `go test -race -count=1 ./packages/go/execution`
- `test ! -e packages/go/agentruntime && test ! -e packages/go/agentprovider/cli && test ! -e packages/go/provider/cli`
- `bash -o pipefail -c 'deps=$(go list -deps ./...) || exit; if rg -q "github.com/creack/pty" <<<"$deps"; then exit 1; else status=$?; test "$status" -eq 1; fi'`

### [REFACTOR-3] IOP Node provider 운영 경계

**Problem**

Node adapter factory/bootstrap/router/handlers가 CLI config, session mode/workspace, session list/terminate와 AgentUsageStatus를 wire와 runtime으로 변환한다. hidden quota probe도 agent CLI status adapter를 직접 실행한다. VLLM request는 `run_commands` tool 이름 자체와 별개로 client workspace root에서 command를 실행하고 `cd`를 제어하는 system instruction을 주입한다.

**Solution**

모든 runtime import를 `packages/go/execution`으로 전환한다. CLI adapter registration/factory와 quota probe를 제거한다. run/cancel-by-run, provider registry/lifecycle, provider status snapshot, token usage와 provider tunnel은 유지한다. Node command는 `capabilities`, `transport_status`, provider-management 전용 `ollama_api`만 허용하고 generic handler를 provider-command interface로 좁힌다. proto unknown 및 domain `agent`/`shell` command는 adapter lookup 전에 reject한다. session list, terminate-session, CLI quota/status와 workspace 전달을 삭제하고 tests는 Ollama/OpenAI-compatible/vLLM 또는 neutral stub provider로 재작성한다. VLLM request에서 exact workspace/command execution instruction을 제거하되 caller가 제공한 일반 tool name `run_commands`와 standard tool-calling request/response test는 유지한다. 동일 opaque `session_id` 두 run이 별도 provider invocation을 만들고 state를 재개하지 않으며 cancel은 `run_id`만 받는다는 regression을 추가한다.

**Modified Files and Checklist**

- [ ] Modified Files Summary의 모든 `apps/node/**` REFACTOR-3 exact row — execution import, factory/router/handler/store/test를 provider-only 경계로 갱신하고 VLLM workspace execution instruction을 제거.
- [ ] `apps/node/internal/node/command_test.go`, `runtime_bridge_test.go`, `run_cancel_test.go` — allowlist/rejection, session correlation-only, run-id cancel regressions 추가.

**Test Strategy**

`TestNodeCommandProviderAllowlist`, `TestNodeCommandRejectsUnknownAgentAndShell`, `TestSessionIDIsCorrelationOnly`, `TestCancelByRunIDOnly`를 작성하고 기존 provider tunnel/concurrency 및 generic caller-provided `run_commands` tool-calling tests를 유지한다.

**Verification**

- `go test -count=1 ./apps/node/...`
- `go test -race -count=1 ./apps/node/internal/node ./apps/node/internal/router ./apps/node/internal/adapters/...`
- `go vet ./packages/go/execution ./apps/node/...`
- `go test -count=1 ./apps/node/internal/node -run 'Test(NodeCommandProviderAllowlist|NodeCommandRejectsUnknownAgentAndShell|SessionIDIsCorrelationOnly|CancelByRunIDOnly)'`

### [REFACTOR-4] Edge wire/config/API consumer closure

**Problem**

runtime proto, Edge config catalog/mapper/validator, A2A/console defaults, Node command service, OpenAI route metadata가 CLI agent profile, persistent session, terminal workspace와 status commands를 public/internal contract로 노출한다. Task09가 Task10에 넘긴 `control.proto:100,110-116`, `control_command.go:61-148`, `connector.go:48,378`, Control Plane `http_views.go:43-70,121-130,256,278-292,384`와 Flutter `control_plane_status_dto.dart:168-233,293-328`, `runtime_panel.dart:72-185,265,416-431`, `runtime_panel_sections.dart:4-189`의 domain-agent status/command chain은 기존 write claim에 없었다. Node config/store/registry/status/event의 단일값 `agent_kind=generic-node`도 IOP Node를 Agent 종류로 계속 분류한다.

**Solution**

`runtime.proto`에서 CLI adapter/profile/completion schema, RunSessionMode, workspace, terminate-session, usage-status/session-list와 AgentUsageStatus를 제거하고 compatibility 규칙에 따라 removed field numbers/names를 reserve한다. `control.proto`에서는 `EdgeStatusResponse` field 9/name `domain_agents`와 `EdgeDomainAgentSummary` field/name을 reserve/tombstone 처리해 live message를 제거한다. `make proto`/`make proto-dart`로 generated consumers를 갱신한다.

Edge command operation은 `health.check|node.status|provider.command`만 허용한다. `node.status`는 Node ID/alias/connected lifecycle만 보고하고 Agent kind를 만들지 않는다. `provider.command`는 `capabilities|transport_status|ollama_api`만 Node command로 변환하며 old `agent.status|agent.command`, `GetDomainAgents`, `agent_kind|AgentKind|generic-node|MetadataAgentKind`는 config/store/registry/status/connector/event/HTTP DTO에서 제거한다. Control Plane fleet/status JSON은 Node/provider capability와 provider snapshot만 투영한다. RuntimePanel은 Domain Agents section/card를 삭제하고 Node Status/Provider Command UI만 남겨 exact operation을 전송하며 provider command 이름을 위 allowlist로 제한한다.

config에서 CLI category/adapters/profile과 provider `command|args|env|mode|resume_args|output_format`을 제거하고 old YAML/legacy type `cli`를 silent-ignore하지 않고 contextual validation error로 거부한다. `root_config_command_test.go`의 unrelated validation fixture는 Ollama/OpenAI-compatible neutral provider로 바꾸고 `protocol_profile_test.go`는 explicit legacy CLI rejection을 검증한다. sample/default A2A·console routing을 inference provider 또는 disabled neutral state로 바꾸고 Edge mapper/validator/provider scheduling/opsconsole/service/OpenAI code에서 CLI/session lifecycle/workspace 해석을 제거한다. 일반 OpenAI/Anthropic provider selection, passthrough/normalized inference, standard tool-calling/validation, token usage와 cancel-by-run은 유지한다.

**Modified Files and Checklist**

- [ ] `proto/iop/runtime.proto`와 generated Go/Dart exact rows — removed numbers/names reserve와 regeneration.
- [ ] `proto/iop/control.proto`, `proto/gen/iop/control.pb.go`, `apps/client/lib/gen/proto/iop/control.pb.dart`, `control.pbjson.dart` — domain-agent message/field tombstone과 regeneration.
- [ ] Modified Files Summary의 `packages/go/config/**`, `configs/**`, `apps/edge/**` REFACTOR-4 exact rows — CLI/arbitrary process/session/workspace 및 `agent_kind`, domain-agent status/command 소비 제거.
- [ ] Modified Files Summary의 `apps/control-plane/**`, `apps/client/lib/control_plane_status_dto.dart`, `widgets/runtime_panel*.dart`와 client tests — domain-agent projection/card/fixture를 제거하고 `node.status|provider.command` provider-only UX로 갱신.
- [ ] `apps/edge/cmd/edge/root_config_command_test.go`, `packages/go/config/protocol_profile_test.go` — neutral fixture와 legacy rejection 갱신.

**Test Strategy**

기존 Edge/Node/config/OpenAI/opsconsole regression을 갱신한다. `TestLegacyProviderCLIRejected`와 `TestConfigCheckRejectsLegacyCLIProcessFields`는 old CLI YAML/type/arbitrary process fields가 contextual error로 거부됨을 검증한다. Edge service/controlplane과 Control Plane tests는 `domain_agents`, `agent.status|agent.command`, `agent_kind`가 없고 `node.status|provider.command`가 provider allowlist만 전달함을 검증한다. RuntimePanel tests는 Domain Agents card/fixture가 없고 Node Status/Provider Command gating과 operations history가 유지됨을 검증한다. standard inference/tool-calling tests는 그대로 유지한다.

**Verification**

- `make proto`
- `make proto-dart`
- `go test -count=1 ./packages/go/config ./apps/edge/internal/node ./apps/edge/internal/edgevalidate ./apps/edge/internal/service ./apps/edge/internal/controlplane ./apps/edge/internal/openai ./apps/edge/internal/opsconsole ./apps/control-plane/...`
- `go test -count=1 ./packages/go/config ./apps/edge/cmd/edge -run 'Test(LegacyProviderCLIRejected|ConfigCheckRejectsLegacyCLIProcessFields)'`
- `go test -race -count=1 ./apps/edge/internal/service ./apps/edge/internal/openai`
- `make client-test`

### [REFACTOR-5] Living contract/spec/rule/doc D04 동기화

**Problem**

active Agent Runtime, Edge-Node wire/config, OpenAI contract/spec와 domain rules가 CLI/native normalized route, workspace authoring handoff, session list/terminate/status compatibility를 정당화한다.

**Solution**

`update-contract`로 `agent-runtime.md`를 provider-minimal `execution-runtime.md`로 대체하고 Edge-Node wire/config/OpenAI 및 Control Plane-Edge contracts와 index를 동기화한다. task08이 active index에서 분리한 `agent-contract/inner/iop-agent-cli-runtime.md`는 original manifest의 `transfer/remove` disposition대로 이 task에서 물리 삭제하며 task14 migration reference로 남기지 않는다. `update-spec`으로 Edge-Node execution과 OpenAI surface를 갱신한다. project rule과 edge/node/platform/control-plane/client/testing domain rules, README, tracked API/Edge guide와 readability pointers에서 CLI agent/session/terminal/workspace/domain-agent/agent-kind ownership을 제거하되 “CLI command”라는 일반 운영 도구 용어와 standard provider tool-calling은 혼동해 삭제하지 않는다. Chronos API/bridge/target/registry 계약은 추가하지 않는다.

**Modified Files and Checklist**

- [ ] Modified Files Summary의 `agent-contract/**` REFACTOR-5 exact rows — execution contract 전환과 legacy standalone contract 삭제.
- [ ] Modified Files Summary의 `agent-spec/**`, project domain rule, README/docs/test/readability exact rows — living pointer와 검증 기준 동기화.

**Test Strategy**

새 product test file은 없다. contract/index/spec pointer 정합성, plan validator, readability audit와 최종 forbidden scan으로 검증한다.

**Verification**

- `test ! -e agent-contract/inner/agent-runtime.md && test ! -e agent-contract/inner/iop-agent-cli-runtime.md && test -e agent-contract/inner/execution-runtime.md`
- `python3 agent-ops/skills/common/orchestrate-agent-task-loop/scripts/dispatch.py --workspace . --validate-plan agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/PLAN-cloud-G10.md`
- `make readability-audit`

### [REFACTOR-6] S03/S04 combined closure와 forbidden-reference audit

**Problem**

task09의 decoupling audit는 transitional `packages/go/agentruntime`과 `packages/go/agentprovider/cli`를 후속 exception으로 허용했고, RuntimePanel domain-agent status/command wire/runtime neutralization을 Task10에 명시적으로 defer했다. 따라서 그 evidence만으로 S03을 닫을 수 없고, compile PASS만으로도 arbitrary CLI command/session/terminal/workspace gateway, `control.proto` domain-agent projection, Edge/Control Plane/Flutter agent operations 또는 Node `agent_kind` 분류가 사라졌는지 증명할 수 없다. 일반 inference/tool calling이 실수로 제거되지 않았는지도 별도로 증명해야 한다. Task07이 제거한 `packages/go/agentconfig|agentguard|agentworkspace`도 final S03 absence oracle에 명시하지 않으면 재등장을 놓칠 수 있다.

**Solution**

task09 removal evidence를 입력으로 흡수하되 transitional exception은 승계하지 않는다. `node-boundary-audit.log`는 `audit_schema=iop-agent-chronos-node-boundary-v1`, `source_task09_audit=agent-task/m-iop-agent-chronos-extraction-decoupling/09+08_remove_agent_ui_close/decoupling-audit.log`, `source_task09_s03_completion=deferred_to_task_10`, `manifest_sha256=7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7`, exact delta/addendum digest, `state_logical_id_sha256=9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9`, `state_manifest_records=10`, `state_supplemental_records=2`, `state_supplemental_ids=state:cache-root,state:temp-root`, `state_fixture_records=12`, `state_coverage_missing=0`, `state_coverage_unknown=0`, `effective_transfer_remove_residuals=0`, `effective_retain_create_missing=0`, `node_command_allowlist=capabilities,transport_status,ollama_api`, `session_id_semantics=correlation-only`, `cancel_semantics=run-id-only`, `iop_clean_build=PASS`, `standard_inference_tool_calling=PASS`, `s03=PASS`, `s04=PASS`를 각각 exact line으로 가진다. required command id `boundary-fixtures|proto|proto-dart|focused|behavior|config-rejection|race|vet|client|readability|build-local|absence|dependency|forbidden-agent|forbidden-config|forbidden-legacy-normalization|forbidden-provider-process|forbidden-proto|forbidden-chronos|full-go`마다 `[command:<id>]`, exact `command=`, `stdout-begin`, `stdout-end`, `stderr-begin`, `stderr-end`, `exit=0`, `[/command:<id>]` block을 저장한다. `forbidden-agent`는 legacy CLI/runtime뿐 아니라 `EdgeDomainAgentSummary|domain_agents|domainAgents|GetDomainAgents|RuntimePanelDomainAgentsSection|EdgeDomainAgentSummaryView|agent.status|agent.command|agent_kind|AgentKind|NormalizeAgentKind|AgentKindGenericNode|MetadataAgentKind|generic-node`를 source/config/contract/rule/doc/generated roots에서 fail-closed로 거부한다. `forbidden-proto`는 runtime proto/generated와 control proto/generated 모두에서 live removed type/field/accessor가 없고 source에 removed field number/name tombstone이 있음을 확인한다. `forbidden-chronos`는 Chronos import, `/config/workspace/chronos`, `CHRONOS_`, Target/Registry/Bridge/Server/Node/Control/Connector/Gateway의 upper/lower camel·snake·kebab 연결 표기를 code/proto/config/active contract/spec roots에서 fail-closed로 거부한다. boundary verifier의 optional `--audit-log`가 중복/누락 block, nonzero exit, marker/digest/state linkage mismatch와 malformed capture를 hard fail한다. negative scan은 exact agent-specific schema/path/symbol만 금지하고 일반 “CLI” 운영 명령, opaque session correlation, provider tool calling은 허용 근거를 기록한다.

**Modified Files and Checklist**

- [ ] `agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/node-boundary-audit.log` — required markers와 command blocks의 actual output/exit capture.
- [ ] `agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/CODE_REVIEW-cloud-G10.md` — implementation decisions와 actual verification evidence.

**Test Strategy**

새 별도 audit test file은 만들지 않는다. boundary verifier unittest가 audit parser malformed/missing/nonzero cases를 포함하고 Final Verification이 real audit를 재검증한다.

**Verification**

- `go test -count=1 ./apps/node/internal/adapters/openai_compat ./apps/node/internal/adapters/vllm ./apps/edge/internal/openai`
- `go test -count=1 ./...`
- `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'packages/go/agentprovider/cli|packages/go/provider/cli|packages/go/agentruntime|CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|CLIConf|CLIProfileConf|CompletionMarkerConf|CategoryCLI|RunSessionMode|TERMINATE_SESSION|NODE_COMMAND_TYPE_USAGE_STATUS|NODE_COMMAND_TYPE_SESSION_LIST|AgentUsageStatus|WorkspaceRequired|workspace_required|metadata\.workspace|quota-probe|client workspace root|current-workspace commands|Do not prepend cd|EdgeDomainAgentSummary|domain_agents|domainAgents|GetDomainAgents|RuntimePanelDomainAgentsSection|EdgeDomainAgentSummaryView|agent\.status|agent\.command|Agent Status|Agent Command|agent_kind|AgentKind|NormalizeAgentKind|AgentKindGenericNode|MetadataAgentKind|generic-node' apps packages proto configs agent-contract agent-spec agent-ops/rules/project docs README.md go.mod go.sum`
- `bash -c 'rg --sort path -n "$1" --glob "!**/*_test.go" "${@:2}"; status=$?; test "$status" -eq 1' _ '(^[[:space:]]+cli:[[:space:]]*$|type:[[:space:]]*cli([[:space:]]|$)|category:[[:space:]]*cli([[:space:]]|$)|return[[:space:]]+"cli")' packages/go/config apps/edge/cmd/edge configs`
- `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ '\{"cli",[[:space:]]*""\}' packages/go/config/protocol_profile_test.go`
- `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'mapstructure:"(command|args|env|mode|resume_args|output_format)"' packages/go/config/provider_types.go`
- `bash -c 'rg --sort path -n "$1" proto/iop/runtime.proto proto/iop/control.proto; source_status=$?; rg --sort path -n "$2" proto/gen/iop/runtime.pb.go proto/gen/iop/control.pb.go apps/client/lib/gen/proto/iop/runtime.pb.dart apps/client/lib/gen/proto/iop/runtime.pbenum.dart apps/client/lib/gen/proto/iop/runtime.pbjson.dart apps/client/lib/gen/proto/iop/control.pb.dart apps/client/lib/gen/proto/iop/control.pbjson.dart; generated_status=$?; test "$source_status" -eq 1 && test "$generated_status" -eq 1' _ 'message[[:space:]]+(CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|AgentUsageStatus|EdgeDomainAgentSummary)|enum[[:space:]]+RunSessionMode|workspace_required[[:space:]]*=|[[:space:]]workspace[[:space:]]*=[[:space:]]*[0-9]+|domain_agents[[:space:]]*=' '(^|[^[:alnum:]_])(type|class)[[:space:]]+(CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|AgentUsageStatus|RunSessionMode|EdgeDomainAgentSummary)([^[:alnum:]_]|$)|RunSessionMode_|GetWorkspace|workspaceRequired|CLI(AdapterConfig|ProfileConfig|CompletionMarker)\$json|AgentUsageStatus\$json|GetDomainAgents|domainAgents'`
- `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'git\.toki-labs\.com/toki/chronos|/config/workspace/chronos|CHRONOS_|[Cc]hronos(Target|Registry|Bridge|Server|Node|Control|Connector|Gateway)|chronos_(target|registry|bridge|server|node|control|connector|gateway)|chronos-(target|registry|bridge|server|node|control|connector|gateway)' apps packages proto configs agent-contract agent-spec`
- `python3 scripts/verify-iop-agent-chronos-boundary.py --manifest scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv --expected-manifest-sha256 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 --delta scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv --delta-sha256 scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 --addendum scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv --addendum-sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256 --state-fixture scripts/fixtures/iop-agent-chronos-transfer-state-v1.json --expected-state-logical-id-sha256 9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9 --iop-root . --audit-log agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/node-boundary-audit.log --check-only`
- `git diff --check`

## Modified Files Summary

| File | Item |
|------|------|
| `agent-contract/index.md` | REFACTOR-5 |
| `agent-contract/inner/agent-runtime.md` | REFACTOR-5 |
| `agent-contract/inner/control-plane-edge-wire.md` | REFACTOR-5 |
| `agent-contract/inner/edge-config-runtime-refresh.md` | REFACTOR-5 |
| `agent-contract/inner/edge-node-runtime-wire.md` | REFACTOR-5 |
| `agent-contract/inner/execution-runtime.md` | REFACTOR-5 |
| `agent-contract/inner/iop-agent-cli-runtime.md` | REFACTOR-5 |
| `agent-contract/outer/openai-compatible-api.md` | REFACTOR-5 |
| `agent-ops/rules/project/domain/client/rules.md` | REFACTOR-5 |
| `agent-ops/rules/project/domain/control-plane/rules.md` | REFACTOR-5 |
| `agent-ops/rules/project/domain/edge/rules.md` | REFACTOR-5 |
| `agent-ops/rules/project/domain/node/rules.md` | REFACTOR-5 |
| `agent-ops/rules/project/domain/platform-common/rules.md` | REFACTOR-5 |
| `agent-ops/rules/project/domain/testing/rules.md` | REFACTOR-5 |
| `agent-ops/rules/project/rules.md` | REFACTOR-5 |
| `agent-spec/index.md` | REFACTOR-5 |
| `agent-spec/input/openai-compatible-surface.md` | REFACTOR-5 |
| `agent-spec/runtime/edge-node-execution.md` | REFACTOR-5 |
| `agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/CODE_REVIEW-cloud-G10.md` | REFACTOR-6 |
| `agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/node-boundary-audit.log` | REFACTOR-6 |
| `agent-test/local/edge-smoke.md` | REFACTOR-5 |
| `agent-test/local/node-smoke.md` | REFACTOR-5 |
| `agent-test/local/platform-common-smoke.md` | REFACTOR-5 |
| `apps/client/lib/control_plane_status_dto.dart` | REFACTOR-4 |
| `apps/client/lib/gen/proto/iop/control.pb.dart` | REFACTOR-4 |
| `apps/client/lib/gen/proto/iop/control.pbjson.dart` | REFACTOR-4 |
| `apps/client/lib/gen/proto/iop/runtime.pb.dart` | REFACTOR-4 |
| `apps/client/lib/gen/proto/iop/runtime.pbenum.dart` | REFACTOR-4 |
| `apps/client/lib/gen/proto/iop/runtime.pbjson.dart` | REFACTOR-4 |
| `apps/client/lib/widgets/runtime_panel.dart` | REFACTOR-4 |
| `apps/client/lib/widgets/runtime_panel_sections.dart` | REFACTOR-4 |
| `apps/client/test/control_plane_status_controller_test.dart` | REFACTOR-4 |
| `apps/client/test/edge_nodes_panels_test.dart` | REFACTOR-4 |
| `apps/client/test/provider_status_test.dart` | REFACTOR-4 |
| `apps/client/test/runtime_panel_test.dart` | REFACTOR-4 |
| `apps/client/test/support/client_test_harness.dart` | REFACTOR-4 |
| `apps/control-plane/cmd/control-plane/fleet_handler_test.go` | REFACTOR-4 |
| `apps/control-plane/cmd/control-plane/http_views.go` | REFACTOR-4 |
| `apps/control-plane/internal/wire/edge_test.go` | REFACTOR-4 |
| `apps/edge/cmd/edge/bootstrap_node_command_test.go` | REFACTOR-4 |
| `apps/edge/cmd/edge/root_config_command_test.go` | REFACTOR-4 |
| `apps/edge/cmd/edge/smoke_command_test.go` | REFACTOR-4 |
| `apps/edge/internal/bootstrap/reconnect_readiness_integration_test.go` | REFACTOR-4 |
| `apps/edge/internal/bootstrap/runtime_refresh_node_test.go` | REFACTOR-4 |
| `apps/edge/internal/bootstrap/runtime_refresh_test.go` | REFACTOR-4 |
| `apps/edge/internal/configrefresh/classify.go` | REFACTOR-4 |
| `apps/edge/internal/configrefresh/classify_test_support_test.go` | REFACTOR-4 |
| `apps/edge/internal/configrefresh/node_runtime_classify_test.go` | REFACTOR-4 |
| `apps/edge/internal/configrefresh/path_refresh_test.go` | REFACTOR-4 |
| `apps/edge/internal/configrefresh/provider_classify_test.go` | REFACTOR-4 |
| `apps/edge/internal/controlplane/connector.go` | REFACTOR-4 |
| `apps/edge/internal/controlplane/connector_test.go` | REFACTOR-4 |
| `apps/edge/internal/edgecmd/edgecmd_test.go` | REFACTOR-4 |
| `apps/edge/internal/edgecmd/node_register.go` | REFACTOR-4 |
| `apps/edge/internal/edgecmd/root.go` | REFACTOR-4 |
| `apps/edge/internal/edgevalidate/validate_test.go` | REFACTOR-4 |
| `apps/edge/internal/edgevalidate/validate.go` | REFACTOR-4 |
| `apps/edge/internal/input/a2a/server.go` | REFACTOR-4 |
| `apps/edge/internal/node/mapper_test.go` | REFACTOR-4 |
| `apps/edge/internal/node/mapper.go` | REFACTOR-4 |
| `apps/edge/internal/node/registry.go` | REFACTOR-4 |
| `apps/edge/internal/node/registry_test.go` | REFACTOR-4 |
| `apps/edge/internal/node/store.go` | REFACTOR-4 |
| `apps/edge/internal/node/store_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/cancellation_routes_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/chat_completion.go` | REFACTOR-4 |
| `apps/edge/internal/openai/chat_handler_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/chat_handler.go` | REFACTOR-4 |
| `apps/edge/internal/openai/chat_stream_reasoning_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/chat_tool_synthesis_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/dispatch_context_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/dispatch_context.go` | REFACTOR-4 |
| `apps/edge/internal/openai/provider_dispatch_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/provider_tool_validation_test.go` | REFACTOR-4 |
| `apps/edge/internal/openai/responses_handler.go` | REFACTOR-4 |
| `apps/edge/internal/openai/route_resolution.go` | REFACTOR-4 |
| `apps/edge/internal/openai/workspace_metadata_test.go` | REFACTOR-4 |
| `apps/edge/internal/opsconsole/console_test.go` | REFACTOR-4 |
| `apps/edge/internal/opsconsole/console.go` | REFACTOR-4 |
| `apps/edge/internal/opsconsole/events_test.go` | REFACTOR-4 |
| `apps/edge/internal/opsconsole/events.go` | REFACTOR-4 |
| `apps/edge/internal/opsconsole/status.go` | REFACTOR-4 |
| `apps/edge/internal/service/model_queue_snapshot.go` | REFACTOR-4 |
| `apps/edge/internal/service/model_queue_types.go` | REFACTOR-4 |
| `apps/edge/internal/service/control_command.go` | REFACTOR-4 |
| `apps/edge/internal/service/node_command.go` | REFACTOR-4 |
| `apps/edge/internal/service/provider_pool.go` | REFACTOR-4 |
| `apps/edge/internal/service/provider_resolution.go` | REFACTOR-4 |
| `apps/edge/internal/service/provider_scheduling_advanced_test.go` | REFACTOR-4 |
| `apps/edge/internal/service/queue_dispatch_test.go` | REFACTOR-4 |
| `apps/edge/internal/service/run_cancel.go` | REFACTOR-4 |
| `apps/edge/internal/service/run_command_test.go` | REFACTOR-4 |
| `apps/edge/internal/service/run_dispatch_internal_test.go` | REFACTOR-4 |
| `apps/edge/internal/service/run_types.go` | REFACTOR-4 |
| `apps/edge/internal/service/run_wire.go` | REFACTOR-4 |
| `apps/edge/internal/service/status_provider_test.go` | REFACTOR-4 |
| `apps/edge/internal/service/status_provider.go` | REFACTOR-4 |
| `apps/edge/internal/service/usage_attribution_dispatch_test.go` | REFACTOR-4 |
| `apps/edge/internal/transport/connection_handlers.go` | REFACTOR-4 |
| `apps/edge/internal/transport/integration_test.go` | REFACTOR-4 |
| `apps/edge/internal/transport/server_test.go` | REFACTOR-4 |
| `apps/edge/README.md` | REFACTOR-4 |
| `apps/node/cmd/node/main.go` | REFACTOR-3 |
| `apps/node/cmd/node/quota_probe_test.go` | REFACTOR-3 |
| `apps/node/cmd/node/quota_probe.go` | REFACTOR-3 |
| `apps/node/internal/adapters/adapters_blackbox_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/config_set.go` | REFACTOR-3 |
| `apps/node/internal/adapters/factory_internal_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/factory.go` | REFACTOR-3 |
| `apps/node/internal/adapters/mock/mock.go` | REFACTOR-3 |
| `apps/node/internal/adapters/ollama/chat.go` | REFACTOR-3 |
| `apps/node/internal/adapters/ollama/command.go` | REFACTOR-3 |
| `apps/node/internal/adapters/ollama/ollama_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/ollama/ollama.go` | REFACTOR-3 |
| `apps/node/internal/adapters/ollama/provider.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/capabilities_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/execute_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/execute.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/openai_compat_test_support_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/protocol_profile_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/provider_tunnel_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/provider_tunnel.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/provider.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/request.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/stream.go` | REFACTOR-3 |
| `apps/node/internal/adapters/openai_compat/thinking_policy_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/vllm/provider_tunnel.go` | REFACTOR-3 |
| `apps/node/internal/adapters/vllm/provider.go` | REFACTOR-3 |
| `apps/node/internal/adapters/vllm/request.go` | REFACTOR-3 |
| `apps/node/internal/adapters/vllm/stream.go` | REFACTOR-3 |
| `apps/node/internal/adapters/vllm/vllm_test.go` | REFACTOR-3 |
| `apps/node/internal/adapters/vllm/vllm_tunnel_test.go` | REFACTOR-3 |
| `apps/node/internal/bootstrap/module.go` | REFACTOR-3 |
| `apps/node/internal/node/cancel_handler.go` | REFACTOR-3 |
| `apps/node/internal/node/command_handler.go` | REFACTOR-3 |
| `apps/node/internal/node/command_test.go` | REFACTOR-3 |
| `apps/node/internal/node/concurrency_gate_test.go` | REFACTOR-3 |
| `apps/node/internal/node/gate_refresh_test.go` | REFACTOR-3 |
| `apps/node/internal/node/node_concurrency_integration_test.go` | REFACTOR-3 |
| `apps/node/internal/node/node_test_support_test.go` | REFACTOR-3 |
| `apps/node/internal/node/node.go` | REFACTOR-3 |
| `apps/node/internal/node/protocol_profile_tunnel_test.go` | REFACTOR-3 |
| `apps/node/internal/node/provider_tunnel_test.go` | REFACTOR-3 |
| `apps/node/internal/node/registry_refresh_test.go` | REFACTOR-3 |
| `apps/node/internal/node/run_cancel_test.go` | REFACTOR-3 |
| `apps/node/internal/node/run_handler.go` | REFACTOR-3 |
| `apps/node/internal/node/runtime_bridge_test.go` | REFACTOR-3 |
| `apps/node/internal/node/runtime_bridge.go` | REFACTOR-3 |
| `apps/node/internal/node/runtime_sink.go` | REFACTOR-3 |
| `apps/node/internal/node/sink_test.go` | REFACTOR-3 |
| `apps/node/internal/node/tunnel_handler.go` | REFACTOR-3 |
| `apps/node/internal/router/router_test.go` | REFACTOR-3 |
| `apps/node/internal/router/router.go` | REFACTOR-3 |
| `apps/node/internal/store/store_test.go` | REFACTOR-3 |
| `apps/node/internal/transport/heartbeat_test.go` | REFACTOR-3 |
| `apps/node/internal/transport/parser_test.go` | REFACTOR-3 |
| `apps/node/README.md` | REFACTOR-3 |
| `configs/edge-compose.yaml.tmpl` | REFACTOR-4 |
| `configs/edge.yaml` | REFACTOR-4 |
| `docs/edge-local-dev-guide.md` | REFACTOR-5 |
| `docs/openai-compatible-api-contract.md` | REFACTOR-5 |
| `go.mod` | REFACTOR-2 |
| `go.sum` | REFACTOR-2 |
| `packages/go/agentprovider/cli/antigravity_print_blackbox_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/antigravity_print.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/cli_emitters_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/cli_session_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/cli_test_support_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/cli_workspace_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/cli.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/codex_app_server_events_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/codex_app_server_process.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/codex_app_server_session_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/codex_app_server.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/codex_exec_blackbox_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/codex_exec.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/command.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/emitter_profile_json.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/emitter_stream_json.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/emitters.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/internal/testutil/testutil.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/lifecycle_blackbox_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/oneshot_blackbox_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/oneshot.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/opencode_sse_blackbox_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/opencode_sse_events.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/opencode_sse_internal_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/opencode_sse.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_completion_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_output_filter_claude_helpers.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_output_filter_claude.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_output_filter_terminal.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_output_filter_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_output_filter.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_process_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_process.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_terminal_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent_test_support_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/persistent.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/profile.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/antigravity_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/antigravity.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/claude_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/claude.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/codex_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/codex.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/parser_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/parser.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/quota_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/quota.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/screen.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/status_test.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/status.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/status/tail_buffer.go` | REFACTOR-2 |
| `packages/go/agentprovider/cli/workspace.go` | REFACTOR-2 |
| `packages/go/agentruntime/conformance_test.go` | REFACTOR-2 |
| `packages/go/agentruntime/doc.go` | REFACTOR-2 |
| `packages/go/agentruntime/emitter_test.go` | REFACTOR-2 |
| `packages/go/agentruntime/emitter.go` | REFACTOR-2 |
| `packages/go/agentruntime/failure_test.go` | REFACTOR-2 |
| `packages/go/agentruntime/failure.go` | REFACTOR-2 |
| `packages/go/agentruntime/registry_test.go` | REFACTOR-2 |
| `packages/go/agentruntime/registry.go` | REFACTOR-2 |
| `packages/go/agentruntime/session_test.go` | REFACTOR-2 |
| `packages/go/agentruntime/session.go` | REFACTOR-2 |
| `packages/go/agentruntime/status.go` | REFACTOR-2 |
| `packages/go/agentruntime/types.go` | REFACTOR-2 |
| `packages/go/config/adapter_types.go` | REFACTOR-4 |
| `packages/go/config/config.go` | REFACTOR-4 |
| `packages/go/config/edge_cli_config_test.go` | REFACTOR-4 |
| `packages/go/config/edge_openai_config_test.go` | REFACTOR-4 |
| `packages/go/config/edge_runtime_config_test.go` | REFACTOR-4 |
| `packages/go/config/edge_types.go` | REFACTOR-4 |
| `packages/go/config/load.go` | REFACTOR-4 |
| `packages/go/config/node_config_test.go` | REFACTOR-4 |
| `packages/go/config/normalize.go` | REFACTOR-4 |
| `packages/go/config/provider_catalog_validation_config_test.go` | REFACTOR-4 |
| `packages/go/config/provider_types.go` | REFACTOR-4 |
| `packages/go/config/protocol_profile_test.go` | REFACTOR-4 |
| `packages/go/config/usage_attribution_config_test.go` | REFACTOR-4 |
| `packages/go/config/validate.go` | REFACTOR-4 |
| `packages/go/events/events.go` | REFACTOR-4 |
| `packages/go/execution/conformance_test.go` | REFACTOR-2 |
| `packages/go/execution/doc.go` | REFACTOR-2 |
| `packages/go/execution/emitter_test.go` | REFACTOR-2 |
| `packages/go/execution/emitter.go` | REFACTOR-2 |
| `packages/go/execution/failure_test.go` | REFACTOR-2 |
| `packages/go/execution/failure.go` | REFACTOR-2 |
| `packages/go/execution/registry_test.go` | REFACTOR-2 |
| `packages/go/execution/registry.go` | REFACTOR-2 |
| `packages/go/execution/types.go` | REFACTOR-2 |
| `proto/gen/iop/control.pb.go` | REFACTOR-4 |
| `proto/gen/iop/runtime.pb.go` | REFACTOR-4 |
| `proto/iop/control.proto` | REFACTOR-4 |
| `proto/iop/runtime.proto` | REFACTOR-4 |
| `README.md` | REFACTOR-5 |
| `scripts/readability_baseline.json` | REFACTOR-5 |
| `scripts/readability_read_sets.json` | REFACTOR-5 |
| `scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256` | REFACTOR-1 |
| `scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv` | REFACTOR-1 |
| `scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256` | REFACTOR-1 |
| `scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv` | REFACTOR-1 |
| `scripts/verify-iop-agent-chronos-boundary.py` | REFACTOR-1 |
| `scripts/verify_iop_agent_chronos_boundary_test.py` | REFACTOR-1 |

## Final Verification

1. `test "$(git rev-parse --show-toplevel)" = "$PWD" && test "$(go env GOMOD)" = "$PWD/go.mod" && command -v bash go python3 sha256sum rg protoc flutter >/dev/null`
2. `bash -lc 'set -euo pipefail; mapfile -t predecessor_logs < <({ test ! -f agent-task/m-iop-agent-chronos-extraction-decoupling/09+08_remove_agent_ui_close/complete.log || printf "%s\n" agent-task/m-iop-agent-chronos-extraction-decoupling/09+08_remove_agent_ui_close/complete.log; find agent-task/archive -path "*/m-iop-agent-chronos-extraction-decoupling/09+08_remove_agent_ui_close/complete.log" -type f -print 2>/dev/null; } | sort -u); test "${#predecessor_logs[@]}" -eq 1; awk "BEGIN {in_summary=0; pass_count=0} /^## Summary$/ {in_summary=1; next} in_summary && /^## / {in_summary=0; next} in_summary && /final verdict: PASS/ {pass_count++} END {exit pass_count==1?0:1}" "${predecessor_logs[0]}"'`
3. `printf '%s  %s\n' 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv | sha256sum -c -`
4. `sha256sum -c scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256`
5. `python3 scripts/verify_iop_agent_chronos_boundary_test.py`
6. `python3 scripts/verify-iop-agent-chronos-boundary.py --manifest scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv --expected-manifest-sha256 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 --delta scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv --delta-sha256 scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 --addendum scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv --addendum-sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256 --state-fixture scripts/fixtures/iop-agent-chronos-transfer-state-v1.json --expected-state-logical-id-sha256 9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9 --iop-root . --check-only`
7. `make proto`
8. `make proto-dart`
9. `go test -count=1 ./packages/go/execution ./packages/go/config ./apps/node/... ./apps/edge/cmd/edge ./apps/edge/internal/node ./apps/edge/internal/edgevalidate ./apps/edge/internal/service ./apps/edge/internal/controlplane ./apps/edge/internal/openai ./apps/edge/internal/opsconsole ./apps/control-plane/...`
10. `go test -count=1 ./apps/node/internal/node -run 'Test(NodeCommandProviderAllowlist|NodeCommandRejectsUnknownAgentAndShell|SessionIDIsCorrelationOnly|CancelByRunIDOnly)'`
11. `go test -count=1 ./packages/go/config ./apps/edge/cmd/edge -run 'Test(LegacyProviderCLIRejected|ConfigCheckRejectsLegacyCLIProcessFields)'`
12. `go test -race -count=1 ./packages/go/execution ./apps/node/internal/node ./apps/node/internal/router ./apps/node/internal/adapters/... ./apps/edge/internal/service ./apps/edge/internal/openai`
13. `go vet ./packages/go/execution ./apps/node/... ./apps/edge/... ./apps/control-plane/...`
14. `make client-test`
15. `make readability-audit`
16. `python3 agent-ops/skills/common/orchestrate-agent-task-loop/scripts/dispatch.py --workspace . --validate-plan agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/PLAN-cloud-G10.md`
17. `make build-local`
18. `test ! -e apps/agent && test ! -e cmd/iop-provider-smoke && test ! -e packages/go/agentconfig && test ! -e packages/go/agentguard && test ! -e packages/go/agentruntime && test ! -e packages/go/agentpolicy && test ! -e packages/go/agentprovider && test ! -e packages/go/agentstate && test ! -e packages/go/agenttask && test ! -e packages/go/agentworkspace && test ! -e packages/go/provider/cli && test ! -e proto/iop/agent.proto && test ! -e agent-contract/inner/agent-runtime.md && test ! -e agent-contract/inner/iop-agent-cli-runtime.md`
19. `bash -o pipefail -c 'deps=$(go list -deps ./...) || exit; if rg -q "github.com/creack/pty" <<<"$deps"; then exit 1; else status=$?; test "$status" -eq 1; fi'`
20. `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'packages/go/agentprovider/cli|packages/go/provider/cli|packages/go/agentruntime|CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|CLIConf|CLIProfileConf|CompletionMarkerConf|CategoryCLI|RunSessionMode|TERMINATE_SESSION|NODE_COMMAND_TYPE_USAGE_STATUS|NODE_COMMAND_TYPE_SESSION_LIST|AgentUsageStatus|WorkspaceRequired|workspace_required|metadata\.workspace|quota-probe|client workspace root|current-workspace commands|Do not prepend cd|EdgeDomainAgentSummary|domain_agents|domainAgents|GetDomainAgents|RuntimePanelDomainAgentsSection|EdgeDomainAgentSummaryView|agent\.status|agent\.command|Agent Status|Agent Command|agent_kind|AgentKind|NormalizeAgentKind|AgentKindGenericNode|MetadataAgentKind|generic-node' apps packages proto configs agent-contract agent-spec agent-ops/rules/project docs README.md go.mod go.sum`
21. `bash -c 'rg --sort path -n "$1" --glob "!**/*_test.go" "${@:2}"; status=$?; test "$status" -eq 1' _ '(^[[:space:]]+cli:[[:space:]]*$|type:[[:space:]]*cli([[:space:]]|$)|category:[[:space:]]*cli([[:space:]]|$)|return[[:space:]]+"cli")' packages/go/config apps/edge/cmd/edge configs`
22. `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ '\{"cli",[[:space:]]*""\}' packages/go/config/protocol_profile_test.go`
23. `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'mapstructure:"(command|args|env|mode|resume_args|output_format)"' packages/go/config/provider_types.go`
24. `bash -c 'rg --sort path -n "$1" proto/iop/runtime.proto proto/iop/control.proto; source_status=$?; rg --sort path -n "$2" proto/gen/iop/runtime.pb.go proto/gen/iop/control.pb.go apps/client/lib/gen/proto/iop/runtime.pb.dart apps/client/lib/gen/proto/iop/runtime.pbenum.dart apps/client/lib/gen/proto/iop/runtime.pbjson.dart apps/client/lib/gen/proto/iop/control.pb.dart apps/client/lib/gen/proto/iop/control.pbjson.dart; generated_status=$?; test "$source_status" -eq 1 && test "$generated_status" -eq 1' _ 'message[[:space:]]+(CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|AgentUsageStatus|EdgeDomainAgentSummary)|enum[[:space:]]+RunSessionMode|workspace_required[[:space:]]*=|[[:space:]]workspace[[:space:]]*=[[:space:]]*[0-9]+|domain_agents[[:space:]]*=' '(^|[^[:alnum:]_])(type|class)[[:space:]]+(CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|AgentUsageStatus|RunSessionMode|EdgeDomainAgentSummary)([^[:alnum:]_]|$)|RunSessionMode_|GetWorkspace|workspaceRequired|CLI(AdapterConfig|ProfileConfig|CompletionMarker)\$json|AgentUsageStatus\$json|GetDomainAgents|domainAgents'`
25. `bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'git\.toki-labs\.com/toki/chronos|/config/workspace/chronos|CHRONOS_|[Cc]hronos(Target|Registry|Bridge|Server|Node|Control|Connector|Gateway)|chronos_(target|registry|bridge|server|node|control|connector|gateway)|chronos-(target|registry|bridge|server|node|control|connector|gateway)' apps packages proto configs agent-contract agent-spec`
26. `go test -count=1 ./...`
27. `python3 scripts/verify-iop-agent-chronos-boundary.py --manifest scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv --expected-manifest-sha256 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 --delta scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv --delta-sha256 scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 --addendum scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv --addendum-sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256 --state-fixture scripts/fixtures/iop-agent-chronos-transfer-state-v1.json --expected-state-logical-id-sha256 9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9 --iop-root . --audit-log agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/node-boundary-audit.log --check-only`
28. `git diff --check`

All `go test -count=1` commands require fresh output; cached output is not acceptable. Proto/Dart generation must be rerun from source, and no external service or credential is used.

After completing all code changes, fill implementation-owned sections in `CODE_REVIEW-*-G??.md`.
