/cc-spec:status — 지금 만든 것이 명세와 맞는지 Jev 에게 묻기
최신 LOCKED Seed spec 을 기준으로 AC-ID 상태를 표에서 그대로 읽어 보여 주고, `--against {file|dir|PR}` 가 있으면 Jev(판정 전용 모델)가 목표 정렬(ALIGNED/MINOR-DRIFT/MAJOR-DRIFT)·S2 제약 위반·Must AC 충족을 확률로 판정한 읽기 전용 리포트를 냅니다 — 긴 배치 전후, P...
| 항목 | 내용 |
|---|---|
| 실행 명령 | /cc-spec:status |
| 분류 | 스펙 명확화 |
| 난이도 | ●●○ 보통 |
한마디로#
이미 확정(잠금)된 핵심 명세(Seed spec)를 기준으로, 지금 만든 작업이 그 명세에서 얼마나 벗어났는지를 읽기 전용으로 진단해 주는 명령입니다. 집을 짓는 중간에 설계도를 꺼내 "기둥 위치 그대로인가, 금지한 걸 하진 않았나"를 대조하는 것과 같아요. 판정은 이 세션의 AI 가 아니라 별도의 판정 전용 모델(Jev) 이 확률로 내립니다.
누가·언제 쓰나요#
- 잠근 명세가 있고, 특정 파일·폴더·PR 이 그 명세의 목표를 여전히 향하고 있는지 확인하고 싶을 때
- 오래 도는 자동화(
/cc-dev:batch)의 시작·끝에서 표류를 점검할 때 — batch 가 이 명령의 규약을 그대로 재사용합니다 - 옵션 없이 실행하면 잠근 명세의 합격 기준 상태(AC-ID)를 그대로 보여 줍니다
무엇을 해주나요#
- AC-ID 상태 표 — 명세 4번 표(합격 기준)의 ID 와 상태(PENDING/IN-PROGRESS/MET/FAILED/WAIVED)를 파싱한 그대로 보여 줍니다. 다시 판단하지 않습니다.
-
목표 정렬 판정 (
--against시) — 작업이 핵심 문제(S1)를 향하는지 ALIGNED / MINOR-DRIFT / MAJOR-DRIFT - 제약 위반 — 불변 제약(S2) 하나하나에 대해 "이 작업이 어겼는가" 확률. 상한(0.15)을 넘으면 위반으로 표시하고 전체를 MAJOR-DRIFT 로 올립니다.
- AC 충족 — Must 항목마다 "이 작업이 충족했는가" 확률(하한 0.85), Must-Not 항목마다 "금지한 일을 했는가" 확률
아무 파일도 쓰지 않습니다. 명세도, 대조한 파일도 바꾸지 않고 화면에만 출력합니다.
어떻게 쓰나요#
/cc-spec:status # AC-ID 상태만
/cc-spec:status --against lib/features/community/ # 폴더와 대조
/cc-spec:status --against docs/prd-community.md # 파일과 대조
/cc-spec:status --against 412 # PR 번호 → diff 와 대조
/cc-spec:status --against-diff origin/main...HEAD # git 범위와 대조
안에서 무슨 일이 벌어지나요#
-
잠근 명세 찾기 — 가장 최근
docs/seed-spec-*.md중Status: LOCKED를 읽습니다. 없으면 "먼저/cc-spec:verify --lock" 안내 후 종료. - AC 상태 표 출력 — 스크립트가 표를 파싱해 그대로 보여 줍니다.
-
대조 대상 모으기 (
--against시) — 파일·폴더 내용 또는 PR/git diff 를 읽어 명세와 함께 JSON 으로 묶습니다. 너무 크면(3만 2천 자 초과) 보내지 않고 판정 불가(UNVERIFIED)로 멈추며 범위를 좁히라고 합니다. - Jev 판정 — 정렬 1문항 + 제약 수만큼 + AC 수만큼의 질문을 한 번에 보내 확률을 받습니다.
- 리포트 — 정렬 판정, 위반 목록, 미충족 Must 목록을 표로 출력합니다. 키가 없거나 답이 빠지면 UNVERIFIED 로 표시하고, 이를 "정렬됨"으로 읽지 않습니다.
⚙️ 상세 옵션·실행 명세 (개발자 / AI 에이전트용)
Usage#
/cc-spec:status
/cc-spec:status --against {file|dir}
/cc-spec:status --against {PR-number}
/cc-spec:status --against-diff {git-range}Behavior: READ-ONLY#
This command writes nothing. It loads state, calls Jev, and prints a report.
Parameters#
| Parameter | Description | Default |
|---|---|---|
--against | file, directory, or PR number to judge against the seed | none (AC echo only) |
--against-diff | git range passed to git diff | none |
Execution Flow#
JJ="${CLAUDE_PLUGIN_ROOT}/skills/jev-gate/scripts/jev_judge.py"
SEED=$(grep -l "Status: LOCKED" docs/seed-spec-*.md 2>/dev/null | tail -1)1. Load Locked Seed#
- No LOCKED seed → print guidance (
/cc-spec:verify --lock) and exit. Write nothing.
2. AC-ID Status Echo (from S4, parsed)#
python3 "$JJ" parse "$SEED" # → s4_acceptance[{id,type,criterion,status}]- Print
| AC-ID | Type | Criterion | Status |verbatim. This is an echo of recorded state, not a re-judgment.
3. Judge against work (only with --against / --against-diff)#
- PR number →
gh pr diff {N} > /tmp/pr-{N}.diffthen--against /tmp/pr-{N}.diff.
python3 "$JJ" judge --set drift --spec "$SEED" --against {path} > /tmp/jev-status.json
# or: --against-diff origin/main...HEAD
# exit 0 ALIGNED · 2 MINOR-DRIFT / MAJOR-DRIFT · 3 UNVERIFIED- Questions sent (
skills/jev-gate/questions/drift.json):goal_alignment(choice) +violates_C-NN(noul, max 0.15) per S2 row +met_AC-NN(noul, min 0.85) per Must row +violates_AC-NN(noul, max 0.15) per Must-Not rowmet_AC-NN(info) per May row.
set_results.driftcarriesverdict,goal_alignment{choice,confidence},constraint_violations[],unmet_must[],ac_results{}.- A state over 32,000 chars is not sent: the verdict is UNVERIFIED with a size reason. Narrow
--against(Jev: one domain per request) — a diluted verdict would not be trustworthy anyway.
4. Emit Report (no writes)#
- AC-ID status table.
- Goal alignment:
ALIGNED/MINOR-DRIFT/MAJOR-DRIFTwith Jev's choice + confidence (only with a target). - S2 violations: each
violates_C-NNwith probability; "no violations" if none over 0.15. - Must AC coverage: each
met_AC-NNwith probability; unmet list. UNVERIFIED(exit 3): print thereasonand stop. Never render UNVERIFIED as ALIGNED.
Consumers#
/cc-dev:batchPhase 0.5 (pre-batch / post-final-merge seed-alignment checkpoint) reuses this protocol verbatim: pauses (interactive) or warns-and-continues (unattended) on MAJOR-DRIFT, and treats UNVERIFIED the same way — never as a pass.
Related Commands#
/cc-spec:verify— verification + lock (the seed must be LOCKED for status to run)/cc-spec:evolve— evolve the locked seed when MAJOR-DRIFT is the spec's fault, not the work's
References#
skills/jev-gate/SKILL.md—jev_judge.py, fail-closed rulesskills/jev-gate/questions/drift.json— question texts and assertionsconfig/thresholds.yaml→drift: