plan · diff

git:20260803.49f7d30 to git:20260803.a6e7ed0

7 added, 7 removed. Audit A to A.

---
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만이 그 과정을 보존한다.
+ squash merge는 branch history를 지운다. 변경의 intent와 design은 이 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다.
+ task에는 close 전에 done이 되는 작업만 적는다. 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까지 수정한다.
+ 이 ERROR는 그 class의 정상 동작이라 fix 대상이 아니다. 그 외의 지적은 전부 green까지
+ 수정한다.
- 4. 즉시 `tx:apply`로 이어간다. plan은 구현의 시작이지 정지점이 아니다.
+ 4. 즉시 `tx:apply`로 이어간다. plan은 정지점이 아니다.
# Unknown 처리
계획 중 만나는 모든 unknown은 셋 중 하나로 처리한다:
- **measurable하면**: 측정하고 결과를 기록한다.
- **reversible하면**: assumption을 채택하고 design에 명시한다.
- **둘 다 아니면**: 변경을 중단하고 사유를 proposal에 기록한다.