plan · git:20260803.49f7d30 · 2026-08-03 · sha256 54ff76fdaa347da9
plan git:20260803.49f7d30A
Immutable. This exact content never changes and is served at /api/v1/blob/54ff76fdaa347da9.
---
name: plan
description: "Plan the change as OpenSpec artifacts: proposal, delta specs, design, tasks"
argument-hint: "[change intent]"
effort: max
---
변경의 intent와 design을 change artifact로 기록한다. squash merge는 branch history를 지운다.
이 artifact의 archive만이 그 과정을 보존한다.
# 절차
1. change-id를 정한다. 보통 tx branch의 slug와 같다.
```bash
"${CLAUDE_PLUGIN_ROOT}/bin/tx-hook" openspec new change <change-id>
```
2. artifact를 dependency 순서로 작성한다. artifact마다
instructions를 engine에서 받는다. format의 정본은 engine이다:
```bash
"${CLAUDE_PLUGIN_ROOT}/bin/tx-hook" openspec instructions <artifact> --change <change-id> --json
```
task에는 close 전에 done이 되는 작업만 적는다. transaction의 종결과 merge 이후의 행동은
task가 될 수 없다. 후자는 후속 change다.
3. validate한다:
```bash
"${CLAUDE_PLUGIN_ROOT}/bin/tx-hook" openspec validate <change-id> --strict --no-interactive --json
```
delta 없는 change에서는 validate가 `no deltas` ERROR를 낸다.
이 ERROR는 그 class의 정상 동작이라 fix 대상이 아니다. 그 class의 gate는 task 완료와
archive의 `--skip-specs`, 사후 CI다. 그 외의 지적은 전부 green까지 수정한다.
4. 즉시 `tx:apply`로 이어간다. plan은 구현의 시작이지 정지점이 아니다.
# Unknown 처리
계획 중 만나는 모든 unknown은 셋 중 하나로 처리한다:
- **measurable하면**: 측정하고 결과를 기록한다.
- **reversible하면**: assumption을 채택하고 design에 명시한다.
- **둘 다 아니면**: 변경을 중단하고 사유를 proposal에 기록한다.