lee-spec-kit 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lee-spec-kit",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "description": "Project documentation structure generator for AI-assisted development",
5
5
  "type": "module",
6
6
  "bin": {
@@ -52,6 +52,8 @@ To avoid ambiguity, treat the following as the single source of truth (SSOT).
52
52
  - **Features (`docs/features/`)**: implementation scope/progress SSOT
53
53
  - `spec.md`: scope + `PRD Refs` (the PRD IDs this feature covers)
54
54
  - `tasks.md`: map each task line to PRD IDs via bracket tags like `[PRD-FR-001]`, or tag non-PRD tasks as `[NON-PRD]`
55
+ - Use `[NON-PRD]` only for internal work such as refactors, renames, tooling, tests, and cleanup.
56
+ - If a task changes user-facing behavior, acceptance criteria, or feature scope, backfill PRD first and tag the task as `[PRD-...]` instead of leaving it as `[NON-PRD]`.
55
57
  - For legacy docs without PRD IDs yet, backfill the source requirements doc first, then link the feature docs.
56
58
  - `decisions.md`: record changes/trade-offs/requirement changes (why it changed) with evidence links
57
59
 
@@ -64,6 +66,10 @@ When requirements/scope change, the “what to update” must be explicit in doc
64
66
  2. **If still in Idea stage**:
65
67
  - `docs/ideas/*.md`: update `PRD Refs` and in/out scope
66
68
  3. **If already a Feature**:
69
+ - If the change started as a `[NON-PRD]` task but becomes a user-facing requirement/scope change, convert it into PRD-backed work:
70
+ 1. backfill/update `docs/prd/*.md`
71
+ 2. update `spec.md` `PRD Refs`
72
+ 3. retag the task as `[PRD-...]` (or add a replacement task if needed)
67
73
  - `docs/features/.../spec.md`: update `PRD Refs` + reflect scope change summary
68
74
  - `docs/features/.../tasks.md`: add tasks for the change + tag each task as `[PRD-...]` or `[NON-PRD]`
69
75
  - `docs/features/.../plan.md`: update if architecture/testing strategy changed
@@ -41,8 +41,9 @@ Prohibited:
41
41
  - In non-approval state, do not append labels or `approvalRequest.finalPrompt` unless the user explicitly asked for current options.
42
42
  - If approval is still pending after answering an unrelated question, answer first, then re-open approval with the exact CLI-provided approval lines (`approvalRequest.userFacingLines`, or `actionOptions[*].approvalPrompt` + `approvalRequest.finalPrompt` in full `--json`).
43
43
  - If user input does not contain a valid label, do not execute; request label selection again.
44
- - For approved command options, prefer one-shot `flow --approve <LABEL> --execute`; do not split `context --approve` and `context --execute --ticket` across turns/sessions.
44
+ - For non-delegated command options, prefer one-shot `flow --approve <LABEL> --execute`; do not split `context --approve` and `context --execute --ticket` across turns/sessions.
45
45
  - If `matchedFeature.currentSubstateOwner="subagent"` and `agentOrchestration.subAgentHandoff.required=true` with `mode="command"`, delegation is mandatory: call `spawn_agent` first. Do not execute that command directly from the main agent.
46
+ - If that delegated command is handoff-only (`handoffOnly=true`, `advancesWorkflow=false`), treat `--execute` as handoff preparation only. Continue the delegated work immediately and do not re-approve the same label.
46
47
  - Do not delegate auto loops from `autoRun.available` alone. Delegate auto loops only when `agentOrchestration.subAgentHandoff.required=true` and `agentOrchestration.subAgentHandoff.mode="auto_run"`.
47
48
  - Prefer `agentOrchestration.subAgentHandoff` as the handoff SSOT. Pass only its minimal fields (`featureRef`, `category`, `cwd`, `cmd`) to the sub-agent.
48
49
  - For delegated runs, execute one-time verification from `subAgentHandoff.verify` (`pwd`, `git rev-parse --show-toplevel`) and cache by `verify.cacheKey`. If mismatched, stop and report; collect detailed logs only on mismatch.
@@ -42,7 +42,8 @@ Execute exactly one option from `👉 Next Options (Atomic)` as printed by the C
42
42
  - Treat `AUTO_MANUAL_REQUIRED` as an automation boundary (instruction-only segment), not an immediate crash. Re-check `context --json-compact` and report whether `approvalRequest.required` is now true.
43
43
  - If the CLI prints commands, copy/paste them. (In standalone setups commands may include `git -C ...` and scopes like `project`/`docs`.)
44
44
  - Follow `agents.md` **"Label Response Contract (SSOT)"**. Show label prompts only in approval-waiting state, and reuse the exact CLI-provided approval lines instead of paraphrasing them.
45
- - For approved command options, default to `npx lee-spec-kit flow <slug|F001|F001-slug> --approve <LABEL> --execute` and avoid split `context --approve` / `context --execute --ticket` runs across turns.
45
+ - For non-delegated command options, default to `npx lee-spec-kit flow <slug|F001|F001-slug> --approve <LABEL> --execute` and avoid split `context --approve` / `context --execute --ticket` runs across turns.
46
+ - If the current command is delegated (`matchedFeature.currentSubstateOwner="subagent"` and `agentOrchestration.subAgentHandoff.required=true` with `mode="command"`), call `spawn_agent` first and pass the handoff contract instead of executing that command from the main agent.
46
47
  - If `flow/context --execute --json` returns `approved_handoff_prepared`, stop re-approving the same label. Complete the delegated work first, then refresh context.
47
48
 
48
49
  ### Step 3: Update tasks.md (only what you did)
@@ -64,6 +64,8 @@ npx lee-spec-kit status --write
64
64
 
65
65
  - Assign stable requirement IDs in PRD docs (`docs/prd/*.md`) like `PRD-FR-001`.
66
66
  - Link each task line in `tasks.md` with a tag like `[PRD-FR-001]`. For non-PRD tasks, use `[NON-PRD]`.
67
+ - Use `[NON-PRD]` only for internal implementation work such as refactors, test-only work, tooling, renames, and cleanup.
68
+ - If a change affects user-facing behavior, acceptance criteria, or scope, update PRD first and retag the task as `[PRD-...]`.
67
69
  - Do not invent PRD IDs inside feature docs. Define them in the PRD source first, and backfill legacy docs before linking tasks.
68
70
  - Coverage report: `npx lee-spec-kit requirements` (alias: `npx lee-spec-kit prd`)
69
71
 
@@ -75,6 +77,10 @@ When things change mid-work, it must be explicit what was updated.
75
77
 
76
78
  - Record changes as **new tasks** (do not edit `[DONE]` tasks; create a new task instead).
77
79
  - Every change task must be tagged as `[PRD-...]` or `[NON-PRD]`. (Recommended: also add `[CHANGE]`.)
80
+ - If a change starts as internal exploration but ends up changing user-visible behavior, do not leave it as `[NON-PRD]`.
81
+ - Backfill/update `docs/prd/*.md`
82
+ - Update `spec.md` `PRD Refs`
83
+ - Retag the task as `[PRD-...]` or add a replacement PRD-backed task
78
84
  - If the change impacts PRD/spec/plan, update these too:
79
85
  - `docs/prd/*.md` (add/update/deprecate requirement IDs)
80
86
  - `spec.md` (`PRD Refs`, scope/AC)
@@ -59,3 +59,4 @@
59
59
  - Only list IDs that already exist in the source requirements doc. Do not invent PRD IDs in `spec.md` or `tasks.md`.
60
60
  - If this is a legacy requirements doc without PRD IDs yet, backfill IDs in the source first, then update this field and the `tasks.md` task tags together.
61
61
  - When requirements/scope change, update PRD docs + this field + `tasks.md` task tags together.
62
+ - If implementation discovers a better user-facing behavior and the shipped requirement changes, treat that as a PRD update, not a permanent `[NON-PRD]` exception.
@@ -10,6 +10,7 @@
10
10
  - **PRD mapping (recommended)**: add a PRD requirement ID tag like `[PRD-FR-001]` to each task line, or tag non-PRD tasks as `[NON-PRD]`.
11
11
  - Do not invent PRD IDs in `tasks.md`. Only reference IDs that already exist in `docs/prd` or the upstream requirements doc.
12
12
  - If this is a legacy feature without PRD IDs yet, backfill IDs in the source requirements doc first, then align `spec.md` `PRD Refs` and task tags together.
13
+ - `[NON-PRD]` is for internal implementation work only. If the task changes user-facing behavior, acceptance criteria, or scope, backfill PRD first and tag it as `[PRD-...]`.
13
14
 
14
15
  ---
15
16
 
@@ -60,6 +61,7 @@
60
61
  ```
61
62
 
62
63
  > `PRD-FR-001` in the example means an ID that already exists in the PRD source. If it is not defined yet, do not add it to tasks first.
64
+ > If a task began as exploration/internal work but became a product requirement change, update PRD first, then retag the task from `[NON-PRD]` to `[PRD-...]`.
63
65
 
64
66
  (Recommended) Requirement/scope change task:
65
67
 
@@ -74,6 +76,8 @@ Record mid-work changes as **new tasks**, and explicitly list which docs need up
74
76
  - decisions.md (why it changed + evidence)
75
77
  ```
76
78
 
79
+ > Use `[NON-PRD][CHANGE]` only when the change stays internal and does not alter user-visible requirements.
80
+
77
81
  ---
78
82
 
79
83
  ## Completion Criteria
@@ -8,31 +8,32 @@ Core rule: once an idea becomes a Feature, the SSOT moves to `docs/features/`.
8
8
 
9
9
  ## Conventions
10
10
 
11
- - 1 idea = 1 file (kebab-case recommended)
12
- - Example: `login-rate-limit.md`
13
- - Example: `admin-dashboard-metrics.md`
11
+ - 1 idea = 1 file
12
+ - CLI-generated ideas use indexed names like `I001-login-rate-limit.md`
13
+ - Legacy free-form names like `login-rate-limit.md` can still exist
14
14
  - Put at least these at the top:
15
+ - `Idea ID` (`I###` for indexed ideas)
15
16
  - Goal / context
16
17
  - Rough scope (what’s in/out)
17
18
  - PRD Refs (recommended): `PRD-FR-001, PRD-US-002` (use `NON-PRD` when not tied to PRD)
18
19
  - Target component (optional): `api` / `app` / `worker` / `all`
19
- - Status (recommended): `Active | Converted | Dropped`
20
+ - Status: `Active | Featureized | Dropped`
21
+ - Feature: `F###-slug` when promoted
20
22
  - Only list IDs that already exist in the source PRD/requirements doc. If IDs do not exist yet, backfill the source first.
21
23
 
22
24
  ---
23
25
 
24
26
  ## Promotion / Cleanup (Idea → Feature)
25
27
 
26
- 1. Create a Feature folder with `npx lee-spec-kit feature <name>`
27
- 2. In the new Feature, record all of the following:
28
- - Idea doc path in `spec.md` or `tasks.md` (example: `docs/ideas/login-rate-limit.md`)
29
- - `PRD Refs` in `spec.md` (example: `PRD-FR-001, PRD-US-002`)
30
- - PRD mapping tags in `tasks.md` task lines like `[PRD-FR-001]` (use `[NON-PRD]` for non-PRD tasks)
31
- 3. Remove the idea from the active list (choose one):
32
- - **Recommended**: move to `docs/ideas/archive/` and add `Status: Converted`, `Feature: F00X-...` on top
33
- - Or: delete it (only if you don’t need history)
28
+ 1. Create an idea doc with `npx lee-spec-kit idea <name>` when you want traceable intake.
29
+ 2. Promote it with `npx lee-spec-kit feature <name> --idea I001`
30
+ 3. In the new Feature, record all of the following:
31
+ - The source idea path is stamped into `spec.md` automatically when `--idea` is used.
32
+ - `PRD Refs` still need to be completed in `spec.md`.
33
+ - `tasks.md` still needs PRD mapping tags like `[PRD-FR-001]`.
34
+ 4. Keep the idea doc for history and update it to `Status: Featureized`, `Feature: F00X-...`
34
35
 
35
- > Tip: archiving is usually better than deleting for traceability (“why this feature exists”).
36
+ > Tip: keeping the source idea doc is usually better than deleting it for traceability (“why this feature exists”).
36
37
 
37
38
  ---
38
39
 
@@ -0,0 +1,36 @@
1
+ # Idea: {idea-name}
2
+
3
+ ---
4
+
5
+ ## Overview
6
+
7
+ - **Idea ID**: {idea-id}
8
+ - **Idea Name**: {idea-name}
9
+ - **Created**: {YYYY-MM-DD}
10
+ - **Status**: Active
11
+ - Values: Active | Featureized | Dropped
12
+ - **Feature**: -
13
+ - **PRD Refs**: -
14
+ - **Component**: {component}
15
+
16
+ ---
17
+
18
+ ## Context
19
+
20
+ {{description}}
21
+
22
+ (Why is this idea worth exploring?)
23
+
24
+ ---
25
+
26
+ ## Rough Scope
27
+
28
+ - In:
29
+ - Out:
30
+
31
+ ---
32
+
33
+ ## Promotion Notes
34
+
35
+ - What should stay true if this becomes a feature?
36
+ - What risks or unanswered questions remain?
@@ -52,6 +52,8 @@ npx lee-spec-kit context --json-compact
52
52
  - **Features (`docs/features/`)**: 구현 범위/진행 SSOT
53
53
  - `spec.md`: 범위 정의 + `PRD Refs`(기능이 커버하는 PRD ID 목록)
54
54
  - `tasks.md`: 태스크 단위로 PRD ID를 태그(`[PRD-FR-001]`)로 매핑하거나, PRD 무관 태스크는 `[NON-PRD]`로 표시
55
+ - `[NON-PRD]`는 refactor, rename, tooling, 테스트, cleanup 같은 내부 작업에만 사용합니다.
56
+ - 태스크가 사용자 동작, acceptance criteria, 기능 범위를 바꾸게 되면 `[NON-PRD]`로 끝내지 말고 PRD를 backfill한 뒤 `[PRD-...]`로 연결합니다.
55
57
  - 레거시 문서에 PRD ID가 없다면, 먼저 원문 요구사항 문서에 ID를 backfill한 뒤 Feature 문서를 연결합니다.
56
58
  - `decisions.md`: 변경/트레이드오프/요구사항 변경(왜 바뀌었는지) 기록 + Evidence 링크
57
59
 
@@ -64,6 +66,10 @@ npx lee-spec-kit context --json-compact
64
66
  2. **Idea 단계라면**:
65
67
  - `docs/ideas/*.md`: `PRD Refs` 및 범위(포함/제외) 갱신
66
68
  3. **Feature 단계라면**:
69
+ - 시작은 `[NON-PRD]`였더라도, 진행 중 사용자 요구/동작/범위 변경으로 바뀌었다면 PRD 기반 작업으로 승격합니다:
70
+ 1. `docs/prd/*.md` backfill/수정
71
+ 2. `spec.md`의 `PRD Refs` 갱신
72
+ 3. 해당 태스크를 `[PRD-...]`로 재태깅 (필요하면 대체 태스크 추가)
67
73
  - `docs/features/.../spec.md`: `PRD Refs` 갱신 + 스코프 변경 요약 반영
68
74
  - `docs/features/.../tasks.md`: 변경을 반영하는 새 태스크 추가 + 각 태스크에 `[PRD-...]` 또는 `[NON-PRD]` 태그 부여
69
75
  - `docs/features/.../plan.md`: 아키텍처/테스트 전략이 바뀌면 함께 갱신
@@ -41,8 +41,9 @@
41
41
  - 비승인 상태의 진행 보고/분석/일반 답변에서는 라벨 블록이나 `approvalRequest.finalPrompt`를 덧붙이지 않습니다. 현재 옵션을 사용자가 직접 물었을 때만 예외입니다.
42
42
  - 관련 없는 질문에 먼저 답한 뒤에도 승인이 여전히 필요하면, 답변 후 CLI가 준 승인 문구(`approvalRequest.userFacingLines`, 또는 전체 `--json`의 `actionOptions[*].approvalPrompt` + `approvalRequest.finalPrompt`)를 다시 제시합니다.
43
43
  - 사용자 입력에 유효 라벨이 없으면 실행하지 말고 라벨 선택을 다시 요청합니다.
44
- - 승인된 command 옵션 실행은 `flow --approve <LABEL> --execute` 1회 호출을 기본으로 하며, `context --approve`와 `context --execute --ticket`를 턴/세션 사이로 분리하지 않습니다.
44
+ - 위임 대상이 아닌 command 옵션은 `flow --approve <LABEL> --execute` 1회 호출을 기본으로 하며, `context --approve`와 `context --execute --ticket`를 턴/세션 사이로 분리하지 않습니다.
45
45
  - `matchedFeature.currentSubstateOwner="subagent"`이고 `agentOrchestration.subAgentHandoff.required=true`이며 `mode="command"`면 위임이 필수입니다. 먼저 `spawn_agent`를 호출하고, 해당 명령을 메인 에이전트에서 직접 실행하지 않습니다.
46
+ - 그 delegated command가 handoff-only(`handoffOnly=true`, `advancesWorkflow=false`)라면 `--execute`는 handoff 준비까지만 의미합니다. 바로 delegated work를 이어서 수행하고 같은 라벨을 다시 승인 루프로 열지 마세요.
46
47
  - `autoRun.available`만으로 auto 루프 위임을 결정하지 않습니다. `agentOrchestration.subAgentHandoff.required=true`이고 `agentOrchestration.subAgentHandoff.mode="auto_run"`일 때만 auto 루프를 서브 에이전트에 위임합니다.
47
48
  - 위임 시에는 `agentOrchestration.subAgentHandoff`를 handoff SSOT로 사용하고, 최소 필드(`featureRef`, `category`, `cwd`, `cmd`)만 전달합니다.
48
49
  - 위임 실행 전 `subAgentHandoff.verify`의 검증 명령(`pwd`, `git rev-parse --show-toplevel`)을 세션당 1회만 실행하고(`verify.cacheKey` 기준), 불일치 시 즉시 중단/보고합니다. 상세 로그 수집은 불일치 시에만 수행합니다.
@@ -42,7 +42,8 @@ CLI가 가리키는 **Active Task** 또는 **`👉 Next Options (Atomic)`의 단
42
42
  - `AUTO_MANUAL_REQUIRED`는 실패가 아니라 자동화 경계(현재 instruction-only 구간)입니다. 즉시 오류로 단정하지 말고 현재 `context --json-compact`를 다시 확인한 뒤 승인 필요 여부(`approvalRequest.required`)를 보고합니다.
43
43
  - CLI가 명령어를 출력하면 **그대로 복사해 실행**합니다. (standalone 환경에서도 레포 경로가 포함될 수 있습니다)
44
44
  - 사용자 응답 포맷은 `agents.md`의 **"라벨 응답 계약 (SSOT)"** 을 따릅니다. 라벨 문구는 승인 대기 상태에서만 보여주고, CLI가 준 승인 문구를 임의로 바꾸지 않습니다.
45
- - 승인된 command 옵션 실행은 `npx lee-spec-kit flow <slug|F001|F001-slug> --approve <LABEL> --execute`를 기본으로 사용하고, `context --approve`와 `context --execute --ticket` 분리 실행은 지양합니다.
45
+ - 위임 대상이 아닌 command 옵션 실행은 `npx lee-spec-kit flow <slug|F001|F001-slug> --approve <LABEL> --execute`를 기본으로 사용하고, `context --approve`와 `context --execute --ticket` 분리 실행은 지양합니다.
46
+ - 현재 command가 delegated 상태(`matchedFeature.currentSubstateOwner="subagent"` + `agentOrchestration.subAgentHandoff.required=true` + `mode="command"`)라면 메인 에이전트에서 직접 실행하지 말고 먼저 `spawn_agent`를 호출해 handoff 계약을 넘기세요.
46
47
  - `flow/context --execute --json` 결과가 `approved_handoff_prepared`이면 같은 라벨을 다시 승인 루프로 열지 말고, 먼저 delegated work를 완료한 뒤 context를 새로 확인합니다.
47
48
 
48
49
  ### 3단계: 기록 및 반복 (Record & Loop)
@@ -64,6 +64,8 @@ npx lee-spec-kit status --write
64
64
 
65
65
  - PRD 문서(`docs/prd/*.md`)에 `PRD-FR-001` 같은 요구사항 ID를 부여하세요.
66
66
  - `tasks.md`의 각 태스크 라인에 `[PRD-FR-001]` 태그로 연결하세요. PRD와 무관한 태스크는 `[NON-PRD]`를 사용하세요.
67
+ - `[NON-PRD]`는 refactor, 테스트 전용 작업, tooling, rename, cleanup 같은 내부 구현 작업에만 사용하세요.
68
+ - 변경이 사용자 동작, acceptance criteria, 범위를 바꾸면 PRD를 먼저 갱신하고 태스크도 `[PRD-...]`로 다시 연결하세요.
67
69
  - 단, 태스크 문서에서 PRD ID를 임의 생성하지 않습니다. 먼저 PRD 원문에 정의하고, 레거시 문서는 원문 ID backfill 후 연결하세요.
68
70
  - 커버리지 리포트: `npx lee-spec-kit requirements` (alias: `npx lee-spec-kit prd`)
69
71
 
@@ -75,6 +77,10 @@ npx lee-spec-kit status --write
75
77
 
76
78
  - 변경은 **새 태스크로 추가**합니다. (`[DONE]` 태스크를 고치지 말고 새 태스크를 만드세요)
77
79
  - 변경 태스크에는 `[PRD-...]` 또는 `[NON-PRD]` 태그를 반드시 붙입니다. (권장: `[CHANGE]` 태그 추가)
80
+ - 내부 검토로 시작했더라도, 최종적으로 사용자 요구/동작 변경이 되면 `[NON-PRD]`로 남기지 않습니다.
81
+ - `docs/prd/*.md`를 backfill/수정
82
+ - `spec.md`의 `PRD Refs` 갱신
83
+ - 태스크를 `[PRD-...]`로 재태깅하거나 대체 태스크 추가
78
84
  - 변경이 PRD/스펙/설계에 영향을 주면 아래도 함께 갱신합니다:
79
85
  - `docs/prd/*.md` (요구사항 ID 추가/수정/Deprecated)
80
86
  - `spec.md` (`PRD Refs`, 스코프/AC)
@@ -59,3 +59,4 @@
59
59
  - 이미 원문 요구사항 문서에 정의된 ID만 적으세요. `spec.md`나 `tasks.md`에서 임의로 PRD ID를 만들지 않습니다.
60
60
  - 레거시 요구사항 문서에 아직 PRD ID가 없다면, 먼저 원문에 ID를 backfill한 뒤 이 필드와 `tasks.md` 태스크 태그를 함께 갱신하세요.
61
61
  - 요구사항/스코프 변경 시 PRD 문서 + 이 필드 + `tasks.md` 태스크 태그를 함께 갱신하세요.
62
+ - 구현 중 더 나은 사용자 동작이 발견되어 최종 요구사항이 바뀌었다면, 이를 영구적인 `[NON-PRD]` 예외로 두지 말고 PRD 업데이트로 취급하세요.
@@ -10,6 +10,7 @@
10
10
  - **PRD 매핑(권장)**: 각 태스크 라인에 `[PRD-FR-001]` 같은 PRD 요구사항 ID 태그를 추가하거나, PRD와 무관한 태스크는 `[NON-PRD]`로 표시하세요.
11
11
  - 단, `tasks.md`에서 PRD ID를 임의로 만들지 마세요. `docs/prd` 또는 상위 요구사항 문서에 먼저 정의된 ID만 참조해야 합니다.
12
12
  - 레거시 문서에 아직 PRD ID가 없다면, 먼저 원문 요구사항 문서에 ID를 backfill한 뒤 `spec.md`의 `PRD Refs`와 태스크 태그를 함께 맞추세요.
13
+ - `[NON-PRD]`는 내부 구현 작업 전용입니다. 사용자 동작, acceptance criteria, 범위가 바뀌는 태스크라면 PRD를 먼저 backfill하고 `[PRD-...]`로 태깅하세요.
13
14
 
14
15
  ---
15
16
 
@@ -60,6 +61,7 @@
60
61
  ```
61
62
 
62
63
  > 위 예시의 `PRD-FR-001`은 이미 PRD 원문에 존재하는 ID를 뜻합니다. 아직 정의되지 않았다면 태스크에 먼저 넣지 마세요.
64
+ > 처음엔 탐색/내부 작업이었더라도 제품 요구사항 변경으로 이어졌다면, `NON-PRD`로 두지 말고 PRD를 먼저 갱신한 뒤 `[PRD-...]`로 재태깅하세요.
63
65
 
64
66
  (권장) 요구사항/범위 변경 태스크:
65
67
 
@@ -74,6 +76,8 @@
74
76
  - decisions.md (변경 사유 + Evidence)
75
77
  ```
76
78
 
79
+ > `[NON-PRD][CHANGE]`는 내부 변경으로 끝날 때만 사용하세요. 사용자에게 보이는 요구사항 변경이면 PRD backfill이 먼저입니다.
80
+
77
81
  ---
78
82
 
79
83
  ## 완료 조건
@@ -8,31 +8,32 @@ Feature로 발전하기 전의 아이디어 / To-do / 실험 기록을 모아두
8
8
 
9
9
  ## 작성 규칙
10
10
 
11
- - 1 아이디어 = 1 파일 (kebab-case 권장)
12
- - 예: `login-rate-limit.md`
13
- - 예: `admin-dashboard-metrics.md`
11
+ - 1 아이디어 = 1 파일
12
+ - CLI로 생성한 문서는 `I001-login-rate-limit.md` 같은 indexed 이름을 사용합니다
13
+ - 기존의 `login-rate-limit.md` 같은 자유 형식 파일도 유지할 수 있습니다
14
14
  - 상단에 최소한 아래 메타 정보를 둡니다:
15
+ - `Idea ID` (`I###` 형식의 indexed idea인 경우)
15
16
  - 목적/배경
16
17
  - 대략 범위(뭘 할지/안 할지)
17
18
  - PRD Refs(권장): `PRD-FR-001, PRD-US-002` (PRD와 무관하면 `NON-PRD` 명시)
18
19
  - 대상 컴포넌트(필요 시): `api` / `app` / `worker` / `all`
19
- - 상태(권장): `Active | Converted | Dropped`
20
+ - 상태: `Active | Featureized | Dropped`
21
+ - Feature: 승격되면 `F###-slug`
20
22
  - `PRD Refs`에는 이미 원문 PRD/요구사항 문서에 정의된 ID만 적습니다. 아직 ID가 없다면 원문부터 backfill하세요.
21
23
 
22
24
  ---
23
25
 
24
26
  ## 승격/정리 규칙 (Idea → Feature)
25
27
 
26
- 1. `npx lee-spec-kit feature <name>`로 Feature 폴더 생성
27
- 2. Feature 아래를 모두 남깁니다
28
- - `spec.md` 또는 `tasks.md`에 아이디어 문서 경로 (예: `docs/ideas/login-rate-limit.md`)
29
- - `spec.md`의 `PRD Refs`(예: `PRD-FR-001, PRD-US-002`)
30
- - `tasks.md` 태스크 라인에 `[PRD-FR-001]` 같은 PRD ID 태그 (PRD와 무관한 태스크는 `[NON-PRD]`)
31
- 3. 아이디어 문서는 **목록에서 제거**합니다 ( 중 하나 선택):
32
- - **권장**: `docs/ideas/archive/`로 이동 상단에 `Status: Converted`, `Feature: F00X-...` 기록
33
- - 또는: 완전히 삭제 (히스토리가 필요 없을 때만)
28
+ 1. 추적 가능한 intake가 필요하면 `npx lee-spec-kit idea <name>`로 아이디어 문서를 먼저 만듭니다
29
+ 2. Feature 승격 `npx lee-spec-kit feature <name> --idea I001`를 사용합니다
30
+ 3. `--idea`를 사용하면 새 Feature의 `spec.md`에 source idea 경로가 자동 기록됩니다
31
+ 4. 승격 후에도 다음은 직접 채워야 합니다
32
+ - `spec.md`의 `PRD Refs`
33
+ - `tasks.md` 태스크 라인의 PRD ID 태그(`[PRD-FR-001]` )
34
+ 5. 아이디어 문서는 삭제하지 말고 `Status: Featureized`, `Feature: F00X-...`로 남기는 것을 권장합니다
34
35
 
35
- > 💡 완전 삭제 대신 archive를 권장합니다: “왜 이 Feature가 생겼는지” 추적에 도움이 됩니다.
36
+ > 💡 source idea 문서를 남겨두면 “왜 이 Feature가 생겼는지” 추적하기 쉽습니다.
36
37
 
37
38
  ---
38
39
 
@@ -0,0 +1,36 @@
1
+ # Idea: {idea-name}
2
+
3
+ ---
4
+
5
+ ## 개요
6
+
7
+ - **Idea ID**: {idea-id}
8
+ - **Idea Name**: {idea-name}
9
+ - **Created**: {YYYY-MM-DD}
10
+ - **Status**: Active
11
+ - 값: Active | Featureized | Dropped
12
+ - **Feature**: -
13
+ - **PRD Refs**: -
14
+ - **Component**: {component}
15
+
16
+ ---
17
+
18
+ ## 배경
19
+
20
+ {{description}}
21
+
22
+ (왜 이 아이디어를 검토할 가치가 있는지)
23
+
24
+ ---
25
+
26
+ ## 대략 범위
27
+
28
+ - In:
29
+ - Out:
30
+
31
+ ---
32
+
33
+ ## 승격 메모
34
+
35
+ - Feature가 되어도 유지되어야 할 점은 무엇인가?
36
+ - 아직 남아 있는 리스크나 미해결 질문은 무엇인가?