<!-- task=m-provider-catalog-device-status/04+03_client_catalog_view plan=3 tag=REVIEW_REVIEW_REVIEW_API -->

# PLAN REVIEW_REVIEW_REVIEW_API - Provider State Color Assertions

## 이 파일을 읽는 구현 에이전트에게

이 plan은 G03 리뷰의 FAIL 후속이다. `_stateColor` 구현은 source inspection상 의도대로 보이지만, test가 실제 색상 값을 검증하지 않아 이전 grey-rendering 버그를 잡지 못한다. 범위는 `apps/client/test/widget_test.dart`의 Provider Catalog regression test에 상태 label 색상 assertion을 추가하는 것으로 제한한다. 구현 후 active `CODE_REVIEW-local-G02.md`의 구현 에이전트 소유 섹션을 실제 출력으로 채운 뒤 멈춘다.

직접 사용자에게 질문하거나 선택지를 제시하지 않는다. 선택된 SDD/Milestone lock 결정이 막는 경우에만 review stub의 `사용자 리뷰 요청` 섹션에 기록한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/operational-observability-provider-management/milestones/provider-catalog-device-status.md`
- Task ids:
  - `ops-review`: Edge config와 Edge-owned read-only catalog/status를 기준으로 `iop-edge` CLI, Control Plane, Client가 어떤 정보를 소비하는지 확인할 수 있다.
- Completion mode: check-on-pass

## Spec Targets

- SDD: `agent-roadmap/sdd/operational-observability-provider-management/provider-catalog-device-status/SDD.md`
- Acceptance scenarios:
  - `S10`: task=`ops-review`; evidence=`Edge CLI configured-provider summary, Control Plane provider status JSON, Client Nodes panel provider catalog/status rendering, and resolved user_review_0.log are present.`
- Completion mode: spec-check-on-pass

## Archive Evidence Snapshot

- Archived plan: `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/plan_local_G03_2.log`
- Archived review: `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/code_review_local_G03_2.log`
- Earlier loops:
  - `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/plan_local_G04_1.log`
  - `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/code_review_local_G04_1.log`
  - `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/plan_local_G05_0.log`
  - `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/code_review_local_G05_0.log`
- Verdict: FAIL
- Required summary:
  - `apps/client/test/widget_test.dart:1205` and `apps/client/test/widget_test.dart:1342` assert status text but not `TextStyle.color`, so the previous neutral-grey regression would not be caught by tests.
- Affected files:
  - `apps/client/test/widget_test.dart`
  - `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/CODE_REVIEW-local-G02.md`
- Verification evidence from failed loop:
  - `cd apps/client && flutter test test/widget_test.dart` passed with `+16: All tests passed!`
  - `cd apps/client && flutter test` passed with `+32: All tests passed!`
  - `cd apps/client && flutter analyze --no-fatal-infos` exited 0 with existing info-level issues.
  - `git diff --check` passed with no output.
- Narrow archive reread allowed:
  - `agent-task/m-provider-catalog-device-status/04+03_client_catalog_view/code_review_local_G03_2.log`
- Roadmap/spec carryover:
  - Keep `Roadmap Targets` and `Spec Targets` above. This follow-up still works toward `ops-review` and S10 completion.

## 범위 결정 근거

- 포함: Provider Catalog status label color assertions in `apps/client/test/widget_test.dart`.
- 제외: `apps/client/lib/widgets/nodes_panel.dart` behavior changes unless a formatting/import fix is strictly needed for tests.
- 제외: Control Plane, Edge, DTO field parsing changes.

## 구현 체크리스트

- [ ] `AVAILABLE` status label의 `TextStyle.color`가 `const Color(0xFF10B981)`인지 검증한다.
- [ ] `UNAVAILABLE` status label의 `TextStyle.color`가 `const Color(0xFFEF4444)`인지 검증한다.
- [ ] `UNKNOWN` status label의 `TextStyle.color`가 `const Color(0xFF64748B)`인지 검증한다.
- [ ] 색상 assertion이 provider id/body text가 아니라 status label `Text` widget을 대상으로 하도록 finder를 명확히 한다.
- [ ] `cd apps/client && flutter test test/widget_test.dart`를 실행한다.
- [ ] `cd apps/client && flutter test`를 실행한다.
- [ ] `cd apps/client && flutter analyze --no-fatal-infos`를 실행하거나 생략 사유를 기록한다.
- [ ] `git diff --check`를 실행한다.
- [ ] CODE_REVIEW-local-G02.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다.

## 최종 검증

```bash
cd apps/client && flutter test test/widget_test.dart
cd apps/client && flutter test
cd apps/client && flutter analyze --no-fatal-infos
git diff --check
```

Client test 규칙상 원격 runner evidence가 필요한 환경이면 동기화된 runner에서 같은 명령을 실행한다. 현재 checkout에서만 실행했다면 active review의 검증 결과에 실행 host와 원격 미실행 사유를 명시한다.
