lee-spec-kit 0.6.11 โ 0.6.13
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/dist/index.js +13 -11
- package/package.json +1 -1
- package/templates/en/common/agents/agents.md +2 -1
- package/templates/en/common/agents/skills/create-feature.md +1 -0
- package/templates/en/common/agents/skills/execute-task.md +23 -11
- package/templates/en/common/features/README.md +1 -1
- package/templates/en/common/features/feature-base/decisions.md +18 -0
- package/templates/ko/common/agents/agents.md +2 -1
- package/templates/ko/common/agents/skills/create-feature.md +1 -0
- package/templates/ko/common/agents/skills/execute-task.md +13 -1
- package/templates/ko/common/features/README.md +1 -1
- package/templates/ko/common/features/feature-base/decisions.md +18 -0
package/dist/index.js
CHANGED
|
@@ -134,7 +134,7 @@ var I18N = {
|
|
|
134
134
|
"context.checkPolicyHint": "\u2139\uFE0F \uC0AC\uC6A9\uC790 \uD655\uC778 \uC815\uCC45\uC740 \uC138\uC158 \uC2DC\uC791(\uB610\uB294 context \uC555\uCD95/\uB9AC\uC14B \uC9C1\uD6C4)\uC5D0 1\uD68C \uD655\uC778\uD558\uACE0, \uC774\uD6C4\uC5D0\uB294 \uC815\uCC45/\uC124\uC815 \uBCC0\uACBD \uB610\uB294 \uC0AC\uC6A9\uC790 \uC0C8\uB85C\uACE0\uCE68 \uC694\uCCAD \uC2DC\uC5D0\uB9CC \uC7AC\uD655\uC778\uD558\uC138\uC694. (git push/merge/merge commit \uD3EC\uD568) [\uD655\uC778 \uD544\uC694]\uAC00 \uC788\uC73C\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C `<\uB77C\uBCA8>` \uB610\uB294 `<\uB77C\uBCA8> OK` (\uC608: `A`, `A OK`) \uC751\uB2F5\uC744 \uBC1B\uC740 \uB4A4 \uC9C4\uD589 (config: approval\uB85C \uC870\uC815 \uAC00\uB2A5)",
|
|
135
135
|
"context.actionOptionHint": "\uC2B9\uC778 \uC751\uB2F5 \uD615\uC2DD: \uB77C\uBCA8 \uD1A0\uD070 \uD3EC\uD568 (\uC608: `A`, `A OK`, `A \uC9C4\uD589\uD574`)",
|
|
136
136
|
"context.actionExplainHint": "\uC2B9\uC778 \uC694\uCCAD \uC804, \uAC01 \uB77C\uBCA8\uC774 \uBB34\uC5C7\uC744 \uC2E4\uD589/\uBCC0\uACBD\uD558\uB294\uC9C0 \uD55C \uC904 \uC694\uC57D\uACFC \uD568\uAED8 \uC124\uBA85\uD558\uC138\uC694.",
|
|
137
|
-
"context.finalLabelPrompt": "\uD604\uC7AC \uC120\uD0DD \uAC00\uB2A5\uD55C \uB77C\uBCA8: {labels}. \
|
|
137
|
+
"context.finalLabelPrompt": "\uD604\uC7AC \uC120\uD0DD \uAC00\uB2A5\uD55C \uB77C\uBCA8: {labels}. \uC751\uB2F5\uC740 `<\uB77C\uBCA8>` \uB610\uB294 `<\uB77C\uBCA8> OK` \uD615\uC2DD\uC73C\uB85C \uD574\uC8FC\uC138\uC694. (\uC608: {example})",
|
|
138
138
|
"context.finalLabelCommandHint": "\uB77C\uBCA8\uC744 \uBC1B\uC73C\uBA74 \uC2B9\uC778 \uC120\uD0DD \uC2E4\uD589: {command}",
|
|
139
139
|
"context.finalTicketCommandHint": "\uBA85\uB839 \uC2E4\uD589\uC740 \uC2B9\uC778 \uACB0\uACFC\uC758 \uD2F0\uCF13\uC73C\uB85C \uC2E4\uD589: {command}",
|
|
140
140
|
"context.readBuiltinDocFirst": "\uC774\uBC88 \uC138\uC158\uC5D0 \uC544\uC9C1 \uC77D\uC9C0 \uC54A\uC558\uAC70\uB098 \uBCC0\uACBD \uAC00\uB2A5\uC131\uC774 \uC788\uC744 \uB54C\uB9CC \uD544\uC694\uD55C \uB0B4\uC7A5 \uBB38\uC11C\uB97C \uD655\uC778\uD558\uC138\uC694.",
|
|
@@ -530,7 +530,7 @@ var I18N = {
|
|
|
530
530
|
"context.checkPolicyHint": "\u2139\uFE0F Check user-approval policy once at session start (or right after context compression/reset); re-check only when policy/config changes or the user explicitly requests refresh. (includes git push/merge and merge commits). If you see [CHECK required], wait for `<label>` or `<label> OK` (e.g. `A`, `A OK`) before proceeding (config: approval can override)",
|
|
531
531
|
"context.actionOptionHint": "Approval reply format: include a label token (e.g. `A`, `A OK`, `A proceed`)",
|
|
532
532
|
"context.actionExplainHint": "Before requesting approval, explain what each label will run/change with a one-line summary.",
|
|
533
|
-
"context.finalLabelPrompt": "Available labels now: {labels}.
|
|
533
|
+
"context.finalLabelPrompt": "Available labels now: {labels}. Please reply in `<label>` or `<label> OK` format. (e.g. {example})",
|
|
534
534
|
"context.finalLabelCommandHint": "When a label is provided, run approval selection: {command}",
|
|
535
535
|
"context.finalTicketCommandHint": "Execute commands using the ticket from approval result: {command}",
|
|
536
536
|
"context.readBuiltinDocFirst": "Read required built-in docs only if not read in this session yet or likely changed.",
|
|
@@ -2772,19 +2772,21 @@ function checkTaskCommitGate(feature) {
|
|
|
2772
2772
|
newDoneCount += currentCount - previousCount;
|
|
2773
2773
|
}
|
|
2774
2774
|
}
|
|
2775
|
-
if (newDoneCount
|
|
2775
|
+
if (newDoneCount > 1) {
|
|
2776
2776
|
return {
|
|
2777
2777
|
pass: false,
|
|
2778
2778
|
reason: "MULTIPLE_DONE_TRANSITIONS",
|
|
2779
2779
|
newDoneCount
|
|
2780
2780
|
};
|
|
2781
2781
|
}
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2782
|
+
if (newDoneCount === 1) {
|
|
2783
|
+
const lastDoneTopic = normalizeTaskTopic(feature.lastDoneTask?.title || "");
|
|
2784
|
+
if (lastDoneTopic) {
|
|
2785
|
+
const previousCount = previousDone.get(lastDoneTopic) || 0;
|
|
2786
|
+
const currentCount = currentDone.get(lastDoneTopic) || 0;
|
|
2787
|
+
if (currentCount <= previousCount) {
|
|
2788
|
+
return { pass: false, reason: "MISMATCH_LAST_DONE", newDoneCount };
|
|
2789
|
+
}
|
|
2788
2790
|
}
|
|
2789
2791
|
}
|
|
2790
2792
|
return { pass: true, reason: "MULTIPLE_DONE_TRANSITIONS", newDoneCount };
|
|
@@ -5855,14 +5857,14 @@ async function runContext(featureName, options) {
|
|
|
5855
5857
|
"actionOptions[].detail",
|
|
5856
5858
|
"actionOptions[].approvalPrompt"
|
|
5857
5859
|
],
|
|
5858
|
-
recommendation: "Before asking for approval, show only `actionOptions[].approvalPrompt` lines and `approvalRequest.finalPrompt` to the user. Keep `requiredDocs`, `checkPolicy`, and raw execution commands as internal guidance. For commit actions, include scope (`docs`/`project`) and commit message in the visible prompt. User replies should include the label token (e.g. `A`, `A OK`, `A proceed`, `A \uC9C4\uD589\uD574`). For command execution,
|
|
5860
|
+
recommendation: "Before asking for approval, show only `actionOptions[].approvalPrompt` lines and `approvalRequest.finalPrompt` to the user. Keep `requiredDocs`, `checkPolicy`, and raw execution commands as internal guidance. For commit actions, include scope (`docs`/`project`) and commit message in the visible prompt. User replies should include the label token (e.g. `A`, `A OK`, `A proceed`, `A \uC9C4\uD589\uD574`). For command execution, prefer one-shot `npx lee-spec-kit flow <featureRef> --approve <LABEL> --execute` to avoid session mismatch after context compression/reset. Use ticket-based `context --execute --ticket` only when explicitly needed.",
|
|
5859
5861
|
oneApprovalPerAction: true,
|
|
5860
5862
|
requireFreshContext: true,
|
|
5861
5863
|
contextVersion: state.contextVersion,
|
|
5862
5864
|
config: config.approval ?? { mode: "builtin" }
|
|
5863
5865
|
},
|
|
5864
5866
|
approvalRequest: {
|
|
5865
|
-
guidance: "User-facing output must include only approval prompts (`A: ...`) and `finalPrompt`. Do not expose `requiredDocs`, `checkPolicy`, or raw `cmd` unless explicitly requested.",
|
|
5867
|
+
guidance: "User-facing output must include only approval prompts (`A: ...`) and `finalPrompt`. Do not expose `requiredDocs`, `checkPolicy`, or raw `cmd` unless explicitly requested. For approved command actions, prefer one-shot `flow --approve <LABEL> --execute`.",
|
|
5866
5868
|
finalPrompt: finalApprovalPrompt,
|
|
5867
5869
|
userFacingLines: [
|
|
5868
5870
|
...state.actionOptions.map((o) => o.approvalPrompt),
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@ This document covers **policy only**.
|
|
|
23
23
|
Approval flow:
|
|
24
24
|
1. Share details first
|
|
25
25
|
2. Wait for explicit approval (OK)
|
|
26
|
-
3. Execute after approval
|
|
26
|
+
3. Execute after approval (for command execution, default to `npx lee-spec-kit flow <featureRef> --approve <LABEL> --execute`)
|
|
27
27
|
|
|
28
28
|
Prohibited:
|
|
29
29
|
- Proceeding without user response
|
|
@@ -38,6 +38,7 @@ Prohibited:
|
|
|
38
38
|
- Even when the user asks something else, append the same label block at the end if executable labels exist.
|
|
39
39
|
- If no executable labels exist, print `Available labels: none` and guide re-check with `npx lee-spec-kit context`.
|
|
40
40
|
- If user input does not contain a valid label, do not execute; request label selection again.
|
|
41
|
+
- For approved command options, prefer one-shot `flow --approve <LABEL> --execute`; do not split `context --approve` and `context --execute --ticket` across turns/sessions.
|
|
41
42
|
|
|
42
43
|
Output format:
|
|
43
44
|
|
|
@@ -26,6 +26,7 @@ For gated actions, proceed only after the user replies in **`<label>` or `<label
|
|
|
26
26
|
- If the CLI asks for writing a file, write that file and follow the format.
|
|
27
27
|
- If the CLI prints a command, **copy/paste and run it exactly**. (It may include repo-safe `git -C ...` commands and scopes like `project` vs `docs`.)
|
|
28
28
|
- When requesting approval, present labels as `A: ...` using the exact CLI detail/cmd text. Do not paraphrase command options.
|
|
29
|
+
- For approved command options, default to one-shot execution via `npx lee-spec-kit flow <slug|F001|F001-slug> --approve <LABEL> --execute` to avoid session mismatch.
|
|
29
30
|
|
|
30
31
|
### Step 3: Repeat
|
|
31
32
|
|
|
@@ -23,6 +23,7 @@ Execute exactly one option from `๐ Next Options (Atomic)` as printed by the C
|
|
|
23
23
|
- Treat the task state/approval rules in `tasks.md` **"Task Rules"** as SSOT (e.g. when OK is required for `[TODO]โ[DOING]`, `[DOING]โ[DONE]`).
|
|
24
24
|
- If the CLI prints commands, copy/paste them. (In standalone setups commands may include `git -C ...` and scopes like `project`/`docs`.)
|
|
25
25
|
- Follow user-facing response format (including the final status/label block in every reply) from `agents.md` **"Label Response Contract (SSOT)"**.
|
|
26
|
+
- 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.
|
|
26
27
|
|
|
27
28
|
### Step 3: Update tasks.md (only what you did)
|
|
28
29
|
|
|
@@ -31,16 +32,7 @@ Keep `tasks.md` aligned with reality.
|
|
|
31
32
|
- Do not mark `[DONE]` without actually completing the work and verifying criteria.
|
|
32
33
|
- If you need to change a completed task, add a new task instead of rewriting history.
|
|
33
34
|
|
|
34
|
-
### Step 3.25:
|
|
35
|
-
|
|
36
|
-
- Complete **only one task at a time** (do not batch-finish multiple tasks in one commit).
|
|
37
|
-
- After you share the outcome/verification and get approval (OK), mark the task `[DONE]` (and update any checklist items), then create commits (code commit + docs commit) so each task has its own history.
|
|
38
|
-
- In `tasks.md` test logs, keep one entry per test command and update its timestamp/result on reruns (do not keep appending duplicates). Use `YYYY-MM-DD HH-MM` in local time.
|
|
39
|
-
- If `context` shows `[CHECK required]`, for commits/push/merge, **share the commit message + included files and wait for explicit OK** before running the commands.
|
|
40
|
-
- Once all tasks are `[DONE]`, share the "Completion Criteria" checklist with the user and get **final approval (OK)**, then check it (especially the **Final user approval (OK) received** item).
|
|
41
|
-
- Note: `Doc Status (ReviewโApproved)` is **progress approval (OK)**, while the completion checklist approval is **final approval (OK)**.
|
|
42
|
-
|
|
43
|
-
### Step 3.5: Record decisions (strongly recommended, effectively required)
|
|
35
|
+
### Step 3.25: Record decisions (strongly recommended, effectively required)
|
|
44
36
|
|
|
45
37
|
To avoid โwhy did we implement it like this?โ losing context, **record any non-obvious or tradeoff-heavy implementation choice** in `decisions.md`.
|
|
46
38
|
|
|
@@ -54,7 +46,27 @@ Record a decision if any of these apply:
|
|
|
54
46
|
- You changed data shape, file structure, or CLI output rules
|
|
55
47
|
- You expect future readers to ask โwhy this way?โ
|
|
56
48
|
|
|
57
|
-
|
|
49
|
+
Timing rules:
|
|
50
|
+
|
|
51
|
+
- When moving a task to `[DOING]`, first add 1-3 lines for `Context/Constraints` and `Trace (initial hypothesis)`.
|
|
52
|
+
- Before moving a task to `[DONE]`, finalize `Options/Decision/Rationale` and strengthen `Trace (final reasoning)`.
|
|
53
|
+
- After PR merge, append 1-2 lines in `Trace (post-merge check)` with actual outcome/impact.
|
|
54
|
+
|
|
55
|
+
Evidence rules:
|
|
56
|
+
|
|
57
|
+
- Every ADR must include at least one Evidence link (commit, PR, or test/log evidence).
|
|
58
|
+
- Prefer filling all three (`Commit`, `PR`, `Test/Log`); if not applicable, mark as `N/A`.
|
|
59
|
+
|
|
60
|
+
Use the featureโs `decisions.md` template format as final SSOT. (Context/Constraints/Options/Decision/Rationale/Trace/Evidence/Consequences)
|
|
61
|
+
|
|
62
|
+
### Step 3.5: Commit per task (important)
|
|
63
|
+
|
|
64
|
+
- Complete **only one task at a time** (do not batch-finish multiple tasks in one commit).
|
|
65
|
+
- After you share the outcome/verification and get approval (OK), mark the task `[DONE]` (and update any checklist items), then create commits (code commit + docs commit) so each task has its own history.
|
|
66
|
+
- In `tasks.md` test logs, keep one entry per test command and update its timestamp/result on reruns (do not keep appending duplicates). Use `YYYY-MM-DD HH-MM` in local time.
|
|
67
|
+
- If `context` shows `[CHECK required]`, for commits/push/merge, **share the commit message + included files and wait for explicit OK** before running the commands.
|
|
68
|
+
- Once all tasks are `[DONE]`, share the "Completion Criteria" checklist with the user and get **final approval (OK)**, then check it (especially the **Final user approval (OK) received** item).
|
|
69
|
+
- Note: `Doc Status (ReviewโApproved)` is **progress approval (OK)**, while the completion checklist approval is **final approval (OK)**.
|
|
58
70
|
|
|
59
71
|
### Step 4: Repeat
|
|
60
72
|
|
|
@@ -65,4 +65,4 @@ npx lee-spec-kit status --write
|
|
|
65
65
|
| `spec.md` | **What and Why** | Feature definition |
|
|
66
66
|
| `plan.md` | **How** (technical) | After spec approval |
|
|
67
67
|
| `tasks.md` | Specific work items | After plan approval |
|
|
68
|
-
| `decisions.md` | Technical decisions (ADR) | During development
|
|
68
|
+
| `decisions.md` | Technical decisions + reasoning trace + evidence links (ADR) | During development (DOING start / before DONE / post-merge) |
|
|
@@ -7,12 +7,30 @@ Record technical decisions and their rationale.
|
|
|
7
7
|
|
|
8
8
|
> Format: `D{number}: {Decision Title} ({YYYY-MM-DD})`
|
|
9
9
|
|
|
10
|
+
Recording principles:
|
|
11
|
+
|
|
12
|
+
- Every ADR must capture both **Decision (what was chosen)** and **Trace (how it was evaluated and validated)**.
|
|
13
|
+
- Use fixed timing checkpoints:
|
|
14
|
+
- Task start (`[TODO] -> [DOING]`): add 1-3 lines for `Context/Constraints` and `Trace (initial hypothesis)`
|
|
15
|
+
- Right before task done (`[DOING] -> [DONE]`): finalize `Options/Decision/Rationale` and enrich `Trace`
|
|
16
|
+
- After PR merge: append 1-2 lines in `Trace (post-merge check)` with actual outcome/impact
|
|
17
|
+
- Every ADR must include at least one **Evidence link** (commit, PR, or test/log evidence).
|
|
18
|
+
|
|
10
19
|
---
|
|
11
20
|
|
|
12
21
|
## D001: {Decision Title} ({YYYY-MM-DD})
|
|
13
22
|
|
|
14
23
|
- **Context**: Problem situation or background
|
|
24
|
+
- **Constraints**: Constraints (time/technical/operations/compatibility)
|
|
15
25
|
- **Options**: Alternatives considered
|
|
16
26
|
- **Decision**: Final choice
|
|
17
27
|
- **Rationale**: Reason for choice
|
|
28
|
+
- **Trace**:
|
|
29
|
+
- **At DOING start**: Initial reasoning/hypothesis
|
|
30
|
+
- **Before DONE**: Finalized reasoning behind the selected option
|
|
31
|
+
- **Post-merge check**: Actual outcome/impact observed
|
|
32
|
+
- **Evidence**:
|
|
33
|
+
- **Commit**: Commit hash or link
|
|
34
|
+
- **PR**: PR link
|
|
35
|
+
- **Test/Log**: Test output/log/screenshot path
|
|
18
36
|
- **Consequences**: Results and impact (optional)
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
ํ์ธ ์ ์ฐจ:
|
|
24
24
|
1. ์์
๋ด์ฉ์ ๋จผ์ ๊ณต์
|
|
25
25
|
2. ๋ช
์์ ์น์ธ(OK) ๋๊ธฐ
|
|
26
|
-
3. ์น์ธ ํ ์คํ
|
|
26
|
+
3. ์น์ธ ํ ์คํ (๋ช
๋ น ์คํ์ ๊ธฐ๋ณธ์ ์ผ๋ก `npx lee-spec-kit flow <featureRef> --approve <LABEL> --execute`๋ฅผ ์ฌ์ฉ)
|
|
27
27
|
|
|
28
28
|
๊ธ์ง:
|
|
29
29
|
- ์ฌ์ฉ์ ์๋ต ์์ด ์์ ์งํ
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
- ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ง๋ฌธ์ ํ๋๋ผ๋, ์คํ ๊ฐ๋ฅํ ๋ผ๋ฒจ์ด ์์ผ๋ฉด ์๋ต ๋ง์ง๋ง์ ๋์ผ ๋ธ๋ก์ ๋ค์ ํ์ํฉ๋๋ค.
|
|
39
39
|
- ์คํ ๊ฐ๋ฅํ ๋ผ๋ฒจ์ด ์์ผ๋ฉด `์ ํ ๊ฐ๋ฅ: ์์` + `npx lee-spec-kit context` ์ฌํ์ธ์ ์๋ดํฉ๋๋ค.
|
|
40
40
|
- ์ฌ์ฉ์ ์
๋ ฅ์ ์ ํจ ๋ผ๋ฒจ์ด ์์ผ๋ฉด ์คํํ์ง ๋ง๊ณ ๋ผ๋ฒจ ์ ํ์ ๋ค์ ์์ฒญํฉ๋๋ค.
|
|
41
|
+
- ์น์ธ๋ command ์ต์
์คํ์ `flow --approve <LABEL> --execute` 1ํ ํธ์ถ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ฉฐ, `context --approve`์ `context --execute --ticket`๋ฅผ ํด/์ธ์
์ฌ์ด๋ก ๋ถ๋ฆฌํ์ง ์์ต๋๋ค.
|
|
41
42
|
|
|
42
43
|
์ถ๋ ฅ ํ์:
|
|
43
44
|
|
|
@@ -27,6 +27,7 @@ CLI๊ฐ ์ถ๋ ฅํ๋ **`๐ Next Options (Atomic)` ๋ชฉ๋ก์์ ๋จ ํ๋์
|
|
|
27
27
|
- CLI๊ฐ ์ด์ ์์ฑ์ ์ง์ํ๋ฉด ์ด์๋ฅผ ์์ฑํฉ๋๋ค.
|
|
28
28
|
- CLI๊ฐ ๋ช
๋ น์ด๋ฅผ ์ถ๋ ฅํ๋ฉด **๊ทธ๋๋ก ๋ณต์ฌํด ์คํ**ํฉ๋๋ค. (standalone ํ๊ฒฝ์์๋ ๋ ํฌ ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค)
|
|
29
29
|
- ์น์ธ ์์ฒญ ์ ๋ผ๋ฒจ ์ต์
์ `A: ...` ํ์์ผ๋ก **CLI๊ฐ ์ถ๋ ฅํ ์๋ฌธ(detail/cmd) ๊ทธ๋๋ก** ๊ณต์ ํฉ๋๋ค. ์์ฝ/์์ญํ์ง ์์ต๋๋ค.
|
|
30
|
+
- ์น์ธ๋ command ์ต์
์ ์คํํ ๋๋ ์ธ์
๋ถ์ผ์น ๋ฐฉ์ง๋ฅผ ์ํด `npx lee-spec-kit flow <slug|F001|F001-slug> --approve <LABEL> --execute`๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
|
|
30
31
|
|
|
31
32
|
### 3๋จ๊ณ: ๋ฐ๋ณต
|
|
32
33
|
|
|
@@ -25,6 +25,7 @@ CLI๊ฐ ๊ฐ๋ฆฌํค๋ **Active Task** ๋๋ **`๐ Next Options (Atomic)`์ ๋จ
|
|
|
25
25
|
- ํ์คํฌ ์ํ ์ ํ/์น์ธ ๊ท์น์ `tasks.md`์ **"ํ์คํฌ ๊ท์น"** ์น์
์ SSOT๋ก ๋ฐ๋ฆ
๋๋ค. (์: `[TODO]โ[DOING]`, `[DOING]โ[DONE]` ์์ ์ OK)
|
|
26
26
|
- CLI๊ฐ ๋ช
๋ น์ด๋ฅผ ์ถ๋ ฅํ๋ฉด **๊ทธ๋๋ก ๋ณต์ฌํด ์คํ**ํฉ๋๋ค. (standalone ํ๊ฒฝ์์๋ ๋ ํฌ ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค)
|
|
27
27
|
- ์ฌ์ฉ์ ์๋ต ํฌ๋งท(๋งค ์๋ต ๋ง๋ฏธ์ ์ํ/๋ผ๋ฒจ ํ์ ํฌํจ)์ `agents.md`์ **"๋ผ๋ฒจ ์๋ต ๊ณ์ฝ (SSOT)"** ์ ๋ฐ๋ฆ
๋๋ค.
|
|
28
|
+
- ์น์ธ๋ command ์ต์
์คํ์ `npx lee-spec-kit flow <slug|F001|F001-slug> --approve <LABEL> --execute`๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ , `context --approve`์ `context --execute --ticket` ๋ถ๋ฆฌ ์คํ์ ์ง์ํฉ๋๋ค.
|
|
28
29
|
|
|
29
30
|
### 3๋จ๊ณ: ๊ธฐ๋ก ๋ฐ ๋ฐ๋ณต (Record & Loop)
|
|
30
31
|
|
|
@@ -42,7 +43,18 @@ CLI๊ฐ ๊ฐ๋ฆฌํค๋ **Active Task** ๋๋ **`๐ Next Options (Atomic)`์ ๋จ
|
|
|
42
43
|
- ๋ฐ์ดํฐ ๊ตฌ์กฐ/ํ์ผ ๊ตฌ์กฐ/CLI ์ถ๋ ฅ ๊ท์น์ด ๋ฐ๋์๋ค
|
|
43
44
|
- โ๋์ค์ ๋ณด๋ฉด ํท๊ฐ๋ฆด ๊ฒ ๊ฐ์โ ๊ฒฐ์ ์ด ์์๋ค
|
|
44
45
|
|
|
45
|
-
์์ฑ
|
|
46
|
+
์์ฑ ์์ ๊ท์น:
|
|
47
|
+
|
|
48
|
+
- ํ์คํฌ๋ฅผ `[DOING]`์ผ๋ก ์ ํํ ๋ `Context/Constraints`์ `Trace(์ด๊ธฐ ๊ฐ์ค)`๋ฅผ 1~3์ค๋ก ๋จผ์ ๊ธฐ๋กํฉ๋๋ค.
|
|
49
|
+
- ํ์คํฌ๋ฅผ `[DONE]`์ผ๋ก ์ ํํ๊ธฐ ์ ์ `Options/Decision/Rationale`๋ฅผ ์ต์ข
ํํ๊ณ `Trace(ํ์ ๊ทผ๊ฑฐ)`๋ฅผ ๋ณด๊ฐํฉ๋๋ค.
|
|
50
|
+
- PR ๋จธ์ง ํ `Trace(๋จธ์ง ํ ํ์ธ)`์ ์ค์ ๊ฒฐ๊ณผ/์ํฅ์ 1~2์ค๋ก ์ถ๊ฐํฉ๋๋ค.
|
|
51
|
+
|
|
52
|
+
์ฆ๊ฑฐ ๋งํฌ ๊ท์น:
|
|
53
|
+
|
|
54
|
+
- ๋ชจ๋ ADR์๋ ์ต์ 1๊ฐ ์ด์์ Evidence ๋งํฌ(์ปค๋ฐ/PR/ํ
์คํธ ๋ก๊ทธ ์ค ํ๋ ์ด์)๋ฅผ ๋จ๊น๋๋ค.
|
|
55
|
+
- ๊ฐ๋ฅํ๋ฉด `Commit`, `PR`, `Test/Log` 3๊ฐ์ง๋ฅผ ๋ชจ๋ ์ฑ์ฐ๊ณ , ๋ฏธํด๋น ํญ๋ชฉ์ `N/A`๋ก ๋ช
์ํฉ๋๋ค.
|
|
56
|
+
|
|
57
|
+
์ต์ข
ํ์์ Feature์ `decisions.md` ํ
ํ๋ฆฟ์ ๋ฐ๋ฆ
๋๋ค. (Context/Constraints/Options/Decision/Rationale/Trace/Evidence/Consequences)
|
|
46
58
|
|
|
47
59
|
#### 3-2) ํ์คํฌ/์ฒดํฌ๋ฆฌ์คํธ ์
๋ฐ์ดํธ + ์ปค๋ฐ
|
|
48
60
|
|
|
@@ -65,4 +65,4 @@ npx lee-spec-kit status --write
|
|
|
65
65
|
| `spec.md` | **๋ฌด์์, ์** ๋ง๋๋์ง | ๊ธฐ๋ฅ ์ ์ ์ |
|
|
66
66
|
| `plan.md` | **์ด๋ป๊ฒ** ๋ง๋๋์ง (๊ธฐ์ ) | ์คํ ์น์ธ ํ |
|
|
67
67
|
| `tasks.md` | ๊ตฌ์ฒด์ ์ธ ์์
๋ชฉ๋ก | ๊ณํ ์น์ธ ํ |
|
|
68
|
-
| `decisions.md` | ๊ธฐ์ ๊ฒฐ์
|
|
68
|
+
| `decisions.md` | ๊ธฐ์ ๊ฒฐ์ + ํ๋จ ๊ทผ๊ฑฐ(Trace) + ์ฆ๊ฑฐ ๋งํฌ(ADR) | ๊ฐ๋ฐ ์ค ์์๋ก (DOING ์์ / DONE ์ง์ / ๋จธ์ง ํ) |
|
|
@@ -7,12 +7,30 @@
|
|
|
7
7
|
|
|
8
8
|
> ํ์: `D{๋ฒํธ}: {๊ฒฐ์ ์ ๋ชฉ} ({YYYY-MM-DD})`
|
|
9
9
|
|
|
10
|
+
๊ธฐ๋ก ์์น:
|
|
11
|
+
|
|
12
|
+
- ๋ชจ๋ ADR์ **Decision(๋ฌด์์ ์ ํํ๋๊ฐ)** + **Trace(์ด๋ป๊ฒ ๊ณ ๋ฏผํ๊ณ ๋ฌด์์ ํ์ธํ๋๊ฐ)** ๋ฅผ ํจ๊ป ๋จ๊น๋๋ค.
|
|
13
|
+
- ์์ฑ ํ์ด๋ฐ์ ๊ณ ์ ํฉ๋๋ค.
|
|
14
|
+
- ํ์คํฌ ์์(`[TODO] -> [DOING]`): `Context/Constraints`์ `Trace(์ด๊ธฐ ๊ฐ์ค)`๋ฅผ 1~3์ค๋ก ๋จผ์ ๊ธฐ๋ก
|
|
15
|
+
- ํ์คํฌ ์๋ฃ ์ง์ (`[DOING] -> [DONE]`): `Options/Decision/Rationale`๋ฅผ ์ต์ข
ํํ๊ณ `Trace`๋ฅผ ๋ณด๊ฐ
|
|
16
|
+
- PR ๋จธ์ง ํ: ์ค์ ๊ฒฐ๊ณผ/์ํฅ์ `Trace(๋จธ์ง ํ ํ์ธ)`์ 1~2์ค ์ถ๊ฐ
|
|
17
|
+
- ๋ชจ๋ ADR์๋ ์ต์ 1๊ฐ ์ด์์ **Evidence ๋งํฌ**(์ปค๋ฐ/PR/ํ
์คํธ ๋ก๊ทธ ์ค ํ๋ ์ด์)๋ฅผ ๋จ๊น๋๋ค.
|
|
18
|
+
|
|
10
19
|
---
|
|
11
20
|
|
|
12
21
|
## D001: {๊ฒฐ์ ์ ๋ชฉ} ({YYYY-MM-DD})
|
|
13
22
|
|
|
14
23
|
- **Context**: ๋ฌธ์ ์ํฉ ๋๋ ๋ฐฐ๊ฒฝ
|
|
24
|
+
- **Constraints**: ์ ์ฝ ์กฐ๊ฑด (์๊ฐ/๊ธฐ์ /์ด์/ํธํ์ฑ)
|
|
15
25
|
- **Options**: ๊ณ ๋ คํ ๋์๋ค
|
|
16
26
|
- **Decision**: ์ต์ข
์ ํ
|
|
17
27
|
- **Rationale**: ์ ํ ์ด์
|
|
28
|
+
- **Trace**:
|
|
29
|
+
- **DOING ์์ ์์ **: ์ด๊ธฐ ํ๋จ/๊ฐ์ค
|
|
30
|
+
- **DONE ์ ํ์ ์์ **: ์ ํ ๊ทผ๊ฑฐ ์ต์ข
ํ
|
|
31
|
+
- **๋จธ์ง ํ ํ์ธ**: ์ค์ ๊ฒฐ๊ณผ/์ํฅ
|
|
32
|
+
- **Evidence**:
|
|
33
|
+
- **Commit**: ์ปค๋ฐ ํด์ ๋๋ ๋งํฌ
|
|
34
|
+
- **PR**: PR ๋งํฌ
|
|
35
|
+
- **Test/Log**: ํ
์คํธ ๊ฒฐ๊ณผ/๋ก๊ทธ/์คํฌ๋ฆฐ์ท ๊ฒฝ๋ก
|
|
18
36
|
- **Consequences**: ๊ฒฐ๊ณผ ๋ฐ ์ํฅ (์ ํ์ฌํญ)
|