diff --git a/agent-ops/rules/project/domain/client-app/rules.md b/agent-ops/rules/project/domain/client-app/rules.md index 66749945..f1ab9699 100644 --- a/agent-ops/rules/project/domain/client-app/rules.md +++ b/agent-ops/rules/project/domain/client-app/rules.md @@ -1,7 +1,7 @@ --- domain: client-app -last_rule_review_commit: 4b0222479d9ab67093ab82ccdd31af146c73e1e4 -last_rule_updated_at: 2026-05-28 +last_rule_review_commit: 8a7115d9c82e15b9f35bcfa019acb4b34962e81f +last_rule_updated_at: 2026-06-01 --- # client-app diff --git a/agent-ops/rules/project/domain/core-service/rules.md b/agent-ops/rules/project/domain/core-service/rules.md index dc150790..16395df3 100644 --- a/agent-ops/rules/project/domain/core-service/rules.md +++ b/agent-ops/rules/project/domain/core-service/rules.md @@ -1,7 +1,7 @@ --- domain: core-service -last_rule_review_commit: 4b0222479d9ab67093ab82ccdd31af146c73e1e4 -last_rule_updated_at: 2026-05-28 +last_rule_review_commit: 8a7115d9c82e15b9f35bcfa019acb4b34962e81f +last_rule_updated_at: 2026-06-01 --- # core-service @@ -32,6 +32,7 @@ Mattermost 서버 repository clone을 담당한다. `packages/messaging_flutter` - `services/core/server/go.mod` — server Go module 기준 - `services/core/webapp/channels/` — Mattermost web client source 기준 +- `services/core/webapp/platform/` — Mattermost webapp shared/client/types packages 기준 - `services/core/api/package.json` — API reference tooling 기준 - `services/core/compose/docker-compose.yml` — local core 서비스 구성 diff --git a/agent-ops/rules/project/domain/mattermost-app/rules.md b/agent-ops/rules/project/domain/mattermost-app/rules.md index 1e1d405e..abef7631 100644 --- a/agent-ops/rules/project/domain/mattermost-app/rules.md +++ b/agent-ops/rules/project/domain/mattermost-app/rules.md @@ -1,7 +1,7 @@ --- domain: mattermost-app -last_rule_review_commit: 4b0222479d9ab67093ab82ccdd31af146c73e1e4 -last_rule_updated_at: 2026-05-28 +last_rule_review_commit: 8a7115d9c82e15b9f35bcfa019acb4b34962e81f +last_rule_updated_at: 2026-06-01 --- # mattermost-app diff --git a/agent-ops/rules/project/domain/messaging-flutter/rules.md b/agent-ops/rules/project/domain/messaging-flutter/rules.md index a4baa1b1..ee9c0ba4 100644 --- a/agent-ops/rules/project/domain/messaging-flutter/rules.md +++ b/agent-ops/rules/project/domain/messaging-flutter/rules.md @@ -1,7 +1,7 @@ --- domain: messaging-flutter -last_rule_review_commit: 4b0222479d9ab67093ab82ccdd31af146c73e1e4 -last_rule_updated_at: 2026-05-28 +last_rule_review_commit: 8a7115d9c82e15b9f35bcfa019acb4b34962e81f +last_rule_updated_at: 2026-06-01 --- # messaging-flutter @@ -25,15 +25,18 @@ nexo의 메인 산출물인 메시징/알림 Flutter 플러그인 패키지를 - `apps/mattermost/` — 원래 Mattermost 앱 repository clone 책임 - `services/core/` — Mattermost 서버 repository clone 책임 - `services/push-proxy/` — Mattermost push-proxy repository clone 책임 -- root `bin/` — workspace-level command entrypoint 책임 +- `docs/`, root `bin/` — workspace-level 문서와 command entrypoint 책임 ## 주요 구성 요소 -- plugin public API — singleton access, event stream, token/key action channel +- `NexoMessagingPlugin` — singleton access, event stream, token/key action channel, host routing callback API - `NotificationOpenedEvent` — notification open payload parsing -- Android FCM service — Android FCM 수신 진입점 +- `NexoFirebaseMessagingService` — Android FCM 수신, signature-before-ACK gate, foreground/background notification dispatch 진입점 +- `PayloadGate` — signed payload verification과 ACK ordering을 testable하게 유지하는 acceptance gate - `NotificationReplyBroadcastReceiver`, `NotificationDismissService` — Android action handling -- `ReceiptDelivery` — ACK delivery 책임 +- `ReceiptDelivery` — ACK delivery와 transient failure queueing 책임 +- `PendingNotificationActionStore`, `PendingNotificationActionDispatcher` — ACK/reply/dismiss retry queue와 permanent failure event 책임 +- `NotificationHelper` — Android notification id, grouping, clear, dismiss behavior 책임 ## 유지할 패턴 @@ -42,11 +45,15 @@ nexo의 메인 산출물인 메시징/알림 Flutter 플러그인 패키지를 - host app이 해야 할 Firebase 초기화, token 등록, navigation 연결은 README의 Host App Responsibilities와 맞춘다. - 패키지를 이 저장소의 제품 중심으로 보고, 앱별 제품 UI나 business logic은 소비 앱 책임으로 둔다. - native event type은 Dart API의 `PushNotificationType`과 호환되게 유지한다. +- signed push payload는 ACK 전에 검증하고, invalid signature payload는 ACK 없이 drop한다. +- ACK/reply/dismiss의 offline 또는 transient failure는 plugin-owned pending action queue로 처리하고 permanent failure는 `action_failure` event로 노출한다. +- Android native behavior는 `android/src/test/`의 payload gate, receipt delivery, notification display, pending action store 테스트와 함께 유지한다. ## 다른 도메인과의 경계 - **client-app**: `apps/flutter-test`는 plugin 검증용 테스트 앱이며 plugin 내부 push 처리 로직을 복제하지 않는다. - **core-service**: Mattermost 기반 runtime과의 계약은 payload, signing key, auth token, ACK/reply endpoint 수준으로 다룬다. +- **push-proxy-service**: push proxy는 APNs/FCM delivery server이고, device token 저장과 native notification action 처리는 plugin 책임이다. - **workspace-ops**: 공통 `bin/test`, `bin/lint`가 plugin 검증을 호출하지만 plugin 세부 검증 기준은 이 도메인이 소유한다. ## 금지 사항 diff --git a/agent-ops/rules/project/domain/push-proxy-service/rules.md b/agent-ops/rules/project/domain/push-proxy-service/rules.md index 0a5c1f53..11d970ea 100644 --- a/agent-ops/rules/project/domain/push-proxy-service/rules.md +++ b/agent-ops/rules/project/domain/push-proxy-service/rules.md @@ -1,7 +1,7 @@ --- domain: push-proxy-service -last_rule_review_commit: 4b0222479d9ab67093ab82ccdd31af146c73e1e4 -last_rule_updated_at: 2026-05-28 +last_rule_review_commit: 8a7115d9c82e15b9f35bcfa019acb4b34962e81f +last_rule_updated_at: 2026-06-01 --- # push-proxy-service @@ -19,6 +19,7 @@ last_rule_updated_at: 2026-05-28 - `services/push-proxy/internal/` — internal version package - `services/push-proxy/swagger/` — push-proxy API spec tooling - `services/push-proxy/go.mod`, `services/push-proxy/Makefile` — Go module and release/build entrypoints +- `services/push-proxy/package.json` — swagger/npm tooling metadata - `services/push-proxy/UPSTREAM.md` — upstream baseline 기록 ## 제외 경로 diff --git a/agent-ops/rules/project/domain/workspace-ops/rules.md b/agent-ops/rules/project/domain/workspace-ops/rules.md index fd33f579..c006e05d 100644 --- a/agent-ops/rules/project/domain/workspace-ops/rules.md +++ b/agent-ops/rules/project/domain/workspace-ops/rules.md @@ -1,7 +1,7 @@ --- domain: workspace-ops -last_rule_review_commit: 4b0222479d9ab67093ab82ccdd31af146c73e1e4 -last_rule_updated_at: 2026-05-28 +last_rule_review_commit: 8a7115d9c82e15b9f35bcfa019acb4b34962e81f +last_rule_updated_at: 2026-06-01 --- # workspace-ops @@ -16,7 +16,9 @@ last_rule_updated_at: 2026-05-28 - `docs/` — 여러 모듈에 걸친 제품, migration, 운영 문서 - `README.md` — workspace overview - root `.gitignore`와 루트 수준 설정 파일 -- `agent-ops/rules/project/**`, `agent-ops/skills/project/**` — 프로젝트 전용 agent-ops 규칙과 skill +- `agent-roadmap/` — 프로젝트 로드맵의 활성 Phase/Milestone 문서 +- `agent-test/local/` — local 검증 규칙과 도메인별 smoke 시나리오 +- `agent-ops/rules/project/**` — 프로젝트 전용 agent-ops 규칙 ## 제외 경로 @@ -26,6 +28,7 @@ last_rule_updated_at: 2026-05-28 - `apps/mattermost/` — 원래 Mattermost 앱 repository clone 책임 - `services/push-proxy/` — Mattermost push-proxy repository clone 책임 - `agent-ops/rules/common/**`, `agent-ops/skills/common/**` — 공통 framework 파일이며 프로젝트에서 직접 수정하지 않는다. +- `agent-roadmap/archive/**` — 일반 작업에서는 읽지 않는 과거 완료/폐기 기록 ## 주요 구성 요소 @@ -35,6 +38,8 @@ last_rule_updated_at: 2026-05-28 - `bin/dev` — 개발 entrypoint 안내 - `bin/publish-runtime-images` — nexo-owned runtime image build/publish wrapper - `docs/runtime-image-validation.md` — runtime image registry, tag, digest evidence 문서 +- `agent-roadmap/current.md` — 활성 Phase와 Milestone 후보 목록 +- `agent-test/local/rules.md` — local 검증 환경의 공통 실행 규칙 ## 유지할 패턴 @@ -42,7 +47,8 @@ last_rule_updated_at: 2026-05-28 - runtime image publish wrapper는 core/push-proxy build와 registry publish를 orchestration하되, 각 서비스의 내부 소스 책임을 가져오지 않는다. - 로컬 도구가 없을 때 skip하는 기존 동작을 보존하고, skip된 검증은 작업 보고에 명시한다. - 여러 모듈에 걸친 문서는 `docs/`에 두고, 모듈 내부만 해당하는 설명은 해당 모듈 README나 docs에 둔다. -- 프로젝트 전용 agent-ops 파일만 수정하고 common 파일은 원본 framework에서 동기화한다. +- 프로젝트 전용 agent-ops 규칙만 수정하고 common 파일은 원본 framework에서 동기화한다. +- 로드맵과 테스트 규칙 갱신은 공통 skill/router 규칙을 따른다. ## 다른 도메인과의 경계 diff --git a/agent-ops/rules/project/rules.md b/agent-ops/rules/project/rules.md index 9fa263c4..2ff50b06 100644 --- a/agent-ops/rules/project/rules.md +++ b/agent-ops/rules/project/rules.md @@ -74,6 +74,7 @@ Mattermost 원본은 앱, 서버, push 서버 repository clone 단위로 둔다. | `apps/mattermost/**` | mattermost-app | `agent-ops/rules/project/domain/mattermost-app/rules.md` | | `services/push-proxy/**` | push-proxy-service | `agent-ops/rules/project/domain/push-proxy-service/rules.md` | | `docs/**`, `bin/**`, root docs/config | workspace-ops | `agent-ops/rules/project/domain/workspace-ops/rules.md` | +| `agent-roadmap/**`, `agent-test/local/**`, `agent-ops/rules/project/**` | workspace-ops | `agent-ops/rules/project/domain/workspace-ops/rules.md` | ## 스킬 라우팅