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

## 작업 지시

Client Fleet UI의 domain agent command 동작을 Control Plane/Edge command contract에 맞게 수정한다. 현재 UI는 `oto-agent.sync`, `build-deploy.sync` 같은 operation을 임의 생성하지만 Edge는 해당 operation을 지원하지 않는다.

## 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]`

## 실패 원인

- `apps/client/lib/control_plane_status_widgets.dart:1141`의 `Trigger Sync` 버튼은 summary-only domain agent view에서 검증되지 않은 operation을 생성한다.
- `apps/client/lib/control_plane_status_widgets.dart:889`는 command response의 `status`/`error`를 판정하지 않아 `unsupported`도 성공처럼 표시될 수 있다.
- `apps/client/test/widget_test.dart`의 fake repository는 모든 command를 accepted로 돌려주어 실제 unsupported/error 응답 회귀를 잡지 못한다.

## 구현 체크리스트

1. [ ] Domain agent summary에 실행 가능한 operation/target/parameters가 명시되지 않은 경우 `Trigger Sync` 버튼을 제거하거나 비활성화하고, 상태/summary/active command id만 표시한다.
2. [ ] command action을 유지하는 경우 Edge contract의 지원 operation만 사용한다. 현재 지원 operation은 `health.check`, `agent.status`, `agent.command`이며 `agent.command`는 `target_selector`와 `parameters.command` 같은 필수 입력이 있을 때만 전송한다.
3. [ ] `EdgeCommandResponseView.status`와 `error`를 판정해 `unsupported`, `error`, `failed` 응답을 성공 배너로 표시하지 않는다.
4. [ ] Widget test에 unsupported/error command 응답 또는 command button absence/gating 회귀를 추가한다.
5. [ ] `CODE_REVIEW-cloud-G05.md`의 구현 항목별 완료 여부, 구현 체크리스트, 계획 대비 변경 사항, 주요 설계 결정, 검증 결과를 실제 내용으로 채운다.

## 세부 설계

- summary-only 상태라면 domain agent 카드는 `agentKind`, `lifecycleState`, `summary`, `activeCommandId` 중심으로 둔다.
- 실행 버튼은 API가 실제 operation metadata를 제공하는 경우에만 노출한다. 현재 모델에 그 metadata가 없다면 버튼 제거가 가장 안전하다.
- response banner는 HTTP accepted 여부가 아니라 command response status/error를 기준으로 사용자에게 표시한다.

## 검증

- `cd apps/client && flutter test`
- `cd apps/client && flutter analyze --no-fatal-infos`
- `cd packages/flutter/iop_console && flutter test` (iop_console 변경을 유지하는 경우)
- 원격 runner가 로컬 변경분과 동기화되어 있으면 같은 명령을 원격에서도 실행한다. 원격 checkout 구조가 달라 동기화할 수 없으면 명령과 실패 이유를 `검증 결과`에 기록한다.

## 완료 조건

- UI가 unsupported Edge operation을 성공처럼 표시하지 않는다.
- domain agent summary는 Control Plane view 수준만 표시하며 Edge 원본 저장 모델이나 임의 command capability를 암시하지 않는다.
- command 관련 widget test가 실제 실패/unsupported 경로를 잡는다.
