<!-- task=m-agent-readable-repository-refactor/07_client_runtime_panel plan=0 tag=REFACTOR_CLIENT -->

# Flutter runtime panel 책임 분해 계획

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

실제 Flutter 검증 출력과 구현 내용을 review stub에 채우고 active 파일을 유지한다. Milestone 결정 차단 외 직접 질문과 user-review/finalization 작업은 금지한다.

## 배경

`apps/client/lib/widgets/runtime_panel.dart`는 693줄이고 `build`가 190줄이다. 상태 소유와 operations history/domain agents/summary UI를 widget 책임으로 분리하되 화면 동작과 key를 유지한다.

## 분석 결과

- 대상: runtime panel과 `runtime_panel_test.dart`, 관련 controller/model 소비.
- 테스트 환경: local `client-smoke`; `/sdk/flutter/bin/flutter`, Dart 가용. 필수 `make client-test`, 보조 `flutter analyze`.
- SDD: 불필요. UI 정의/화면 계약 변경이 아닌 same-feature widget refactor이므로 agent-ui 작업도 아니다.
- 분할 판단: 단일 Flutter feature/widget 경계다.
- 제외: layout/문구/색상/상호작용 변경, controller 상태 이전, generic widget library.
- 빌드 등급: `local-G06`.

## 구현 체크리스트

- [ ] `_RuntimePanelState.build`를 summary/controls/history/domain agents의 명명된 widget 경계로 분리한다.
- [ ] 80줄 이상 section builder를 상태 비소유 private widget 또는 응집 helper로 분리한다.
- [ ] 기존 keys, empty/loading/error/operation 상태와 interaction을 보존한다.
- [ ] widget tests, client 전체 test/analyze, readability ratchet을 통과시킨다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REFACTOR_CLIENT-1] Build composition 분리

문제: `runtime_panel.dart`의 `build`가 190줄로 모든 section layout과 conditional state를 소유한다.

해결 방법: state lookup은 parent에 유지하고 section별 private widget에 명시적 immutable data/callback만 전달한다.

- [ ] provider/controller를 child에서 새로 조회하지 않는다.
- 테스트 작성: 기존 test key와 rendered text assertion을 유지한다.
- 중간 검증: `(cd apps/client && flutter test test/runtime_panel_test.dart)`

### [REFACTOR_CLIENT-2] History와 domain agents 분리

문제: `_buildOperationsHistory`와 `_buildDomainAgentsGrid`가 각각 90줄 이상이며 item rendering까지 소유한다.

해결 방법: section/list/card widget으로 나누고 formatting helper는 feature-local에 둔다.

- [ ] ordering, status icon/text, empty semantics를 보존한다.
- 테스트 작성: history/agent 상태별 widget test 공백이 있으면 table/group test를 추가한다.
- 중간 검증: `(cd apps/client && flutter test test/runtime_panel_test.dart test/provider_status_test.dart)`

### [REFACTOR_CLIENT-3] Client 회귀

문제: widget 분리가 app shell/controller integration을 깨뜨릴 수 있다.

해결 방법: client 전체 test/analyze와 audit를 실행한다.

- [ ] micro-widget 남발 없이 변경 이유가 같은 UI만 묶였는지 검토한다.
- 테스트 작성: skip. 전체 회귀 항목이다.
- 중간 검증: `make client-test`

## 최종 검증

```bash
(cd apps/client && flutter test test/runtime_panel_test.dart)
make client-test
(cd apps/client && flutter analyze)
make readability-audit
git diff --check
```

모두 종료 코드 0, runtime panel의 file/build split-review 제거, 새/증가 위반 없음이어야 한다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
