<!-- task=mattermost_push_plugin_extraction/04+02_risk_hardening plan=3 tag=REVIEW_REVIEW_REVIEW_REFACTOR -->

# Push Plugin Verification Trust Follow-up Plan

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

이 계획은 `code_review_cloud_G08_2.log`의 FAIL 판정에서 남은 절차/검증 신뢰 문제만 닫는다. Android SDK가 필요한 빌드는 계속 `ssh toki@toki-labs.com`에서 수행한다. 코드 수정은 `flutter analyze` 또는 Android build가 직접 노출한 문제를 해결하는 범위로만 제한한다. 구현을 끝내기 전 `CODE_REVIEW-cloud-G08.md`의 구현 에이전트 소유 섹션을 반드시 채운다.

## 배경

원격 Android debug build는 성공했지만, active plan/review의 구현 체크리스트 문구가 정확히 일치하지 않았다. 또한 review 파일에는 `cd /config/workspace/mattermost-push-plugin && flutter analyze` 성공이 기록되어 있었으나, 리뷰 재실행 결과 example package dependency resolution 문제로 38개 이슈가 발생했다. PASS를 위해서는 체크리스트 계약과 고정 검증 명령의 재현성을 모두 회복해야 한다.

## 분석 결과

### 읽은 파일

- `agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/code_review_cloud_G08_2.log`
- `agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/plan_cloud_G08_2.log`
- `../mattermost-push-plugin/pubspec.yaml`
- `../mattermost-push-plugin/example/pubspec.yaml`
- `../mattermost-push-plugin/example/analysis_options.yaml`

### 실패 근거

- `plan_cloud_G08_2.log` and `code_review_cloud_G08_2.log` did not have identical `구현 체크리스트` item text.
- Review rerun of `cd /config/workspace/mattermost-push-plugin && flutter analyze` failed with unresolved Flutter/test dependencies under `example/`.
- Remote Android build success is useful but does not replace the local fixed `flutter analyze` command.

### 범위 결정 근거

- Do not refactor Android native push behavior, DAO behavior, or manifest ownership.
- Do not commit generated `.dart_tool/`, build output, or developer-local SDK paths.
- If dependency resolution is the only issue, prefer running `flutter pub get` in root and `example/` over changing source.

### 빌드 등급

- Build lane: `cloud-G08`; review lane: `cloud-G08`. This is a repeated verification-trust follow-up with terminal/remote build commands.

## 구현 체크리스트

- [ ] [REVIEW_REVIEW_REVIEW_REFACTOR-1] `PLAN-cloud-G08.md`와 `CODE_REVIEW-cloud-G08.md`의 구현 체크리스트 문구와 순서를 정확히 일치시킨다.
- [ ] [REVIEW_REVIEW_REVIEW_REFACTOR-2] `cd /config/workspace/mattermost-push-plugin && flutter analyze` 실패를 재현·해소하고 실제 통과 stdout/stderr를 기록한다.
- [ ] [REVIEW_REVIEW_REVIEW_REFACTOR-3] 원격 Android debug build 성공과 로컬 정적/Dart 검증을 같은 review 파일에 재기록한다.
- [ ] 중간 검증과 최종 검증 명령을 모두 실행하고 실제 출력을 `CODE_REVIEW-cloud-G08.md`에 붙여 넣는다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 의존 관계 및 구현 순서

1. 이 파일과 `CODE_REVIEW-cloud-G08.md`의 `구현 체크리스트` 문구/순서가 동일한지 확인한다.
2. Root와 example의 Flutter dependencies를 복구한다.
3. `flutter analyze`를 root에서 재실행한다.
4. 기존 static checks, `flutter test`, 원격 Android build를 재실행한다.
5. Generated artifacts나 SDK absolute path가 repo에 들어가지 않았는지 확인한다.

### [REVIEW_REVIEW_REVIEW_REFACTOR-1] Checklist Contract

#### 문제

이전 active plan/review의 implementation checklist text가 서로 달라 completeness 계약을 만족하지 못했다.

#### 해결 방법

이번 active plan과 review의 `구현 체크리스트` 문구/순서를 그대로 유지한다. 구현 에이전트는 review 파일에서 `[ ]`를 `[x]`로 바꾸는 것 외에 체크리스트 텍스트를 수정하지 않는다.

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

- [ ] `PLAN-cloud-G08.md` and `CODE_REVIEW-cloud-G08.md` have identical implementation checklist item text/order

#### 중간 검증

```bash
cd /config/workspace/nomadcode && sed -n '/^## 구현 체크리스트$/,/^## /p' agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/PLAN-cloud-G08.md
cd /config/workspace/nomadcode && sed -n '/^## 구현 체크리스트$/,/^## /p' agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/CODE_REVIEW-cloud-G08.md
```

Expected: item text/order is identical, allowing only checkbox state differences.

### [REVIEW_REVIEW_REVIEW_REFACTOR-2] Local Analyze Reproducibility

#### 문제

`flutter analyze` success was recorded, but review rerun failed because `example/` dependencies were unresolved.

#### 해결 방법

Run dependency resolution without committing generated tool folders. If `flutter pub get` updates lockfiles, keep only intentional lockfile changes. Then rerun the exact root analyze command until it exits 0.

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

- [ ] `cd /config/workspace/mattermost-push-plugin && flutter pub get` completed if needed
- [ ] `cd /config/workspace/mattermost-push-plugin/example && flutter pub get` completed if needed
- [ ] `cd /config/workspace/mattermost-push-plugin && flutter analyze` exits 0
- [ ] No `.dart_tool/` or build output is added to git

#### 중간 검증

```bash
cd /config/workspace/mattermost-push-plugin && flutter pub get
cd /config/workspace/mattermost-push-plugin/example && flutter pub get
cd /config/workspace/mattermost-push-plugin && flutter analyze
```

Expected: analyze exits 0.

### [REVIEW_REVIEW_REVIEW_REFACTOR-3] Full Verification Replay

#### 문제

After restoring analyze reproducibility, the task still needs the previous static checks, Dart tests, and remote Android build replayed in one review file.

#### 해결 방법

Run the fixed verification commands below and paste actual stdout/stderr.

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

- [ ] Static DB/SDK path searches pass
- [ ] `flutter test` passes
- [ ] Remote Android debug build exits 0

#### 중간 검증

```bash
cd /config/workspace/mattermost-push-plugin && flutter test
ssh toki@toki-labs.com 'export ANDROID_HOME=/Users/toki/Library/Android/sdk && export PATH=/Users/toki/SDK/flutter/bin:$PATH && cd /Users/toki/docker/services/code-server/data/volume/workspace/mattermost-push-plugin/example && flutter build apk --debug'
```

Expected: both commands exit 0.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/CODE_REVIEW-cloud-G08.md` | all |
| `../mattermost-push-plugin/pubspec.lock` | only if `flutter pub get` intentionally updates it |
| `../mattermost-push-plugin/example/pubspec.lock` | only if `flutter pub get` intentionally updates it |

## 최종 검증

```bash
cd /config/workspace/nomadcode && sed -n '/^## 구현 체크리스트$/,/^## /p' agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/PLAN-cloud-G08.md
cd /config/workspace/nomadcode && sed -n '/^## 구현 체크리스트$/,/^## /p' agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/CODE_REVIEW-cloud-G08.md
cd /config/workspace/nomadcode && ! rg --sort path "ANDROID_HOME|ANDROID_SDK_ROOT|/Android/Sdk|android-sdk" ../mattermost-push-plugin
cd /config/workspace/nomadcode && rg --sort path -n "SystemEntity" ../mattermost-push-plugin/android/src/main/kotlin/com/tokilabs/mattermost_push_plugin/helpers/PushNotificationDataHelper.kt ../mattermost-push-plugin/android/src/main/kotlin/com/tokilabs/mattermost_push_plugin/helpers/db/ServerEntities.kt
cd /config/workspace/nomadcode && ! rg --sort path "db\\??\\.close\\(" ../mattermost-push-plugin/android/src/main
cd /config/workspace/nomadcode && ! rg --sort path "Room DAO 구현 필요|TODO: db\\.|TODO: Room DB" ../mattermost-push-plugin/android/src/main
cd /config/workspace/mattermost-push-plugin && flutter analyze
cd /config/workspace/mattermost-push-plugin && flutter test
ssh toki@toki-labs.com 'export ANDROID_HOME=/Users/toki/Library/Android/sdk && export PATH=/Users/toki/SDK/flutter/bin:$PATH && cd /Users/toki/docker/services/code-server/data/volume/workspace/mattermost-push-plugin/example && flutter build apk --debug'
cd /config/workspace/nomadcode && git -C ../mattermost-push-plugin status --short
```

Expected: checklist text matches, static searches pass, analyze/test pass, remote Android build succeeds, and git status has no generated `.dart_tool/` or build-output additions.
