<!-- task=flutter_first_client_consolidation/03+02_app_workspace_surface plan=1 tag=REVIEW_REFACTOR -->

# Flutter Workspace Surface Follow-up Plan

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

`code_review_cloud_G07_0.log`의 FAIL 판정을 해결하세요. 구현 후 실제 검증 출력과 계획 대비 변경 사항을 `CODE_REVIEW-cloud-G07.md`에 축약 없이 기록하고, active 파일은 그대로 둔 채 리뷰 준비 상태로 보고하세요. finalization은 code-review-skill 전용입니다.

## 배경

첫 리뷰에서 Flutter workspace surface의 핵심 기능과 widget test는 통과했다. 다만 신규 화면 코드가 analyzer deprecated info를 추가했고, 구현 에이전트가 작성한 검증 출력 일부가 `...`와 요약으로 기록되어 verification trust 계약을 만족하지 못했다. 후속 작업은 기능 범위를 넓히지 않고 code quality와 검증 기록 신뢰만 복구한다.

## 분석 결과

### 읽은 파일

- `agent-task/flutter_first_client_consolidation/03+02_app_workspace_surface/code_review_cloud_G07_0.log`
- `agent-task/flutter_first_client_consolidation/03+02_app_workspace_surface/plan_cloud_G07_0.log`
- `apps/mobile/lib/screens/workspace_home_page.dart`
- `apps/mobile/lib/main.dart`
- `apps/mobile/test/widget_test.dart`
- `apps/mobile/lib/services/workspace_launcher.dart`
- `apps/mobile/lib/models/project_workspace.dart`
- `agent-ops/rules/project/domain/mobile/rules.md`

### 테스트 커버리지 공백

- UI behavior는 기존 `apps/mobile/test/widget_test.dart`가 dashboard title, project names, launcher callback tap을 검증한다.
- 이번 후속은 deprecated API와 검증 기록 복구라 신규 behavior test는 필요하지 않다.
- analyzer 출력과 scoped `git diff --check`가 code quality 회귀를 검증해야 한다.

### 심볼 참조

- renamed/removed symbol 없음.
- `WorkspaceHomePage`, `WorkspaceLauncher`, `ProjectWorkspace` call site는 첫 리뷰에서 유지되는 것으로 확인했다.

### 분할 판단

split decision policy를 재평가했다. 이 follow-up은 기존 split subtask `03+02_app_workspace_surface`의 plan=1이며, deprecated API cleanup과 verification trust recovery가 같은 리뷰 FAIL에서 나온 작은 종결 작업이다. 별도 subtask로 나누면 동일 파일과 동일 검증 명령을 중복 실행하므로 단일 follow-up plan을 유지한다.

### 범위 결정 근거

수정 범위는 `apps/mobile/lib/screens/workspace_home_page.dart`, `apps/mobile/lib/main.dart`, `apps/mobile/test/widget_test.dart`, 새 `CODE_REVIEW-cloud-G07.md` 기록으로 제한한다. launcher behavior, mock seed, pubspec dependency, generated plugin registrant, React web 삭제, contracts 문서는 건드리지 않는다.

### 빌드 등급

build lane: `cloud-G07`, review lane: `cloud-G07`. prior review가 verification trust Fail을 기록했고, 성공 조건이 실제 command stdout/stderr와 analyzer output 신뢰에 의존한다.

## 구현 체크리스트

- [ ] `workspace_home_page.dart`의 deprecated color opacity 호출과 mobile scoped whitespace issue를 정리한다.
- [ ] 검증 명령을 재실행하고 새 `CODE_REVIEW-cloud-G07.md`에 실제 stdout/stderr를 축약 없이 기록한다.
- [ ] 중간 검증과 최종 검증을 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REFACTOR-1] Analyzer and whitespace cleanup

문제: `apps/mobile/lib/screens/workspace_home_page.dart:41`, `:180`, `:225`, `:273`, `:274`, `:385`, `:417`의 `withOpacity`가 신규 `deprecated_member_use` analyzer info를 만든다. `apps/mobile/lib/main.dart:128`와 `apps/mobile/test/widget_test.dart:40`에는 EOF blank line이 있어 scoped `git diff --check`가 실패한다.

해결 방법: 모든 `withOpacity(x)`를 Flutter analyzer가 제안하는 `withValues(alpha: x)`로 교체한다. `main.dart`와 `widget_test.dart`의 파일 끝 추가 blank line을 제거한다.

Before:

```dart
color: Colors.deepPurpleAccent.withOpacity(0.2),
shadowColor: Colors.deepPurpleAccent.withOpacity(0.4),
```

After:

```dart
color: Colors.deepPurpleAccent.withValues(alpha: 0.2),
shadowColor: Colors.deepPurpleAccent.withValues(alpha: 0.4),
```

수정 파일 및 체크리스트:
- [ ] `apps/mobile/lib/screens/workspace_home_page.dart`
- [ ] `apps/mobile/lib/main.dart`
- [ ] `apps/mobile/test/widget_test.dart`

테스트 작성: 신규 테스트는 작성하지 않는다. behavior 변경이 없고 기존 widget test가 화면 렌더와 launcher callback을 검증한다.

중간 검증:

```bash
cd /config/workspace/nomadcode/apps/mobile && flutter analyze --no-fatal-infos
cd /config/workspace/nomadcode && git diff --check -- apps/mobile/lib/main.dart apps/mobile/lib/screens/workspace_home_page.dart apps/mobile/test/widget_test.dart
```

예상 결과: analyzer에는 기존 `avoid_print` info만 남고 신규 `deprecated_member_use`가 없다. scoped `git diff --check`는 출력 없이 exit 0이다.

### [REVIEW_REFACTOR-2] Verification trust recovery

문제: `code_review_cloud_G07_0.log:98`의 `flutter pub get` 출력이 `...`로 축약되었고, `:131` 및 `:148`의 analyzer 결과도 실제 stdout 전체가 아니라 요약이다. code-review loop는 검증 결과에 실제 stdout/stderr 또는 저장된 출력 파일 경로를 요구한다.

해결 방법: 아래 검증 명령을 실제로 재실행하고 새 `CODE_REVIEW-cloud-G07.md`의 `검증 결과`에 출력 전체를 붙인다. 출력이 너무 길다고 판단하면 repo 밖의 `/tmp`에 저장하고, 저장 명령과 파일 경로를 그대로 기록한다.

수정 파일 및 체크리스트:
- [ ] `agent-task/flutter_first_client_consolidation/03+02_app_workspace_surface/CODE_REVIEW-cloud-G07.md`

테스트 작성: 테스트 코드는 추가하지 않는다. 이 항목의 검증은 실제 명령 stdout/stderr 기록 자체다.

중간 검증:

```bash
cd /config/workspace/nomadcode/apps/mobile && flutter test
```

예상 결과: widget tests pass, 출력은 새 `CODE_REVIEW-cloud-G07.md`에 축약 없이 기록된다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `apps/mobile/lib/screens/workspace_home_page.dart` | REVIEW_REFACTOR-1 |
| `apps/mobile/lib/main.dart` | REVIEW_REFACTOR-1 |
| `apps/mobile/test/widget_test.dart` | REVIEW_REFACTOR-1 |
| `agent-task/flutter_first_client_consolidation/03+02_app_workspace_surface/CODE_REVIEW-cloud-G07.md` | REVIEW_REFACTOR-2 |

## 최종 검증

```bash
cd /config/workspace/nomadcode && test -f agent-task/archive/2026/05/flutter_first_client_consolidation/02_contract_boundary/complete.log
cd /config/workspace/nomadcode/apps/mobile && flutter pub get
cd /config/workspace/nomadcode/apps/mobile && flutter test
cd /config/workspace/nomadcode/apps/mobile && flutter analyze --no-fatal-infos
cd /config/workspace/nomadcode && git diff --check -- apps/mobile/lib/main.dart apps/mobile/lib/screens/workspace_home_page.dart apps/mobile/test/widget_test.dart
cd /config/workspace/nomadcode && rg --sort path -n "apps/web|window\\.open|nomadcode-web" apps/mobile/lib apps/mobile/test || true
```

예상 결과: predecessor complete.log exists, pub get/test pass, analyzer는 기존 `avoid_print` info 외 신규 `deprecated_member_use`가 없다, scoped diff-check는 출력 없이 exit 0, Flutter app source does not reference React web or `window.open`.

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