<!-- task=m-iop-agent-chronos-extraction-decoupling/08+07_cleanup_build_contract plan=2 tag=REFACTOR milestone-task=decouple -->

# Standalone build·계약·문서 전환 정리

## For the Implementing Agent

`CODE_REVIEW-cloud-G07.md`의 implementation-owned 섹션 작성은 필수다. encoded predecessor의 exact PASS를 확인한 뒤 이 child 범위만 구현·검증하고 실제 출력과 결정을 review stub에 기록한다. active pair를 유지해 review 준비 완료를 보고하며 finalization은 code-review agent만 수행한다. 차단되면 질문하거나 상태를 분류하지 말고 blocker, 시도한 명령/출력, 재개 조건만 implementation-owned evidence 필드에 기록한다. 사용자 입력 도구, control-plane stop file, archive, `complete.log`는 만들지 않는다.

## Background

Standalone `iop-agent` source 제거 뒤에도 build target, active contract/spec/rule, README와 HANDOFF가 과거 책임을 광고하면 새 책임 경계가 성립하지 않는다. D04 byte-baselined original manifest는 `agent-contract/inner/iop-agent-cli-runtime.md`를 `transfer` 후 `remove`로 고정했으므로 이 task는 active index를 제거하되 원문을 고쳐 보존 자료로 만들지 않는다. 원문의 물리 삭제는 task 10에 명시적으로 인계하고, 이 child는 S03의 build·active-governance·document 정리 evidence만 제공한다.

## Archive Evidence Snapshot

- 직전 미착수 pair는 `plan_local_G07_1.log`, `code_review_cloud_G07_1.log`로 보존된다. checked item, implementation evidence, verdict와 실행된 verification은 없다.
- 보존 pair의 REFACTOR-2는 `agent-contract/inner/iop-agent-cli-runtime.md`에 `transfer-reference-only` banner를 추가해 task 14까지 남긴다고 적어 D04 byte-baselined original manifest의 `transfer`/`remove` 행과 충돌했다. 이 replan은 그 방향을 폐기한다.
- original manifest SHA-256은 `7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7`이며 해당 contract 행은 변경하지 않는다.
- 필요한 prior-loop 사실은 위에 모두 적었으므로 implementer는 archive를 다시 탐색하지 않는다.

## Analysis

### Files Read

- `agent-task/m-iop-agent-chronos-extraction-decoupling/08+07_cleanup_build_contract/plan_local_G07_1.log`
- `agent-task/m-iop-agent-chronos-extraction-decoupling/08+07_cleanup_build_contract/code_review_cloud_G07_1.log`
- `agent-roadmap/current.md`
- `agent-roadmap/phase/automation-runtime-bridge/PHASE.md`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-chronos-extraction-decoupling.md`
- `agent-roadmap/sdd/automation-runtime-bridge/iop-agent-chronos-extraction-decoupling/SDD.md`
- `scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv`
- `Makefile`
- `go.mod`
- `go.sum`
- `agent-contract/index.md`
- `agent-contract/inner/iop-agent-cli-runtime.md`
- `agent-ops/rules/common/rules-agent-spec.md`
- `agent-spec/index.md`
- `agent-spec/runtime/iop-agent-cli-runtime.md`
- `README.md`
- `HANDOFF.md`
- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/project/domain/agent/rules.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-test/local/rules.md`
- `agent-test/local/testing-smoke.md`
- `agent-test/local/platform-common-smoke.md`

### SDD Criteria

- SDD는 `[승인됨]`, 잠금 `해제`다. 첫 줄 `milestone-task=decouple`의 대상 Acceptance Scenario는 `S03`, Milestone Task는 `decouple`이며 Evidence Map은 removed-path/reference audit와 IOP clean build를 요구한다.
- SDD Interface Contract는 활성 IOP 계약 파일을 decouple 단계에서 제거하도록 요구하고, D04 byte-baselined original manifest의 `agent-contract/inner/iop-agent-cli-runtime.md` 행은 `transfer`/`remove`다. 따라서 task 08은 active index를 제거하고 원문을 수정하지 않으며, task 10이 그 원문을 물리 삭제해 S03 잔존 경로를 닫는다.
- 이 child의 PASS는 S03 기여 evidence다. 단독으로 `decouple`을 완료하거나 Roadmap Task를 체크하지 않으므로 `Roadmap Targets`를 두지 않는다.

### Verification Context

- 별도 verification handoff는 없다. 승인 SDD/Milestone, D04 byte-baselined original manifest, build manifests, active contract/spec/rules/docs와 local testing profiles를 repository-native evidence로 사용했다.
- preflight는 `go version go1.26.2 linux/arm64`, `go env GOMOD=/config/workspace/iop-s1/go.mod`, `protoc 29.3`, `protoc-gen-go v1.36.11`, GNU Make 4.3이다.
- inherited `GOCACHE`가 접근 불가능한 과거 checkout을 가리킬 수 있으므로 각 Go/Make verification은 `mktemp -d`로 fresh cache를 만들고 trap으로 정리한다. 구현 단계에서 `go mod tidy` 결과를 반영한 뒤 final verification은 `go mod tidy -diff`만 실행해 drift를 수정 없이 fail closed 검증한다.
- 외부 service, credential, 장기 runtime은 필요 없다. `make proto`, tidy idempotency, local build와 fresh full Go suite가 repository-native evidence다.
- predecessor `07+06_remove_go_surface`의 exact PASS `complete.log`는 현재 missing이다. 구현 시작 전 active 또는 matching archive에서 정확히 하나를 찾아 PASS row를 확인해야 한다.
- confidence는 high다. 07 삭제 결과에 따른 tidy diff만 실제 실행 시 확정한다.

### Test Coverage Gaps

- build/proto/dependency 정리는 새 동작을 추가하지 않으므로 새 test file을 만들지 않는다. generation, tidy idempotency, local binaries와 fresh full Go suite로 검증한다.
- contract index/spec/rule/docs 정리는 executable unit test 대상이 아니다. D04 byte-baselined manifest/contract diff, active-index negative scan, exact task 10 deletion handoff와 stale-architecture scan으로 검증한다.

### Symbol References

- 제거 build surface는 `build-agent`, `test-iop-agent-parity`, `test-iop-agent-logged-smoke-*`, `IOP_AGENT_SMOKE_*`, Go `proto/iop/agent.proto` entry다. call site는 `Makefile`의 `.PHONY`, variables, `build-local`, target bodies다.
- task 08에서 active routing을 제거하는 id/path는 `iop.agent-cli-runtime`, `runtime/iop-agent-cli-runtime`, `apps/agent/`, agent domain routing과 `iop-agent` testing exception이다.
- `agent-contract/inner/iop-agent-cli-runtime.md`는 D04 byte-baselined original manifest가 `transfer`/`remove`로 분류했다. task 08은 이 파일을 수정하거나 새 reference 의미를 부여하지 않고 task 10의 physical deletion input으로 넘긴다.
- `iop.agent-runtime`, `packages/go/agentruntime`, `packages/go/agentprovider/cli`, Node/Edge consumer는 task 10이 D04 delta와 provider-minimal 경계로 처분한다.

### Split Judgment

- 안정 계약은 “07이 삭제한 standalone tree와 IOP build·active governance·top-level docs가 일치하고, D04 byte-baselined original manifest와 transferred contract 원문은 task 08에서 변하지 않으며 원문 삭제 owner가 task 10으로 고정된다”이다.
- predecessor index 07 (`07+06_remove_go_surface`)은 exact PASS `complete.log`가 현재 missing이다.
- 09는 이 PASS 뒤 Flutter/agent-ui와 client 문서를 제거한다. 10은 `agent-contract/inner/iop-agent-cli-runtime.md`의 물리 삭제와 transitional shared runtime/CLI provider 처분을 함께 닫는다.

### Scope Rationale

- Task 03 source revision·row/universe 근거와 D04 original-manifest byte digest는 수정하지 않는다.
- `agent-contract/inner/iop-agent-cli-runtime.md`는 Modified Files에서 제외한다. 이 task에서 banner나 migration-reference 상태를 추가하지 않으며 task 10이 manifest대로 물리 삭제한다. task 14까지 보존되는 최종 reference가 아니다.
- Flutter code, `apps/client/README.md`, client domain rule, agent-ui는 09가 UI code와 같은 transaction으로 정리한다.
- `agent-contract/inner/agent-runtime.md`, edge-node spec, node/platform-common rules, `packages/go/agentruntime`, `packages/go/agentprovider/cli`, Node/Edge consumer는 10 범위다.
- task 13은 effective matrix와 pre-deletion receipt, task 14는 남은 migration surface의 최종 삭제, task 15는 `HANDOFF.md` final composite receipt를 소유한다. 이 task는 현재 README/HANDOFF 책임 경계와 task 10 deletion handoff만 정리한다.
- common rules/skills와 readability baseline/read-set은 수정하지 않는다.

### Final Routing

- `evaluation_mode=isolated-reassessment`, `finalizer=finalize-task-policy.sh`, `finalizer_mode=pair`.
- Build closures는 scope/context/verification/evidence/ownership/decision 모두 `true`다. `grade_scores=2,0,2,1,2`, grade=`G07`, base/route=`local-fit`, lane=`local`, filename=`PLAN-local-G07.md`.
- Review closures도 모두 `true`다. `grade_scores=2,0,2,1,2`, grade=`G07`, route=`official-review`, lane=`cloud`, adapter=`codex`, model=`gpt-5.6-sol`, reasoning=`xhigh`, filename=`CODE_REVIEW-cloud-G07.md`.
- `large_indivisible_context=false`; positive loop-risk=`boundary_contract`, count=`1`; `review_rework_count=0`; `evidence_integrity_failure=false`; risk/recovery boundary=false; capability gap은 `observed=false`다.

## Dependencies and Execution Order

1. `07+06_remove_go_surface`가 active 또는 matching archive 위치에 정확히 하나의 PASS `complete.log`를 만들어야 한다.
2. 그 evidence 뒤 build/dependency, active governance, current docs 순으로 정리한다. contract 원문은 수정하지 않는다.
3. 08 PASS 뒤 09가 UI closure를 수행하고, 09 PASS 뒤 task 10이 contract 원문과 transitional runtime/provider surface를 물리 삭제한다.

## Implementation Checklist

- [ ] Verify exactly one PASS `complete.log` for predecessor `07+06_remove_go_surface` before editing this child.
- [ ] Remove standalone build/proto/smoke entry points and reconcile `go.mod`/`go.sum`; verify generated proto, tidy idempotency, and Edge/IOP Node local builds.
- [ ] Deindex the standalone contract, delete the standalone active spec/domain rule, and align project/testing rules; leave the immutable transferred contract source unchanged and hand its physical deletion explicitly to task 10.
- [ ] Rewrite README/HANDOFF stale ownership and Node-to-Chronos bridge narrative to D04, including the task 10 contract deletion handoff and the task 13/14/15 evidence sequence.
- [ ] Run fresh full Go tests, immutable-manifest/contract checks, deterministic active-reference/architecture scans, and diff checks.
- [ ] Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output.

### [REFACTOR-1] Standalone build·proto·dependency entry 제거

**Problem**

`Makefile:1,23-30,38,53-58,112-158`이 삭제될 `apps/agent`, standalone smoke와 `proto/iop/agent.proto`를 build graph에 포함한다.

```make
# Makefile:38,53-55
build-local: build-edge build-node build-agent
build-agent:
	go build ... ./apps/agent/cmd/agent
```

**Solution**

`.PHONY`, `IOP_AGENT_SMOKE_*`, `build-local`, standalone build/test/smoke targets와 Go proto input을 함께 제거한다. `build-local`은 Edge와 IOP Node만 빌드한다. 07 삭제 결과에 맞춰 `go mod tidy`로 실제 orphan dependency만 제거한다.

```make
# after
build-local: build-edge build-node
proto:
	protoc ... proto/iop/runtime.proto proto/iop/node.proto proto/iop/control.proto proto/iop/job.proto
```

**Modified Files and Checklist**

- [ ] `Makefile` — standalone entry 제거와 `build-local` 축소.
- [ ] `go.mod` — tidy 결과의 orphan dependency만 반영.
- [ ] `go.sum` — tidy 결과와 동기화.

**Test Strategy**

새 test는 쓰지 않는다. target graph를 `make proto`, tidy idempotency, `make build-local`로 실행 검증한다.

**Verification**

- `bash -lc 'set -euo pipefail; task08_cache=$(mktemp -d); trap '\''chmod -R u+w "$task08_cache" 2>/dev/null || true; rm -rf -- "$task08_cache"'\'' EXIT; env GOCACHE="$task08_cache" make proto'`
- `bash -lc 'set -euo pipefail; task08_cache=$(mktemp -d); trap '\''chmod -R u+w "$task08_cache" 2>/dev/null || true; rm -rf -- "$task08_cache"'\'' EXIT; env GOCACHE="$task08_cache" go mod tidy -diff'`
- `bash -lc 'set -euo pipefail; task08_cache=$(mktemp -d); trap '\''chmod -R u+w "$task08_cache" 2>/dev/null || true; rm -rf -- "$task08_cache"'\'' EXIT; env GOCACHE="$task08_cache" make build-local'`

### [REFACTOR-2] Standalone active contract·spec·rule 제거와 task 10 삭제 인계

**Problem**

`agent-contract/index.md:28`, `agent-spec/index.md:36`, `agent-ops/rules/project/rules.md:5,14,19,62`와 testing/agent domain 문서가 IOP의 standalone host/workflow/workspace/client lifecycle ownership을 선언한다. 동시에 D04 byte-baselined original manifest는 contract 원문을 `transfer` 후 `remove`로 분류한다.

```text
# scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv:7
agent-contract/inner/iop-agent-cli-runtime.md  contract  transfer  source/agent-contract/inner/iop-agent-cli-runtime.md  remove  -  S01
# agent-contract/index.md:28
| iop.agent-cli-runtime | Standalone iop-agent host lifecycle ... |
```

**Solution**

`agent-contract/index.md`에서 standalone row를 제거해 active 계약 routing을 닫는다. `agent-contract/inner/iop-agent-cli-runtime.md` 자체는 수정하지 않고 task 10이 manifest의 `remove` action대로 물리 삭제하도록 HANDOFF와 checklist에 exact owner를 남긴다. standalone living spec과 agent domain rule은 삭제하고 project/testing rule에서 binary/workflow 예외를 제거한다. transitional `iop.agent-runtime`과 generic runtime/provider의 최종 처분도 task 10이 소유한다.

```text
# after task 08
agent-contract/index.md: no iop.agent-cli-runtime row
agent-contract/inner/iop-agent-cli-runtime.md: unchanged, unindexed, task 10 physical-deletion input
agent-spec/index.md: no runtime/iop-agent-cli-runtime row
agent-spec/runtime/iop-agent-cli-runtime.md: absent
```

**Modified Files and Checklist**

- [ ] `agent-contract/index.md` — standalone active row 제거.
- [ ] `agent-spec/index.md` — standalone living spec row 제거.
- [ ] `agent-spec/runtime/iop-agent-cli-runtime.md` — active spec 삭제.
- [ ] `agent-ops/rules/project/rules.md` — standalone 소유/경로/실행 예외 제거.
- [ ] `agent-ops/rules/project/domain/agent/rules.md` — 삭제.
- [ ] `agent-ops/rules/project/domain/testing/rules.md` — standalone binary/smoke/task-loop 문구 제거; task 10의 provider boundary 처분을 선점하지 않음.
- [ ] `HANDOFF.md` — exact 문장 `Task 10은 agent-contract/inner/iop-agent-cli-runtime.md를 물리 삭제한다.`를 코드 서식과 함께 기록.

**Test Strategy**

새 test는 쓰지 않는다. D04 byte-baselined manifest/contract diff와 active index/spec/rule scan으로 검증한다.

**Verification**

- `test "$(sha256sum scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv | awk '{print $1}')" = 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 && test "$(sha256sum agent-contract/inner/iop-agent-cli-runtime.md | awk '{print $1}')" = 2a009a72d21fc09d62250f6b61fd3f4317f8bb46abfe2cd7ef1dd1e12f616a07 && rg -q $'^agent-contract/inner/iop-agent-cli-runtime\.md\tcontract\ttransfer\tsource/agent-contract/inner/iop-agent-cli-runtime\.md\tremove\t-\tS01$' scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv`
- `bash -lc 'set -euo pipefail; test ! -e agent-spec/runtime/iop-agent-cli-runtime.md; test ! -e agent-ops/rules/project/domain/agent/rules.md; set +e; rg --sort path -n '\''iop\.agent-cli-runtime|runtime/iop-agent-cli-runtime|apps/agent/|domain/agent'\'' agent-contract/index.md agent-spec/index.md agent-ops/rules/project/rules.md README.md; scan_rc=$?; set -e; test "$scan_rc" -eq 1'`
- `python3 -c 'from pathlib import Path; bt=chr(96); expected="Task 10은 "+bt+"agent-contract/inner/iop-agent-cli-runtime.md"+bt+"를 물리 삭제한다."; assert expected in Path("HANDOFF.md").read_text()'`

### [REFACTOR-3] README·HANDOFF를 D04 전환 경계로 정리

**Problem**

`README.md:5,140,198-204,258,270-271`은 CLI Agent/workspace/tool/remote terminal을 IOP 책임으로 설명하고, `HANDOFF.md:1,42-73,75-88,140-172,178-210`은 IOP Node가 Chronos를 연결·제어하는 gateway/provider 방향을 유지한다.

```text
# HANDOFF.md:55-59
Control Plane → Edge → 기존 Node outbound session
                 ↕ Node agent_bridge gateway ↕
                 동일한 Chronos daemon
```

**Solution**

README는 IOP를 external inference API와 model/provider/device execution·cancel·status·usage·lifecycle로 제한한다. HANDOFF는 Chronos Server + 독립 Chronos Node가 loop/agent/workspace/tool/terminal/PTY/remote host control을 소유하고, Chronos는 필요할 때 IOP external inference API의 일반 client일 뿐 IOP Node control/bridge가 없다고 정리한다. evidence 순서는 task 10 contract/runtime 삭제 → task 13 effective matrix와 pre-deletion receipt → task 14 잔여 migration surface 삭제 → task 15 `HANDOFF.md` final composite receipt로 명시하며 완료를 선포하지 않는다.

```text
# after
Chronos Server/Chronos Node -> loop, agent, workspace/tool, terminal/PTY, remote control
Chronos -> optional ordinary client of IOP external inference API
IOP -> no Chronos bridge/API/proto/config/target/registry/control hook
```

**Modified Files and Checklist**

- [ ] `README.md` — current responsibility와 금지 경계를 D04에 맞춤.
- [ ] `HANDOFF.md` — stale gateway/provider narrative 제거, task 10 deletion handoff와 task 13/14/15 evidence owner를 기록.

**Test Strategy**

문서-only 변경이다. exact stale phrase scan과 reviewer owner-matrix 확인으로 검증한다.

**Verification**

- `bash -lc 'set -euo pipefail; set +e; rg --sort path -n '\''CLI Agent 실행 환경|shell/git/docker/code workspace|Node는 .*CLI Agent|Node는 .*도구 실행|CLI Automation runtime|Remote terminal bridge는 Edge/Node 운영 제어|Node Domain-Agent Gateway|Node agent_bridge gateway|agent_bridge provider framework|kind: chronos-agent|Node companion/connector|Node가 소유한 local gateway|Node gateway를 통한|Node External Agent Provider|Edge Managed Agent Routing|transfer-reference-only'\'' README.md HANDOFF.md agent-ops/rules/project; scan_rc=$?; set -e; test "$scan_rc" -eq 1'`

## Modified Files Summary

| File | Item |
|------|------|
| `Makefile` | REFACTOR-1 |
| `go.mod` | REFACTOR-1 |
| `go.sum` | REFACTOR-1 |
| `agent-contract/index.md` | REFACTOR-2 |
| `agent-spec/index.md` | REFACTOR-2 |
| `agent-spec/runtime/iop-agent-cli-runtime.md` | REFACTOR-2 |
| `agent-ops/rules/project/rules.md` | REFACTOR-2 |
| `agent-ops/rules/project/domain/agent/rules.md` | REFACTOR-2 |
| `agent-ops/rules/project/domain/testing/rules.md` | REFACTOR-2 |
| `README.md` | REFACTOR-3 |
| `HANDOFF.md` | REFACTOR-2, REFACTOR-3 |
| `agent-task/m-iop-agent-chronos-extraction-decoupling/08+07_cleanup_build_contract/CODE_REVIEW-cloud-G07.md` | REFACTOR-1, REFACTOR-2, REFACTOR-3 |

## Final Verification

1. `bash -lc 'set -euo pipefail; mapfile -t predecessor_logs < <({ test ! -f agent-task/m-iop-agent-chronos-extraction-decoupling/07+06_remove_go_surface/complete.log || printf "%s\n" agent-task/m-iop-agent-chronos-extraction-decoupling/07+06_remove_go_surface/complete.log; find agent-task/archive -path "*/m-iop-agent-chronos-extraction-decoupling/07+06_remove_go_surface/complete.log" -type f -print 2>/dev/null; } | sort -u); test "${#predecessor_logs[@]}" -eq 1; awk '\''BEGIN {in_summary=0; count=0} /^## Summary$/ {in_summary=1; next} in_summary && /^## / {in_summary=0} in_summary {line=$0; while (match(line, /final verdict: PASS/)) {count++; line=substr(line, RSTART+RLENGTH)}} END {exit count==1 ? 0 : 1}'\'' "${predecessor_logs[0]}"'`
2. `go version && test "$(go env GOMOD)" = "$(git rev-parse --show-toplevel)/go.mod"`
3. `bash -lc 'set -euo pipefail; task08_cache=$(mktemp -d); trap '\''chmod -R u+w "$task08_cache" 2>/dev/null || true; rm -rf -- "$task08_cache"'\'' EXIT; env GOCACHE="$task08_cache" make proto'`
4. `bash -lc 'set -euo pipefail; task08_cache=$(mktemp -d); trap '\''chmod -R u+w "$task08_cache" 2>/dev/null || true; rm -rf -- "$task08_cache"'\'' EXIT; env GOCACHE="$task08_cache" go mod tidy -diff'`
5. `bash -lc 'set -euo pipefail; task08_cache=$(mktemp -d); trap '\''chmod -R u+w "$task08_cache" 2>/dev/null || true; rm -rf -- "$task08_cache"'\'' EXIT; env GOCACHE="$task08_cache" make build-local'`
6. `test "$(sha256sum scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv | awk '{print $1}')" = 7026fedc8b0eb24eab5c4124d3818400f66db5f1d116a71e7781f346fbd256a7 && test "$(sha256sum agent-contract/inner/iop-agent-cli-runtime.md | awk '{print $1}')" = 2a009a72d21fc09d62250f6b61fd3f4317f8bb46abfe2cd7ef1dd1e12f616a07 && rg -q $'^agent-contract/inner/iop-agent-cli-runtime\.md\tcontract\ttransfer\tsource/agent-contract/inner/iop-agent-cli-runtime\.md\tremove\t-\tS01$' scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv`
7. `bash -lc 'set -euo pipefail; test ! -e agent-spec/runtime/iop-agent-cli-runtime.md; test ! -e agent-ops/rules/project/domain/agent/rules.md; set +e; rg --sort path -n '\''build-agent|test-iop-agent|IOP_AGENT_SMOKE|proto/iop/agent\.proto|iop\.agent-cli-runtime|runtime/iop-agent-cli-runtime|apps/agent/|domain/agent'\'' Makefile agent-contract/index.md agent-spec/index.md agent-ops/rules/project/rules.md README.md; scan_rc=$?; set -e; test "$scan_rc" -eq 1'`
8. `python3 -c 'from pathlib import Path; bt=chr(96); expected="Task 10은 "+bt+"agent-contract/inner/iop-agent-cli-runtime.md"+bt+"를 물리 삭제한다."; assert expected in Path("HANDOFF.md").read_text()'`
9. `bash -lc 'set -euo pipefail; set +e; rg --sort path -n '\''CLI Agent 실행 환경|shell/git/docker/code workspace|Node는 .*CLI Agent|Node는 .*도구 실행|CLI Automation runtime|Remote terminal bridge는 Edge/Node 운영 제어|Node Domain-Agent Gateway|Node agent_bridge gateway|agent_bridge provider framework|kind: chronos-agent|Node companion/connector|Node가 소유한 local gateway|Node gateway를 통한|Node External Agent Provider|Edge Managed Agent Routing|transfer-reference-only'\'' README.md HANDOFF.md agent-ops/rules/project; scan_rc=$?; set -e; test "$scan_rc" -eq 1'`
10. `bash -lc 'set -euo pipefail; task08_cache=$(mktemp -d); task08_tmp=$(mktemp -d -p /config/workspace/iop-s1/build); cleanup() { chmod -R u+w "$task08_cache" "$task08_tmp" 2>/dev/null || true; rm -rf "$task08_cache" "$task08_tmp" 2>/dev/null || true; }; trap cleanup EXIT; env GOCACHE="$task08_cache" GOTMPDIR="$task08_tmp" TMPDIR="$task08_tmp" go test -count=1 ./...'`
11. `git diff --check`

`go test -count=1`은 fresh output이 필수다. 외부 runtime, 보조 E2E smoke와 full-cycle 실행은 standalone target 자체를 제거하는 이 child의 local build/clean-suite 범위 밖이며 task 10의 retained IOP provider 경계 검증이 소유한다. D04 original manifest/contract 원문, task 10 source, task 13/14/15 evidence artifact는 이 task write claim에 없어야 한다.

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