diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 30af30d..600dd51 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -1,73 +1,7 @@ # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json -language: 'ko-KR' - +# CodeRabbit은 BE(caquick-be) 전용 — 앱이 이 레포에 연결돼 있어도 자동 리뷰·자동 답글이 돌지 않게 끈다 reviews: - profile: 'chill' - request_changes_workflow: false - commit_status: true - fail_commit_status: false - high_level_summary: true - high_level_summary_in_walkthrough: false - poem: false - in_progress_fortune: false - suggested_labels: false - auto_apply_labels: false - suggested_reviewers: false - auto_review: - enabled: true - auto_incremental_review: true - drafts: false - - path_filters: - - '!src/graphql/generated/**' - - '!src/routeTree.gen.ts' - - '!schema/schema.graphql' - - '!src/shared/ui/**' - - '!public/**' - - '!pnpm-lock.yaml' - - path_instructions: - - path: 'src/**/*.{ts,tsx}' - instructions: | - React + TanStack Router/Query SPA. docs/guide/architecture-conventions.md가 기준입니다. - - shared는 features를 import하면 안 되고, feature 간 import는 대상 index.ts로만 가능합니다. - - 쿼리 키는 feature의 키 팩토리로만 만들고, mutation 뒤 관련 키를 invalidate해야 합니다. 낙관적 업데이트는 쓰지 않습니다. - - accessToken을 localStorage/sessionStorage에 저장하면 안 됩니다. - - GraphQL ID는 문자열 그대로 다루며 "0"·빈 문자열을 truthy 검사로 버리면 안 됩니다. - - 색상 hex를 컴포넌트에 직접 쓰지 않고 globals.css 토큰을 씁니다. - - 기능 변경에는 테스트(MSW 기반)가 함께 있는지 확인하세요. - - path: 'src/**/*.graphql' - instructions: | - 문서는 schema/schema.graphql(BE 스냅샷)과 일치해야 합니다. 필드 과다 조회·중복 문서를 지적하세요. - - path: '.github/workflows/**/*.yml' - instructions: | - GitHub Actions는 최소 권한, 시크릿 노출 방지, fork 안전성, SHA 핀을 중심으로 리뷰하세요. - - path: 'infra/**' - instructions: | - compose·nginx·배포 스크립트는 인바운드 포트 미개방, 헬스체크, 롤백 가능성, 시크릿 처리를 중심으로 리뷰하세요. - - path: 'src/**/*.spec.{ts,tsx}' - instructions: | - 네트워크는 MSW로 mock했는지, 정상 흐름뿐 아니라 에러·경계 케이스가 있는지 확인하세요. - - pre_merge_checks: - title: - mode: warning - requirements: 'PR 제목은 Conventional Commits 형식으로 변경 내용을 간결하게 설명해야 합니다.' - description: - mode: off - -knowledge_base: - code_guidelines: - enabled: true - learnings: - scope: local - issues: - scope: local - pull_requests: - scope: local - web_search: - enabled: true - + enabled: false chat: auto_reply: false diff --git a/docs/guide/architecture-conventions.md b/docs/guide/architecture-conventions.md index 249e2b0..44a122f 100644 --- a/docs/guide/architecture-conventions.md +++ b/docs/guide/architecture-conventions.md @@ -84,4 +84,4 @@ pnpm codegen # 스냅샷 + 문서 → src/graphql/generated (커밋 - `test`: Vitest 3샤드, 결과는 blob 아티팩트로 넘긴다 - `coverage-report`: blob을 합쳐 임계 검사 → Codecov → PR 댓글. 비교 기준은 base 브랜치(develop·main) push 실행이 올린 커버리지 요약 - 커밋은 Conventional Commits + 한국어 본문(commitlint). 브랜치는 `/<대상>`. -- PR 본문에 `## 플랜 대조` 표. 봇 리뷰(Codex·CodeRabbit)는 BE와 같은 절차로 처리한다. +- PR 본문에 `## 플랜 대조` 표. 봇 리뷰(Codex)는 BE와 같은 절차로 처리한다(CodeRabbit은 BE 전용, D17). diff --git a/docs/guide/decisions.md b/docs/guide/decisions.md index f5b6272..cc5aa8c 100644 --- a/docs/guide/decisions.md +++ b/docs/guide/decisions.md @@ -14,9 +14,10 @@ | D8 | 2026-09-27 | 배포: 이 레포가 Dockerfile(nginx) · `infra/compose.yml` · `deploy.yml` 소유. GHCR `ghcr.io/caquick/caquick-admin-fe:`(arm64), 맥미니 셀프호스트 러너, BE compose 네트워크 `caquick_default`에 external 참여, 기존 cloudflared가 라우팅 | BE와 독립 배포·롤백. BE 레포 변경은 Tunnel 호스트 1줄 | | D9 | 2026-09-27 | 도메인 `admin.caquick.site` → 컨테이너 `caquick-admin:80`. API `https://api.caquick.site` | 같은 부모 도메인이라 refresh 쿠키가 same-site로 전송된다 — 쿠키 도메인 변경 불필요, BE는 CORS 오리진만 추가 | | D10 | 2026-09-27 | 인증: REST `/auth/admin/*`. accessToken은 메모리, refresh는 httpOnly 쿠키. 401이면 refresh 1회 후 재시도, 부팅 시 refresh로 복원, `mustChangePassword`면 변경 화면 강제 | 토큰을 localStorage에 두지 않는다(XSS 반경). 로컬은 Vite 프록시로 same-origin | -| D11 | 2026-09-27 | 머지 게이트는 BE와 동일: terraform ruleset(main·develop), 필수 체크 `check`·`pr-title`·`coverage-report`·`Analyze (javascript-typescript)`, Codex 상태기계, CodeRabbit(main) | 무인 진행의 전제 | +| D11 | 2026-09-27 | 머지 게이트는 BE와 동일: terraform ruleset(main·develop), 필수 체크 `check`·`pr-title`·`coverage-report`·`Analyze (javascript-typescript)`, Codex 상태기계(CodeRabbit은 대체됨 → D17) | 무인 진행의 전제 | | D12 | 2026-09-27 | 릴리즈 순서: R1(기반·CI/CD·인증·셸·대시보드) → main → 영역별 PR → R2 | 배포 파이프라인·Tunnel·쿠키 문제를 가장 이른 시점에 실사이트에서 확인 | | D13 | 2026-09-27 | BE SDL 스냅샷(`schema/schema.graphql`) 커밋 + `pnpm schema:pull`. CI는 codegen 신선도만 게이트, BE main과의 drift는 advisory | CI가 BE 체크아웃에 의존하지 않게 | | D14 | 2026-09-27 | 문서: `CLAUDE.md`·`.claude/`·`AGENTS.md`·`docs/*`(guide 제외)·`.figma/` gitignore. `docs/guide/`·README 커밋 | BE와 같은 방식 | | D15 | 2026-09-27 | 의존 방향은 ESLint boundaries로 강제(shared→features 금지, feature 간은 index.ts만). 검사기는 반증 케이스로 확인하고 넣는다 | BE `arch:check`와 같은 역할 | | D16 | 2026-10-05 | 커버리지 임계를 실측 정수 내림으로 상향: statements 95 · branches 88 · functions 94 · lines 96. CI는 테스트를 3샤드로 나누고 coverage-report가 합친 결과로 검사 | 실측(95.54·88.07·94.29·96.07)보다 한참 낮은 임계는 회귀를 못 잡는다. 샤드 합산이 단일 실행과 같음을 확인 | +| D17 | 2026-10-06 | 리뷰 봇은 Codex만 쓴다. CodeRabbit은 BE 전용 — `.coderabbit.yaml`은 자동 리뷰를 끈 최소 설정만 둔다 | 사용자 결정(판매자 앱도 같음) |