diff --git a/agent-task/m-runtime-image-validation/03+02_validation_matrix/CODE_REVIEW-cloud-G07.md b/agent-task/m-runtime-image-validation/03+02_validation_matrix/CODE_REVIEW-cloud-G07.md deleted file mode 100644 index 2f7cf118..00000000 --- a/agent-task/m-runtime-image-validation/03+02_validation_matrix/CODE_REVIEW-cloud-G07.md +++ /dev/null @@ -1,116 +0,0 @@ - - -# 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한다._ diff --git a/agent-task/m-runtime-image-validation/03+02_validation_matrix/PLAN-cloud-G07.md b/agent-task/m-runtime-image-validation/03+02_validation_matrix/PLAN-cloud-G07.md deleted file mode 100644 index cfacb2a3..00000000 --- a/agent-task/m-runtime-image-validation/03+02_validation_matrix/PLAN-cloud-G07.md +++ /dev/null @@ -1,140 +0,0 @@ - - -# 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 ` 출력과 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`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/docs/runtime-image-validation.md b/docs/runtime-image-validation.md index 029c4b52..6ccc1a87 100644 --- a/docs/runtime-image-validation.md +++ b/docs/runtime-image-validation.md @@ -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) |