lee-spec-kit 0.7.8 โ†’ 0.7.9

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.8",
3
+ "version": "0.7.9",
4
4
  "description": "Agent-guided development harness CLI for spec-driven projects",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,9 @@ npx lee-spec-kit context --json-compact
16
16
  ```
17
17
 
18
18
  - Apply lee-spec-kit workflow only when `isLeeSpecKitProject: true`.
19
- - When `actionOptions` exist, show `approvalPrompt`/`finalPrompt` exactly as provided and wait for user approval (`<LABEL>` or `<LABEL> OK`) before execution.
19
+ - Determine approval waiting only from the latest `context --json-compact` / `flow --json-compact`.
20
+ - When `approvalRequest.required=true`, show `approvalPrompt`/`finalPrompt` exactly as provided and wait for user approval (`<LABEL>` or `<LABEL> OK`) before execution.
21
+ - When `approvalRequest.required=false`, do not invent a separate label approval prompt.
20
22
  - If `isLeeSpecKitProject: false`, skip lee-spec-kit-specific flow and continue with normal workflow.
21
23
 
22
24
  ## New Project Start Order
@@ -113,7 +115,13 @@ When you run `lee-spec-kit init`, it creates `.lee-spec-kit.json` in the docs ro
113
115
  - `docsRepo` ("embedded" | "standalone"): How docs are managed
114
116
  - `pushDocs` (boolean, optional): Only written when `docsRepo: "standalone"` (whether to push to remote)
115
117
  - `docsRemote` (string, optional): Only written when `pushDocs: true` (remote repo URL)
116
- - `approval` (object, optional): Override `[CHECK required]` / `requiresUserCheck` policy in `context` output (approval token: `A`, accepted: `A`/`A OK`)
118
+ - `approval` (object, optional): Override `[CHECK required]` / `requiresUserCheck` policy in `context` output
119
+ - Current default:
120
+ - `mode: "category"`
121
+ - `default: "skip"`
122
+ - `requireCheckCategories: ["spec_approve", "implementation_approve"]`
123
+ - Approval token: `A`
124
+ - Accepted replies: `A`, `A OK`
117
125
  - `allowedDocsEntries` (object, optional): Allowlist non-standard top-level docs entries so they are not treated as unmanaged docs
118
126
  - `dirs` (string[]): extra allowed directories directly under `docs/`
119
127
  - `files` (string[]): extra allowed files directly under `docs/`
@@ -130,7 +138,11 @@ When you run `lee-spec-kit init`, it creates `.lee-spec-kit.json` in the docs ro
130
138
  "allowedDocsEntries": {
131
139
  "dirs": ["plans"]
132
140
  },
133
- "approval": { "mode": "builtin" }
141
+ "approval": {
142
+ "mode": "category",
143
+ "default": "skip",
144
+ "requireCheckCategories": ["spec_approve", "implementation_approve"]
145
+ }
134
146
  }
135
147
  ```
136
148
 
@@ -143,6 +155,10 @@ When you run `lee-spec-kit init`, it creates `.lee-spec-kit.json` in the docs ro
143
155
  "docsRepo": "standalone",
144
156
  "pushDocs": true,
145
157
  "docsRemote": "git@github.com:org/{{projectName}}-docs.git",
146
- "approval": { "mode": "builtin" }
158
+ "approval": {
159
+ "mode": "category",
160
+ "default": "skip",
161
+ "requireCheckCategories": ["spec_approve", "implementation_approve"]
162
+ }
147
163
  }
148
164
  ```
@@ -5,20 +5,22 @@ This document covers **policy only**.
5
5
 
6
6
  ---
7
7
 
8
- ## ๐Ÿšจ User Approval Required (MUST)
8
+ ## ๐Ÿšจ User Approval Handling (MUST)
9
9
 
10
- > โš ๏ธ The actions below require explicit user approval when they are at an approval boundary.
10
+ > โš ๏ธ Do not decide approval only from the action type. Workflow approval-waiting is determined by the latest `context --json-compact` / `flow --json-compact` output.
11
11
  > โœ… In approval-waiting state, replies must be in `<label>` or `<label> OK` format (e.g. `A`, `A OK`).
12
-
13
- | Action | When to confirm | What to share |
14
- | --- | --- | --- |
15
- | Spec writing | After writing `spec.md` | Full spec content |
16
- | Task execution | Before each task | Task title |
17
- | Commit creation | Before `git commit` | Commit message, included files |
18
- | Issue creation | Before `npx lee-spec-kit github issue <featureRef> --create` | Title, body, labels |
19
- | PR creation | Before `npx lee-spec-kit github pr <featureRef> --create` | Title, body, labels |
20
- | Assignee change | When assigning someone else | Target username |
21
- | Remote Git operations | Before `push`, `merge` (including merge commits) | Branch, changes |
12
+ > โ„น๏ธ Under the default policy, the main workflow approval boundaries are `spec_approve` and `implementation_approve`. Project config may add more.
13
+ > โ„น๏ธ Some direct remote helper commands still require explicit command confirmation such as `--confirm OK`; that command-level confirm is separate from label-gated workflow approval.
14
+
15
+ If the current action is approval-waiting, share the matching details before execution:
16
+
17
+ | Current action (examples) | What to share |
18
+ | --- | --- |
19
+ | Spec / plan / tasks review | The document or the exact section being reviewed |
20
+ | Task completion / final checklist | Outcome and verification evidence |
21
+ | Commit / push / merge | Commit message, included files, branch |
22
+ | Issue / PR creation | Title, body, labels |
23
+ | Assignee change | Target username |
22
24
 
23
25
  Approval flow:
24
26
  1. Share details first
@@ -8,7 +8,7 @@ Execution-state SSOT is the feature-local `issue.md`.
8
8
  ## Prerequisites
9
9
 
10
10
  - [ ] `spec.md` completed
11
- - [ ] User approval received
11
+ - [ ] Latest `context --json-compact` checked
12
12
 
13
13
  ---
14
14
 
@@ -38,22 +38,29 @@ Use `issue.md` status (`Draft | Ready`) as the actual workflow state.
38
38
  | Labels | `enhancement`, `bug`, `documentation`, etc. |
39
39
  | Assignee | `@me` (default) |
40
40
 
41
- ### 2. Request User Approval + Move to `Ready`
41
+ ### 2. Move to `Ready` (request approval only when context requires it)
42
42
 
43
- > ๐Ÿšจ **User Approval Required**
43
+ > โš ๏ธ **Workflow label approval is conditional**
44
44
 
45
- Share the `issue.md` draft and wait for label approval (`A` or `A OK`):
45
+ Share the `issue.md` draft:
46
46
 
47
47
  - Title
48
48
  - Full body draft (from `issue.md`)
49
49
  - Labels
50
50
 
51
- After approval, set `issue.md` status to `Ready`.
51
+ Then re-check the latest `npx lee-spec-kit context --json-compact`.
52
+
53
+ - If `approvalRequest.required=true`, show the exact CLI-provided approval lines and wait for a label reply (`A` or `A OK`) before continuing.
54
+ - If `approvalRequest.required=false`, do not invent a separate label prompt; refine the draft and set `issue.md` status to `Ready`.
52
55
 
53
56
  ### 3. Create Issue (when `issue.md` is `Ready`)
54
57
 
55
58
  Remote issue creation must use the lee-spec-kit helper.
56
59
  Do not call `gh issue create` directly or pass raw `issue.md` to `--body-file`.
60
+ Command-level remote confirmation is still required even when workflow label approval is not:
61
+
62
+ - share the final title/body/labels with the user
63
+ - then run the helper with `--confirm OK`
57
64
 
58
65
  ```bash
59
66
  npx lee-spec-kit github issue F001 --create --confirm OK --labels enhancement
@@ -69,5 +76,6 @@ After creation:
69
76
 
70
77
  - **Draft generator**: `npx lee-spec-kit github issue <feature-name>`
71
78
  - **Remote creation rule**: must use `npx lee-spec-kit github issue <feature-name> --create --confirm OK --labels ...`
72
- - **Approval rule**: share title/body/labels first, then run `--create --confirm OK`
79
+ - **Workflow approval rule**: only wait for label approval when `approvalRequest.required=true`
80
+ - **Remote confirm rule**: share title/body/labels first, then run `--create --confirm OK`
73
81
  - **Execution-state SSOT**: `docs/features/.../<feature>/issue.md`
@@ -145,23 +145,31 @@ echo \"![](https://github.com/${REPO}/releases/download/${TAG}/ui-1.png)\"
145
145
  - Write a Mermaid **`sequenceDiagram`** in the PR body and keep it aligned with the generated body template format.
146
146
  - Apply this rule based on change type (logic/structure), not by frontend/backend classification.
147
147
 
148
- ### 4. Request User Approval + Move to `Ready`
148
+ ### 4. Move to `Ready` (request approval only when context requires it)
149
149
 
150
- > ๐Ÿšจ **User Approval Required**
150
+ > โš ๏ธ **Workflow label approval is conditional**
151
151
 
152
- Before creating the PR, share the following **in a code block** and, if approval is currently required, wait for the CLI-provided `<LABEL>` or `<LABEL> OK` reply:
152
+ Before creating the PR, share the following **in a code block**:
153
153
 
154
154
  - Title
155
155
  - Full body template (from `pr.md`)
156
156
  - Labels (at least 1; cannot be empty)
157
157
 
158
- Before approval/create, refine `pr.md` Changes/Tests sections based on actual work.
159
- After approval, set `pr.md` status to `Ready`.
158
+ Then re-check the latest `npx lee-spec-kit context --json-compact`.
159
+
160
+ - If `approvalRequest.required=true`, wait for the exact CLI-provided `<LABEL>` or `<LABEL> OK` reply.
161
+ - If `approvalRequest.required=false`, do not invent a separate label prompt.
162
+
163
+ Before moving on, refine `pr.md` Changes/Tests sections based on actual work and set `pr.md` status to `Ready`.
160
164
 
161
165
  ### 5. Create PR (when `pr.md` is `Ready`)
162
166
 
163
167
  Remote PR creation must use the lee-spec-kit helper.
164
168
  Do not call `gh pr create` directly or pass raw `pr.md` to `--body-file`.
169
+ Command-level remote confirmation is still required even when workflow label approval is not:
170
+
171
+ - share the final title/body/labels with the user
172
+ - then run the helper with `--confirm OK`
165
173
 
166
174
  ```bash
167
175
  npx lee-spec-kit github pr F001 --create --confirm OK --labels enhancement
@@ -213,5 +221,6 @@ Use **current branch name** for file links in PR body:
213
221
 
214
222
  - **Body template generator**: `npx lee-spec-kit github pr <feature-name>`
215
223
  - **Remote creation rule**: must use `npx lee-spec-kit github pr <feature-name> --create --confirm OK --labels ...`
216
- - **Approval rule**: share title/body/labels first, then run `--create --confirm OK`
224
+ - **Workflow approval rule**: only wait for label approval when `approvalRequest.required=true`
225
+ - **Remote confirm rule**: share title/body/labels first, then run `--create --confirm OK`
217
226
  - **Execution-state SSOT**: `docs/features/.../<feature>/pr.md`
@@ -53,7 +53,8 @@ Keep `tasks.md` aligned with reality.
53
53
 
54
54
  - Do not mark `[DONE]` without actually completing the work and verifying criteria.
55
55
  - If you need to change a completed task, add a new task instead of rewriting history.
56
- - If you need to add a new task, prefer `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001`.
56
+ - If you need to add a new task, prefer `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001 --acceptance "..." --check "..."`.
57
+ - Do not leave placeholder `Acceptance` / `Checklist` items in a newly added task. `task-run` will block until those fields contain concrete execution/verification items.
57
58
  - If manual editing is unavoidable, append the new task directly below the last existing task block in the `Task List` section.
58
59
  - Do not insert it near the current task or right before `Completion Criteria` / the next `##` heading.
59
60
 
@@ -87,10 +88,10 @@ Use the featureโ€™s `decisions.md` template format as final SSOT. (Context/Const
87
88
  ### Step 3.5: Commit per task (important)
88
89
 
89
90
  - Complete **only one task at a time** (do not batch-finish multiple tasks in one commit).
90
- - After you share the outcome/verification, mark the task `[DONE]` (and update any checklist items). If approval is required (`approvalRequest.required=true`), reuse the exact CLI-provided approval lines and wait for a `<LABEL>` or `<LABEL> OK` reply first. If approval is not required, do not invent a separate approval prompt before marking `[DONE]`.
91
+ - After you share the outcome/verification, mark the task `[DONE]` and update the task-local checklist items in the same edit. `task-complete` will reject `[DONE]` if unchecked checklist boxes remain. If approval is required (`approvalRequest.required=true`), reuse the exact CLI-provided approval lines and wait for a `<LABEL>` or `<LABEL> OK` reply first. If approval is not required, do not invent a separate approval prompt before marking `[DONE]`.
91
92
  - In `tasks.md` test logs, keep one entry per test command and update its date/result on reruns (do not keep appending duplicates). Use `YYYY-MM-DD` in local date.
92
93
  - If `context` shows `[CHECK required]`, for commits/push/merge, **share the commit message + included files and wait for the latest CLI-provided label reply** before running the commands.
93
- - Once all tasks are `[DONE]`, share the "Completion Criteria" checklist with the user. If that point is approval-waiting, get a `<LABEL>` or `<LABEL> OK` reply before checking it; otherwise get a normal confirmation reply. (especially the **Final user approval received** item).
94
+ - Once all tasks are `[DONE]`, share the "Completion Criteria" checklist with the user. If that point is approval-waiting, get a `<LABEL>` or `<LABEL> OK` reply before checking it; otherwise get a normal confirmation reply. (especially the final outcome/user confirmation item).
94
95
  - Note: both progress approval and final approval must follow the current `approvalRequest.required` state. When approval is label-gated, always use label replies instead of standalone `OK` as the approval token.
95
96
 
96
97
  ### Step 4: Repeat
@@ -3,9 +3,12 @@
3
3
  ## Task Rules
4
4
 
5
5
  - **Status**: `[TODO]` โ†’ `[DOING]` โ†’ `[DONE]`
6
- - **Approvals**:
7
- - `[TODO] โ†’ [DOING]`: share task title first + user approval (OK)
8
- - `[DOING] โ†’ [DONE]`: share result/verification first + user approval (OK)
6
+ - **Task communication / confirmation**:
7
+ - `[TODO] โ†’ [DOING]`: share the task title first, then follow the latest `context --json-compact`
8
+ - `[DOING] โ†’ [DONE]`: share the result/verification first, then follow the latest `context --json-compact`
9
+ - If `approvalRequest.required=true`, wait for the exact CLI-provided label reply before changing task state.
10
+ - If `approvalRequest.required=false`, do not invent a separate `OK` approval step; update task state after real completion/verification.
11
+ - `task-complete` rejects `[DONE]` while any item in that task's `Checklist` remains unchecked.
9
12
  - **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]`.
10
13
  - Do not invent PRD IDs in `tasks.md`. Only reference IDs that already exist in `docs/prd` or the upstream requirements doc.
11
14
  - 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.
@@ -63,7 +66,8 @@
63
66
 
64
67
  > Add tasks below. **At least 1 task is required.**
65
68
  > Keep tasks as one ordered list. The list order itself is the execution priority.
66
- > To add a new task, prefer `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001`.
69
+ > To add a new task, prefer `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001 --acceptance "..." --check "..."`.
70
+ > Do not leave placeholder `Acceptance` / `Checklist` content in place. `task-run` will block execution until those items are concrete.
67
71
  > If you must edit manually, append it below the last existing task block in `Task List` instead of inserting it near the current task or right before `Completion Criteria`.
68
72
 
69
73
  ---
@@ -74,7 +78,7 @@
74
78
 
75
79
  - [ ] All tasks are `[DONE]`, and each task's `Acceptance` is verified and `Checklist` is checked
76
80
  - [ ] Tests executed and passing (record command/result below)
77
- - [ ] Final user approval (OK) received (review the outcome)
81
+ - [ ] Final outcome shared and user confirmation recorded according to the current `context` approval state
78
82
 
79
83
  ### Test Run Log (Latest by Command)
80
84
 
@@ -16,7 +16,9 @@ npx lee-spec-kit context --json-compact
16
16
  ```
17
17
 
18
18
  - `isLeeSpecKitProject: true`์ผ ๋•Œ๋งŒ lee-spec-kit ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
19
- - `actionOptions`๊ฐ€ ์žˆ์œผ๋ฉด `approvalPrompt`/`finalPrompt`๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ์Šน์ธ(`<LABEL>` ๋˜๋Š” `<LABEL> OK`)์„ ๋ฐ›์€ ๋’ค ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
19
+ - ์Šน์ธ ๋Œ€๊ธฐ ์—ฌ๋ถ€๋Š” ํ•ญ์ƒ ์ตœ์‹  `context --json-compact` / `flow --json-compact`๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
20
+ - `approvalRequest.required=true`์ผ ๋•Œ๋งŒ `approvalPrompt`/`finalPrompt`๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ์Šน์ธ(`<LABEL>` ๋˜๋Š” `<LABEL> OK`)์„ ๋ฐ›์€ ๋’ค ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
21
+ - `approvalRequest.required=false`์ด๋ฉด ๋ณ„๋„ ๋ผ๋ฒจ ์Šน์ธ ๋ฌธ๊ตฌ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
20
22
  - `isLeeSpecKitProject: false`๋ฉด lee-spec-kit ์ „์šฉ ์ ˆ์ฐจ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์ผ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
21
23
 
22
24
  ## ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์ˆœ์„œ
@@ -113,7 +115,13 @@ npx lee-spec-kit context --json-compact
113
115
  - `docsRepo` ("embedded" | "standalone"): Docs ๊ด€๋ฆฌ ๋ฐฉ์‹
114
116
  - `pushDocs` (boolean, optional): `docsRepo: "standalone"`์ผ ๋•Œ๋งŒ ์ƒ์„ฑ (์›๊ฒฉ push ์—ฌ๋ถ€)
115
117
  - `docsRemote` (string, optional): `pushDocs: true`์ผ ๋•Œ๋งŒ ์ƒ์„ฑ (์›๊ฒฉ ๋ ˆํฌ URL)
116
- - `approval` (object, optional): `context` ์ถœ๋ ฅ์˜ `[ํ™•์ธ ํ•„์š”]` / `requiresUserCheck` ์ •์ฑ… ์˜ค๋ฒ„๋ผ์ด๋“œ (์Šน์ธ ํ† ํฐ: `A`, ํ—ˆ์šฉ: `A`/`A OK`)
118
+ - `approval` (object, optional): `context` ์ถœ๋ ฅ์˜ `[ํ™•์ธ ํ•„์š”]` / `requiresUserCheck` ์ •์ฑ… ์˜ค๋ฒ„๋ผ์ด๋“œ
119
+ - ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’:
120
+ - `mode: "category"`
121
+ - `default: "skip"`
122
+ - `requireCheckCategories: ["spec_approve", "implementation_approve"]`
123
+ - ์Šน์ธ ํ† ํฐ: `A`
124
+ - ํ—ˆ์šฉ ์‘๋‹ต: `A`, `A OK`
117
125
  - `allowedDocsEntries` (object, optional): ๋น„ํ‘œ์ค€ `docs/` top-level ์—”ํŠธ๋ฆฌ๋ฅผ unmanaged docs๋กœ ๋ณด์ง€ ์•Š๋„๋ก ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€
118
126
  - `dirs` (string[]): `docs/` ๋ฐ”๋กœ ์•„๋ž˜์— ์ถ”๊ฐ€ ํ—ˆ์šฉํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ
119
127
  - `files` (string[]): `docs/` ๋ฐ”๋กœ ์•„๋ž˜์— ์ถ”๊ฐ€ ํ—ˆ์šฉํ•  ํŒŒ์ผ
@@ -130,7 +138,11 @@ npx lee-spec-kit context --json-compact
130
138
  "allowedDocsEntries": {
131
139
  "dirs": ["plans"]
132
140
  },
133
- "approval": { "mode": "builtin" }
141
+ "approval": {
142
+ "mode": "category",
143
+ "default": "skip",
144
+ "requireCheckCategories": ["spec_approve", "implementation_approve"]
145
+ }
134
146
  }
135
147
  ```
136
148
 
@@ -143,6 +155,10 @@ npx lee-spec-kit context --json-compact
143
155
  "docsRepo": "standalone",
144
156
  "pushDocs": true,
145
157
  "docsRemote": "git@github.com:org/{{projectName}}-docs.git",
146
- "approval": { "mode": "builtin" }
158
+ "approval": {
159
+ "mode": "category",
160
+ "default": "skip",
161
+ "requireCheckCategories": ["spec_approve", "implementation_approve"]
162
+ }
147
163
  }
148
164
  ```
@@ -5,20 +5,22 @@
5
5
 
6
6
  ---
7
7
 
8
- ## ๐Ÿšจ ์‚ฌ์šฉ์ž ํ™•์ธ ํ•„์ˆ˜ ๊ทœ์น™ (MUST)
8
+ ## ๐Ÿšจ ์‚ฌ์šฉ์ž ์Šน์ธ ์ฒ˜๋ฆฌ ๊ทœ์น™ (MUST)
9
9
 
10
- > โš ๏ธ ์•„๋ž˜ ์ž‘์—…์€ ์‚ฌ์šฉ์ž ์Šน์ธ ๊ฒฝ๊ณ„์— ํ•ด๋‹นํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ ์Šน์ธ ํ›„์—๋งŒ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
10
+ > โš ๏ธ ์•ก์…˜ ์ข…๋ฅ˜๋งŒ ๋ณด๊ณ  ์Šน์ธ ํ•„์š” ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜์ง€ ๋งˆ์„ธ์š”. workflow ์Šน์ธ ๋Œ€๊ธฐ ์—ฌ๋ถ€๋Š” ํ•ญ์ƒ ์ตœ์‹  `context --json-compact` / `flow --json-compact` ์ถœ๋ ฅ์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
11
11
  > โœ… ์Šน์ธ ๋Œ€๊ธฐ ์ƒํƒœ์—์„œ๋Š” ์‘๋‹ต ํ˜•์‹์ด ํ•ญ์ƒ `<๋ผ๋ฒจ>` ๋˜๋Š” `<๋ผ๋ฒจ> OK` ํ˜•์‹(์˜ˆ: `A`, `A OK`)์ž…๋‹ˆ๋‹ค.
12
-
13
- | ์ž‘์—… | ํ™•์ธ ์‹œ์  | ๊ณต์œ  ๋‚ด์šฉ |
14
- | --- | --- | --- |
15
- | ์ŠคํŽ™ ์ž‘์„ฑ | `spec.md` ์ž‘์„ฑ ํ›„ | ์ŠคํŽ™ ๋‚ด์šฉ ์ „๋ฌธ |
16
- | ํƒœ์Šคํฌ ์‹คํ–‰ | ๊ฐ ํƒœ์Šคํฌ ์‹œ์ž‘ ์ „ | ํƒœ์Šคํฌ ์ œ๋ชฉ |
17
- | ์ปค๋ฐ‹ ์ƒ์„ฑ | `git commit` ์ „ | ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€, ํฌํ•จ ํŒŒ์ผ ๋ชฉ๋ก |
18
- | ์ด์Šˆ ์ƒ์„ฑ | `npx lee-spec-kit github issue <featureRef> --create` ์ „ | ์ œ๋ชฉ, ๋ณธ๋ฌธ, ๋ผ๋ฒจ |
19
- | PR ์ƒ์„ฑ | `npx lee-spec-kit github pr <featureRef> --create` ์ „ | ์ œ๋ชฉ, ๋ณธ๋ฌธ, ๋ผ๋ฒจ |
20
- | Assignee ๋ณ€๊ฒฝ | ๋ณธ์ธ ์™ธ ์ง€์ • ์‹œ | ๋Œ€์ƒ ์‚ฌ์šฉ์ž๋ช… |
21
- | Git ์›๊ฒฉ ์ž‘์—… | `push`, `merge` ์ „ (๋จธ์ง€ ์ปค๋ฐ‹ ํฌํ•จ) | ๋ธŒ๋žœ์น˜, ๋ณ€๊ฒฝ ์‚ฌํ•ญ |
12
+ > โ„น๏ธ ๊ธฐ๋ณธ ์ •์ฑ…์—์„œ ์ฃผ์š” workflow ์Šน์ธ ๊ฒฝ๊ณ„๋Š” `spec_approve`, `implementation_approve` ๋‘ ๊ณณ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ config๊ฐ€ ์ถ”๊ฐ€ ๊ฒฝ๊ณ„๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
13
+ > โ„น๏ธ ์ผ๋ถ€ ์›๊ฒฉ helper ๋ช…๋ น์€ `--confirm OK` ๊ฐ™์€ ๋ช…์‹œ ํ™•์ธ์„ ๋ณ„๋„๋กœ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด command-level confirm์€ ๋ผ๋ฒจ ๊ธฐ๋ฐ˜ workflow ์Šน์ธ๊ณผ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.
14
+
15
+ ํ˜„์žฌ ์•ก์…˜์ด ์Šน์ธ ๋Œ€๊ธฐ ์ƒํƒœ๋ผ๋ฉด, ์‹คํ–‰ ์ „์— ํ•ด๋‹น ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜์„ธ์š”:
16
+
17
+ | ํ˜„์žฌ ์•ก์…˜ ์˜ˆ์‹œ | ๊ณต์œ  ๋‚ด์šฉ |
18
+ | --- | --- |
19
+ | spec / plan / tasks ๊ฒ€ํ†  | ๊ฒ€ํ†  ๋Œ€์ƒ ๋ฌธ์„œ ๋˜๋Š” ์ •ํ™•ํ•œ ์„น์…˜ |
20
+ | ํƒœ์Šคํฌ ์™„๋ฃŒ / ์ตœ์ข… ์ฒดํฌ๋ฆฌ์ŠคํŠธ | ๊ฒฐ๊ณผ์™€ ๊ฒ€์ฆ ๊ทผ๊ฑฐ |
21
+ | ์ปค๋ฐ‹ / push / merge | ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€, ํฌํ•จ ํŒŒ์ผ, ๋ธŒ๋žœ์น˜ |
22
+ | ์ด์Šˆ / PR ์ƒ์„ฑ | ์ œ๋ชฉ, ๋ณธ๋ฌธ, ๋ผ๋ฒจ |
23
+ | Assignee ๋ณ€๊ฒฝ | ๋Œ€์ƒ ์‚ฌ์šฉ์ž๋ช… |
22
24
 
23
25
  ํ™•์ธ ์ ˆ์ฐจ:
24
26
  1. ์ž‘์—… ๋‚ด์šฉ์„ ๋จผ์ € ๊ณต์œ 
@@ -8,7 +8,7 @@ GitHub Issue๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋”ฐ๋ฅด๋Š” ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.
8
8
  ## ์‚ฌ์ „ ์กฐ๊ฑด
9
9
 
10
10
  - [ ] `spec.md` ์ž‘์„ฑ ์™„๋ฃŒ
11
- - [ ] ์‚ฌ์šฉ์ž ์Šน์ธ ์™„๋ฃŒ
11
+ - [ ] ์ตœ์‹  `context --json-compact` ํ™•์ธ
12
12
 
13
13
  ---
14
14
 
@@ -38,22 +38,29 @@ npx lee-spec-kit github issue F001 --json
38
38
  | ๋ผ๋ฒจ | `enhancement`, `bug`, `documentation` ๋“ฑ |
39
39
  | ๋‹ด๋‹น์ž | `@me` (๊ธฐ๋ณธ๊ฐ’) |
40
40
 
41
- ### 2. ์‚ฌ์šฉ์ž ํ™•์ธ ์š”์ฒญ + `Ready` ์ „ํ™˜
41
+ ### 2. `Ready` ์ „ํ™˜ (context๊ฐ€ ์š”๊ตฌํ•  ๋•Œ๋งŒ ์Šน์ธ ์š”์ฒญ)
42
42
 
43
- > ๐Ÿšจ **์‚ฌ์šฉ์ž ํ™•์ธ ํ•„์ˆ˜**
43
+ > โš ๏ธ **workflow ๋ผ๋ฒจ ์Šน์ธ์€ ์กฐ๊ฑด๋ถ€์ž…๋‹ˆ๋‹ค**
44
44
 
45
- `issue.md` ์ดˆ์•ˆ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ณ  ๋ผ๋ฒจ ์Šน์ธ(`A` ๋˜๋Š” `A OK`) ๋Œ€๊ธฐ:
45
+ `issue.md` ์ดˆ์•ˆ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜์„ธ์š”:
46
46
 
47
47
  - ์ œ๋ชฉ
48
48
  - ๋ณธ๋ฌธ ์ „์ฒด ์ดˆ์•ˆ (`issue.md` ๊ธฐ์ค€)
49
49
  - ๋ผ๋ฒจ
50
50
 
51
- ์Šน์ธ ํ›„ `issue.md` ์ƒํƒœ๋ฅผ `Ready`๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
51
+ ๊ทธ ๋‹ค์Œ ์ตœ์‹  `npx lee-spec-kit context --json-compact`๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
52
+
53
+ - `approvalRequest.required=true`์ด๋ฉด CLI๊ฐ€ ์ค€ ์Šน์ธ ๋ฌธ๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๊ณ  ๋ผ๋ฒจ ์‘๋‹ต(`A` ๋˜๋Š” `A OK`)์„ ๊ธฐ๋‹ค๋ฆฐ ๋’ค ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
54
+ - `approvalRequest.required=false`์ด๋ฉด ๋ณ„๋„ ๋ผ๋ฒจ ์Šน์ธ ๋ฌธ๊ตฌ๋ฅผ ๋งŒ๋“ค์ง€ ๋ง๊ณ , ์ดˆ์•ˆ์„ ๋‹ค๋“ฌ์€ ๋’ค `issue.md` ์ƒํƒœ๋ฅผ `Ready`๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
52
55
 
53
56
  ### 3. ์ด์Šˆ ์ƒ์„ฑ (`issue.md`๊ฐ€ `Ready`์ผ ๋•Œ)
54
57
 
55
58
  ์›๊ฒฉ ์ด์Šˆ ์ƒ์„ฑ์€ ๋ฐ˜๋“œ์‹œ lee-spec-kit helper๋กœ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
56
59
  `gh issue create`๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ raw `issue.md`๋ฅผ ๊ทธ๋Œ€๋กœ `--body-file`์— ๋„˜๊ธฐ์ง€ ๋งˆ์„ธ์š”.
60
+ workflow ๋ผ๋ฒจ ์Šน์ธ๊ณผ ๋ณ„๊ฐœ๋กœ, ์›๊ฒฉ ์ƒ์„ฑ command ์ž์ฒด์˜ ๋ช…์‹œ ํ™•์ธ์€ ๊ณ„์† ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
61
+
62
+ - ์ตœ์ข… ์ œ๋ชฉ/๋ณธ๋ฌธ/๋ผ๋ฒจ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต์œ ํ•˜๊ณ 
63
+ - ๊ทธ ๋‹ค์Œ `--confirm OK`๋ฅผ ๋ถ™์—ฌ helper๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”
57
64
 
58
65
  ```bash
59
66
  npx lee-spec-kit github issue F001 --create --confirm OK --labels enhancement
@@ -69,5 +76,6 @@ npx lee-spec-kit github issue F001 --create --confirm OK --labels enhancement
69
76
 
70
77
  - **์ดˆ์•ˆ ์ƒ์„ฑ๊ธฐ**: `npx lee-spec-kit github issue <feature-name>`
71
78
  - **์›๊ฒฉ ์ƒ์„ฑ ๊ทœ์น™**: ๋ฐ˜๋“œ์‹œ `npx lee-spec-kit github issue <feature-name> --create --confirm OK --labels ...` ์‚ฌ์šฉ
72
- - **์Šน์ธ ๊ทœ์น™**: ์ œ๋ชฉ/๋ณธ๋ฌธ/๋ผ๋ฒจ ๊ณต์œ  ํ›„ `--create --confirm OK` ์‹คํ–‰
79
+ - **workflow ์Šน์ธ ๊ทœ์น™**: `approvalRequest.required=true`์ผ ๋•Œ๋งŒ ๋ผ๋ฒจ ์Šน์ธ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค
80
+ - **์›๊ฒฉ ํ™•์ธ ๊ทœ์น™**: ์ œ๋ชฉ/๋ณธ๋ฌธ/๋ผ๋ฒจ ๊ณต์œ  ํ›„ `--create --confirm OK` ์‹คํ–‰
73
81
  - **์‹คํ–‰ ์ƒํƒœ SSOT**: `docs/features/.../<feature>/issue.md`
@@ -145,23 +145,31 @@ echo \"![](https://github.com/${REPO}/releases/download/${TAG}/ui-1.png)\"
145
145
  - PR ๋ณธ๋ฌธ์— Mermaid **`sequenceDiagram`**์„ ์ž‘์„ฑํ•˜๊ณ , ์ƒ์„ฑ๋œ ๋ณธ๋ฌธ ํ…œํ”Œ๋ฆฟ ํ˜•์‹๊ณผ ์ผ์น˜ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
146
146
  - ์ด ๊ธฐ์ค€์€ ํ”„๋ก ํŠธ/๋ฐฑ์—”๋“œ ๊ตฌ๋ถ„์ด ์•„๋‹ˆ๋ผ ๋ณ€๊ฒฝ ์œ ํ˜•(๋กœ์ง/๊ตฌ์กฐ) ๊ธฐ์ค€์œผ๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
147
147
 
148
- ### 4. ์‚ฌ์šฉ์ž ํ™•์ธ ์š”์ฒญ + `Ready` ์ „ํ™˜
148
+ ### 4. `Ready` ์ „ํ™˜ (context๊ฐ€ ์š”๊ตฌํ•  ๋•Œ๋งŒ ์Šน์ธ ์š”์ฒญ)
149
149
 
150
- > ๐Ÿšจ **์‚ฌ์šฉ์ž ํ™•์ธ ํ•„์ˆ˜**
150
+ > โš ๏ธ **workflow ๋ผ๋ฒจ ์Šน์ธ์€ ์กฐ๊ฑด๋ถ€์ž…๋‹ˆ๋‹ค**
151
151
 
152
- PR ์ƒ์„ฑ ์ „ ๋‹ค์Œ ๋‚ด์šฉ์„ **์ฝ”๋“œ๋ธ”๋ก์œผ๋กœ** ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต์œ ํ•˜๊ณ , ์Šน์ธ ๋Œ€๊ธฐ ์ƒํƒœ๋ฉด CLI๊ฐ€ ์ค€ `<๋ผ๋ฒจ>` ๋˜๋Š” `<๋ผ๋ฒจ> OK` ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์„ธ์š”:
152
+ PR ์ƒ์„ฑ ์ „ ๋‹ค์Œ ๋‚ด์šฉ์„ **์ฝ”๋“œ๋ธ”๋ก์œผ๋กœ** ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต์œ ํ•˜์„ธ์š”:
153
153
 
154
154
  - ์ œ๋ชฉ
155
155
  - ๋ณธ๋ฌธ ์ „์ฒด ํ…œํ”Œ๋ฆฟ (`pr.md` ๊ธฐ์ค€)
156
156
  - ๋ผ๋ฒจ(์ตœ์†Œ 1๊ฐœ, ๋น„์›Œ๋‘˜ ์ˆ˜ ์—†์Œ)
157
157
 
158
- ์Šน์ธ/์ƒ์„ฑ ์ „์— `pr.md`์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ/ํ…Œ์ŠคํŠธ ์„น์…˜์„ ์‹ค์ œ ์ž‘์—… ๊ธฐ์ค€์œผ๋กœ ๋ณด์™„ํ•˜์„ธ์š”.
159
- ์Šน์ธ ํ›„ `pr.md` ์ƒํƒœ๋ฅผ `Ready`๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
158
+ ๊ทธ ๋‹ค์Œ ์ตœ์‹  `npx lee-spec-kit context --json-compact`๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
159
+
160
+ - `approvalRequest.required=true`์ด๋ฉด CLI๊ฐ€ ์ค€ `<๋ผ๋ฒจ>` ๋˜๋Š” `<๋ผ๋ฒจ> OK` ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
161
+ - `approvalRequest.required=false`์ด๋ฉด ๋ณ„๋„ ๋ผ๋ฒจ ์Šน์ธ ๋ฌธ๊ตฌ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
162
+
163
+ ์ดํ›„ `pr.md`์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ/ํ…Œ์ŠคํŠธ ์„น์…˜์„ ์‹ค์ œ ์ž‘์—… ๊ธฐ์ค€์œผ๋กœ ๋ณด์™„ํ•˜๊ณ  `Ready`๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
160
164
 
161
165
  ### 5. PR ์ƒ์„ฑ (`pr.md`๊ฐ€ `Ready`์ผ ๋•Œ)
162
166
 
163
167
  ์›๊ฒฉ PR ์ƒ์„ฑ์€ ๋ฐ˜๋“œ์‹œ lee-spec-kit helper๋กœ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
164
168
  `gh pr create`๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ raw `pr.md`๋ฅผ ๊ทธ๋Œ€๋กœ `--body-file`์— ๋„˜๊ธฐ์ง€ ๋งˆ์„ธ์š”.
169
+ workflow ๋ผ๋ฒจ ์Šน์ธ๊ณผ ๋ณ„๊ฐœ๋กœ, ์›๊ฒฉ ์ƒ์„ฑ command ์ž์ฒด์˜ ๋ช…์‹œ ํ™•์ธ์€ ๊ณ„์† ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
170
+
171
+ - ์ตœ์ข… ์ œ๋ชฉ/๋ณธ๋ฌธ/๋ผ๋ฒจ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต์œ ํ•˜๊ณ 
172
+ - ๊ทธ ๋‹ค์Œ `--confirm OK`๋ฅผ ๋ถ™์—ฌ helper๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”
165
173
 
166
174
  ```bash
167
175
  npx lee-spec-kit github pr F001 --create --confirm OK --labels enhancement
@@ -213,5 +221,6 @@ PR ๋ณธ๋ฌธ์˜ ํŒŒ์ผ ๋งํฌ๋Š” **ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ช…**์„ ์‚ฌ์šฉ:
213
221
 
214
222
  - **๋ณธ๋ฌธ ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ๊ธฐ**: `npx lee-spec-kit github pr <feature-name>`
215
223
  - **์›๊ฒฉ ์ƒ์„ฑ ๊ทœ์น™**: ๋ฐ˜๋“œ์‹œ `npx lee-spec-kit github pr <feature-name> --create --confirm OK --labels ...` ์‚ฌ์šฉ
216
- - **์Šน์ธ ๊ทœ์น™**: ์ œ๋ชฉ/๋ณธ๋ฌธ/๋ผ๋ฒจ ๊ณต์œ  ํ›„ `--create --confirm OK` ์‹คํ–‰
224
+ - **workflow ์Šน์ธ ๊ทœ์น™**: `approvalRequest.required=true`์ผ ๋•Œ๋งŒ ๋ผ๋ฒจ ์Šน์ธ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค
225
+ - **์›๊ฒฉ ํ™•์ธ ๊ทœ์น™**: ์ œ๋ชฉ/๋ณธ๋ฌธ/๋ผ๋ฒจ ๊ณต์œ  ํ›„ `--create --confirm OK` ์‹คํ–‰
217
226
  - **์‹คํ–‰ ์ƒํƒœ SSOT**: `docs/features/.../<feature>/pr.md`
@@ -49,7 +49,8 @@ CLI๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” **Active Task** ๋˜๋Š” **`๐Ÿ‘‰ Next Options (Atomic)`์˜ ๋‹จ
49
49
 
50
50
  ### 3๋‹จ๊ณ„: ๊ธฐ๋ก ๋ฐ ๋ฐ˜๋ณต (Record & Loop)
51
51
 
52
- - ์ƒˆ ํƒœ์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์šฐ์„  `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
52
+ - ์ƒˆ ํƒœ์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์šฐ์„  `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001 --acceptance "..." --check "..."`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
53
+ - ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ํƒœ์Šคํฌ์— placeholder `Acceptance` / `Checklist`๋ฅผ ๋‚จ๊ธฐ์ง€ ๋งˆ์„ธ์š”. concrete item์ด ์•„๋‹ˆ๋ฉด `task-run`์ด ์‹คํ–‰์„ ๋ง‰์Šต๋‹ˆ๋‹ค.
53
54
  - ์ˆ˜๋™ ํŽธ์ง‘์ด ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ `ํƒœ์Šคํฌ ๋ชฉ๋ก` ์„น์…˜์˜ ๋งˆ์ง€๋ง‰ ๊ธฐ์กด ํƒœ์Šคํฌ block ๋ฐ”๋กœ ์•„๋ž˜์— append ํ•˜์„ธ์š”.
54
55
  - ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ํƒœ์Šคํฌ ๊ทผ์ฒ˜๋‚˜ `์™„๋ฃŒ ์กฐ๊ฑด`/๋‹ค์Œ `##` ํ—ค๋” ์•ž์— ๋ผ์›Œ ๋„ฃ์ง€ ๋งˆ์„ธ์š”.
55
56
 
@@ -82,12 +83,12 @@ CLI๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” **Active Task** ๋˜๋Š” **`๐Ÿ‘‰ Next Options (Atomic)`์˜ ๋‹จ
82
83
 
83
84
  #### 3-2) ํƒœ์Šคํฌ/์ฒดํฌ๋ฆฌ์ŠคํŠธ ์—…๋ฐ์ดํŠธ + ์ปค๋ฐ‹
84
85
 
85
- 1. ์ž‘์—…์ด ๋๋‚˜๋ฉด ๊ฒฐ๊ณผ/๊ฒ€์ฆ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์Šน์ธ ๋Œ€๊ธฐ(`approvalRequest.required=true`) ์ƒํƒœ๋ผ๋ฉด CLI๊ฐ€ ์ค€ ์Šน์ธ ๋ฌธ๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ `<๋ผ๋ฒจ>` ๋˜๋Š” `<๋ผ๋ฒจ> OK` ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค `[DONE]`์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋น„์Šน์ธ ์ƒํƒœ๋ฉด ๋ณ„๋„ ์Šน์ธ ๋ฌธ๊ตฌ ์—†์ด `[DONE]`๊ณผ `Acceptance/Checklist`๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
86
+ 1. ์ž‘์—…์ด ๋๋‚˜๋ฉด ๊ฒฐ๊ณผ/๊ฒ€์ฆ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. `[DONE]`์œผ๋กœ ๋ฐ”๊ฟ€ ๋•Œ๋Š” ๊ฐ™์€ ์ˆ˜์ •์—์„œ task-local `Checklist`๋„ ํ•จ๊ป˜ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜๋ฉฐ, unchecked box๊ฐ€ ๋‚จ์•„ ์žˆ์œผ๋ฉด `task-complete`๊ฐ€ `[DONE]` ์ „ํ™˜์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์Šน์ธ ๋Œ€๊ธฐ(`approvalRequest.required=true`) ์ƒํƒœ๋ผ๋ฉด CLI๊ฐ€ ์ค€ ์Šน์ธ ๋ฌธ๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ `<๋ผ๋ฒจ>` ๋˜๋Š” `<๋ผ๋ฒจ> OK` ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค `[DONE]`์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋น„์Šน์ธ ์ƒํƒœ๋ฉด ๋ณ„๋„ ์Šน์ธ ๋ฌธ๊ตฌ ์—†์ด `[DONE]`๊ณผ `Acceptance/Checklist`๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
86
87
  2. **ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํƒœ์Šคํฌ๋งŒ** `[DONE]` ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. (ํƒœ์Šคํฌ 2๊ฐœ ์ด์ƒ์„ ํ•œ ๋ฒˆ์— ์™„๋ฃŒ/์ปค๋ฐ‹์œผ๋กœ ๋ฌถ์ง€ ์•Š๊ธฐ)
87
88
  3. `tasks.md`์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ธฐ๋ก์€ ๋ช…๋ น์–ด๋ณ„ 1๊ฐœ ํ–‰๋งŒ ์œ ์ง€ํ•˜๊ณ , ๊ฐ™์€ ๋ช…๋ น์–ด ์žฌ์‹คํ–‰ ์‹œ ๋‚ ์งœ/๊ฒฐ๊ณผ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. (์ค‘๋ณต ๋ˆ„์  ๊ธˆ์ง€, ๋‚ ์งœ ํ˜•์‹: ๋กœ์ปฌ `YYYY-MM-DD`)
88
89
  4. ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค (์ฝ”๋“œ ์ปค๋ฐ‹ + ๋ฌธ์„œ ์ปค๋ฐ‹). ํƒœ์Šคํฌ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹์ด ๋‚จ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
89
90
  - `context`์— `[ํ™•์ธ ํ•„์š”]`๊ฐ€ ๋ณด์ด๋ฉด, **์ปค๋ฐ‹/ํ‘ธ์‹œ ๊ฐ™์€ ์›๊ฒฉ ์ž‘์—…์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€/ํฌํ•จ ํŒŒ์ผ์„ ๊ณต์œ ํ•œ ๋’ค ์ตœ์‹  CLI ์Šน์ธ ๋ฌธ๊ตฌ์˜ ๋ผ๋ฒจ ์‘๋‹ต์„ ๋ฐ›์€ ํ›„** ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
90
- 5. ๋ชจ๋“  ํƒœ์Šคํฌ๊ฐ€ `[DONE]`๊ฐ€ ๋˜๋ฉด, "์™„๋ฃŒ ์กฐ๊ฑด" ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์ด ์Šน์ธ ๋Œ€๊ธฐ ์ƒํƒœ๋ฉด `<๋ผ๋ฒจ>` ๋˜๋Š” `<๋ผ๋ฒจ> OK` ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค ์ฒดํฌํ•˜๊ณ , ๋น„์Šน์ธ ์ƒํƒœ๋ฉด ์ผ๋ฐ˜ ํ™•์ธ ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค. (ํŠนํžˆ **์ตœ์ข… ์‚ฌ์šฉ์ž ์Šน์ธ ์™„๋ฃŒ** ํ•ญ๋ชฉ)
91
+ 5. ๋ชจ๋“  ํƒœ์Šคํฌ๊ฐ€ `[DONE]`๊ฐ€ ๋˜๋ฉด, "์™„๋ฃŒ ์กฐ๊ฑด" ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์ด ์Šน์ธ ๋Œ€๊ธฐ ์ƒํƒœ๋ฉด `<๋ผ๋ฒจ>` ๋˜๋Š” `<๋ผ๋ฒจ> OK` ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค ์ฒดํฌํ•˜๊ณ , ๋น„์Šน์ธ ์ƒํƒœ๋ฉด ์ผ๋ฐ˜ ํ™•์ธ ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค. (ํŠนํžˆ ์ตœ์ข… ๊ฒฐ๊ณผ/์‚ฌ์šฉ์ž ํ™•์ธ ํ•ญ๋ชฉ)
91
92
  - ์ฐธ๊ณ : ์ง„ํ–‰ ์Šน์ธ/์ตœ์ข… ์Šน์ธ์€ ๋ชจ๋‘ ํ˜„์žฌ `approvalRequest.required` ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ผ๋ฒจ ์Šน์ธ ์ƒํƒœ๋ฉด ํ•ญ์ƒ ๋ผ๋ฒจ ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜๊ณ , ๋น„์Šน์ธ ์ƒํƒœ๋ฉด standalone `OK`๋ฅผ ์Šน์ธ ํ† ํฐ์ฒ˜๋Ÿผ ๊ฐ•์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
92
93
  6. **์ฆ‰์‹œ 1๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ€** ๋‹ค์Œ ํ•  ์ผ์„ CLI์—๊ฒŒ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.
93
94
 
@@ -3,9 +3,12 @@
3
3
  ## ํƒœ์Šคํฌ ๊ทœ์น™
4
4
 
5
5
  - **์ƒํƒœ**: `[TODO]` โ†’ `[DOING]` โ†’ `[DONE]`
6
- - **์Šน์ธ**:
7
- - `[TODO] โ†’ [DOING]`: ์‹œ์ž‘ ์ „ ํƒœ์Šคํฌ ์ œ๋ชฉ ๊ณต์œ  + ์‚ฌ์šฉ์ž ์Šน์ธ(OK)
8
- - `[DOING] โ†’ [DONE]`: ์™„๋ฃŒ ์ „ ๊ฒฐ๊ณผ/๊ฒ€์ฆ ๊ณต์œ  + ์‚ฌ์šฉ์ž ์Šน์ธ(OK)
6
+ - **ํƒœ์Šคํฌ ๊ณต์œ  / ํ™•์ธ**:
7
+ - `[TODO] โ†’ [DOING]`: ์‹œ์ž‘ ์ „ ํƒœ์Šคํฌ ์ œ๋ชฉ์„ ๊ณต์œ ํ•˜๊ณ  ์ตœ์‹  `context --json-compact` ๊ธฐ์ค€์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค
8
+ - `[DOING] โ†’ [DONE]`: ์™„๋ฃŒ ์ „ ๊ฒฐ๊ณผ/๊ฒ€์ฆ์„ ๊ณต์œ ํ•˜๊ณ  ์ตœ์‹  `context --json-compact` ๊ธฐ์ค€์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค
9
+ - `approvalRequest.required=true`์ด๋ฉด CLI๊ฐ€ ์ œ๊ณตํ•œ ๋ผ๋ฒจ ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค์—๋งŒ ํƒœ์Šคํฌ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
10
+ - `approvalRequest.required=false`์ด๋ฉด ๋ณ„๋„ `OK` ์Šน์ธ ๋‹จ๊ณ„๋ฅผ ๋งŒ๋“ค์ง€ ๋ง๊ณ , ์‹ค์ œ ์™„๋ฃŒ/๊ฒ€์ฆ ํ›„ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
11
+ - ํ•ด๋‹น ํƒœ์Šคํฌ์˜ `Checklist`์— unchecked ํ•ญ๋ชฉ์ด ๋‚จ์•„ ์žˆ์œผ๋ฉด `task-complete`๋Š” `[DONE]` ์ „ํ™˜์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
9
12
  - **PRD ๋งคํ•‘(๊ถŒ์žฅ)**: ๊ฐ ํƒœ์Šคํฌ ๋ผ์ธ์— `[PRD-FR-001]` ๊ฐ™์€ PRD ์š”๊ตฌ์‚ฌํ•ญ ID ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, PRD์™€ ๋ฌด๊ด€ํ•œ ํƒœ์Šคํฌ๋Š” `[NON-PRD]`๋กœ ํ‘œ์‹œํ•˜์„ธ์š”.
10
13
  - ๋‹จ, `tasks.md`์—์„œ PRD ID๋ฅผ ์ž„์˜๋กœ ๋งŒ๋“ค์ง€ ๋งˆ์„ธ์š”. `docs/prd` ๋˜๋Š” ์ƒ์œ„ ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ์— ๋จผ์ € ์ •์˜๋œ ID๋งŒ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
11
14
  - ๋ ˆ๊ฑฐ์‹œ ๋ฌธ์„œ์— ์•„์ง PRD ID๊ฐ€ ์—†๋‹ค๋ฉด, ๋จผ์ € ์›๋ฌธ ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ์— ID๋ฅผ backfillํ•œ ๋’ค `spec.md`์˜ `PRD Refs`์™€ ํƒœ์Šคํฌ ํƒœ๊ทธ๋ฅผ ํ•จ๊ป˜ ๋งž์ถ”์„ธ์š”.
@@ -63,7 +66,8 @@
63
66
 
64
67
  > ์•„๋ž˜์— ํƒœ์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. **์ตœ์†Œ 1๊ฐœ๊ฐ€ ํ•„์š”**ํ•ฉ๋‹ˆ๋‹ค.
65
68
  > ํƒœ์Šคํฌ๋Š” ํ•˜๋‚˜์˜ ์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ๋กœ ์œ ์ง€ํ•˜๊ณ , ์œ„์—์„œ ์•„๋ž˜ ์ˆœ์„œ ์ž์ฒด๋ฅผ ์‹คํ–‰ ์šฐ์„ ์ˆœ์œ„๋กœ ์ทจ๊ธ‰ํ•˜์„ธ์š”.
66
- > ์ƒˆ ํƒœ์Šคํฌ๋Š” ๊ฐ€๊ธ‰์  `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001`๋กœ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
69
+ > ์ƒˆ ํƒœ์Šคํฌ๋Š” ๊ฐ€๊ธ‰์  `npx lee-spec-kit task add <feature-ref> --title "..." --ref NON-PRD|PRD-FR-001 --acceptance "..." --check "..."`๋กœ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
70
+ > placeholder ์ƒํƒœ์˜ `Acceptance` / `Checklist`๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘์ง€ ๋งˆ์„ธ์š”. concrete item์ด ์•„๋‹ˆ๋ฉด `task-run`์ด ์‹คํ–‰์„ ๋ง‰์Šต๋‹ˆ๋‹ค.
67
71
  > ์ˆ˜๋™ ํŽธ์ง‘์ด ํ•„์š”ํ•˜๋ฉด ํ˜„์žฌ ํƒœ์Šคํฌ ๊ทผ์ฒ˜๊ฐ€ ์•„๋‹ˆ๋ผ `ํƒœ์Šคํฌ ๋ชฉ๋ก`์˜ ๋งˆ์ง€๋ง‰ ๊ธฐ์กด ํƒœ์Šคํฌ block ์•„๋ž˜์—๋งŒ append ํ•˜์„ธ์š”.
68
72
 
69
73
  ---
@@ -74,7 +78,7 @@
74
78
 
75
79
  - [ ] ๋ชจ๋“  ํƒœ์Šคํฌ๊ฐ€ `[DONE]`์ด๋ฉฐ, ๊ฐ ํƒœ์Šคํฌ์˜ `Acceptance` ๊ฒ€์ฆ ๋ฐ `Checklist` ์ฒดํฌ ์™„๋ฃŒ
76
80
  - [ ] ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ฐ ํ†ต๊ณผ (์•„๋ž˜์— ๋ช…๋ น์–ด/๊ฒฐ๊ณผ ๊ธฐ๋ก)
77
- - [ ] ์ตœ์ข… ์‚ฌ์šฉ์ž ์Šน์ธ(OK) ์™„๋ฃŒ (๊ฒฐ๊ณผ๋ฌผ ํ™•์ธ)
81
+ - [ ] ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ–ˆ๊ณ , ํ˜„์žฌ `context` ์Šน์ธ ์ƒํƒœ์— ๋งž๋Š” ์‚ฌ์šฉ์ž ํ™•์ธ์„ ๊ธฐ๋กํ•จ
78
82
 
79
83
  ### ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ธฐ๋ก
80
84