<!-- task=m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution plan=3 tag=REFACTOR -->

# 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-local-G08.md`와 `CODE_REVIEW-cloud-G08.md`를 각각 `plan_local_G08_2.log`, `code_review_cloud_G08_2.log`로 보존한다.
- 보존 pair에는 checked implementation item, actual verification output, verdict가 없었다. 따라서 구현 diff나 PASS evidence를 승계하지 않는다.
- 보존 방향의 핵심 오류는 `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에 흡수한다.

## 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: check-on-pass

## 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`
- `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/edge_types.go`
- `packages/go/config/load.go`
- `packages/go/config/normalize.go`
- `packages/go/config/validate.go`
- `apps/node/internal/adapters/config_set.go`
- `apps/node/internal/adapters/factory.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/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/openai/route_resolution.go`
- `apps/edge/internal/opsconsole/console.go`
- `apps/edge/internal/opsconsole/status.go`
- `configs/edge.yaml`
- `agent-contract/index.md`
- `agent-contract/inner/agent-runtime.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`
- `agent-ops/rules/project/domain/edge/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`
- `Makefile`
- `go.mod`

### SDD Criteria

- SDD는 `[승인됨]`, 잠금 `해제`이고 D04가 D02를 대체한다.
- Roadmap target은 S03/`decouple`과 S04/`retain-node` 두 개다. 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가 이를 흡수·대체한다.
- S01/`inventory`의 immutable original manifest digest, versioned boundary delta digest와 effective disposition 재구성 조건은 REFACTOR-1을 규정하는 기여 evidence일 뿐 이 task의 Roadmap target이 아니다. `inventory` 완료 owner는 두 digest로 effective matrix를 materialize하는 task13이다.
- 이 기준에 따라 REFACTOR-1이 original manifest를 수정하지 않고 task13용 D04 delta를 소유하며, 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로 사용했다.
- original manifest SHA-256은 `7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7`이고 `retain-generic` row는 137개다. task03 receipt에 묶인 이 파일은 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 제거 자체는 negative scan과 dependency pruning 검증이 필요하다.
- 기존 Node tests는 run/cancel/provider registry/tunnel concurrency를 커버한다. CLI session list/terminate/quota/status 제거 뒤 remaining capability/transport/status paths를 별도 focused tests로 유지한다.
- Edge mapper/config/service/OpenAI/opsconsole tests에 CLI/workspace/session fixtures가 넓게 퍼져 있다. provider-neutral fixture로 교체하되 standard OpenAI/Anthropic inference와 provider tool-calling tests는 삭제하지 않고 계속 통과시킨다.
- historical manifest + delta merge의 all-and-only coverage, sort, enum 조합, digest는 새 deterministic verifier가 필요하다.

### Symbol References

- 제거: `packages/go/agentprovider/cli/**` 전체, `packages/go/agentruntime/session.go`, `session_test.go`, `status.go`, quota probe, `CLIConf`/`CLIProfileConf`/`CompletionMarkerConf`/`CategoryCLI`, provider command/args/env/mode/resume/output-format, `RunSessionMode`, `TERMINATE_SESSION`, `USAGE_STATUS`, `SESSION_LIST`, `AgentUsageStatus`, `WorkspaceRequired`와 `RunRequest.workspace`.
- 이동/중립화: 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, opaque run correlation `session_id`와 generic `background` lifecycle은 persistent agent session ownership으로 사용되지 않는 범위에서 유지한다.
- 모든 old runtime import call site와 CLI/schema references는 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, proto/config, Node mapper/handler, Edge consumers, contract/spec는 같은 wire boundary를 공유한다. 일부만 변경하면 generated code 또는 caller가 제거된 session/CLI 의미를 다시 노출하므로 독립 PASS 가능한 child로 나누지 않는다.
- old 11 provider 및 old 12 consumer closure를 이 task가 흡수한다. 별도 active pair를 만들지 않는다.
- PASS oracle은 delta exact coverage/digest, task09 transitional exception을 포함한 effective `transfer-remove` path zero, provider-focused and standard inference regressions, proto/Dart generation, IOP clean build/full Go suite가 모두 통과하는 것이다. 이 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를 갖지 않는다.
- task03 ownership manifest, transfer bundle, Chronos repository, roadmap/SDD는 구현 범위에서 수정하지 않는다.

### 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 D04 delta against the immutable task03 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 the versioned all-and-only `retain-generic` boundary delta without modifying the task03 manifest; verify deterministic effective-disposition reconstruction as task13-owned S01 evidence without claiming `inventory` completion.
- [ ] Remove CLI agent provider/profile, persistent session, PTY/terminal, workspace/status/quota surfaces and every task09 transitional runtime exception; retain only non-Agent provider lifecycle/execution primitives and close S03 removal scope.
- [ ] Update IOP Node consumers so run/cancel/provider status/usage/lifecycle remain while session list/terminate, arbitrary command and Chronos control meanings are absent.
- [ ] Update Edge proto/config/mapper/service/OpenAI/opsconsole consumers and generated Go/Dart while preserving standard OpenAI/Anthropic inference and tool calling.
- [ ] Reconcile active contract/spec/project rules/docs/readability through update-contract/update-spec and state the D04 boundary without adding a Chronos bridge.
- [ ] Run fresh delta/effective-path, proto, focused, race, IOP clean-build, dependency and forbidden-reference verification; absorb task09 evidence and record the combined S03/S04 closure output in `node-boundary-audit.log`.
- [ ] Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output.

### [REFACTOR-1] Immutable manifest 위의 versioned D04 disposition delta

**Problem**

task03 manifest는 receipt digest에 묶인 historical evidence라 재작성할 수 없지만, 그 `retain-generic` 결정에는 이제 Chronos가 소유해야 하는 CLI/session/terminal/workspace/status 자산이 포함돼 있다.

**Solution**

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

`scripts/verify-iop-agent-chronos-boundary.py`는 original을 path key로 left join하고 모든 retain-generic row에 mandatory delta override를 적용한다. unmatched original `transfer`는 `transfer-remove/chronos/-`, `reference`는 `reference/none/-`로 보존하며 missing retain row, unknown delta path, duplicate, unsorted row, invalid enum/combination을 hard fail한다. `--iop-root` 검증에서는 모든 effective `transfer-remove` original path가 active IOP worktree에서 사라졌고 모든 `retain-rewrite` final path가 존재하는지도 확인한다. delta digest 파일은 `sha256sum boundary-disposition-delta-v1.tsv`의 single canonical line이다. task13이 두 digest로 final effective matrix를 materialize할 수 있도록 verifier의 deterministic stdout schema와 merge 규칙을 고정한다.

**Verification**

- `python3 scripts/verify-iop-agent-chronos-boundary.py --manifest scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv --expected-manifest-sha256 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 --delta agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/boundary-disposition-delta-v1.tsv --delta-sha256 agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/boundary-disposition-delta-v1.sha256 --iop-root /config/workspace/iop-s1 --check-only`
- `git diff --exit-code -- scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv`

### [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를 넣지 않는다. `github.com/creack/pty`와 CLI-only dependency를 `go.mod/go.sum`에서 제거한다.

**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`
- `test -z "$(go list -deps ./... | rg 'github.com/creack/pty')"`

### [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를 직접 실행한다.

**Solution**

모든 runtime import를 `packages/go/execution`으로 전환한다. CLI adapter registration/factory와 quota probe를 제거한다. run/cancel-by-run, provider registry/lifecycle, provider status snapshot, token usage, capability/transport status와 provider tunnel은 유지한다. session list, terminate-session, CLI quota/status와 workspace 전달은 삭제하고 tests는 Ollama/OpenAI-compatible/vLLM 또는 neutral stub provider로 재작성한다. opaque `session_id`는 correlation 외 조회·재개·종료 key로 해석하지 않는다.

**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/...`

### [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로 노출한다.

**Solution**

`runtime.proto`에서 CLI adapter/profile/completion schema, RunSessionMode, workspace, terminate-session, usage-status/session-list와 AgentUsageStatus를 제거하고 compatibility 규칙에 따라 removed field numbers/names를 reserve한다. `make proto`/`make proto-dart`로 generated consumers를 갱신한다. config에서 CLI category/adapters/profile/arbitrary command fields를 제거하고 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은 유지한다.

**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/openai ./apps/edge/internal/opsconsole`
- `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 wire/config/OpenAI contracts와 index를 동기화한다. `update-spec`으로 Edge-Node execution과 OpenAI surface를 갱신한다. project domain rules, README, tracked API guide와 readability pointers에서 CLI agent/session/terminal/workspace ownership을 제거하되 “CLI command”라는 일반 운영 도구 용어와 standard provider tool-calling은 혼동해 삭제하지 않는다. Chronos API/bridge/target/registry 계약은 추가하지 않는다.

**Verification**

- `test ! -e agent-contract/inner/agent-runtime.md && test -e agent-contract/inner/execution-runtime.md`
- `python3 agent-ops/skills/common/orchestrate-agent-task-loop/scripts/dispatch.py --workspace /config/workspace/iop-s1 --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으로 허용했다. 따라서 그 evidence만으로 S03을 닫을 수 없고, compile PASS만으로도 arbitrary CLI command/session/terminal/workspace gateway가 사라졌는지 또는 일반 inference/tool calling이 실수로 제거되지 않았는지 증명할 수 없다.

**Solution**

task09 removal evidence를 입력으로 흡수하되 transitional exception은 승계하지 않는다. `node-boundary-audit.log`에 effective transfer-remove path absence, proto generation, focused/race tests, IOP clean build, dependency scan, forbidden symbol/path scan의 actual command/output과 exit code를 저장해 S03/S04 combined closure를 만든다. negative scan은 exact agent-specific schema/path/symbol만 금지하고 일반 “CLI” 운영 명령, opaque session correlation, provider tool calling은 허용 근거를 기록한다.

**Verification**

- `go test -count=1 ./apps/node/internal/adapters/openai_compat ./apps/node/internal/adapters/vllm ./apps/edge/internal/openai`
- `go test -count=1 ./...`
- `test -z "$(rg --sort path -n '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|metadata\\.workspace|quota-probe' apps packages proto configs agent-contract agent-spec agent-ops/rules/project docs README.md go.mod go.sum)"`
- `test -z "$(rg --sort path -n 'git\\.toki-labs\\.com/toki/chronos|Chronos(Target|Registry|Bridge)|chronos_(target|registry|bridge)' apps packages proto configs agent-contract agent-spec)"`
- `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/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/outer/openai-compatible-api.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-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/boundary-disposition-delta-v1.sha256` | REFACTOR-1 |
| `agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/boundary-disposition-delta-v1.tsv` | REFACTOR-1 |
| `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/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/edge/cmd/edge/bootstrap_node_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_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_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/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/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/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/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/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/usage_attribution_config_test.go` | REFACTOR-4 |
| `packages/go/config/validate.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/runtime.pb.go` | 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/verify-iop-agent-chronos-boundary.py` | REFACTOR-1 |

## Final Verification

1. Confirm exactly one PASS `complete.log` for predecessor `09+08_remove_agent_ui_close`.
2. `python3 scripts/verify-iop-agent-chronos-boundary.py --manifest scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv --expected-manifest-sha256 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 --delta agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/boundary-disposition-delta-v1.tsv --delta-sha256 agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/boundary-disposition-delta-v1.sha256 --iop-root /config/workspace/iop-s1 --check-only`
3. `git diff --exit-code -- scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv`
4. `make proto`
5. `make proto-dart`
6. `go test -count=1 ./packages/go/execution ./packages/go/config ./apps/node/... ./apps/edge/internal/node ./apps/edge/internal/edgevalidate ./apps/edge/internal/service ./apps/edge/internal/openai ./apps/edge/internal/opsconsole`
7. `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`
8. `go vet ./packages/go/execution ./apps/node/... ./apps/edge/...`
9. `make client-test`
10. `make readability-audit`
11. `test ! -e apps/agent && test ! -e cmd/iop-provider-smoke && 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/provider/cli && test ! -e proto/iop/agent.proto`
12. `test -z "$(go list -deps ./... | rg 'github.com/creack/pty')"`
13. `test -z "$(rg --sort path -n '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|metadata\\.workspace|quota-probe' apps packages proto configs agent-contract agent-spec agent-ops/rules/project docs README.md go.mod go.sum)"`
14. `test -z "$(rg --sort path -n 'git\\.toki-labs\\.com/toki/chronos|Chronos(Target|Registry|Bridge)|chronos_(target|registry|bridge)' apps packages proto configs agent-contract agent-spec)"`
15. `go test -count=1 ./...`
16. `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`.
