<!-- task=m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover plan=2 tag=REVIEW_REFACTOR -->

# Close Go Cutover Ownership and Terminal Status

## For the Implementing Agent

Run every verification command, fill implementation-owned sections in `CODE_REVIEW-cloud-G08.md` with actual notes and stdout/stderr, keep the active pair in place, and report ready for review. Finalization belongs only to the code-review skill. If blocked, record the exact blocker, attempted commands/output, and resume condition in implementation-owned evidence fields. Do not ask the user, call user-input tools, create control-plane stop files, classify the next state, archive logs, or write `complete.log`.

## Background

The first S13 implementation passed its narrow checks but left two correctness gaps. Active plan/code-review workflows still launch the retained Python dispatcher for PLAN validation, the disposal inventory omits five retained Python test fixtures, and the live task-loop command can return success after a retry reconciles back to a blocked state. This follow-up replaces the remaining validation caller with the Go operator, makes retained-reference discovery complete and fail-closed, and derives the operator exit from final reconciled project states.

## Archive Evidence Snapshot

- Prior task: `agent-task/m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover`
- Prior verdict: FAIL in `code_review_cloud_G07_1.log`; Required=2, Suggested=0, Nit=0.
- Prior plan: `plan_cloud_G07_1.log`.
- Required finding 1: `production_caller: go-only` was self-attested; active common plan/code-review workflows invoked `dispatch.py --validate-plan`; five tracked Python test/`.orig` fixtures were absent from the checksum-bound disposal inventory.
- Required finding 2: `apps/agent/cmd/agent/main.go:455-489` based exit status on whether Start/Resume was attempted, so `--retry-blocked` could reconcile to blocked and still exit 0.
- Fresh planning evidence: the broad active-caller search found the Python validation commands in `agent-ops/skills/common/plan/SKILL.md` and `agent-ops/skills/common/code-review/SKILL.md`; the nine retained project-skill Python fixture hashes were recorded; focused current tests passed only after replacing the inaccessible inherited Go cache with repository-external `/tmp` cache/tmp roots.
- Roadmap carryover: SDD S13 and Evidence Map row S13 still require disposition completeness, zero Python runtime dependency/fallback, zero stale static ownership, zero Node duplicate implementation, and checksum-bound disposal evidence.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-cli-runtime.md`
- Milestone link: [Milestone document](agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-cli-runtime.md)
- Task ids:
  - `parity-cutover`: classify Python/Node behavior and cut production task-loop ownership to Go with zero unclassified/runtime dependency/duplicate
- Completion mode: check-on-pass

## Analysis

### Files Read

- `agent-task/m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover/PLAN-cloud-G07.md`
- `agent-task/m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover/CODE_REVIEW-cloud-G07.md`
- `agent-task/m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover/plan_cloud_G10_0.log`
- `agent-task/m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover/code_review_cloud_G10_0.log`
- `agent-task/archive/2026/07/m-iop-agent-cli-runtime/19+14,16,18_cli_binary_contract/complete.log`
- `agent-task/archive/2026/07/m-iop-agent-cli-runtime/21+13,17,20_project_log_sink/complete.log`
- `agent-task/archive/2026/07/m-iop-agent-cli-runtime/22+16_local_control/complete.log`
- `agent-task/archive/2026/07/m-iop-agent-cli-runtime/23+14,16,22_client_process_manager/complete.log`
- `agent-task/archive/2026/07/m-iop-agent-cli-runtime/25+19,21,22,23,24_logged_smoke_closure/complete.log`
- `agent-roadmap/phase/automation-runtime-bridge/PHASE.md`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/iop-agent-cli-runtime.md`
- `agent-roadmap/sdd/automation-runtime-bridge/iop-agent-cli-runtime/SDD.md`
- `agent-contract/index.md`
- `agent-contract/inner/agent-runtime.md`
- `agent-contract/inner/iop-agent-cli-runtime.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-ops/skills/common/plan/SKILL.md`
- `agent-ops/skills/common/code-review/SKILL.md`
- `agent-ops/skills/project/orchestrate-agent-task-loop/SKILL.md`
- `agent-ops/skills/project/orchestrate-agent-task-loop/scripts/dispatch.py` PLAN-validation implementation at lines 1140-1261 and CLI dispatch at lines 6725-6780
- `agent-ops/skills/project/orchestrate-agent-task-loop/tests/test_dispatch.py` PLAN-validation and common-skill contract tests
- `apps/agent/internal/taskloop/workflow.go`
- `apps/agent/internal/taskloop/workflow_test.go`
- `apps/agent/internal/taskloop/parity.go`
- `apps/agent/internal/taskloop/parity_test.go`
- `apps/agent/internal/taskloop/cutover_test.go`
- `apps/agent/internal/taskloop/testdata/parity.yaml`
- `apps/agent/internal/taskloop/module.go`
- `apps/agent/internal/command/root.go`
- `apps/agent/internal/command/root_test.go`
- `apps/agent/internal/command/service.go`
- `apps/agent/internal/command/task_loop.go`
- `apps/agent/internal/command/task_loop_test.go`
- `apps/agent/cmd/agent/main.go`
- `apps/agent/cmd/agent/main_test.go`

### SDD Criteria

- SDD: `agent-roadmap/sdd/automation-runtime-bridge/iop-agent-cli-runtime/SDD.md`; status `[승인됨]`, lock released.
- Target scenario: S13, mapped to Milestone Task `parity-cutover`.
- S13 acceptance requires zero unclassified behavior, zero Python runtime dependency, zero static route/capacity ownership, zero Node duplicate implementation, and Python disposal at the Milestone-completion transition.
- Evidence Map row S13 requires a disposition-complete parity matrix, stale-dependency/duplicate/Python-fallback searches, and Python disposal evidence.
- The checklist therefore includes a production Go validator caller, tracked-fixture discovery rather than a self-attested fixed list, negative caller/inventory tests, final reconciled exit-state evidence, and stable zero-match/disposal reports.

### Verification Context

- No neutral verification handoff was supplied.
- Repository-native sources are the approved SDD, both runtime contracts, agent/testing domain rules, current Go command/workflow/parity code, active common plan/review workflows, retained Python fixtures, and the prior FAIL findings.
- Local preflight: `command -v go` resolved `/config/.local/bin/go`; `go version` reported `go1.26.2 linux/arm64`; `go env GOROOT` reported `/config/opt/go`.
- The inherited `GOCACHE` points to an inaccessible external scratchpad and caused setup-time permission errors. `GOCACHE=/tmp/iop-s0-code-review-gocache GOTMPDIR=/tmp/iop-s0-code-review-gotmp` made the focused current package tests pass. Final commands must use dedicated repository-external cache/tmp roots.
- The worktree is intentionally dirty with the ongoing Milestone implementation. Verification must remain scoped to this task's exact files and then run fresh affected/full Go suites without treating unrelated pre-existing changes as this packet's output.
- No external provider, credential, remote runner, device, network service, or real provider process is required. Command and live-pass behavior use deterministic fakes; built-binary checks exercise only validation, parity, and read-only dry-run surfaces.
- Confidence: high. Both failures have concrete call sites, deterministic negative oracles, and repository-local fixes.

### Test Coverage Gaps

- `workflow_test.go` does not cover a standalone PLAN validator accepting canonical contained paths while rejecting duplicate sections, globs, directories, workspace root/outside paths, URLs, placeholders, or an empty write-set.
- `task_loop_test.go` does not cover a Go `task-loop validate-plan` subcommand or exact service request mapping.
- `parity_test.go` does not fail when a new retained Python source/test fixture appears below the project skill without a manifest entry.
- `cutover_test.go` scans only three project documents and has no negative injected production caller case; active common plan/code-review callers are outside its proof.
- `main_test.go` has no live command-adapter test in which `--retry-blocked` performs Resume/Reconcile and the final project view remains blocked.

### Symbol References

- New command/service boundary: add a Go-owned `task-loop validate-plan` request method; update the `command.Service` interface, the production adapter, the recording fake in `root_test.go`, and task-loop command tests.
- PLAN write-set parsing: refactor the private `parseModifiedFilesSummary` path in `workflow.go` so runtime workflow admission and standalone validation share one parser/containment implementation.
- Live operator runtime seam: introduce a private task-loop operator interface/factory in `main.go` only for deterministic command-adapter testing; `*taskloop.Runtime` remains the production implementation.
- Removed production command text: every active common plan/code-review `python3 ... dispatch.py --validate-plan` or abbreviated `dispatch.py --validate-plan` reference must become the exact Go validator command.
- Retained Python sources/tests are not renamed or edited; all nine paths remain immutable checksum-bound fixtures until the existing completion gate.

### Split Judgment

Keep one follow-up plan in the existing dependent subtask. The directory declares predecessors 19, 21, 22, 23, and 25; each has exactly one archived `complete.log` listed above. The zero-Python proof requires the Go validator, common caller migration, parity discovery, manifest, and guards to land together. The terminal-exit correction is the second Required finding in the same already-routed loop and shares the task-loop command adapter/final verification boundary. Splitting or renaming this started subtask is not allowed outside `refine-plans`.

### Scope Rationale

- Do not change shared `packages/go/agenttask` lifecycle or status semantics; derive the CLI result from existing final `ProjectView` values.
- Do not change Node, provider, selector, quota, review, integration, config, proto, or logged-smoke behavior.
- Do not delete or edit retained Python scripts/tests in this packet; only inventory and zero-caller evidence change.
- Do not change unrelated Python files outside `agent-ops/skills/project/orchestrate-agent-task-loop/**`.
- Do not update roadmap state; PASS completion metadata remains a runtime responsibility.
- `agent-spec/index.md` has no matching standalone `iop-agent` spec, so no living-spec change is required for this focused correction.

### Final Routing

- evaluation_mode: `isolated-reassessment`
- finalizer: `finalize-task-policy.sh pair`
- build closures: scope/context/verification/evidence/ownership/decision all true
- review closures: scope/context/verification/evidence/ownership/decision all true
- capability-gap evidence: none
- build grade scores: scope=2, state=1, blast=2, evidence=2, verification=1; grade `G08`
- review grade scores: scope=2, state=1, blast=2, evidence=2, verification=1; grade `G08`
- build base route: `local-fit`
- large_indivisible_context: `false`
- positive loop risks: `temporal_state`, `boundary_contract`, `structured_interpretation`, `variant_product` (count `4`)
- recovery signals: `review_rework_count=1`, `evidence_integrity_failure=false`
- final build route: `risk-boundary`, `cloud`, `PLAN-cloud-G08.md`
- final review route: `official-review`, `cloud`, `CODE_REVIEW-cloud-G08.md`

## Implementation Checklist

- [ ] Add one Go-owned PLAN write-set validator over the authoritative workflow parser and migrate active common plan/code-review validation calls to it with deterministic command and invalid-claim tests.
- [ ] Expand the S13 checksum-bound inventory to every retained project-skill Python source/test fixture and make repository guards fail on any unrecorded fixture or active Python production caller.
- [ ] Derive live task-loop terminal exit status from final post-reconcile project views and add a command-adapter regression where retry remains blocked and exits 2.
- [ ] Update S13 contract evidence and run fresh focused, race, vet, built-command, parity, zero-match, and full Go verification with repository-external cache/tmp roots.
- [ ] Fill implementation-owned sections in CODE_REVIEW-*-G??.md with actual implementation notes and verification output.

### [REVIEW_REFACTOR-1] Replace the Remaining Python PLAN Validator Caller

#### Problem

`agent-ops/skills/common/plan/SKILL.md:272,345` and `agent-ops/skills/common/code-review/SKILL.md:236,270,330` still execute or require `dispatch.py --validate-plan`. `apps/agent/internal/taskloop/workflow.go:382-433` already parses the authoritative `Modified Files Summary`, but it is private, English-heading-only, rejects every absolute path, and does not expose the canonical workspace validation contract required by plan/review finalization.

#### Solution

Refactor the workflow parser into one Go validation path used by runtime workflow admission and a new bounded CLI surface:

```text
Before: python3 agent-ops/.../dispatch.py --workspace <workspace> --validate-plan <plan>
After:  go run ./apps/agent/cmd/agent task-loop validate-plan --workspace <workspace> <plan>
```

The shared parser must require exactly one canonical or legacy Modified Files Summary section, at least one exact backtick file claim, and deterministic unique workspace-relative output. It must strip optional line suffixes, accept repository-relative or canonical absolute paths contained by the workspace, and reject globs, placeholders, URLs, backslashes, workspace root, outside paths, and existing directories. The candidate PLAN itself may be outside the workspace because plan/code-review render it in a temporary directory. Keep validation read-only and provider-free.

#### Modified Files and Checklist

- [ ] `apps/agent/internal/taskloop/workflow.go` — share parsing/canonical containment and export the bounded candidate validator.
- [ ] `apps/agent/internal/taskloop/workflow_test.go` — add valid relative/absolute/legacy and complete invalid-claim matrix tests.
- [ ] `apps/agent/internal/command/service.go` — add the narrow validation request/service method without runtime mutation.
- [ ] `apps/agent/internal/command/task_loop.go` — add `task-loop validate-plan --workspace <workspace> <plan>`.
- [ ] `apps/agent/internal/command/task_loop_test.go` — prove exact request mapping and error propagation.
- [ ] `apps/agent/internal/command/root_test.go` — implement and record the new service method in the command fake.
- [ ] `apps/agent/cmd/agent/main.go` — delegate the service call to the taskloop validator.
- [ ] `apps/agent/cmd/agent/main_test.go` — test valid and invalid candidate PLANs through the real command adapter with zero provider use.
- [ ] `agent-ops/skills/common/plan/SKILL.md` — replace Python validation instructions/checklist text with the exact Go command.
- [ ] `agent-ops/skills/common/code-review/SKILL.md` — replace both pre-archive and post-materialization Python validation calls/checklist text with the exact Go command.

#### Test Strategy

Write `TestValidatePlanWriteSetMatrix` in `workflow_test.go`, command mapping coverage in `task_loop_test.go`, and real adapter coverage in `main_test.go`. The matrix must assert exact success output/no output and exact rejection categories for missing/duplicate section, empty claim, glob, URL, placeholder, backslash, root, outside, duplicate, and existing directory. No real provider is constructed or launched.

#### Verification

```bash
mkdir -p /tmp/iop-s0-parity-followup-gocache /tmp/iop-s0-parity-followup-gotmp
GOCACHE=/tmp/iop-s0-parity-followup-gocache GOTMPDIR=/tmp/iop-s0-parity-followup-gotmp go test -count=1 ./apps/agent/internal/taskloop ./apps/agent/internal/command ./apps/agent/cmd/agent -run 'Test.*(ValidatePlan|TaskLoop)'
```

Expected: all valid relative/absolute/legacy claims pass, every unsafe claim fails before mutation/provider construction, and the command/service mapping is exact.

### [REVIEW_REFACTOR-2] Make Disposal and Caller Evidence Complete

#### Problem

`apps/agent/internal/taskloop/parity.go:18-23,153-189` compares the manifest only with a four-entry self-authored slice. Five tracked retained fixtures under `agent-ops/skills/project/orchestrate-agent-task-loop/tests/` are omitted. `apps/agent/internal/taskloop/cutover_test.go:12-29` scans only three project documents, so it cannot detect the active common callers proven by the review.

#### Solution

Discover every `*.py` and `*.py.orig` below the manifest's project-skill `reference_root`, normalize and sort paths, and require exact equality with the disposal inventory. Keep the four runtime reference scripts behavior-classified and classify the five historical Python test fixtures as checksum-bound `not-applicable` disposal evidence tied to their covered behavior. Expand the production ownership guard to active common plan/review workflows plus project skill/rules, excluding only the checksum-bound reference source/test subtree. Add fixture-based negative cases for one unrecorded retained file and one injected production caller. Require the production documents to contain the exact Go validator command and no Python fallback.

#### Modified Files and Checklist

- [ ] `apps/agent/internal/taskloop/parity.go` — replace the fixed four-file proof with deterministic retained-fixture discovery and exact inventory equality.
- [ ] `apps/agent/internal/taskloop/parity_test.go` — add unrecorded fixture, duplicate/missing inventory, caller classification, checksum, and stable nine-file report cases.
- [ ] `apps/agent/internal/taskloop/cutover_test.go` — cover common/project production callers, exact Go validator ownership, and a negative injected caller.
- [ ] `apps/agent/internal/taskloop/testdata/parity.yaml` — broaden `reference_root` and add the five exact test/`.orig` paths and current SHA-256 values.
- [ ] `agent-contract/inner/iop-agent-cli-runtime.md` — correct S13 source/evidence text from four fixed references to all discovered retained fixtures and the Go validator caller.

#### Test Strategy

Extend current table tests. A temporary extra `.py` under the fixture reference root must fail as unrecorded; an injected production document containing `dispatch.py` or `python3` must fail with exact path/line evidence. The embedded manifest must report `disposal_files: 9`, and every retained file hash must match the unchanged repository file.

#### Verification

```bash
GOCACHE=/tmp/iop-s0-parity-followup-gocache GOTMPDIR=/tmp/iop-s0-parity-followup-gotmp go test -count=1 ./apps/agent/internal/taskloop -run 'Test.*(Parity|Disposition|Cutover)'
go run ./apps/agent/cmd/agent task-loop parity --disposal-manifest
rg -n --sort path 'python3 .*orchestrate-agent-task-loop|dispatch\.py --workspace|dispatch\.py' agent-ops/skills/common agent-ops/skills/project agent-ops/rules --glob '!**/scripts/**' --glob '!**/tests/**'
```

Expected: parity/cutover tests pass; the report says nine disposal files; the production search exits 1 with no matches.

### [REVIEW_REFACTOR-3] Compute Exit Status from Final Reconciled State

#### Problem

`apps/agent/cmd/agent/main.go:455-489` sets `hasRunnable` when Start/Resume returns and assigns exit 2 only when no call was attempted. After `--retry-blocked`, Resume can succeed, Reconcile can return the project to `blocked`, and the command still reports exit 0. This contradicts `TaskLoopResponse` and the operator skill's drained-blocker contract.

#### Solution

Keep attempt tracking only to decide whether Reconcile runs. After the final `ProjectStatus` refresh, derive the terminal exit from all final project views:

```text
blocked + no started/running project => exit 2
completed/idle only                  => exit 0
any started/running project          => exit 0
```

Introduce a private operator-runtime interface/factory seam in the command adapter so the production implementation remains `*taskloop.Runtime` and tests can deterministically return blocked after Resume/Reconcile. Do not change shared manager status semantics.

#### Modified Files and Checklist

- [ ] `apps/agent/cmd/agent/main.go` — separate attempted reconciliation from final-state exit calculation and add the private test seam.
- [ ] `apps/agent/cmd/agent/main_test.go` — add a real adapter call where retry starts, Reconcile runs once, final status remains blocked, and exit code is 2; also cover completed-only and mixed runnable/blocked final states.
- [ ] `apps/agent/internal/command/service.go` — keep the `TaskLoopResponse` comment aligned with final-state semantics.
- [ ] `agent-contract/inner/iop-agent-cli-runtime.md` — record final reconciled terminal mapping as bounded S13 command evidence.

#### Test Strategy

Use a deterministic fake implementing the private operator-runtime interface. Assert exact calls (`ProjectStatus`, `ResumeProject`, one `Reconcile`, final `ProjectStatus`), exact response entries, and exit 2 without creating a provider process. Add completed-only and mixed-state cases to prevent treating every non-running project as failure.

#### Verification

```bash
GOCACHE=/tmp/iop-s0-parity-followup-gocache GOTMPDIR=/tmp/iop-s0-parity-followup-gotmp go test -count=1 ./apps/agent/cmd/agent -run 'Test.*TaskLoop.*(Blocked|Terminal|Final)'
```

Expected: retry-that-remains-blocked exits 2; completed-only and any-runnable final scopes exit 0; no provider process launches.

## Dependencies and Execution Order

Predecessors 19, 21, 22, 23, and 25 are satisfied by the exact archived `complete.log` files listed in `Analysis > Files Read`. Implement REVIEW_REFACTOR-1 before updating caller guards in REVIEW_REFACTOR-2, then close REVIEW_REFACTOR-3 and the combined verification. Do not delete retained Python fixtures.

## Modified Files Summary

| File | Item |
|------|------|
| `apps/agent/internal/taskloop/workflow.go` | REVIEW_REFACTOR-1 |
| `apps/agent/internal/taskloop/workflow_test.go` | REVIEW_REFACTOR-1 |
| `apps/agent/internal/taskloop/parity.go` | REVIEW_REFACTOR-2 |
| `apps/agent/internal/taskloop/parity_test.go` | REVIEW_REFACTOR-2 |
| `apps/agent/internal/taskloop/cutover_test.go` | REVIEW_REFACTOR-2 |
| `apps/agent/internal/taskloop/testdata/parity.yaml` | REVIEW_REFACTOR-2 |
| `apps/agent/internal/command/service.go` | REVIEW_REFACTOR-1, REVIEW_REFACTOR-3 |
| `apps/agent/internal/command/task_loop.go` | REVIEW_REFACTOR-1 |
| `apps/agent/internal/command/task_loop_test.go` | REVIEW_REFACTOR-1 |
| `apps/agent/internal/command/root_test.go` | REVIEW_REFACTOR-1 |
| `apps/agent/cmd/agent/main.go` | REVIEW_REFACTOR-1, REVIEW_REFACTOR-3 |
| `apps/agent/cmd/agent/main_test.go` | REVIEW_REFACTOR-1, REVIEW_REFACTOR-3 |
| `agent-ops/skills/common/plan/SKILL.md` | REVIEW_REFACTOR-1 |
| `agent-ops/skills/common/code-review/SKILL.md` | REVIEW_REFACTOR-1 |
| `agent-contract/inner/iop-agent-cli-runtime.md` | REVIEW_REFACTOR-2, REVIEW_REFACTOR-3 |
| `agent-task/m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover/CODE_REVIEW-cloud-G08.md` | REVIEW_REFACTOR-1, REVIEW_REFACTOR-2, REVIEW_REFACTOR-3 |

## Final Verification

```bash
mkdir -p /tmp/iop-s0-parity-followup-gocache /tmp/iop-s0-parity-followup-gotmp
gofmt -w apps/agent/internal/taskloop/workflow.go apps/agent/internal/taskloop/workflow_test.go apps/agent/internal/taskloop/parity.go apps/agent/internal/taskloop/parity_test.go apps/agent/internal/taskloop/cutover_test.go apps/agent/internal/command/service.go apps/agent/internal/command/task_loop.go apps/agent/internal/command/task_loop_test.go apps/agent/internal/command/root_test.go apps/agent/cmd/agent/main.go apps/agent/cmd/agent/main_test.go
GOCACHE=/tmp/iop-s0-parity-followup-gocache GOTMPDIR=/tmp/iop-s0-parity-followup-gotmp go test -count=1 ./apps/agent/internal/taskloop ./apps/agent/internal/command ./apps/agent/cmd/agent
GOCACHE=/tmp/iop-s0-parity-followup-gocache GOTMPDIR=/tmp/iop-s0-parity-followup-gotmp go test -count=1 -race ./apps/agent/internal/taskloop ./apps/agent/internal/command ./apps/agent/cmd/agent
GOCACHE=/tmp/iop-s0-parity-followup-gocache GOTMPDIR=/tmp/iop-s0-parity-followup-gotmp go vet ./apps/agent/internal/taskloop ./apps/agent/internal/command ./apps/agent/cmd/agent
make test-iop-agent-parity
make build-agent
cp agent-task/m-iop-agent-cli-runtime/26+19,21,22,23,25_parity_cutover/PLAN-cloud-G08.md /tmp/iop-s0-valid-plan.md
build/bin/iop-agent task-loop validate-plan --workspace /config/workspace/iop-s0 /tmp/iop-s0-valid-plan.md
build/bin/iop-agent task-loop parity --disposal-manifest
build/bin/iop-agent task-loop --dry-run --task-group m-iop-agent-cli-runtime
rg -n --sort path 'python3 .*orchestrate-agent-task-loop|dispatch\.py --workspace|dispatch\.py' agent-ops/skills/common agent-ops/skills/project agent-ops/rules --glob '!**/scripts/**' --glob '!**/tests/**'
GOCACHE=/tmp/iop-s0-parity-followup-gocache GOTMPDIR=/tmp/iop-s0-parity-followup-gotmp go test -count=1 ./packages/go/... ./apps/agent/...
git diff --check
```

Expected: formatting, focused, race, vet, parity, build, Go PLAN validation, disposal, dry-run, and full Go regression checks pass; the production Python-caller search exits 1 with no matches; no real provider launches. The built command checks are the required full-cycle coverage for the changed entrypoints. Edge-Node diagnostics, auxiliary E2E smoke, external provider checks, and remote/device verification are not applicable because this packet changes no Edge/Node wire or authenticated provider path.

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