fix: 하네스 제거 및 keycloak 문서 보강
This commit is contained in:
@@ -1 +0,0 @@
|
||||
../vault/00-system/rules/coverage-gate.md
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
title: rules / coverage-gate
|
||||
source_type: reference
|
||||
status: reviewed
|
||||
tags: [rules, coverage, branch, ca-skeleton, quality-gate]
|
||||
related_projects: [ca-skeleton]
|
||||
last_reviewed: 2026-06-02
|
||||
---
|
||||
|
||||
# coverage-gate — 브랜치 완전성 판정 기준
|
||||
|
||||
> 이 문서는 `/coverage` 명령(`.claude/commands/coverage.md`)과 `coverage-auditor` 서브에이전트(`.claude/agents/coverage-auditor.md`)의 **판정 기준 SSOT**다. `branch-depth-gate.md`(깊이)의 짝 — 이쪽은 **완전성(coverage)** 을 본다.
|
||||
|
||||
## Parent / 부모
|
||||
|
||||
- [[CLAUDE.md]] §11·§15 — 근거 없는 결정 금지, 근거 기반 구현 명세
|
||||
- 짝 문서: [[rules/branch-depth-gate]] — 깊이 게이트
|
||||
|
||||
## 0. depth 와의 분업 (헷갈리지 말 것)
|
||||
|
||||
| 게이트 | 묻는 질문 | 비유 |
|
||||
|---|---|---|
|
||||
| `depth` (R1~R4) | 노트에 **적힌** 결정이 충분히 깊은가 | "네가 푼 문제는 잘 풀었나" |
|
||||
| `coverage` (본 문서) | **적어야 할** 관심사가 다 적혔는가 | "안 푼 문제가 있나" |
|
||||
|
||||
→ coverage 는 *빠진 것*을 찾고, depth 는 *적은 것의 깊이*를 본다. 둘은 직교한다. 브랜치는 둘 다 통과해야 완성.
|
||||
|
||||
## 1. 기준의 출처 (reference standard 위계)
|
||||
|
||||
"무엇을 덮어야 하는가"는 **추측하지 않는다.** 다음 위계로만 판정:
|
||||
|
||||
1. **설계 문서 (1순위)** — 브랜치 frontmatter `governing_docs:` 가 가리키는 canonical 문서(`wiki/projects/ca-tmpl/<cluster>.md`). 이 문서가 열거하는 관심사가 "있어야 할 것"의 기준.
|
||||
2. **선례(완성) 형제 브랜치** — 이미 구현된 브랜치들. 같은 관심사를 이미 누가 owner 인지 식별(겹치면 위임).
|
||||
3. **ca-tmpl 실제 코드** — `/home/donghyeon/workspace/ca-tmpl/src` + `docs/registries`. 관심사가 말로만 있는지 실제 구현인지 ground truth.
|
||||
|
||||
`governing_docs` 가 없으면 기준 부재 → 판정 불가(`NO_GOVERNING_DOC`, 1차에서 차단). 외부 taxonomy(OWASP 등)는 기준으로 삼지 않는다 — 기준은 프로젝트 자체 문서.
|
||||
|
||||
## 2. 상태 3종
|
||||
|
||||
각 관심사는 정확히 하나:
|
||||
|
||||
| 상태 | 의미 |
|
||||
|---|---|
|
||||
| `covered-here` | 이 브랜치가 결정으로 다룸 (Decision ID 보유) |
|
||||
| `delegated` | 이 브랜치 밖이지만 다른 owner 브랜치가 소유 (위임 링크 필요) |
|
||||
| `missing` | 어느 브랜치에도 결정으로 없음 |
|
||||
|
||||
## 3. 판정 (3단계 심각도)
|
||||
|
||||
| 신호 | 의미 | 트리거 (실패 모드) |
|
||||
|---|---|---|
|
||||
| 🔴 Blocking | 진짜 빠짐 | `MISSING_CONCERN` — governing 문서가 요구하는 관심사가 이 브랜치에도, 다른 owner 에도 없음 |
|
||||
| 🟡 Should-fix | 위임 링크 누락 | `UNLINKED_DELEGATION` — sibling owner 가 있으나 본 노트(§Audit/§Coverage)에 위임 링크 없음 |
|
||||
| ⚪ Advisory | 있으면 좋음 | governing 문서가 권고하나 핵심 아님 / `MIS-SCOPED_GOVERNING_DOC`(governing_docs 가 주제와 안 맞아 보임 — 한 줄 코멘트) |
|
||||
| — | 정합 깨짐 | `STALE_OWNER` — §Coverage 가 가리키는 owner 가 코드/노트 대조상 실제로 그 관심사를 안 가짐 → 심각도는 갭 성격에 따라 |
|
||||
|
||||
**Covered = Blocking 0건.** Should-fix 가 남아도 사용자 "감수" 선언 시 통과(리포트 기록) — depth 와 동일.
|
||||
|
||||
## 4. 명명된 실패 모드
|
||||
|
||||
- `MISSING_CONCERN` (Blocking): governing 문서 관심사가 어느 브랜치에도 결정으로 없음. **이게 coverage 의 핵심 산출.**
|
||||
- `UNLINKED_DELEGATION` (Should-fix): owner sibling 있으나 위임 링크 누락.
|
||||
- `STALE_OWNER`: §Coverage 가 가리키는 owner 가 실제로 그 관심사를 안 가짐(코드/노트 대조 불일치).
|
||||
- `NO_GOVERNING_DOC` (1차 차단): `governing_docs` 미지정 → 기준 부재로 판정 불가.
|
||||
- `MIS-SCOPED_GOVERNING_DOC` (Advisory): governing_docs 가 브랜치 주제와 안 맞아 보임 — 적정성 의심을 surface(추측 단정 금지).
|
||||
|
||||
## 5. 판정 원칙
|
||||
|
||||
- **추측 금지** — governing 문서·선례 브랜치·코드를 *실제로 읽고* 판정. 안 읽고 "빠졌다/덮였다" 단정 금지.
|
||||
- **owner 위임은 Blocking 아님** — 다른 브랜치가 소유하면 false block 하지 않는다. 위임 링크만 요구(Should-fix).
|
||||
- **코드 ground truth 우선** — 노트가 "구현됐다"고 해도 `src/` 에 없으면 `STALE_OWNER` 또는 `missing`.
|
||||
- 모든 finding 4종 세트: `심각도 · 관심사 · 상태(+owner) · 채울 방법`. 근거 없는 지적 금지.
|
||||
- 자동 수정 금지(read-only). 갭은 `/branch-spec` 으로 되돌아가 채운다.
|
||||
|
||||
## 6. 프로젝트 모드 (`/coverage --project`)
|
||||
|
||||
- 전체 canonical 문서에서 관심사를 열거 → 각 브랜치 `## Coverage` 와 cross-ref.
|
||||
- **owner-less 관심사**(아무 브랜치도 안 맡음) = 프로젝트 레벨 Blocking.
|
||||
- 결과를 `wiki/projects/ca-tmpl/coverage-matrix.md` 로 **생성**(손유지 금지 — 매 실행 재생성).
|
||||
|
||||
## 7. 면제
|
||||
|
||||
`governing_docs` 미지정 + `related_projects` 에 ca-skeleton/ca-tmpl 없는 브랜치(예: keycloak 학습 노트)는 coverage 면제. 1차 린터가 프로젝트 소속으로 판단.
|
||||
Reference in New Issue
Block a user