/cc-spec:evolve — 잠긴 핵심 명세를 "공식 절차로" 고치기
잠긴(LOCKED) Seed spec 을 정해진 절차로만 고칩니다 — 허용 범위(S3 추가·S4 May·S5 상태)만 반영하고 핵심 문제·불변 제약 수정은 거절하며, 바뀐 결과가 원래 목표에서 얼마나 벗어났는지 Jev 가 LOW/MEDIUM/HIGH 로 판정한 뒤 버전을 올리고 S6 에 이력을 남깁니다.
| 항목 | 내용 |
|---|---|
| 실행 명령 | /cc-spec:evolve |
| 분류 | 스펙 명확화 |
| 난이도 | ●●○ 보통 |
한마디로#
이미 확정(잠금)된 핵심 명세를, 마음대로가 아니라 정해진 절차를 거쳐서만 바꾸도록 해주는 명령입니다. 계약서를 함부로 수정하지 못하고 정식 "변경 합의서"를 써서만 고치는 것과 같아요. 고친 결과가 원래 약속에서 벗어나지 않았는지는 판정 전용 모델(Jev) 이 확인합니다.
누가·언제 쓰나요#
- 이미 잠금(LOCKED) 처리된 Seed 명세를 바꿔야 할 상황이 생겼을 때
- 도메인 항목을 추가하거나, 선택(May) 항목을 바꾸거나, 가정의 검증 상태를 갱신하고 싶을 때
👉 단, 핵심 문제(S1) 와 불변 제약(S2) 은 절대 바꿀 수 없습니다. 이 둘을 바꿔야 한다면 새 Seed 를 처음부터 다시 만들어야 합니다. 또한 한 주기(cycle) 안에서 변경은 최대 3번까지만 허용됩니다.
무엇을 해주나요#
기존 Seed 명세 파일(docs/seed-spec-*.md)이 안전하게 갱신됩니다.
- 허용된 범위만 반영 — 도메인 항목 추가, May(선택) 항목 변경, 가정 검증 상태 갱신만 적용됩니다.
- 금지된 변경은 거절 — 핵심 문제·불변 제약 수정 시도는 막고 안내해 줍니다.
- 표류 판정(Jev) — 바뀐 뒤의 S3/S4 가 원래 핵심 문제를 여전히 향하는지, 제약을 어기지 않는지를 LOW / MEDIUM / HIGH 로 받습니다. HIGH 면 막고, MEDIUM 이면 확인을 받고, LOW 면 진행합니다.
- 버전 자동 갱신 + 이력 기록 — 변경 종류에 따라 MINOR/PATCH 로 올리고 S6 에 남깁니다.
어떻게 쓰나요#
/cc-spec:evolve # 변경 절차 시작
/cc-spec:evolve --file {path} # 특정 Seed 명세 파일 지정
안에서 무슨 일이 벌어지나요#
- 사전 확인 — 잠금(LOCKED) 상태인지, 변경 횟수가 3번 이내인지 확인합니다.
- 변경 요청 수집 — 무엇을 바꾸고 싶은지 물어보고, 허용·금지 범위를 알려 줍니다.
- 유효성 검사 — 금지 영역 수정 시도는 거절하고, 허용 범위만 반영합니다. 3.5. 표류 판정 — 잠글 때의 S1·S2(기준선)와 바뀐 S3·S4 를 Jev 에 보내 LOW/MEDIUM/HIGH 를 받습니다. 키가 없으면 판정 불가로 멈춥니다 — 확인 없이 진행하지 않습니다.
- 버전 올리기 — 변경 종류에 맞춰 버전 번호를 갱신합니다.
- 이력 남기기 — 변경 내용·사유·승인자·Jev 판정 도장을 S6 에 기록합니다.
- 재판정 권유 — 바뀐 뒤
/cc-spec:verify로 모호성·패널을 다시 받도록 권합니다(잠금은 유지).
⚙️ 상세 옵션·실행 명세 (개발자 / AI 에이전트용)
Usage#
/cc-spec:evolve
/cc-spec:evolve --file {path}Parameters#
| Parameter | Description | Default |
|---|---|---|
--file | Seed spec file path | Latest LOCKED docs/seed-spec-*.md |
Prerequisites#
- Seed spec is LOCKED
- Evolutions this cycle <
seed_spec.max_evolution_per_cycle(3) TYPESAFE_API_KEYfor step 3.5 (absent → UNVERIFIED → the evolution is not applied)
Allowed / Prohibited Changes#
| Section | Allowed Changes |
|---|---|
| S1 Core Problem | Not allowed — new Seed |
| S2 Immutable Constraints | Not allowed — new Seed |
| S3 Domain Entities | Additions only |
| S4 Acceptance Boundaries | Only May rows; Must / Must-Not rows may advance Status only |
| S5 Exposed Assumptions | Verification status updates |
Execution Flow#
1. Pre-validation#
- Confirm
Status: LOCKED; count S6 evolution rows this cycle.
2. Collect Change Requests#
- Ask for the change; state the allowed/prohibited table.
3. Validity Check#
- Reject prohibited edits with guidance; apply allowed edits to a working copy (do not overwrite yet).
3.5. Drift Check — Jev#
JJ="${CLAUDE_PLUGIN_ROOT}/skills/jev-gate/scripts/jev_judge.py"
git show $(git log --format=%H --diff-filter=A -- docs/seed-spec-{slug}.md | tail -1):docs/seed-spec-{slug}.md > /tmp/seed-baseline.md 2>/dev/null || cp docs/seed-spec-{slug}.md /tmp/seed-baseline.md
python3 "$JJ" judge --set evolve --spec /tmp/seed-working.md --baseline /tmp/seed-baseline.md
# exit 0 LOW · 2 MEDIUM / HIGH · 3 UNVERIFIEDstate.baseline= S1 + S2 of the baseline (the file as first locked; falls back to the current file's S1/S2, which evolve never changes anyway).state.current= the working copy's S3 + S4 + S5.- Questions (
skills/jev-gate/questions/evolve.json):drift_level(choice low/medium/high),serves_core_problem(noul, min 0.85),violates_C-NN(noul, max 0.15) per S2 row. Any violation orserves_core_problemfailure forces HIGH. - Gate: HIGH → discard the working copy, recommend
/cc-spec:seed. MEDIUM → require explicit user confirmation. LOW → proceed. UNVERIFIED → stop; do not apply.
4. Version Bump#
| Change Type | Version |
|---|---|
| Domain entity addition | MINOR |
| May item change | MINOR |
| Assumption status update | PATCH |
5. Evolution Log Entry#
- Append to S6:
| {new version} | {date} | {changes} | {reason} · Jev {LOW|MEDIUM-confirmed} ({spec_hash_short}) | {approver} | - Write the working copy over the file.
6. Re-verification#
- Recommend
/cc-spec:verifyto refresh the ambiguity score and panel on the new version (the seed stays LOCKED).
Output#
Seed spec file updated (version + S6 entry). Nothing else is written.
Related Commands#
/cc-spec:seed— new Seed when S1/S2 must change/cc-spec:verify— re-judge after evolution/cc-spec:status— drift of work against the seed (this command judges drift of the seed against its baseline)
References#
skills/jev-gate/questions/evolve.json— questions and assertionsconfig/thresholds.yaml→evolve:,seed_spec:references/SEED_SPEC_SCHEMA.md— version and lock rules