<!-- task=m-proto-socket-infrastructure-communication-rail/03+02_workspace_integration plan=2 tag=REVIEW_API_VERIFY -->

# Plan - REVIEW_API_VERIFY Workspace Integration Verification

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

이 plan의 구현이 끝나면 active `CODE_REVIEW-*-G??.md`에서 구현 에이전트 소유 섹션을 실제 구현 내용, 검증 출력, 계획 대비 변경 사항으로 채워야 한다. 최종 archive, `complete.log`, 리뷰 판정은 code-review-skill 전용이다. 구현 중 사용자만 결정할 수 있는 범위 변경, 사용자 소유 외부 환경/secret 준비, 또는 안전한 진행을 막는 scope 충돌이 있으면 review stub의 `사용자 리뷰 요청` 섹션에 정확한 결정과 근거를 남기고 멈춘다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 메울 수 있는 검증 공백만으로는 사용자 리뷰 요청을 만들지 않는다.

## 배경

두 번째 리뷰에서 코드 변경 자체는 이전 Required를 닫은 것으로 보였지만, 필수 Flutter 검증이 모두 `BLOCKED`로 남아 PASS 완료 조건을 충족하지 못했다. 이 follow-up은 새 기능 구현이 아니라 허용된 runner에서 검증 증거를 회수하고, 실패가 발생하면 그 실패만 최소 수정하는 작업이다.

## 사용자 리뷰 요청 흐름

구현 중 blocker는 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. code-review가 해당 요청을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다. 허용된 remote/mobile-capable runner 자체가 제공되지 않아 검증 명령을 실행할 수 없으면, 실행 가능한 환경이 없다는 근거와 재개 조건을 `사용자 리뷰 요청`에 기록한다.

## 분석 결과

### 읽은 파일

- `agent-ops/skills/common/code-review/SKILL.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-test/local/rules.md`
- `agent-test/local/mobile-smoke.md`
- `agent-task/m-proto-socket-infrastructure-communication-rail/03+02_workspace_integration/plan_cloud_G05_1.log`
- `agent-task/m-proto-socket-infrastructure-communication-rail/03+02_workspace_integration/code_review_cloud_G05_1.log`
- `apps/client/lib/src/app/nomadcode_client_app.dart`
- `apps/client/lib/src/features/workspaces/presentation/workspace_home_page.dart`
- `apps/client/test/widget_test.dart`
- `apps/client/pubspec.lock`

### 테스트 환경 규칙

- Chosen `test_env`: `local`.
- `agent-test/local/rules.md` was present and read. It prohibits current local test execution and states the default test environment is remote.
- Matched profile: `agent-test/local/mobile-smoke.md`; required commands are `cd apps/client && flutter test`, and analyzer when analyzer/platform impact exists.
- This follow-up must obtain output from a permitted runner. Do not run prohibited local tests. If no permitted runner exists, fill `사용자 리뷰 요청` with the missing runner as the blocker instead of marking checklist items complete.

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

- Test source coverage appears present in `apps/client/test/widget_test.dart`, including delayed loader handoff and lifecycle ownership tests.
- Execution coverage is missing: widget test, full Flutter test, and analyzer outputs are all `BLOCKED` in `code_review_cloud_G05_1.log`.

### 심볼 참조

- No renamed/removed symbols are expected in this verification-only follow-up.

### 분할 판단

This remains inside existing split subtask `03+02_workspace_integration`. Do not create new sibling subtasks. The only missing acceptance evidence is command output for the current code state.

### 범위 결정 근거

Do not expand feature behavior. Only run required verification on a permitted runner and fix failures directly caused by the current workspace integration changes. Do not modify roadmap, Core Go code, proto-socket protocol/service parsing, Mattermost/Firebase integration, platform runner files, or dependency manifests unless a command failure proves a minimal fix is required.

### 빌드 등급

Build lane `cloud-G07`, review lane `cloud-G07`: this is verification-trust recovery after blocked/missing command evidence, and the review rules require G07 or higher for missing/untrusted verification evidence follow-up.

## 구현 체크리스트

- [ ] [REVIEW_API_VERIFY-1] Run the required workspace integration verification on a permitted runner and record actual stdout/stderr.
- [ ] [REVIEW_API_VERIFY-2] If any required command fails, apply the smallest code/test fix and rerun the failing command plus the final verification set.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## [REVIEW_API_VERIFY-1] Required Verification Evidence

### 문제

`agent-task/m-proto-socket-infrastructure-communication-rail/03+02_workspace_integration/code_review_cloud_G05_1.log` records all required Flutter commands as `BLOCKED`, so review cannot trust that the changed app lifecycle, workspace page, and widget tests compile and pass.

### 해결 방법

Use a permitted remote/mobile-capable runner and execute the exact commands from final verification. Paste actual stdout/stderr into `CODE_REVIEW-cloud-G07.md`. Do not replace command output with summaries. Keep `git diff -- apps/client/pubspec.lock` as a local non-test diff check.

If a permitted runner is not available, do not mark this item complete. Fill `사용자 리뷰 요청` with:

- the exact commands that could not run,
- the local rule preventing local execution,
- the missing remote/permitted runner as the blocker,
- the resume condition.

### 수정 파일 및 체크리스트

- [ ] Update only `CODE_REVIEW-cloud-G07.md` with real command output when commands pass.
- [ ] Do not change source files for this item unless commands fail.

### 테스트 작성

No new tests are required unless a command failure exposes a missing assertion.

### 중간 검증

```bash
cd apps/client && flutter test test/widget_test.dart
```

Expected: passes with actual stdout/stderr on a permitted runner.

## [REVIEW_API_VERIFY-2] Failure-Only Minimal Fix

### 문제

If the permitted runner reports a compile, test, or analyzer failure, the task still cannot PASS until the failure is fixed and verified.

### 해결 방법

Fix only failures directly tied to the current workspace integration changes. Preserve the existing service boundary, mock fallback, app lifecycle ownership behavior, and lockfile cleanup unless the command output proves a change is necessary.

### 수정 파일 및 체크리스트

- [ ] If a command fails, identify the failing file/line from stdout/stderr.
- [ ] Apply the smallest fix in `apps/client/lib/src/app/nomadcode_client_app.dart`, `apps/client/lib/src/features/workspaces/presentation/workspace_home_page.dart`, or `apps/client/test/widget_test.dart`.
- [ ] Do not add packages or reintroduce `apps/client/pubspec.lock` churn without command evidence.

### 테스트 작성

Add or adjust tests only if the failing output shows the existing widget tests do not assert the intended behavior.

### 중간 검증

```bash
cd apps/client && flutter test test/widget_test.dart
```

Expected: passes after any minimal fix.

## 의존 관계 및 구현 순서

Run REVIEW_API_VERIFY-1 first. Perform REVIEW_API_VERIFY-2 only if a required command fails.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/m-proto-socket-infrastructure-communication-rail/03+02_workspace_integration/CODE_REVIEW-cloud-G07.md` | REVIEW_API_VERIFY-1 |
| `apps/client/lib/src/app/nomadcode_client_app.dart` | REVIEW_API_VERIFY-2, only if command failure requires it |
| `apps/client/lib/src/features/workspaces/presentation/workspace_home_page.dart` | REVIEW_API_VERIFY-2, only if command failure requires it |
| `apps/client/test/widget_test.dart` | REVIEW_API_VERIFY-2, only if command failure requires it |
| `apps/client/pubspec.lock` | REVIEW_API_VERIFY-2, only if command failure proves lockfile regeneration is required |

## 최종 검증

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

Expected: lockfile diff is absent unless command evidence justifies it; widget tests and full Flutter tests pass; analyzer has no fatal issues. These Flutter commands must run only on a permitted runner, not on the current prohibited local test environment.

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