<!-- task=mattermost_push_plugin_extraction/04+02_risk_hardening plan=2 tag=REVIEW_REVIEW_REFACTOR -->

# Push Plugin Android Build Verification Plan

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

이 계획은 `code_review_cloud_G08_1.log`의 FAIL 판정에서 남은 검증 신뢰 문제만 닫는다. Android SDK가 필요한 검증은 로컬 샌드박스가 아니라 `ssh toki@toki-labs.com` 원격 환경에서 수행한다. 코드 수정은 Android build가 직접 노출한 compile error를 해결하는 범위로만 제한한다. 구현을 끝내기 전 `CODE_REVIEW-cloud-G08.md`의 구현 에이전트 소유 섹션을 반드시 채운다. 검증 명령을 실제로 실행하고 stdout/stderr를 붙여 넣은 뒤 active 파일을 그대로 둔 채 review ready를 보고한다.

## 배경

`SystemEntity` unresolved reference 위험은 import 추가로 해소되었다. 남은 차단점은 로컬 환경의 Android SDK 부재로 `flutter build apk --debug`가 실행되지 않아 Kotlin/Java/Room native compile을 증명하지 못한 점이다. 이번 후속 작업은 `ssh toki@toki-labs.com`에서 SDK가 설정된 환경을 사용해 Android debug build를 실제 성공시키는 데만 집중한다.

## 분석 결과

### 읽은 파일

- `agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/code_review_cloud_G08_1.log`
- `agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/plan_cloud_G08_1.log`
- `../mattermost-push-plugin/android/src/main/kotlin/com/tokilabs/mattermost_push_plugin/helpers/PushNotificationDataHelper.kt`

### 남은 실패 근거

- `code_review_cloud_G08_1.log` records `flutter build apk --debug` failure: `[!] No Android SDK found. Try setting the ANDROID_HOME environment variable.`
- `CODE_REVIEW-cloud-G08.md` must not be marked complete until Android debug build succeeds.

### 범위 결정 근거

- Do not change DAO behavior, manifest ownership, host app migration, or Dart API unless the Android build exposes a directly related compile error.
- Do not add generated build output to the repo.
- Android SDK 확인과 Android build는 `ssh toki@toki-labs.com`에서 수행한다.
- Environment setup may be done outside the repository, but do not bake developer-local absolute SDK paths into project files.

### 빌드 등급

- Build lane: `cloud-G08`; review lane: `cloud-G08`. This is terminal/external CLI verification for Android native build trust.

## 구현 체크리스트

- [ ] [REVIEW_REVIEW_REFACTOR-1] Android SDK/Flutter Android toolchain 상태를 확인하고 `flutter build apk --debug`가 실행 가능한 환경을 만든다.
- [ ] [REVIEW_REVIEW_REFACTOR-2] `../mattermost-push-plugin/example` Android debug build를 성공시키고 실제 stdout/stderr를 기록한다.
- [ ] 중간 검증과 최종 검증 명령을 모두 실행하고 실제 출력을 `CODE_REVIEW-cloud-G08.md`에 붙여 넣는다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 의존 관계 및 구현 순서

1. `ssh toki@toki-labs.com` 접속이 가능한지 확인한다.
2. 원격 환경에서 Android toolchain 상태를 `flutter doctor -v`로 확인한다.
3. 원격 환경의 SDK/ANDROID_HOME 문제가 있으면 환경을 복구한다. 프로젝트 파일에 로컬 SDK 경로를 하드코딩하지 않는다.
4. 원격 환경에서 `flutter build apk --debug`를 실행한다.
4. Build가 source compile error로 실패하면 해당 compile error만 최소 수정하고 같은 검증을 재실행한다.
5. Android build가 성공하지 못하면 checklist를 완료하지 말고 review-ready로 제출하지 않는다.

### [REVIEW_REVIEW_REFACTOR-1] Android Toolchain Readiness

#### 문제

Android SDK가 없어서 필수 build command가 시작 단계에서 실패한다.

#### 해결 방법

`ssh toki@toki-labs.com`에서 `flutter doctor -v`와 환경 변수를 확인하고, SDK가 설치된 환경 또는 적절한 `ANDROID_HOME`/`ANDROID_SDK_ROOT` 설정으로 build가 가능한 상태를 만든다. repo 파일에는 개인 로컬 SDK 경로를 기록하지 않는다.

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

- [ ] `flutter doctor -v` output records Android toolchain availability
- [ ] No repo file contains a developer-local Android SDK absolute path

#### 테스트 작성

No new test file required.

#### 중간 검증

```bash
ssh toki@toki-labs.com 'cd /config/workspace/mattermost-push-plugin && flutter doctor -v'
cd /config/workspace/nomadcode && ! rg --sort path "ANDROID_HOME|ANDROID_SDK_ROOT|/Android/Sdk|android-sdk" ../mattermost-push-plugin
```

Expected: remote doctor output shows Android toolchain available, and repo source does not contain hardcoded local SDK paths.

### [REVIEW_REVIEW_REFACTOR-2] Android Debug Build

#### 문제

Dart analysis and tests do not compile plugin Android Kotlin/Java/Room code.

#### 해결 방법

Run the example Android debug build successfully on `ssh toki@toki-labs.com`. If the build surfaces compile errors in plugin Android source, fix only those errors, make sure the remote checkout has the fix, and rerun the full verification.

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

- [ ] `ssh toki@toki-labs.com 'cd /config/workspace/mattermost-push-plugin/example && flutter build apk --debug'` exits 0
- [ ] `CODE_REVIEW-cloud-G08.md` contains the successful build output
- [ ] Any code edits are directly tied to compile errors from the Android build

#### 테스트 작성

No new unit test required; Android build is the required verification.

#### 중간 검증

```bash
cd /config/workspace/mattermost-push-plugin && flutter analyze
cd /config/workspace/mattermost-push-plugin && flutter test
```

Expected: both commands pass.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/mattermost_push_plugin_extraction/04+02_risk_hardening/CODE_REVIEW-cloud-G08.md` | REVIEW_REVIEW_REFACTOR-1, REVIEW_REVIEW_REFACTOR-2 |
| `../mattermost-push-plugin/android/src/main/**` | Only if Android build exposes directly related compile errors |

## 최종 검증

```bash
ssh toki@toki-labs.com 'cd /config/workspace/mattermost-push-plugin && flutter doctor -v'
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 'cd /config/workspace/mattermost-push-plugin/example && flutter build apk --debug'
```

Expected: remote Android toolchain is available, no local SDK paths are committed, static checks pass, Dart checks pass, and remote Android debug build exits 0.
