<!-- task=m-multi-edge-operations/04+03_client_fleet_ui plan=3 tag=REVIEW_REVIEW_REVIEW_API -->
# Plan - REVIEW_REVIEW_REVIEW_API

## 작업 지시

Client Fleet UI 후속 리뷰에서 남은 검증 신뢰도와 산출물 오염 문제만 보완한다. 소스 기능 변경은 원칙적으로 하지 말고, 원격 runner 기준 검증 증거를 복구하고 `packages/flutter/iop_console/build/test_cache` binary 변경을 작업 diff에서 제거한다.

## Roadmap Targets

- `agent-roadmap/phase/control-plane-portal-ops/milestones/multi-edge-operations.md` `[edge-status-view]`
- `agent-roadmap/phase/control-plane-portal-ops/milestones/multi-edge-operations.md` `[history-agent-state]`

## 실패 원인

- 이전 `CODE_REVIEW-cloud-G05.md`의 `flutter test` 출력은 `/config/workspace/iop/...` 경로를 보여주며, plan이 요구한 원격 runner `/Users/toki/agent-work/iop`의 동기화된 checkout 검증으로 볼 수 없다.
- `packages/flutter/iop_console/build/test_cache/build/99111e0c5b6228829e100ef67db14ea2.cache.dill.track.dill` tracked binary test-cache 변경이 남아 있다. 이는 source/UI 변경이 아니라 테스트 산출물이므로 완료 diff에서 제거되어야 한다.

## 범위 결정 근거

- `agent.status` selector gating, `agent.command` guard, unsupported/error banner, `Trigger Sync` absence test는 이미 구현되어 있다. 이번 follow-up은 그 코드를 넓히지 않는다.
- verification evidence gap은 후속 에이전트가 명령 재실행과 산출물 정리로 해결할 수 있으므로 `USER_REVIEW`가 아니라 정상 follow-up이다.
- remote runner가 동기화되지 않았거나 접근 불가하면 성공으로 기록하지 않는다. 정확한 명령, 실제 실패 출력, 동기화/접근 차단 사유를 기록한다.

## 구현 항목

### REVIEW_REVIEW_REVIEW_API-1 Remote runner verification evidence

- 문제: 검증 출력이 local `/config/workspace/iop` 기준이라 plan의 원격 runner 조건을 충족하지 않는다.
- 해결:
  - 원격 runner의 `/Users/toki/agent-work/iop` checkout에 현재 변경분이 반영되어 있는지 확인한다.
  - 동기화된 경우 아래 명령을 원격 checkout에서 실행하고 실제 stdout/stderr를 기록한다.
  - 동기화되지 않았거나 접근 불가하면 성공으로 체크하지 말고, `검증 결과`에 `ssh`/동기화 확인 명령과 실패 원인을 기록한다.
- 중간 검증:
  - `cd apps/client && flutter test`
  - `cd packages/flutter/iop_console && flutter test`
  - `cd apps/client && flutter analyze --no-fatal-infos`

### REVIEW_REVIEW_REVIEW_API-2 Remove tracked test-cache artifact diff

- 문제: Flutter package test-cache binary가 tracked file diff로 남아 있다.
- 해결:
  - `packages/flutter/iop_console/build/test_cache/**` 변경을 작업 diff에서 제거한다.
  - source 변경인 `packages/flutter/iop_console/lib/src/iop_console_overview.dart`는 유지해도 되지만, build/test_cache 산출물은 남기지 않는다.
- 중간 검증:
  - `git diff --name-only -- packages/flutter/iop_console/build/test_cache`

## 구현 체크리스트

1. [ ] `packages/flutter/iop_console/build/test_cache/**` 변경을 작업 diff에서 제거한다.
2. [ ] `git diff --name-only -- packages/flutter/iop_console/build/test_cache`가 비어 있음을 실제 출력으로 기록한다.
3. [ ] 원격 runner `/Users/toki/agent-work/iop`가 현재 변경분과 동기화되어 있는지 확인하고, 동기화 증거 또는 동기화 불가 사유를 기록한다.
4. [ ] 동기화된 원격 runner에서 `cd apps/client && flutter test`를 실행하고 실제 stdout/stderr를 기록한다.
5. [ ] 동기화된 원격 runner에서 `cd packages/flutter/iop_console && flutter test`를 실행하고 실제 stdout/stderr를 기록한다.
6. [ ] 동기화된 원격 runner에서 `cd apps/client && flutter analyze --no-fatal-infos`를 실행하고 실제 stdout/stderr를 기록한다.
7. [ ] `CODE_REVIEW-cloud-G05.md`의 구현 항목별 완료 여부, 구현 체크리스트, 계획 대비 변경 사항, 주요 설계 결정, 검증 결과를 실제 내용으로 채운다.

## 검증

- `git diff --name-only -- packages/flutter/iop_console/build/test_cache`
- 원격 runner `/Users/toki/agent-work/iop` 기준:
  - `cd apps/client && flutter test`
  - `cd packages/flutter/iop_console && flutter test`
  - `cd apps/client && flutter analyze --no-fatal-infos`

## 완료 조건

- tracked `build/test_cache` binary 변경이 작업 diff에 남지 않는다.
- Flutter client/package 검증 증거가 원격 runner의 동기화된 checkout 기준으로 기록되거나, 실행 불가 상태가 성공으로 오인되지 않게 정확히 기록된다.
- 기존 `agent.status`/`agent.command` gating 회귀 테스트와 unsupported/error banner 회귀 테스트가 유지된다.
