새로운 변경 사항 제안 - 한 단계로 변경 사항을 생성하고 모든 산출물을 만듭니다.
다음 산출물과 함께 변경 사항을 생성합니다:
- proposal.md (무엇과 왜)
- design.md (어떻게)
- tasks.md (구현 단계)
구현할 준비가 되면 /opsx:apply 실행
저장소 선택: 사용자가 저장소(이 머신에 등록된 독립형 OpenSpec 저장소)를 지정하거나 작업이 특정 저장소에 속하는 경우, openspec store list --json을 실행하여 등록된 저장소 ID를 찾은 후, 명세와 변경 사항을 읽거나 쓰는 명령어(new change, status, instructions, list, show, validate, archive, doctor, context)에 --store <id>를 전달합니다. 다른 명령어는 이 플래그를 사용하지 않습니다. 명령어 출력에 이미 플래그가 포함되어 있으므로 후속 작업에도 유지합니다. 저장소가 없으면 명령어는 가장 가까운 로컬 openspec/ 루트에서 작동합니다.
입력: 사용자의 요청에는 변경 이름(kebab-case) 또는 구축하려는 내용에 대한 설명이 포함되어야 합니다.
단계
-
명확한 입력이 없으면, 사용자에게 무엇을 구축할지 질문
AskUserQuestion 도구를 사용하여(개방형 질문, 미리 정의된 옵션 없음) 다음을 질문합니다:
"어떤 변경 작업을 하고 싶으신가요? 구축하거나 수정하려는 내용을 설명해 주세요."
설명에서 kebab-case 이름을 도출합니다(예: "사용자 인증 추가" →
add-user-auth).중요: 사용자가 무엇을 구축하려는지 이해하지 못한 상태에서는 진행하지 마십시오.
-
변경 디렉토리 생성
openspec new change "<이름>"CLI가
.openspec.yaml로 해석한 계획 홈(planning home)에 스캐폴딩된 변경 디렉토리가 생성됩니다. -
산출물 빌드 순서 확인
openspec status --change "<이름>" --jsonJSON을 파싱하여 다음을 얻습니다:
applyRequires: 구현 전에 필요한 산출물 ID 배열 (예:["tasks"])artifacts: 모든 산출물 목록 (상태 및 의존성 포함)planningHome,changeRoot,artifactPaths,actionContext: 경로 및 범위 컨텍스트. 이 값을 사용하여 repo-로컬 경로를 가정하지 마십시오.
-
적용 준비가 될 때까지 산출물을 순서대로 생성
TodoWrite 도구를 사용하여 산출물 진행 상황을 추적합니다.
의존성 순서로 산출물을 반복 처리합니다(먼저 보류 중인 의존성이 없는 산출물부터):
a.
ready상태인 각 산출물에 대해(의존성 충족됨):- 지침 조회:
openspec instructions <산출물-id> --change "<이름>" --json - 지침 JSON에는 다음이 포함됩니다:
context: 프로젝트 배경 (당신을 위한 제약 조건 - 출력에 포함하지 마십시오)rules: 산출물별 규칙 (당신을 위한 제약 조건 - 출력에 포함하지 마십시오)template: 출력 파일에 사용할 구조instruction: 이 산출물 유형에 대한 스키마별 지침resolvedOutputPath: 산출물을 작성할 해석된 경로 또는 패턴dependencies: 컨텍스트를 위해 읽어야 할 완료된 산출물
- 완료된 의존성 파일을 컨텍스트로 읽습니다.
template을 구조로 사용하여 산출물 파일을 생성하고resolvedOutputPath에 작성합니다.context와rules를 제약 조건으로 적용하되, 파일에 복사하지 마십시오.- 간단한 진행 상황 표시: "<산출물-id> 생성됨"
b. 모든
applyRequires산출물이 완료될 때까지 계속- 각 산출물 생성 후
openspec status --change "<이름>" --json을 다시 실행합니다. applyRequires의 모든 산출물 ID가 artifacts 배열에서status: "done"인지 확인합니다.- 모든
applyRequires산출물이 완료되면 중단합니다.
c. 산출물에 사용자 입력이 필요한 경우(컨텍스트가 불명확한 경우):
- AskUserQuestion 도구를 사용하여 명확히 한 후 생성을 계속합니다.
- 지침 조회:
-
최종 상태 표시
openspec status --change "<이름>"
출력
모든 산출물을 완료한 후 다음을 요약합니다:
- 변경 이름 및 위치
- 간단한 설명과 함께 생성된 산출물 목록
- 준비 상태: "모든 산출물이 생성되었습니다! 구현 준비 완료."
- 안내: "
/opsx:apply를 실행하거나 구현을 요청하여 작업을 시작하세요."
산출물 생성 지침
- 각 산출물 유형에 대해
openspec instructions의instruction필드를 따릅니다. - 스키마는 각 산출물에 포함되어야 할 내용을 정의하므로 이를 따릅니다.
- 새 산출물을 생성하기 전에 컨텍스트를 위해 의존성 산출물을 읽습니다.
template을 출력 파일의 구조로 사용하고 해당 섹션을 채웁니다.- 중요:
context와rules는 당신을 위한 제약 조건이며, 파일에 포함할 내용이 아닙니다.<context>,<rules>,<project_context>블록을 산출물에 복사하지 마십시오.- 이들은 작성 내용을 안내하지만 출력에 절대 나타나서는 안 됩니다.
가드레일
- 구현에 필요한 모든 산출물(스키마의
apply.requires에 정의된 대로)을 생성합니다. - 새 산출물을 생성하기 전에 항상 의존성 산출물을 먼저 읽습니다.
- 컨텍스트가 매우 불명확한 경우 사용자에게 질문하지만, 추진력을 유지하기 위해 합리적인 결정을 내리는 것을 선호합니다.
- 동일한 이름의 변경 사항이 이미 존재하면, 사용자에게 계속 진행할지 새로 생성할지 질문합니다.
- 각 산출물 파일이 작성 후 실제로 존재하는지 확인한 후 다음 단계로 진행합니다.