맥락
- IssueTracker · Malkuth · GraphLM · mentlerun 네 저장소가 같은 AI 작업 규약 (이슈 먼저 · 자율 진행 · commit-per-TODO · PR 자동 · 권한 최소화 · Label/Type · 결정 기록 · 오케스트레이션) 을 각자 들고 있었다. IssueTracker 의 07-workflow.md 가 원형이고 Malkuth 는 이식본, GraphLM · mentlerun 은 축약본이라 한 곳을 고치면 나머지가 어긋났다.
- 2026-10-11 사용자 레벨 하네스
~/.claude/CLAUDE.md · ~/.claude/rules/01~08 · ~/.claude/agents/ 를 구성했다. Claude Code 는 ~/.claude/rules/ 를 모든 프로젝트에 자동 로드하지만, 공식 문서상 사용자 룰과 프로젝트 룰이 충돌하면 어느 쪽도 자동 우선하지 않는다.
결정
- 규약 1~8 의 본문은
~/.claude/rules/ (01-workflow · 02-orchestration · 03-conventions · 06-pr-feedback · 07-decisions) 가 단일 출처다.
.claude/rules/07-workflow.md 는 공통 규약이 프로젝트에 위임한 값 (scripts/gh-meta.sh · pr-resolve-comments.sh · Notion DB · Issue Type ID · make harness-check · claude.yml · operator 범위) 과 구 규약 번호 → 하네스 파일 대응표만 남긴다. 충돌 시 프로젝트 문서가 우선한다고 명시한다.
CLAUDE.md 의 핵심 8 규약은 ~/.claude 가 없는 환경 (GitHub Action claude.yml) 용 요약으로 축약해 남긴다. "반드시 지킬 규칙 (CI가 강제함)" 은 그대로.
- 티어 → 모델 매핑의 단일 출처는
~/.claude/rules/02-orchestration.md 와 ~/.claude/agents/*.md 의 model 필드로 옮긴다. 저장소 문서에는 모델 이름을 적지 않는다.
근거
- 규약 문서가 저장소마다 중복되면 드리프트가 떼로 생긴다 — 이 저장소의 harness-check (이슈 #539 · #565) 가 막으려던 바로 그 상황이 저장소 간에 재현되고 있었다.
- 사용자 룰은 프로젝트 룰보다 먼저 컨텍스트에 들어가고 자동 우선순위가 없으므로, 프로젝트 문서에 "프로젝트 우선" 을 명시하고 전용 값만 남기는 것이 충돌을 피하는 유일한 수단이다.
- 구 규약 번호는 기존 이슈 · PR · 스크립트 주석 · CI 오류 메시지가 참조하므로 대응표로 유지한다.
검토한 대안
- 프로젝트 문서를 그대로 두고 하네스를 참고용으로만 추가 — 중복이 남아 어긋남이 계속된다. 기각.
- 하네스 내용을 각 저장소에 복사하고 동기화 스크립트로 맞춤 —
~/.claude/rules/ 가 이미 자동 로드되는데 다시 복사하는 셈이고, 저장소마다 커밋이 늘어난다. 기각.
- 규약 번호를 폐기하고 하네스 파일명으로만 참조 — 기존 참조가 깨진다. 보류 (네 저장소 공통으로 정할 사안).
결과·영향
~/.claude 가 없는 환경 (claude.yml) 은 CLAUDE.md 요약과 07-workflow.md 만 읽는다. CI 가 강제하는 형식 (커밋 · PR 제목 · Linked Issue) 은 CLAUDE.md 와 docs/ci/ 에 그대로 있어 영향 없다.
- 미결: 하네스 저장소 (~/.claude git) 의 remote 와 claude.yml 에서 하네스를 체크아웃할지 여부.
- 같은 변경을 GraphLM (#84) · Malkuth (#375) · mentlerun (#54) 에도 적용했다.