실험적 워크플로우에서 완료된 변경 사항을 보관합니다.
저장소 선택: 사용자가 저장소(이 시스템에 등록된 독립형 OpenSpec 저장소) 이름을 지정하거나 작업이 특정 저장소에 속하는 경우, openspec store list --json을 실행하여 등록된 저장소 ID를 확인한 후, 스펙과 변경 사항을 읽거나 쓰는 명령(new change, status, instructions, list, show, validate, archive, doctor, context)에 --store <id> 플래그를 전달하세요. 다른 명령은 이 플래그를 사용하지 않습니다. 명령의 출력 힌트에는 이미 플래그가 포함되어 있으므로 후속 작업에서도 유지하세요. 저장소가 지정되지 않은 경우, 명령은 가장 가까운 로컬 openspec/ 루트에서 동작합니다.
입력: 선택적으로 변경 이름을 지정합니다. 생략된 경우 대화 컨텍스트에서 유추할 수 있는지 확인합니다. 모호하거나 명확하지 않은 경우 사용 가능한 변경 사항을 반드시 프롬프트로 물어봐야 합니다.
단계
-
변경 이름이 제공되지 않은 경우, 선택을 위해 프롬프트
openspec list --json을 실행하여 사용 가능한 변경 사항을 가져옵니다. AskUserQuestion 도구를 사용하여 사용자가 선택하도록 합니다.이미 보관된 변경 사항이 아닌 활성 변경 사항만 표시합니다. 가능한 경우 각 변경에 사용된 스키마를 포함합니다.
중요: 변경 사항을 추측하거나 자동 선택하지 마세요. 항상 사용자가 직접 선택하도록 하세요.
-
아티팩트 완료 상태 확인
openspec status --change "<name>" --json을 실행하여 아티팩트 완료 상태를 확인합니다.JSON을 파싱하여 다음을 확인합니다:
schemaName: 사용 중인 워크플로우planningHome,changeRoot,artifactPaths,actionContext: 경로 및 범위 컨텍스트artifacts: 각 아티팩트의 상태(done또는 기타) 목록
완료되지 않은 아티팩트가 있는 경우:
- 미완료 아티팩트 목록과 함께 경고 표시
- AskUserQuestion 도구를 사용하여 사용자에게 계속 진행할지 확인
- 사용자가 확인하면 진행
-
작업 완료 상태 확인
작업 파일(일반적으로
tasks.md)을 읽어 미완료 작업이 있는지 확인합니다.- [ ](미완료)로 표시된 작업과- [x](완료)로 표시된 작업의 개수를 셉니다.미완료 작업이 있는 경우:
- 미완료 작업 개수를 표시하는 경고 표시
- AskUserQuestion 도구를 사용하여 사용자에게 계속 진행할지 확인
- 사용자가 확인하면 진행
작업 파일이 없는 경우: 작업 관련 경고 없이 진행합니다.
-
델타 스펙 동기화 상태 평가
상태 JSON의
artifactPaths.specs.existingOutputPaths를 사용하여 델타 스펙이 있는지 확인합니다. 델타 스펙이 없으면 동기화 프롬프트 없이 진행합니다.델타 스펙이 있는 경우:
- 각 델타 스펙을
openspec/specs/<capability>/spec.md에 있는 해당 메인 스펙과 비교 - 적용될 변경 사항(추가, 수정, 삭제, 이름 변경)을 파악
- 프롬프트 전에 통합 요약 표시
프롬프트 옵션:
- 변경이 필요한 경우: "지금 동기화 (권장)", "동기화 없이 보관"
- 이미 동기화된 경우: "지금 보관", "그래도 동기화", "취소"
사용자가 동기화를 선택하면 Task 도구(subagent_type: "general-purpose", prompt: "Use Skill tool to invoke openspec-sync-specs for change ''. Delta spec analysis: <포함할 델타 스펙 분석 요약>")를 사용합니다. 선택과 관계없이 보관을 진행합니다.
- 각 델타 스펙을
-
보관 수행
planningHome.changesDir아래에archive디렉토리가 없으면 생성합니다:mkdir -p "<planningHome.changesDir>/archive"현재 날짜를 사용하여 대상 이름 생성:
YYYY-MM-DD-<change-name>대상이 이미 존재하는지 확인:
- 존재하는 경우: 오류와 함께 실패, 기존 보관 파일 이름 변경 또는 다른 날짜 사용 제안
- 존재하지 않는 경우:
changeRoot를 보관 디렉토리로 이동
mv "<changeRoot>" "<planningHome.changesDir>/archive/YYYY-MM-DD-<name>" -
요약 표시
보관 완료 요약 표시:
- 변경 이름
- 사용된 스키마
- 보관 위치
- 스펙 동기화 여부 (해당되는 경우)
- 경고 사항 참고 (미완료 아티팩트/작업)
성공 시 출력
## 보관 완료
**변경:** <change-name>
**스키마:** <schema-name>
**보관 위치:** `planningHome.changesDir`/YYYY-MM-DD-<name>/ 경로
**스펙:** ✓ 메인 스펙에 동기화됨 (또는 "델타 스펙 없음" 또는 "동기화 건너뜀")
모든 아티팩트 완료. 모든 작업 완료.
가드레일
- 제공되지 않은 경우 항상 변경 선택을 위해 프롬프트
- 완료 확인을 위해 아티팩트 그래프 사용 (
openspec status --json) - 경고가 있어도 보관을 차단하지 않음 - 정보 제공 후 확인만 받음
- 보관 시
.openspec.yaml유지 (디렉토리와 함께 이동) - 발생한 작업의 명확한 요약 표시
- 동기화 요청 시
openspec-sync-specs접근 방식 사용 (에이전트 주도) - 델타 스펙이 존재하는 경우 항상 동기화 평가를 실행하고 프롬프트 전에 통합 요약 표시