nexo/agent-ops/rules/project/domain/core-service/rules.md

4.4 KiB

domain last_rule_review_commit last_rule_updated_at
core-service 8a7115d9c8 2026-06-01

core-service

목적 / 책임

Mattermost 서버 repository clone을 담당한다. packages/messaging_flutter 검증에 쓰이더라도 nexo 독자 서버 제품으로 재정의하지 않고, 원본 repository 단위 갱신이 가능한 상태를 유지하는 것이 중요하다.

포함 경로

  • services/core/ — Mattermost 서버 repository clone
  • services/core/server/ — Mattermost server module
  • services/core/webapp/ — Mattermost webapp module
  • services/core/api/ — API reference tooling
  • services/core/compose/ — local core runtime Docker Compose
  • services/core/e2e-tests/, services/core/tools/ — core 검증 및 보조 도구
  • services/core/UPSTREAM.md — upstream baseline 기록

제외 경로

  • packages/messaging_flutter/ — Flutter push plugin 책임
  • apps/flutter-test/ — plugin 검증용 테스트 앱 책임
  • apps/mattermost/ — 원래 Mattermost 앱 repository clone 책임
  • services/push-proxy/ — Mattermost push-proxy repository clone 책임
  • docs/, bin/ — 워크스페이스 공통 운영 문서와 entrypoint 책임

주요 구성 요소

  • 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 서비스 구성

유지할 패턴

  • upstream에서 온 구조와 명명은 필요한 경우에만 변경한다.
  • 제품 특화 변경은 packages/messaging_flutter 검증에 필요한 범위로 좁게 유지하고, upstream 재동기화를 방해하지 않게 설명 가능한 단위로 남긴다.
  • upstream 작업 clone은 이 저장소 안의 ignored .upstream/mattermost/ staging 폴더에 둔다.
  • bin/sync-upstream은 staging clone 갱신까지만 수행하고, services/core snapshot 반영은 별도 diff/smoke 확인 뒤 진행한다.
  • staging clone은 Mattermost server upstream master를 따라가며, master 변경 시점 또는 의도적으로 정한 refresh 시점에 snapshot을 떠서 이 저장소의 services/core로 merge 요청한다.
  • services/core snapshot 반영 시 upstream commit SHA를 services/core/UPSTREAM.md에 기록한다.
  • services/core snapshot merge 요청은 앱 또는 push-proxy snapshot과 섞지 않는다.
  • staging pull 결과를 자동 반영하지 않고, snapshot diff 확인과 core smoke 검증 후 merge 요청한다.
  • 갱신은 잦은 자동 반영이 아니라 별도 작업선에서 검토하고, 통과한 baseline만 services/core/UPSTREAM.md와 runtime에 반영한다.
  • nexo-specific patch는 가능한 한 upstream snapshot 밖의 compose, 문서, wrapper, 작은 명시 patch로 둔다.
  • 개발 배포 방식은 현재 컨테이너 내부 개발 환경 제약을 고려해 별도 결정 전까지 고정하지 않는다.
  • Go 검증은 기본 bin/test에서 skip되며, 필요할 때 NEXO_CORE_GO_TEST=1 등 명시적 플래그로 실행한다.
  • 서버 clone 내부의 원본 repo 구조는 upstream 갱신을 우선해 불필요하게 재해석하지 않는다.

다른 도메인과의 경계

  • messaging-flutter: server는 push payload와 ACK endpoint 성격을 제공하고, native 알림 표시와 device token 저장은 plugin이 담당한다.
  • client-app: server runtime과 flutter-test 검증 앱은 분리한다. test app에서 server 내부 코드를 직접 수정하지 않는다.
  • push-proxy-service: push-proxy는 services/core 하위 요소가 아니라 별도 원본 repository clone으로 둔다.
  • workspace-ops: 공통 실행 스크립트가 core 명령을 호출할 수 있지만 core 내부 정책은 이 도메인이 소유한다.

금지 사항

  • services/core/UPSTREAM.md baseline을 근거 없이 변경하지 않는다.
  • 이 도메인을 nexo 제품 앱 또는 앱별 business logic의 소유 영역으로 확장하지 않는다.
  • container-in-container 같은 개발 배포 방식을 현재 환경 기준으로 성급하게 고정하지 않는다.
  • 대량 rename, formatting-only churn, upstream 파일의 광범위 재배치를 작업 범위 없이 수행하지 않는다.
  • generated/build/cache 산출물을 소스 변경처럼 다루지 않는다.