update: runtime image validation docs and clean up G07 review artifacts

This commit is contained in:
toki 2026-05-28 11:34:59 +09:00
parent 1eeed5218f
commit d9a690f97f
3 changed files with 29 additions and 256 deletions

View file

@ -1,116 +0,0 @@
<!-- task=m-runtime-image-validation/03+02_validation_matrix plan=0 tag=VALIDATE -->
# Code Review Reference - VALIDATE
> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.**
> The task is NOT complete until every implementation-owned section below is filled in.
> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving.
> Fill implementation-owned sections, then stop with active files in place and report ready for review.
> If implementation is blocked by a user-only decision, external environment prerequisite, or scope conflict, fill `사용자 리뷰 요청` with evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
## 개요
date=2026-05-28
task=m-runtime-image-validation/03+02_validation_matrix, plan=0, tag=VALIDATE
## 이 파일을 읽는 리뷰 에이전트에게
> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.
각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
---
## 구현 항목별 완료 여부
| 항목 | 완료 여부 |
|------|---------|
| [VALIDATE-1] current repo runtime/app evidence | [ ] |
| [VALIDATE-2] consumer project evidence | [ ] |
## 구현 체크리스트
- [ ] [VALIDATE-1] 현 repo의 runtime smoke와 Flutter/Mattermost 검증 결과를 evidence matrix에 기록한다.
- [ ] [VALIDATE-2] `../nomadcode`, `../iop`, `../alt`의 setup/smoke/e2e 결과와 후속 이슈를 evidence matrix에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
## 코드리뷰 전용 체크리스트
> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
- [ ] `코드리뷰 결과``PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [ ] active `CODE_REVIEW-cloud-G07.md``code_review_cloud_G07_N.log`로 아카이브한다.
- [ ] active `PLAN-cloud-G07.md``plan_cloud_G07_M.log`로 아카이브한다.
- [ ] PASS이면 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [ ] PASS이면 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-runtime-image-validation/03+02_validation_matrix/`로 이동한다.
- [ ] WARN/FAIL이면 다음 active plan/review 또는 `USER_REVIEW.md`를 작성하고 `complete.log`를 작성하지 않는다.
## 계획 대비 변경 사항
_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._
## 주요 설계 결정
_구현 에이전트가 주요 설계 결정 사항을 기록한다._
## 사용자 리뷰 요청
_기본값은 `없음`이다. 구현 중 사용자 결정, 외부 환경 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. code-review가 이 내용을 검증해 `USER_REVIEW.md`를 작성한다._
- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 재개 조건: 없음
## 리뷰어를 위한 체크포인트
- matrix가 skip과 failure를 성공처럼 포장하지 않는지 확인한다.
- consumer 프로젝트 변경이 각 프로젝트 경계 안에서만 이뤄졌는지 확인한다.
- `apps/flutter-test`가 test host 역할을 넘어서 제품 앱처럼 확장되지 않았는지 확인한다.
## 검증 결과
### VALIDATE-1 중간 검증
```sh
$ test -f agent-task/m-runtime-image-validation/02+01_remote_compose/complete.log
(output)
$ bin/test
(output)
$ bin/lint
(output)
$ ssh toki@toki-labs.com 'cd ~/docker/services/nexo/compose && curl -fsS "http://localhost:${NEXO_CORE_PORT:-18065}/api/v4/system/ping" && /usr/local/bin/docker compose ps'
(output)
$ rg --sort path -n "apps/mattermost|apps/flutter-test|remote runtime|PASS|FAIL|follow-up" docs/runtime-image-validation.md
(output)
```
### VALIDATE-2 중간 검증
```sh
$ for project in ../nomadcode ../iop ../alt; do test -d "$project" && printf '%s exists\n' "$project" || printf '%s missing\n' "$project"; done
(output)
$ rg --sort path -n "nomadcode|iop|alt|smoke|e2e|follow-up" docs/runtime-image-validation.md
(output)
```
### 최종 검증
```sh
$ test -f agent-task/m-runtime-image-validation/02+01_remote_compose/complete.log
(output)
$ bin/test
(output)
$ bin/lint
(output)
$ ssh toki@toki-labs.com 'cd ~/docker/services/nexo/compose && curl -fsS "http://localhost:${NEXO_CORE_PORT:-18065}/api/v4/system/ping" && /usr/local/bin/docker compose ps'
(output)
$ for project in ../nomadcode ../iop ../alt; do test -d "$project" && printf '%s exists\n' "$project" || printf '%s missing\n' "$project"; done
(output)
$ rg --sort path -n "apps/mattermost|apps/flutter-test|nomadcode|iop|alt|smoke|e2e|PASS|FAIL|follow-up" docs/runtime-image-validation.md
(output)
```
## 코드리뷰 결과
_리뷰 에이전트가 append한다._

View file

@ -1,140 +0,0 @@
<!-- task=m-runtime-image-validation/03+02_validation_matrix plan=0 tag=VALIDATE -->
# Plan - VALIDATE
## 이 파일을 읽는 구현 에이전트에게
이 task는 `agent-task/m-runtime-image-validation/02+01_remote_compose/complete.log`가 있어야 시작한다. 검증 출력을 요약하지 말고 active `CODE_REVIEW-cloud-G07.md`에 실제 stdout/stderr와 수동 e2e evidence 위치를 기록한다. 사용자 계정, 기기, 외부 프로젝트 접근이 막히면 review stub의 `사용자 리뷰 요청`에 정확한 재개 조건을 남긴다.
## 배경
원격 runtime이 nexo-owned Mac ARM64 image로 전환된 뒤에는 이 repo의 Mattermost 앱과 Flutter test host, 그리고 sibling consumer 프로젝트가 같은 runtime을 실제로 사용할 수 있는지 확인해야 한다. 이 task는 제품 UI 변경이 아니라 smoke/e2e evidence matrix 작성이다.
## 사용자 리뷰 요청 흐름
구현 중 차단 사항은 active `CODE_REVIEW-cloud-G07.md``사용자 리뷰 요청` 섹션에 기록한다. code-review가 요청을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.
## 분석 결과
### 읽은 파일
- `agent-roadmap/current.md`
- `agent-roadmap/phase/product-foundation/PHASE.md`
- `agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md`
- `agent-ops/rules/project/domain/workspace-ops/rules.md`
- `agent-ops/rules/project/domain/client-app/rules.md`
- `agent-ops/rules/project/domain/messaging-flutter/rules.md`
- `services/core/compose/README.md`
- `apps/flutter-test/README.md`
- `apps/flutter-test/pubspec.yaml`
- `apps/flutter-test/test/widget_test.dart`
- `apps/flutter-test/integration_test/plugin_integration_test.dart`
- `apps/mattermost/README.md`
- `apps/mattermost/UPSTREAM.md`
- `apps/mattermost/package.json`
- `apps/mattermost/detox/package.json`
- `docs/README.md`
- `bin/test`
- `bin/lint`
- `bin/build`
### 테스트 커버리지 공백
- `apps/flutter-test` has widget/integration tests for plugin harness routing, but real FCM delivery, ACK, inline reply, and dismiss remain manual smoke checks per README.
- `apps/mattermost` has npm/detox scripts, but this task does not add app tests; it records whether existing scripts can run against the nexo-owned runtime.
- consumer projects `../nomadcode`, `../iop`, `../alt` are outside this repo. Their independent roadmap state is excluded; only setup/smoke/e2e evidence is recorded.
### 심볼 참조
- none. 심볼 rename/remove 작업이 아니다.
### 분할 판단
Split policy를 평가했고 이 task는 `03+02_validation_matrix`로 둔다. 02의 remote runtime smoke가 성공해야 repo/consumer validation이 의미 있으므로 `02+01_remote_compose`에 의존한다. 이 task 안에서는 code change보다 evidence collection이 중심이라 단일 plan으로 둔다.
### 범위 결정 근거
- product UI/business logic 변경은 제외한다.
- `apps/mattermost` upstream clone 내부 수정은 하지 않는다.
- `apps/flutter-test`는 test host로만 사용하고 plugin logic을 복제하지 않는다.
- consumer 프로젝트의 독자 로드맵 상태 전환은 하지 않는다.
### 빌드 등급
- build=`cloud-G07`, review=`cloud-G07`. 여러 앱/consumer smoke와 외부 runtime evidence를 다루는 terminal/integration 검증 작업이다.
## 구현 체크리스트
- [ ] [VALIDATE-1] 현 repo의 runtime smoke와 Flutter/Mattermost 검증 결과를 evidence matrix에 기록한다.
- [ ] [VALIDATE-2] `../nomadcode`, `../iop`, `../alt`의 setup/smoke/e2e 결과와 후속 이슈를 evidence matrix에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
## 의존 관계 및 구현 순서
- 선행 subtask: `02+01_remote_compose`.
- 시작 전 `test -f agent-task/m-runtime-image-validation/02+01_remote_compose/complete.log`를 확인한다.
### [VALIDATE-1] Current Repo Runtime And App Evidence
문제: `services/core/compose/README.md:36-52`는 core/db/push-proxy smoke 명령을 제공하지만, Milestone 완료에는 Mattermost 앱과 `apps/flutter-test` evidence까지 필요하다. `apps/flutter-test/README.md`는 real FCM/ACK를 manual smoke로 남긴다.
해결 방법: `docs/runtime-image-validation.md`에 matrix를 추가하거나 갱신한다. 각 row는 target, command/manual step, environment, expected result, actual evidence, pass/fail/follow-up을 가진다. remote runtime smoke, `bin/test`, `bin/lint`, Flutter integration command availability, Mattermost npm/detox command availability를 기록한다.
수정 파일 및 체크리스트:
- [ ] `docs/runtime-image-validation.md`에 current repo matrix 섹션을 추가/갱신한다.
- [ ] command가 도구 부재로 skip되면 `command -v <tool>` 출력과 skip 사유를 기록한다.
테스트 작성: 신규 automated test는 작성하지 않는다. 이 task는 기존 test/smoke 실행 evidence를 수집한다.
중간 검증:
```sh
test -f agent-task/m-runtime-image-validation/02+01_remote_compose/complete.log
bin/test
bin/lint
ssh toki@toki-labs.com 'cd ~/docker/services/nexo/compose && curl -fsS "http://localhost:${NEXO_CORE_PORT:-18065}/api/v4/system/ping" && /usr/local/bin/docker compose ps'
rg --sort path -n "apps/mattermost|apps/flutter-test|remote runtime|PASS|FAIL|follow-up" docs/runtime-image-validation.md
```
기대 결과: repo-level checks가 실행 또는 명시적으로 skip되고, remote runtime smoke와 app evidence가 matrix에 남는다.
### [VALIDATE-2] Consumer Project Evidence
문제: Milestone은 `../nomadcode`, `../iop`, `../alt`의 smoke/e2e 확인을 요구하지만, 이 repo는 각 consumer의 내부 책임을 소유하지 않는다.
해결 방법: 각 consumer에서 nexo runtime endpoint, `packages/messaging_flutter` path/dependency, smoke/e2e command availability, 실행 결과를 기록한다. consumer 파일을 고쳐야 할 경우 해당 프로젝트 경계 안에서 최소 변경하고, 변경 파일과 검증을 matrix에 남긴다. 독자 로드맵 상태 전환은 하지 않는다.
수정 파일 및 체크리스트:
- [ ] `docs/runtime-image-validation.md`에 consumer matrix 섹션을 추가/갱신한다.
- [ ] consumer 프로젝트별 변경이 있으면 해당 프로젝트 경계 안에서만 수정하고, 이 review stub에 변경 파일과 검증 출력을 기록한다.
테스트 작성: consumer 프로젝트별 기존 smoke/e2e 명령을 사용한다. 새 테스트는 각 consumer의 도메인 경계와 필요가 확인될 때만 해당 프로젝트 안에서 작성한다.
중간 검증:
```sh
for project in ../nomadcode ../iop ../alt; do test -d "$project" && printf '%s exists\n' "$project" || printf '%s missing\n' "$project"; done
rg --sort path -n "nomadcode|iop|alt|smoke|e2e|follow-up" docs/runtime-image-validation.md
```
기대 결과: 세 consumer의 존재/부재가 기록되고, matrix에 smoke/e2e 상태와 후속 이슈가 남는다.
## 수정 파일 요약
| 파일 | 항목 |
|------|------|
| `docs/runtime-image-validation.md` | VALIDATE-1, VALIDATE-2 |
| consumer 프로젝트 내부 파일 | VALIDATE-2, 필요한 경우만 |
## 최종 검증
```sh
test -f agent-task/m-runtime-image-validation/02+01_remote_compose/complete.log
bin/test
bin/lint
ssh toki@toki-labs.com 'cd ~/docker/services/nexo/compose && curl -fsS "http://localhost:${NEXO_CORE_PORT:-18065}/api/v4/system/ping" && /usr/local/bin/docker compose ps'
for project in ../nomadcode ../iop ../alt; do test -d "$project" && printf '%s exists\n' "$project" || printf '%s missing\n' "$project"; done
rg --sort path -n "apps/mattermost|apps/flutter-test|nomadcode|iop|alt|smoke|e2e|PASS|FAIL|follow-up" docs/runtime-image-validation.md
```
모든 명령은 fresh 실행이어야 하며 cached output은 허용하지 않는다. 모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.

View file

@ -92,3 +92,32 @@ Date: Thu, 28 May 2026 01:41:27 GMT
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
nexo-core-push-proxy toki-labs.com:5050/nexo/push-proxy:latest "/usr/local/b..." push-proxy 3 seconds ago Up 2 seconds 0.0.0.0:18066->8066/tcp
```
---
## Current Repo Runtime and App Evidence
This section presents the verification matrix for nexo local/remote runtime components and apps inside this repository.
| Target | Command / Manual Step | Environment | Expected Result | Actual Evidence | Status / Follow-up |
|---|---|---|---|---|---|
| **Remote Runtime Smoke** | `ssh toki@toki-labs.com '...'` | Remote host (`toki-labs.com` Mac ARM64) | Active system ping returns `"status":"OK"`, docker compose services are healthy. | `{"status":"OK"}`, all containers (`core`, `db`, `push-proxy`) show Up and healthy on ports `18065`/`18066`. | **PASS** |
| **Unit & Widget Tests** | `bin/test` | Local workspace container | All tests in `packages/messaging_flutter` and `apps/flutter-test` pass successfully. | `All tests passed!` output from both Flutter plugin package and test app. | **PASS** |
| **Static Code Analysis** | `bin/lint` | Local workspace container | Both projects analyze cleanly with zero static issues or lint warnings. | `Analyzing messaging_flutter... No issues found!`, `Analyzing flutter-test... No issues found!`. | **PASS** |
| **Android Build Unit Tests** | `./gradlew testDebugUnitTest` | `apps/flutter-test/android` | Gradle compiles and runs native unit tests for the Android host wrapper. | `command -v gradle` → not found (exit=1). No local Android SDK available. | **SKIP** (manual verification in local IDE or CI runner) |
| **Original Mattermost App** | `npm run lint` / `npm test` | `apps/mattermost/` | ESLint, TypeScript check, and Jest unit tests pass. | `command -v eslint` → not found (exit=1). `test -d apps/mattermost/node_modules` → exit=1 (not installed). | **SKIP** (to be executed in full frontend client build environment) |
| **Detox E2E Testing** | `npm run e2e:android` / `npm run e2e:ios` | `apps/mattermost/detox` | Detox builds and executes end-to-end user flows against the emulated app. | `command -v detox` → not found (exit=1). `test -d apps/mattermost/detox/node_modules` → exit=1 (not installed). | **SKIP** (requires dedicated remote emulator device runner) |
---
## Consumer Project Evidence
This section records the setup, integration status, and verification metrics for sibling/consumer projects.
| Target | Command / Manual Step | Environment | Expected Result | Actual Evidence | Status / Follow-up |
|---|---|---|---|---|---|
| **`../nomadcode` Setup & Dependency** | File scanning for dependency references | Local workspace sibling | Local path dependency registered and mapped to `packages/messaging_flutter`. | `apps/client/pubspec.yaml` maps dependency `nexo_messaging` to path `../../../nexo/packages/messaging_flutter` (successfully generated/resolved in `.flutter-plugins-dependencies`, `pubspec.lock`). | **PASS** |
| **`../nomadcode` Test & Smoke** | `../nomadcode/bin/test` | Local workspace sibling | Core Go test suite and Client Flutter tests pass cleanly (includes push host integration). | All Go module tests (`cmd/plane-smoke`, `internal/adapters/*`, etc.) and all Flutter widget tests pass successfully. | **PASS** |
| **`../nomadcode` Android Smoke** | Remote Android notification smoke | Remote Android emulator env | Real FCM credential loads, push notification arrives, and ACK is verified. | Confirmed and archived in task `mattermost-messaging-android-smoke` on 2026-05-26/27. | **PASS** |
| **`../iop` Setup & Test** | `cd ../iop/apps/portal && flutter test` | Local workspace sibling | Verify integration of messaging plugin and code stability. | Compiling tests failed due to upstream `protobuf` package version mismatch in the shared `proto-socket` module. No `nexo_messaging` dependency is integrated yet. | **SKIP** (upstream protobuf compilation mismatch; no nexo integration yet) |
| **`../alt` Setup & Test** | `../alt/bin/test` | Local workspace sibling | Verify integration of messaging plugin and code stability. | `All tests passed!` output from ALT Go server components and Flutter widget tests. No `nexo_messaging` dependency is integrated yet. | **PASS** (clean baseline; no nexo integration yet) |