Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 2 additions & 68 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion docs/guide/architecture-conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -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). 브랜치는 `<type>/<대상>`.
- PR 본문에 `## 플랜 대조` 표. 봇 리뷰(Codex·CodeRabbit)는 BE와 같은 절차로 처리한다.
- PR 본문에 `## 플랜 대조` 표. 봇 리뷰(Codex)는 BE와 같은 절차로 처리한다(CodeRabbit은 BE 전용, D17).
3 changes: 2 additions & 1 deletion docs/guide/decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@
| D8 | 2026-09-27 | 배포: 이 레포가 Dockerfile(nginx) · `infra/compose.yml` · `deploy.yml` 소유. GHCR `ghcr.io/caquick/caquick-admin-fe:<sha>`(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`은 자동 리뷰를 끈 최소 설정만 둔다 | 사용자 결정(판매자 앱도 같음) |
Loading
Loading