From 0fbab633c5f3530f1a16557a198081baf0eaec55 Mon Sep 17 00:00:00 2001 From: toki Date: Thu, 28 May 2026 19:47:57 +0900 Subject: [PATCH] chore: archive runtime-image-validation milestone and update roadmap - Move runtime-image-validation milestone to archive - Archive m-runtime-image-validation task folder - Update agent-roadmap/current.md and PHASE.md - Update docs/runtime-image-validation.md - Update apps/mattermost snapshots and detox config --- .../milestones/runtime-image-validation.md | 35 ++-- agent-roadmap/current.md | 4 +- .../phase/product-foundation/PHASE.md | 6 +- .../USER_REVIEW.md | 60 ++++++ .../USER_REVIEW.md | 60 ++++++ .../01_repo_app_validation/USER_REVIEW.md | 56 ------ .../CODE_REVIEW-cloud-G07.md | 116 ------------ .../PLAN-cloud-G07.md | 172 ------------------ .../CODE_REVIEW-cloud-G07.md | 115 ------------ .../PLAN-cloud-G07.md | 152 ---------------- .../__snapshots__/index.test.tsx.snap | 4 +- apps/mattermost/detox/.detoxrc.json | 2 +- docs/runtime-image-validation.md | 4 +- 13 files changed, 149 insertions(+), 637 deletions(-) rename agent-roadmap/{ => archive}/phase/product-foundation/milestones/runtime-image-validation.md (82%) create mode 100644 agent-task/archive/2026/05/m-runtime-image-validation/02_consumer_project_validation/USER_REVIEW.md create mode 100644 agent-task/archive/2026/05/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/USER_REVIEW.md delete mode 100644 agent-task/m-runtime-image-validation/01_repo_app_validation/USER_REVIEW.md delete mode 100644 agent-task/m-runtime-image-validation/02_consumer_project_validation/CODE_REVIEW-cloud-G07.md delete mode 100644 agent-task/m-runtime-image-validation/02_consumer_project_validation/PLAN-cloud-G07.md delete mode 100644 agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/CODE_REVIEW-cloud-G07.md delete mode 100644 agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/PLAN-cloud-G07.md diff --git a/agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md b/agent-roadmap/archive/phase/product-foundation/milestones/runtime-image-validation.md similarity index 82% rename from agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md rename to agent-roadmap/archive/phase/product-foundation/milestones/runtime-image-validation.md index 5fdbed66..ee68267a 100644 --- a/agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md +++ b/agent-roadmap/archive/phase/product-foundation/milestones/runtime-image-validation.md @@ -12,7 +12,7 @@ ## 상태 -[진행중] +[완료] ## 승격 조건 @@ -58,29 +58,32 @@ Mattermost server/webapp과 push-proxy를 원격 Mac에서 재현 가능하게 이 저장소 안에서 Mattermost 앱과 Flutter 테스트 앱이 새 runtime image 기준으로 실제 사용자 경로를 검증한다. -- [ ] [mattermost-smoke] `apps/mattermost`가 nexo-owned runtime에 접속하는 smoke 테스트를 통과한다. -- [ ] [mattermost-e2e] `apps/mattermost`에서 로그인, 채널/메시지, 기본 알림 흐름 등 e2e 사용자 테스트 범위를 정의하고 실행 evidence를 남긴다. -- [ ] [flutter-test-smoke] `apps/flutter-test`가 `packages/messaging_flutter` 소비 앱으로 nexo-owned runtime에 접속하는 smoke 테스트를 통과한다. -- [ ] [flutter-test-e2e] `apps/flutter-test`에서 플러그인 초기화, 메시징/알림 open routing, ACK 확인 등 e2e 사용자 테스트 evidence를 남긴다. +- [x] [mattermost-smoke] `apps/mattermost`가 nexo-owned runtime에 접속하는 smoke 테스트를 통과한다. +- [x] [mattermost-e2e] `apps/mattermost`에서 로그인, 채널/메시지, 기본 알림 흐름 등 e2e 사용자 테스트 범위를 정의하고 실행 evidence를 남긴다. +- [x] [flutter-test-smoke] `apps/flutter-test`가 `packages/messaging_flutter` 소비 앱으로 nexo-owned runtime에 접속하는 smoke 테스트를 통과한다. +- [x] [flutter-test-e2e] `apps/flutter-test`에서 플러그인 초기화, 메시징/알림 open routing, ACK 확인 등 e2e 사용자 테스트 evidence를 남긴다. ### Epic: [consumer-projects] Consumer project validation 이 프로젝트를 사용할 sibling 프로젝트들이 같은 runtime/image 기준을 소비할 수 있는지 확인한다. -- [ ] [consumer-setup] `../nomadcode`, `../iop`, `../alt`가 nexo runtime과 `packages/messaging_flutter`를 사용할 수 있게 세팅되어 있는지 확인하고, 누락된 세팅을 프로젝트별 경계 안에서 보완한다. -- [ ] [consumer-smoke] `../nomadcode`, `../iop`, `../alt` 각각에서 smoke 테스트를 실행하고 결과를 기록한다. -- [ ] [consumer-e2e] `../nomadcode`, `../iop`, `../alt` 각각에서 e2e 사용자 테스트를 실행하고 결과를 기록한다. -- [ ] [evidence-matrix] 현 repo와 consumer 프로젝트별 smoke/e2e 명령, 환경, 성공/실패 근거, 후속 이슈를 한 곳에 정리한다. +- [x] [consumer-setup] `../nomadcode`, `../iop`, `../alt`가 nexo runtime과 `packages/messaging_flutter`를 사용할 수 있게 세팅되어 있는지 확인하고, 누락된 세팅을 프로젝트별 경계 안에서 보완한다. +- [x] [consumer-smoke] `../nomadcode`, `../iop`, `../alt` 각각에서 smoke 테스트를 실행하고 결과를 기록한다. +- [x] [consumer-e2e] `../nomadcode`, `../iop`, `../alt` 각각에서 e2e 사용자 테스트를 실행하고 결과를 기록한다. +- [x] [evidence-matrix] 현 repo와 consumer 프로젝트별 smoke/e2e 명령, 환경, 성공/실패 근거, 후속 이슈를 한 곳에 정리한다. ## 완료 리뷰 -- 상태: 없음 -- 요청일: 없음 -- 완료 근거: 없음 +- 상태: 승인됨 +- 요청일: 2026-05-28 +- 완료 근거: + - nexo-owned core/push-proxy image registry, digest, pull, remote compose smoke evidence가 `docs/runtime-image-validation.md`에 정리됐고 2026-05-28 원격 smoke가 재확인됐다. + - 현 repo 검증에서 `bin/test`, `bin/lint`, Android unit test, Flutter integration test, Mattermost `npm run check-test`가 PASS했다. + - 소비 프로젝트 `../nomadcode`, `../iop`, `../alt`는 setup/smoke/e2e 결과와 실패/skip 근거를 evidence matrix에 기록했고, 사용자가 잔여 Mattermost Detox app-readiness 실패를 후속으로 남기는 현재 완료 처리를 승인했다. - 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 없음 + - [x] 사용자가 완료 결과를 확인했다 + - [x] archive 이동을 승인했다 +- 리뷰 코멘트: 2026-05-28 사용자 요청으로 작업 완료 처리와 Milestone 업데이트/아카이브를 진행했다. ## 범위 제외 @@ -100,4 +103,4 @@ Mattermost server/webapp과 push-proxy를 원격 Mac에서 재현 가능하게 - image/runtime 완료 근거: `docs/runtime-image-validation.md`에 registry manifest digest, remote `docker image inspect` architecture, remote compose parity/config/pull/up/smoke evidence를 기록했다. 2026-05-28 재확인에서도 registry manifest HEAD와 remote compose smoke가 성공했다. - 선행 작업: 운영 기준선 - 후속 작업: 클라이언트 검증 기준선, 업스트림 런타임 운영화, 메시징 런타임 표준화 -- 확인 필요: `apps/mattermost` smoke/e2e, `apps/flutter-test` device/emulator integration과 실제 FCM/ACK smoke, `../nomadcode`, `../iop`, `../alt` consumer setup/smoke/e2e evidence matrix 보완 +- 확인 필요: Mattermost Detox Android login-flow PASS는 app readiness/synchronization timeout으로 후속 작업에 남긴다. 현재 Milestone은 검증 기준선과 실패 근거 기록 완료 상태로 닫았다. diff --git a/agent-roadmap/current.md b/agent-roadmap/current.md index a1bb4437..7eeca2ea 100644 --- a/agent-roadmap/current.md +++ b/agent-roadmap/current.md @@ -7,9 +7,9 @@ ## 활성 Milestone -- [계획] 이미지 기반 런타임 검증 +- [계획] 클라이언트 검증 기준선 - Phase: `agent-roadmap/phase/product-foundation/PHASE.md` - - 경로: `agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md` + - 경로: `agent-roadmap/phase/product-foundation/milestones/client-validation.md` ## 선택 규칙 diff --git a/agent-roadmap/phase/product-foundation/PHASE.md b/agent-roadmap/phase/product-foundation/PHASE.md index f94fe3be..f6cd10b0 100644 --- a/agent-roadmap/phase/product-foundation/PHASE.md +++ b/agent-roadmap/phase/product-foundation/PHASE.md @@ -21,9 +21,9 @@ nexo를 Mattermost 기반 서버/front/push-proxy 런타임과 nexo-owned Flutte - [완료] 운영 기준선 - 경로: `agent-roadmap/archive/phase/product-foundation/milestones/runtime-baseline.md` - 요약: Mattermost 앱, 서버, push-proxy 원본 clone 경계와 compose/secret/smoke/remote parity 문서 기준선을 고정했다. Mac ARM64 원격 image 실행 검증은 다음 Milestone으로 이관했다. -- [계획] 이미지 기반 런타임 검증 - - 경로: `agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md` - - 요약: nexo-owned Mattermost/push-proxy image build, 배포/수신 방식, 원격 Mac runtime 전환, 현 repo와 소비 프로젝트 smoke/e2e 검증 기준을 만든다. +- [완료] 이미지 기반 런타임 검증 + - 경로: `agent-roadmap/archive/phase/product-foundation/milestones/runtime-image-validation.md` + - 요약: nexo-owned Mattermost/push-proxy image build, 배포/수신 방식, 원격 Mac runtime 전환, 현 repo와 소비 프로젝트 smoke/e2e 검증 기준선을 만들고 잔여 Detox app-readiness 실패를 후속으로 분리했다. - [계획] 클라이언트 검증 기준선 - 경로: `agent-roadmap/phase/product-foundation/milestones/client-validation.md` - 요약: `apps/flutter-test`가 플러그인 소비 앱이자 테스트 호스트로 반복 검증을 제공하도록 고정한다. diff --git a/agent-task/archive/2026/05/m-runtime-image-validation/02_consumer_project_validation/USER_REVIEW.md b/agent-task/archive/2026/05/m-runtime-image-validation/02_consumer_project_validation/USER_REVIEW.md new file mode 100644 index 00000000..bb415e8e --- /dev/null +++ b/agent-task/archive/2026/05/m-runtime-image-validation/02_consumer_project_validation/USER_REVIEW.md @@ -0,0 +1,60 @@ +# User Review Required - m-runtime-image-validation/02_consumer_project_validation + +## 요청 일시 + +2026-05-28 + +## 상태 + +RESOLVED + +## 사유 + +- 유형: implementation-blocked +- 현재 리뷰 회차: 0 +- 최종 판정: FAIL +- 요약: consumer split task의 구현 체크리스트와 검증 출력은 독립적으로 완료되지 않았다. 다만 사용자 요청으로 `runtime-image-validation` Milestone을 현재 evidence 기준으로 완료/아카이브하며, 이 split task는 최종 evidence matrix와 milestone closeout에 흡수된 것으로 닫는다. + +## 루프 이력 + +| Plan | Review | Verdict | 메모 | +|------|--------|---------|------| +| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | 구현 체크리스트와 검증 출력이 미기입 상태였고, 별도 consumer dependency 변경 없이 milestone 완료 범위에 흡수됐다. | + +## 차단 근거 + +- 문제: `../iop`와 `../alt`에 대한 최소 `nexo_messaging` dependency/test smoke 구현은 별도 완료되지 않았다. +- 현재 archive plan: `plan_cloud_G07_0.log` +- 현재 archive review: `code_review_cloud_G07_0.log` +- 검증 근거: `docs/runtime-image-validation.md`의 consumer matrix는 `../nomadcode` PASS, `../iop` upstream protobuf mismatch로 SKIP, `../alt` clean baseline PASS와 no-integration 상태를 기록한다. +- 차단 판단 근거: 사용자 승인으로 이번 Milestone은 검증 기준선과 실패/skip 근거 기록 완료 상태로 닫고, consumer별 실제 integration 보완은 후속 범위로 분리한다. + +## 사용자 결정 필요 + +- [ ] 자동 follow-up plan/review를 계속 진행한다. +- [ ] 계획을 재작성한다. +- [ ] 테스트 환경, secret, 외부 서비스, SDK, 장비 조건을 준비한 뒤 재시도한다. +- [x] 작업 범위를 줄이거나 보류/폐기한다. + +## 해소 결과 + +- 최종 처리: RESOLVED +- 사용자 결정: `runtime-image-validation` Milestone은 현재 evidence matrix 기준으로 완료 처리하고 archive한다. Consumer project split task는 별도 구현 없이 milestone closeout에 흡수된 것으로 닫는다. +- 반영 경로: + - `docs/runtime-image-validation.md` + - `agent-roadmap/archive/phase/product-foundation/milestones/runtime-image-validation.md` + - `agent-roadmap/phase/product-foundation/PHASE.md` + - `agent-roadmap/current.md` + +## 재개 조건 + +- `../iop`에 `nexo_messaging` 실제 integration을 요구하려면 먼저 shared `proto-socket`/`protobuf` compile mismatch를 해소한다. +- `../alt`에 `nexo_messaging` 실제 integration을 요구하려면 product routing 결정과 테스트 경계를 새 task로 잡는다. + +## 다음 실행 힌트 + +- 후속으로 재개할 때는 consumer별 Milestone 또는 별도 task를 만들고, sibling repo rules를 읽은 뒤 dependency/test smoke 변경을 각 프로젝트 경계 안에서 수행한다. + +## 종료 규칙 + +- 이 stop state는 사용자 결정으로 해소됐으므로 `complete.log`를 작성하고 task directory를 archive로 이동한다. diff --git a/agent-task/archive/2026/05/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/USER_REVIEW.md b/agent-task/archive/2026/05/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/USER_REVIEW.md new file mode 100644 index 00000000..88448b1e --- /dev/null +++ b/agent-task/archive/2026/05/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/USER_REVIEW.md @@ -0,0 +1,60 @@ +# User Review Required - m-runtime-image-validation/03+01,02_evidence_matrix_closeout + +## 요청 일시 + +2026-05-28 + +## 상태 + +RESOLVED + +## 사유 + +- 유형: implementation-blocked +- 현재 리뷰 회차: 0 +- 최종 판정: FAIL +- 요약: closeout split task의 구현 체크리스트와 검증 출력은 독립적으로 완료되지 않았다. 다만 사용자 요청으로 Milestone 완료/아카이브가 이미 수행됐고, 이 task의 목적은 그 closeout 결과에 흡수됐다. + +## 루프 이력 + +| Plan | Review | Verdict | 메모 | +|------|--------|---------|------| +| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | 구현 체크리스트와 검증 출력이 미기입 상태였고, 별도 루프 없이 user-approved milestone archive에 흡수됐다. | + +## 차단 근거 + +- 문제: 이 split task는 predecessor `02_consumer_project_validation` PASS를 전제로 했지만 해당 split task가 별도 PASS로 완료되지 않았다. +- 현재 archive plan: `plan_cloud_G07_0.log` +- 현재 archive review: `code_review_cloud_G07_0.log` +- 검증 근거: user-approved closeout은 `docs/runtime-image-validation.md`, archived Milestone, active `PHASE.md`, and `current.md`에 반영됐다. +- 차단 판단 근거: user-approved closeout이 이미 milestone archive까지 수행된 상태라 별도 follow-up loop를 만드는 대신 resolved stop으로 닫는다. + +## 사용자 결정 필요 + +- [ ] 자동 follow-up plan/review를 계속 진행한다. +- [ ] 계획을 재작성한다. +- [ ] 테스트 환경, secret, 외부 서비스, SDK, 장비 조건을 준비한 뒤 재시도한다. +- [x] 작업 범위를 줄이거나 보류/폐기한다. + +## 해소 결과 + +- 최종 처리: RESOLVED +- 사용자 결정: `runtime-image-validation` Milestone 완료 처리와 archive 이동을 승인했고, closeout split task는 이미 반영된 roadmap/docs 결과에 흡수된 것으로 닫는다. +- 반영 경로: + - `docs/runtime-image-validation.md` + - `agent-roadmap/archive/phase/product-foundation/milestones/runtime-image-validation.md` + - `agent-roadmap/phase/product-foundation/PHASE.md` + - `agent-roadmap/current.md` + +## 재개 조건 + +- Milestone closeout 자체를 되돌리거나 보완해야 하면 archived Milestone을 기준으로 새 active task를 생성한다. +- Mattermost Detox Android login-flow PASS는 후속 Milestone/task에서 stable boot/start procedure와 app readiness synchronization을 다룬다. + +## 다음 실행 힌트 + +- 새 closeout 보완이 필요하면 `current.md`의 다음 active Milestone인 `client-validation.md` 또는 별도 follow-up task에서 범위를 잡는다. + +## 종료 규칙 + +- 이 stop state는 사용자 결정으로 해소됐으므로 `complete.log`를 작성하고 task directory를 archive로 이동한다. diff --git a/agent-task/m-runtime-image-validation/01_repo_app_validation/USER_REVIEW.md b/agent-task/m-runtime-image-validation/01_repo_app_validation/USER_REVIEW.md deleted file mode 100644 index 27e9c497..00000000 --- a/agent-task/m-runtime-image-validation/01_repo_app_validation/USER_REVIEW.md +++ /dev/null @@ -1,56 +0,0 @@ -# User Review Required - m-runtime-image-validation/01_repo_app_validation - -## 요청 일시 - -2026-05-28 - -## 상태 - -USER_REVIEW - -## 사유 - -- 유형: environment-blocked -- 현재 리뷰 회차: 2 -- 최종 판정: FAIL -- 요약: 원격 Android/Flutter 검증은 PASS로 회복됐지만, Mattermost `check-test`는 Korean locale snapshot 2건 실패가 남았고 Detox Android는 Firebase debug `google-services.json` 누락으로 빌드가 차단됐다. 자동 follow-up을 계속할지, 외부 config를 준비할지, 또는 현 evidence를 milestone 범위에서 어떻게 볼지 사용자 결정이 필요하다. - -## 루프 이력 - -| Plan | Review | Verdict | 메모 | -|------|--------|---------|------| -| `agent-task/m-runtime-image-validation/01_repo_app_validation/plan_cloud_G07_0.log` | `agent-task/m-runtime-image-validation/01_repo_app_validation/code_review_cloud_G07_0.log` | FAIL | local container 기준 Android SDK/device/Node prerequisites 미충족 및 scope-excluded 판단 필요 | -| `agent-task/m-runtime-image-validation/01_repo_app_validation/plan_cloud_G07_1.log` | `agent-task/m-runtime-image-validation/01_repo_app_validation/code_review_cloud_G07_1.log` | FAIL | remote 재검증 후 Flutter는 PASS, Mattermost snapshot FAIL 및 Detox Firebase config BLOCKED | - -## 차단 근거 - -- 문제: `docs/runtime-image-validation.md`의 repo app matrix에서 Flutter Android/Integration rows는 PASS로 갱신됐지만, Mattermost app check와 Detox e2e가 아직 완료 기준에 도달하지 못했다. -- 현재 archive plan: `agent-task/m-runtime-image-validation/01_repo_app_validation/plan_cloud_G07_1.log` -- 현재 archive review: `agent-task/m-runtime-image-validation/01_repo_app_validation/code_review_cloud_G07_1.log` -- 검증 명령: `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/mattermost && npm ci && npm run check-test'`, `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/mattermost && npm run e2e:android'` -- 실제 출력: `npm run check-test` 결과 `Test Suites: 1 failed, 2 skipped, 611 passed`; `Tests: 2 failed, 7 skipped, 8160 passed`; `Snapshots: 2 failed, 301 passed`. 실패는 `app/components/formatted_date/index.test.tsx`의 Korean locale snapshot `AM` vs `오전` 차이다. `npm run e2e:android`는 `:app:processDebugGoogleServices FAILED` 및 `File google-services.json is missing`으로 Android build가 중단됐다. -- 차단 판단 근거: snapshot 갱신/locale pinning은 upstream Mattermost test expectation을 바꾸는 결정이고, Detox Android는 tracked repo에 없는 Firebase debug config 또는 config-less test build 조정이 필요하다. 둘 다 사용자의 범위 결정이나 외부 config 준비 없이 자동으로 완료 처리하기 어렵다. - -## 사용자 결정 필요 - -- [ ] 자동 follow-up plan/review를 계속 진행한다. 예: Mattermost Korean locale snapshot을 현재 host 기준으로 업데이트/핀 처리하고, Detox가 Firebase config 없이 빌드되도록 test build path를 만든다. -- [ ] 계획을 재작성한다. 예: Mattermost upstream app 전체 check/e2e는 별도 subtask로 분리하고 현재 repo runtime image validation은 Flutter/runtime evidence 중심으로 닫는다. -- [ ] 테스트 환경, secret, 외부 서비스, SDK, 장비 조건을 준비한 뒤 재시도한다. 예: 원격 Mattermost Android debug build용 `google-services.json`을 안전한 위치에 제공하고 동일 명령을 재실행한다. -- [ ] 작업 범위를 줄이거나 보류/폐기한다. - -## 재개 조건 - -- Mattermost snapshot 2건을 수정/핀/known failure 중 어느 방식으로 처리할지 결정되어야 한다. -- Detox Android debug build가 사용할 Firebase config가 원격에 준비되거나, config 없이 빌드 가능한 Gradle/test path를 만드는 방향이 승인되어야 한다. -- 재개 시 비밀번호와 Firebase config 내용은 tracked docs, review logs, shell output에 남기지 않는다. - -## 다음 실행 힌트 - -- config 제공 후 재시도: `ssh toki@toki-labs.com 'zsh -lc "cd ~/works/nexo/apps/mattermost && npm run check-test && npm run e2e:android"'` -- 새 구현이 필요하면 plan 스킬로 이 `USER_REVIEW.md`를 `user_review_1.log`로 아카이브한 뒤 같은 task path에 follow-up `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 생성한다. -- 완료로 인정하려면 사용자가 Mattermost FAIL/BLOCKED rows의 milestone 처리 방식을 명시해야 한다. - -## 종료 규칙 - -- 사용자가 이 stop state를 완료/PASS로 해소하면 `USER_REVIEW.md`를 해소 상태로 갱신하고, `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다. -- 새 구현이 필요하면 `plan` 스킬이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브한 뒤 새 `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 작성한다. diff --git a/agent-task/m-runtime-image-validation/02_consumer_project_validation/CODE_REVIEW-cloud-G07.md b/agent-task/m-runtime-image-validation/02_consumer_project_validation/CODE_REVIEW-cloud-G07.md deleted file mode 100644 index 81b3ee37..00000000 --- a/agent-task/m-runtime-image-validation/02_consumer_project_validation/CODE_REVIEW-cloud-G07.md +++ /dev/null @@ -1,116 +0,0 @@ - - -# Code Review Reference - VALIDATION - -> **[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. -> Follow the ownership table at the bottom of this file for which sections you own. - -## 개요 - -date=2026-05-28 -task=m-runtime-image-validation/02_consumer_project_validation, plan=0, tag=VALIDATION - -## 이 파일을 읽는 리뷰 에이전트에게 - -> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다. - -각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요. - ---- - -## 구현 항목별 완료 여부 - -| 항목 | 완료 여부 | -|------|---------| -| [VALIDATION-1] NomadCode verification | [ ] | -| [VALIDATION-2] IOP minimal consumer smoke | [ ] | -| [VALIDATION-3] ALT minimal consumer smoke | [ ] | -| [VALIDATION-4] Consumer matrix update | [ ] | - -## 구현 체크리스트 - -- [ ] [VALIDATION-1] `../nomadcode`의 existing `nexo_messaging` integration을 재검증하고 smoke/e2e evidence를 갱신한다. -- [ ] [VALIDATION-2] `../iop`에 최소 `nexo_messaging` dependency/test smoke를 추가하거나 protobuf blocker를 정확히 기록한다. -- [ ] [VALIDATION-3] `../alt`에 최소 `nexo_messaging` dependency/test smoke를 추가하거나 routing 결정 blocker를 정확히 기록한다. -- [ ] [VALIDATION-4] 세 consumer 프로젝트의 smoke/e2e 결과를 `docs/runtime-image-validation.md`에 반영한다. -- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. - -## 코드리뷰 전용 체크리스트 - -> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. - -- [ ] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. -- [ ] active `CODE_REVIEW-*-G??.md`를 `code_review_cloud_G07_0.log`로 아카이브한다. -- [ ] active `PLAN-*-G??.md`를 `plan_cloud_G07_0.log`로 아카이브한다. -- [ ] PASS이면 `complete.log` 작성 후 active `.md` 파일을 남기지 않는다. -- [ ] PASS이면 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-runtime-image-validation/02_consumer_project_validation/`로 이동한다. -- [ ] PASS이고 task group이 `m-runtime-image-validation`이면 런타임 완료 이벤트 메타데이터를 보고한다. -- [ ] WARN/FAIL이면 다음 active plan/review 또는 `USER_REVIEW.md`를 작성한다. - -## 계획 대비 변경 사항 - -_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._ - -## 주요 설계 결정 - -_구현 에이전트가 주요 설계 결정 사항을 기록한다._ - -## 사용자 리뷰 요청 - -_기본값은 `없음`이다. 구현 중 사용자 결정, 외부 환경 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. code-review가 이 내용을 검증해 `USER_REVIEW.md`를 작성한다._ - -- 상태: 없음 -- 사유 유형: 없음 -- 결정 필요: 없음 -- 차단 근거: 없음 -- 실행한 검증/명령: 없음 -- 재개 조건: 없음 - -## 리뷰어를 위한 체크포인트 - -- sibling repo rules를 읽고 변경했는가 -- `iop`/`alt`에 제품 routing을 임의로 만들지 않았는가 -- docs evidence가 실제 command output과 일치하는가 - -## 검증 결과 - -### VALIDATION-1 중간 검증 -```sh -$ ../nomadcode/bin/test -$ rg --sort path -n "nexo_messaging|messaging_flutter" ../nomadcode/apps/client -(output) -``` - -### VALIDATION-2 중간 검증 -```sh -$ cd ../iop/apps/portal && flutter pub get && flutter test -(output) -``` - -### VALIDATION-3 중간 검증 -```sh -$ ../alt/bin/test -$ rg --sort path -n "nexo_messaging|messaging_flutter" ../alt/apps/client -(output) -``` - -### VALIDATION-4 중간 검증 -```sh -$ rg --sort path -n "../nomadcode|../iop|../alt|SKIP|BLOCKED|PASS" docs/runtime-image-validation.md -(output) -``` - -### 최종 검증 -```sh -$ ../nomadcode/bin/test -$ cd ../iop/apps/portal && flutter test -$ ../alt/bin/test -$ bin/test -$ bin/lint -(output) -``` diff --git a/agent-task/m-runtime-image-validation/02_consumer_project_validation/PLAN-cloud-G07.md b/agent-task/m-runtime-image-validation/02_consumer_project_validation/PLAN-cloud-G07.md deleted file mode 100644 index def1e967..00000000 --- a/agent-task/m-runtime-image-validation/02_consumer_project_validation/PLAN-cloud-G07.md +++ /dev/null @@ -1,172 +0,0 @@ - - -# Plan - Consumer Project Runtime Validation - -## 이 파일을 읽는 구현 에이전트에게 - -이 task는 sibling repo를 건드릴 수 있다. 각 sibling repo에 들어가기 전에 해당 repo의 진입 규칙을 읽고, 제품 UI/business logic으로 확장하지 않는다. 구현 후 `CODE_REVIEW-cloud-G07.md`에 실제 변경, 검증 출력, blocker 여부를 채운다. - -## 배경 - -Milestone은 `../nomadcode`, `../iop`, `../alt`가 같은 runtime/image 기준을 소비할 수 있는지 확인해야 한다. 현재 `nomadcode`는 `nexo_messaging` path dependency가 있지만 `iop`와 `alt`에는 dependency가 없고, `iop`는 protobuf mismatch로 test가 skip되었다. - -## 사용자 리뷰 요청 흐름 - -consumer 프로젝트의 제품 routing 결정, credential, device, 또는 sibling roadmap lock이 필요하면 review stub의 `사용자 리뷰 요청`에 기록하고 멈춘다. - -## 분석 결과 - -### 읽은 파일 - -- `docs/runtime-image-validation.md` -- `../nomadcode/apps/client/pubspec.yaml` -- `../nomadcode/apps/client/lib/src/integrations/mattermost/mattermost_push_client.dart` -- `../nomadcode/apps/client/lib/src/integrations/mattermost/mattermost_push_plugin_client.dart` -- `../nomadcode/apps/client/lib/src/integrations/mattermost/mattermost_push_host_integration.dart` -- `../nomadcode/apps/client/test/integrations/mattermost_push_host_integration_test.dart` -- `../iop/apps/portal/pubspec.yaml` -- `../iop/apps/portal/lib/main.dart` -- `../iop/apps/portal/lib/portal_config.dart` -- `../iop/apps/portal/test/widget_test.dart` -- `../iop/apps/portal/test/portal_config_test.dart` -- `../alt/apps/client/pubspec.yaml` -- `../alt/apps/client/lib/main.dart` -- `../alt/apps/client/lib/src/app/app.dart` -- `../alt/apps/client/lib/src/app/router.dart` -- `../alt/apps/client/test/widget_test.dart` - -### 테스트 커버리지 공백 - -- `../nomadcode/apps/client/pubspec.yaml:43` already maps `nexo_messaging`, and host integration tests cover the adapter boundary. -- `../iop/apps/portal/pubspec.yaml:38` has protobuf/proto_socket but no `nexo_messaging`. -- `../alt/apps/client/pubspec.yaml:37` has Riverpod/router/proto_socket but no `nexo_messaging`. -- `docs/runtime-image-validation.md:122` records `iop` as `SKIP`; `:123` records `alt` clean baseline but no nexo integration. - -### 심볼 참조 - -- none. New test-only imports may be added; no rename/remove is planned. - -### 분할 판단 - -- Split policy 평가 결과, consumer validation is independent from repo app validation but final evidence closeout depends on both. -- Shared task group: `agent-task/m-runtime-image-validation` -- This subtask: `02_consumer_project_validation`, no predecessor. -- `03+01,02_evidence_matrix_closeout` depends on this task and `01_repo_app_validation`. - -### 범위 결정 근거 - -- `nomadcode`는 existing dependency and host boundary를 verify only. -- `iop`와 `alt`는 최소 path dependency plus test-only smoke를 우선한다. 제품 routing, navigation, notification UX는 각 프로젝트 결정이 필요하면 blocker로 남긴다. -- 각 sibling repo의 roadmap 상태 전환은 이 task 범위가 아니다. - -### 빌드 등급 - -- build=`cloud-G07`, review=`cloud-G07`: cross-repo edits, Flutter dependency resolution, protobuf mismatch, external runtime smoke가 포함된다. - -## 구현 체크리스트 - -- [ ] [VALIDATION-1] `../nomadcode`의 existing `nexo_messaging` integration을 재검증하고 smoke/e2e evidence를 갱신한다. -- [ ] [VALIDATION-2] `../iop`에 최소 `nexo_messaging` dependency/test smoke를 추가하거나 protobuf blocker를 정확히 기록한다. -- [ ] [VALIDATION-3] `../alt`에 최소 `nexo_messaging` dependency/test smoke를 추가하거나 routing 결정 blocker를 정확히 기록한다. -- [ ] [VALIDATION-4] 세 consumer 프로젝트의 smoke/e2e 결과를 `docs/runtime-image-validation.md`에 반영한다. -- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. - -### [VALIDATION-1] NomadCode Verification - -문제: `nomadcode`는 dependency가 있지만 current evidence는 과거 Android smoke archive에 의존한다. - -해결 방법: `../nomadcode/bin/test`와 `nexo_messaging` reference scan을 재실행하고, remote Android/FCM smoke가 재현 불가하면 blocker 또는 retained historical evidence로 분류한다. - -수정 파일 및 체크리스트: - -- [ ] `docs/runtime-image-validation.md` consumer matrix 갱신 - -테스트 작성: skip. Existing tests를 재실행한다. - -중간 검증: - -```sh -../nomadcode/bin/test -rg --sort path -n "nexo_messaging|messaging_flutter" ../nomadcode/apps/client -``` - -### [VALIDATION-2] IOP Minimal Consumer Smoke - -문제: `../iop/apps/portal/pubspec.yaml:38`에는 `nexo_messaging`가 없고, prior evidence는 protobuf mismatch로 `SKIP`다. - -해결 방법: sibling rules를 확인한 뒤 `nexo_messaging` path dependency와 compile-only/test-only smoke를 추가한다. protobuf mismatch가 먼저 막으면 해당 failure를 user-review blocker로 기록한다. - -수정 파일 및 체크리스트: - -- [ ] `../iop/apps/portal/pubspec.yaml` -- [ ] `../iop/apps/portal/test/messaging_plugin_dependency_test.dart` 또는 동일 목적의 existing test -- [ ] `docs/runtime-image-validation.md` - -테스트 작성: required. `NexoMessagingPlugin.notificationChannelName` 또는 singleton access를 검증하는 compile smoke를 추가한다. - -중간 검증: - -```sh -cd ../iop/apps/portal && flutter pub get && flutter test -``` - -### [VALIDATION-3] ALT Minimal Consumer Smoke - -문제: `../alt/apps/client/pubspec.yaml:37` 이후 dependency set에는 `nexo_messaging`가 없고 current evidence는 clean baseline only다. - -해결 방법: sibling rules를 확인한 뒤 `nexo_messaging` path dependency와 compile-only/test-only smoke를 추가한다. 실제 routing destination은 ALT product decision이 필요하면 blocker로 둔다. - -수정 파일 및 체크리스트: - -- [ ] `../alt/apps/client/pubspec.yaml` -- [ ] `../alt/apps/client/test/messaging_plugin_dependency_test.dart` 또는 동일 목적의 existing test -- [ ] `docs/runtime-image-validation.md` - -테스트 작성: required. Plugin dependency compile and singleton/channel constant smoke를 추가한다. - -중간 검증: - -```sh -../alt/bin/test -rg --sort path -n "nexo_messaging|messaging_flutter" ../alt/apps/client -``` - -### [VALIDATION-4] Consumer Matrix Update - -문제: consumer matrix가 `SKIP`와 no-integration baseline을 포함해 Milestone 완료 근거가 부족하다. - -해결 방법: `nomadcode`, `iop`, `alt` row를 setup, smoke, e2e/deferred decision으로 분리하고 PASS/BLOCKED를 실제 evidence와 연결한다. - -수정 파일 및 체크리스트: - -- [ ] `docs/runtime-image-validation.md` - -테스트 작성: skip. Evidence documentation update다. - -중간 검증: - -```sh -rg --sort path -n "../nomadcode|../iop|../alt|SKIP|BLOCKED|PASS" docs/runtime-image-validation.md -``` - -## 수정 파일 요약 - -| 파일 | 항목 | -|---|---| -| `../iop/apps/portal/pubspec.yaml` | VALIDATION-2 | -| `../iop/apps/portal/test/messaging_plugin_dependency_test.dart` | VALIDATION-2 | -| `../alt/apps/client/pubspec.yaml` | VALIDATION-3 | -| `../alt/apps/client/test/messaging_plugin_dependency_test.dart` | VALIDATION-3 | -| `docs/runtime-image-validation.md` | VALIDATION-1..4 | - -## 최종 검증 - -```sh -../nomadcode/bin/test -cd ../iop/apps/portal && flutter test -../alt/bin/test -bin/test -bin/lint -``` - -모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/CODE_REVIEW-cloud-G07.md b/agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/CODE_REVIEW-cloud-G07.md deleted file mode 100644 index 81873460..00000000 --- a/agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/CODE_REVIEW-cloud-G07.md +++ /dev/null @@ -1,115 +0,0 @@ - - -# Code Review Reference - VALIDATION - -> **[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. -> Follow the ownership table at the bottom of this file for which sections you own. - -## 개요 - -date=2026-05-28 -task=m-runtime-image-validation/03+01,02_evidence_matrix_closeout, plan=0, tag=VALIDATION - -## 이 파일을 읽는 리뷰 에이전트에게 - -> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다. - -각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요. - ---- - -## 구현 항목별 완료 여부 - -| 항목 | 완료 여부 | -|------|---------| -| [VALIDATION-1] Predecessor evidence gate | [ ] | -| [VALIDATION-2] Evidence matrix normalize | [ ] | -| [VALIDATION-3] Roadmap completion update | [ ] | -| [VALIDATION-4] Roadmap/lock verification | [ ] | - -## 구현 체크리스트 - -- [ ] [VALIDATION-1] predecessor `complete.log`와 docs evidence를 확인해 app/consumer tasks 완료 여부를 판정한다. -- [ ] [VALIDATION-2] `docs/runtime-image-validation.md` matrix에서 의도치 않은 `SKIP`/`BLOCKED`가 없는지 정리한다. -- [ ] [VALIDATION-3] Milestone 기능 체크박스를 evidence 기준으로 갱신하고, 모두 충족되면 `[검토중]`과 완료 리뷰 요청을 남긴다. -- [ ] [VALIDATION-4] roadmap/current/phase path와 workspace lock 상태를 검증한다. -- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. - -## 코드리뷰 전용 체크리스트 - -> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. - -- [ ] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. -- [ ] active `CODE_REVIEW-*-G??.md`를 `code_review_cloud_G07_0.log`로 아카이브한다. -- [ ] active `PLAN-*-G??.md`를 `plan_cloud_G07_0.log`로 아카이브한다. -- [ ] PASS이면 `complete.log` 작성 후 active `.md` 파일을 남기지 않는다. -- [ ] PASS이면 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/`로 이동한다. -- [ ] PASS이고 task group이 `m-runtime-image-validation`이면 런타임 완료 이벤트 메타데이터를 보고한다. -- [ ] WARN/FAIL이면 다음 active plan/review 또는 `USER_REVIEW.md`를 작성한다. - -## 계획 대비 변경 사항 - -_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._ - -## 주요 설계 결정 - -_구현 에이전트가 주요 설계 결정 사항을 기록한다._ - -## 사용자 리뷰 요청 - -_기본값은 `없음`이다. 구현 중 사용자 결정, 외부 환경 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. code-review가 이 내용을 검증해 `USER_REVIEW.md`를 작성한다._ - -- 상태: 없음 -- 사유 유형: 없음 -- 결정 필요: 없음 -- 차단 근거: 없음 -- 실행한 검증/명령: 없음 -- 재개 조건: 없음 - -## 리뷰어를 위한 체크포인트 - -- predecessor complete logs 없이 closeout을 진행하지 않았는가 -- 모든 roadmap checkbox가 docs evidence 또는 accepted blocker resolution과 연결되는가 -- `[검토중]` 전환 시 archive 이동을 하지 않았는가 - -## 검증 결과 - -### VALIDATION-1 중간 검증 -```sh -$ find agent-task/archive -path '*/m-runtime-image-validation/01_repo_app_validation/complete.log' -o -path '*/m-runtime-image-validation/02_consumer_project_validation/complete.log' | sort -(output) -``` - -### VALIDATION-2 중간 검증 -```sh -$ rg --sort path -n "SKIP|BLOCKED|TODO|Follow-up" docs/runtime-image-validation.md -(output) -``` - -### VALIDATION-3 중간 검증 -```sh -$ rg --sort path -n "^- \\[[ x]\\] \\[[^]]+\\]|^\\[검토중\\]|완료 리뷰|상태:" agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md -(output) -``` - -### VALIDATION-4 중간 검증 -```sh -$ test -f agent-roadmap/current.md -$ test -f agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md -$ agent-ops/bin/roadmap-dependency-checker.sh --find-milestone "nexo:agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md" both ../.agent-roadmap-sync/locks.yaml -$ git diff --check -(output) -``` - -### 최종 검증 -```sh -$ bin/test -$ bin/lint -$ git diff --check -(output) -``` diff --git a/agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/PLAN-cloud-G07.md b/agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/PLAN-cloud-G07.md deleted file mode 100644 index b27724e0..00000000 --- a/agent-task/m-runtime-image-validation/03+01,02_evidence_matrix_closeout/PLAN-cloud-G07.md +++ /dev/null @@ -1,152 +0,0 @@ - - -# Plan - Evidence Matrix Closeout - -## 이 파일을 읽는 구현 에이전트에게 - -이 subtask는 `01_repo_app_validation`과 `02_consumer_project_validation`이 PASS되어 `complete.log`를 남긴 뒤 시작한다. 완료 evidence가 부족하면 roadmap을 `[검토중]`으로 올리지 말고 blocker를 review stub에 기록한다. - -## 배경 - -Milestone closeout은 evidence matrix와 roadmap 체크박스가 같은 사실을 말해야 한다. 현재 image/runtime tasks만 `[x]`이고 app/consumer/evidence tasks는 아직 열려 있다. - -## 사용자 리뷰 요청 흐름 - -남은 `SKIP`/`BLOCKED`가 Milestone 범위 제외인지 사용자 결정이 필요하면 `사용자 리뷰 요청`에 남긴다. - -## 분석 결과 - -### 읽은 파일 - -- `agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md` -- `docs/runtime-image-validation.md` -- `agent-roadmap/current.md` -- `agent-roadmap/phase/product-foundation/PHASE.md` -- `agent-ops/rules/common/rules-roadmap.md` - -### 테스트 커버리지 공백 - -- closeout 자체는 문서/roadmap consistency 작업이다. -- app/consumer verification output은 predecessor task의 `complete.log`와 updated docs를 source of truth로 삼는다. - -### 심볼 참조 - -- none. 문서/roadmap update only. - -### 분할 판단 - -- This subtask is dependent: `03+01,02_evidence_matrix_closeout` waits for `01_repo_app_validation` and `02_consumer_project_validation`. -- It is separated because roadmap status transition should happen only after both evidence-producing subtasks complete. - -### 범위 결정 근거 - -- 이 작업은 `docs/runtime-image-validation.md`와 current Milestone roadmap만 갱신한다. -- archive 이동은 사용자 완료 승인 전에는 수행하지 않는다. -- `agent-roadmap/archive/**`는 읽지 않는다. - -### 빌드 등급 - -- build=`cloud-G07`, review=`cloud-G07`: roadmap state transition depends on external evidence from split tasks and lock/check consistency. - -## 구현 체크리스트 - -- [ ] [VALIDATION-1] predecessor `complete.log`와 docs evidence를 확인해 app/consumer tasks 완료 여부를 판정한다. -- [ ] [VALIDATION-2] `docs/runtime-image-validation.md` matrix에서 의도치 않은 `SKIP`/`BLOCKED`가 없는지 정리한다. -- [ ] [VALIDATION-3] Milestone 기능 체크박스를 evidence 기준으로 갱신하고, 모두 충족되면 `[검토중]`과 완료 리뷰 요청을 남긴다. -- [ ] [VALIDATION-4] roadmap/current/phase path와 workspace lock 상태를 검증한다. -- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. - -### [VALIDATION-1] Predecessor Evidence Gate - -문제: roadmap closeout이 evidence-producing subtasks보다 먼저 실행되면 완료 판정이 추정이 된다. - -해결 방법: `agent-task/archive/YYYY/MM/m-runtime-image-validation/01_repo_app_validation/complete.log`와 `02_consumer_project_validation/complete.log`를 확인한다. 둘 중 하나가 없으면 이 task를 진행하지 않는다. - -수정 파일 및 체크리스트: - -- [ ] 변경 없음 또는 blocker 기록 - -테스트 작성: skip. File-state gate다. - -중간 검증: - -```sh -find agent-task/archive -path '*/m-runtime-image-validation/01_repo_app_validation/complete.log' -o -path '*/m-runtime-image-validation/02_consumer_project_validation/complete.log' | sort -``` - -### [VALIDATION-2] Evidence Matrix Normalize - -문제: `docs/runtime-image-validation.md`에 남은 `SKIP`/`BLOCKED`가 있으면 Milestone 완료와 충돌할 수 있다. - -해결 방법: `SKIP`는 실제 PASS, 사용자 승인된 범위 제외, 또는 blocker 중 하나로 정리한다. blocker면 `[검토중]`으로 전환하지 않는다. - -수정 파일 및 체크리스트: - -- [ ] `docs/runtime-image-validation.md` - -테스트 작성: skip. Documentation consistency. - -중간 검증: - -```sh -rg --sort path -n "SKIP|BLOCKED|TODO|Follow-up" docs/runtime-image-validation.md -``` - -### [VALIDATION-3] Roadmap Completion Update - -문제: Milestone `repo-smoke`, `consumer-projects`, `evidence-matrix` tasks가 unchecked 상태다. - -해결 방법: docs evidence와 predecessor logs로 각 task를 `[x]` 처리한다. 모든 기능 task가 `[x]`이면 상태를 `[검토중]`으로 바꾸고 완료 리뷰를 `요청됨`으로 갱신한다. 사용자 archive 승인은 남겨둔다. - -수정 파일 및 체크리스트: - -- [ ] `agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md` - -테스트 작성: skip. Roadmap state update. - -중간 검증: - -```sh -rg --sort path -n "^- \\[[ x]\\] \\[[^]]+\\]|^\\[검토중\\]|완료 리뷰|상태:" agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md -``` - -### [VALIDATION-4] Roadmap/Lock Verification - -문제: roadmap update는 active path와 workspace lock consistency를 유지해야 한다. - -해결 방법: current paths, phase milestone path, lock checker, whitespace를 검증한다. - -수정 파일 및 체크리스트: - -- [ ] 필요 시 `agent-roadmap/current.md` -- [ ] 필요 시 `agent-roadmap/phase/product-foundation/PHASE.md` - -테스트 작성: skip. Roadmap structural validation. - -중간 검증: - -```sh -test -f agent-roadmap/current.md -test -f agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md -agent-ops/bin/roadmap-dependency-checker.sh --find-milestone "nexo:agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md" both ../.agent-roadmap-sync/locks.yaml -git diff --check -``` - -## 수정 파일 요약 - -| 파일 | 항목 | -|---|---| -| `docs/runtime-image-validation.md` | VALIDATION-2 | -| `agent-roadmap/phase/product-foundation/milestones/runtime-image-validation.md` | VALIDATION-3 | -| `agent-roadmap/current.md` | VALIDATION-4, only if active window needs sync | -| `agent-roadmap/phase/product-foundation/PHASE.md` | VALIDATION-4, only if status/flow needs sync | - -## 최종 검증 - -```sh -bin/test -bin/lint -git diff --check -``` - -모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/apps/mattermost/app/components/formatted_date/__snapshots__/index.test.tsx.snap b/apps/mattermost/app/components/formatted_date/__snapshots__/index.test.tsx.snap index be074c85..703e3ad0 100644 --- a/apps/mattermost/app/components/formatted_date/__snapshots__/index.test.tsx.snap +++ b/apps/mattermost/app/components/formatted_date/__snapshots__/index.test.tsx.snap @@ -374,13 +374,13 @@ exports[` should match snapshot for 'ko' locale and '{"dateStyle exports[` should match snapshot for 'ko' locale and '{"day": "numeric", "hour": "numeric", "minute": "numeric", "month": "short", "year": "numeric"}' format 1`] = ` - 2024년 10월 26일 AM 10:01 + 2024년 10월 26일 오전 10:01 `; exports[` should match snapshot for 'ko' locale and '{"day": "numeric", "hour": "numeric", "minute": "numeric", "month": "short"}' format 1`] = ` - 10월 26일 AM 10:01 + 10월 26일 오전 10:01 `; diff --git a/apps/mattermost/detox/.detoxrc.json b/apps/mattermost/detox/.detoxrc.json index a6f9f8cd..448c8159 100644 --- a/apps/mattermost/detox/.detoxrc.json +++ b/apps/mattermost/detox/.detoxrc.json @@ -40,7 +40,7 @@ "android.emulator": { "type": "android.emulator", "device": { - "avdName": "detox_pixel_4_xl_api_34" + "avdName": "Pixel_6_Pro_API_34" }, "environment": { "MM_FEATUREFLAGS_InteractiveDialogAppsForm": "true" diff --git a/docs/runtime-image-validation.md b/docs/runtime-image-validation.md index 23bf0c50..5d96f4b7 100644 --- a/docs/runtime-image-validation.md +++ b/docs/runtime-image-validation.md @@ -106,8 +106,8 @@ This section presents the verification matrix for nexo local/remote runtime comp | **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** | `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/flutter-test/android && ./gradlew testDebugUnitTest'` | Remote host Android SDK (`emulator-5554`) | Gradle compiles and runs native unit tests for the Android host wrapper. | Remote Gradle test completed with `BUILD SUCCESSFUL in 22s`; `NexoMessagingPluginTest > onMethodCall_getPlatformVersion_returnsExpectedValue() PASSED`. | **PASS** | | **Flutter Integration Test** | `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/flutter-test && flutter test && flutter test integration_test -d emulator-5554'` | Remote host Flutter + Android emulator (`emulator-5554`) | Integration test validates plugin debug event flow on connected device/emulator. | Widget tests passed (`4/4`), debug APK built/installed on `emulator-5554`, and integration suite completed with all `3` tests passing. | **PASS** | -| **Original Mattermost App** | `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/mattermost && npm ci && npm run check-test'` | Remote host Node/Ruby/watchman Mattermost workspace | Dependencies install, ESLint + TypeScript check + Jest unit tests pass. | `npm ci` completed after remote Ruby/watchman setup. `npm run check-test` executed ESLint/TypeScript/Jest but failed `app/components/formatted_date/index.test.tsx`: `Test Suites: 1 failed, 2 skipped, 611 passed`; `Tests: 2 failed, 7 skipped, 8160 passed`; Korean snapshot expected `AM` but received `오전`. A Node `22.22.3` targeted retry produced the same `2` snapshot failures. | **FAIL** — check whether the upstream Mattermost locale snapshots should be updated/pinned for this test host. | -| **Detox E2E Testing** | `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/mattermost && npm run e2e:android'` | Remote host Android emulator + Mattermost runtime | Detox builds and executes end-to-end user flows against the emulated app. | Detox dependencies installed, but Android build failed before test-account login: `:app:processDebugGoogleServices FAILED` because `google-services.json` is missing from `apps/mattermost/android/app` or expected `src/debug` locations. No matching file was found under the remote nexo work/compose paths. | **BLOCKED** — requires a Firebase `google-services.json` debug config or Gradle/test build adjustment before Detox can run. | +| **Original Mattermost App** | `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/mattermost && npm run check-test'` | Remote host Node `22.22.3` / npm `10.9.8`, Ruby/watchman Mattermost workspace | ESLint + TypeScript check + Jest unit tests pass against the remote host baseline. | Korean `FormattedDate` snapshot baseline was updated from `AM` to remote `Intl.DateTimeFormat` output `오전`. Retry passed: `PASS app/components/formatted_date/index.test.tsx`; `Test Suites: 2 skipped, 612 passed, 612 of 614 total`; `Tests: 7 skipped, 8162 passed, 8169 total`; `Snapshots: 303 passed, 303 total`. | **PASS** | +| **Detox E2E Testing** | `ssh toki@toki-labs.com 'cd ~/works/nexo/apps/mattermost && npm run e2e:android'` | Remote host Android emulator + Mattermost runtime | Detox builds and executes end-to-end user flows against the emulated app. | Firebase debug config was supplied as ignored local/remote `apps/mattermost/android/app/google-services.json` with matching `com.mattermost.rnbeta` client, and Gradle completed `assembleDebug assembleAndroidTest` with `BUILD SUCCESSFUL in 9m`. `.detoxrc.json` now defaults Android emulator runs to the remote host's `Pixel_6_Pro_API_34`. Detox auto-boot with `CI=true npm run e2e:android-test` starts qemu for `@Pixel_6_Pro_API_34`, but the auto-booted process did not attach to `adb devices` after about 5 minutes. Manual `Pixel_6_Pro_API_34` boot attaches as `emulator-5554`; with Metro and `adb reverse tcp:8081 tcp:8081`, a default-config smoke retry assigned `server_login.e2e.ts` to `emulator-5554 (Pixel_6_Pro_API_34)`, then failed in `beforeAll` app readiness with `Exceeded timeout of 180000 ms` and Detox multiple-interaction/app-disconnect errors. | **FAIL** — default AVD selection is fixed, but Android E2E still needs a stable boot/start procedure and app readiness/synchronization follow-up before login-flow PASS. | ---