lee-spec-kit 0.4.0 β†’ 0.4.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/dist/index.js CHANGED
@@ -1049,7 +1049,7 @@ var I18N = {
1049
1049
  planWrite: "plan.md \uC791\uC131",
1050
1050
  planApprove: "plan.md \uC2B9\uC778",
1051
1051
  tasksWrite: "tasks.md \uC791\uC131",
1052
- docsCommitPlanning: "\uBB38\uC11C \uCEE4\uBC0B(\uAE30\uD68D)",
1052
+ docsCommitPlanning: "\uBB38\uC11C \uCEE4\uBC0B(\uB3D9\uAE30\uD654)",
1053
1053
  issueCreate: "GitHub Issue \uC0DD\uC131",
1054
1054
  branchCreate: "\uBE0C\uB79C\uCE58 \uC0DD\uC131",
1055
1055
  tasksExecute: "\uD0DC\uC2A4\uD06C \uC2E4\uD589",
@@ -1066,9 +1066,9 @@ var I18N = {
1066
1066
  planApproval: "plan.md \uB0B4\uC6A9\uC744 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uACF5\uC720\uD558\uACE0 \uC2B9\uC778(OK)\uC744 \uBC1B\uC73C\uC138\uC694.",
1067
1067
  tasksCreate: "tasks.md \uD15C\uD50C\uB9BF\uC744 \uBCF5\uC0AC\uD574 \uD0DC\uC2A4\uD06C\uB97C \uC791\uC131\uD558\uC138\uC694. (features/feature-base/tasks.md \uCC38\uACE0)",
1068
1068
  tasksNeedAtLeastOne: "tasks.md\uC5D0 \uCD5C\uC18C 1\uAC1C \uC774\uC0C1\uC758 \uD0DC\uC2A4\uD06C\uB97C \uC791\uC131\uD558\uC138\uC694.",
1069
- docsCommitPlanning: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs({folderName}): \uAE30\uD68D \uBB38\uC11C \uC791\uC131"',
1069
+ docsCommitPlanning: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs(planning): {folderName} \uAE30\uD68D \uBB38\uC11C"',
1070
1070
  issueCreateAndWrite: "GitHub Issue\uB97C \uC0DD\uC131\uD55C \uB4A4, spec.md/tasks.md\uC758 \uC774\uC288 \uBC88\uD638\uB97C \uCC44\uC6B0\uACE0 \uBB38\uC11C \uCEE4\uBC0B\uC744 \uC900\uBE44\uD558\uC138\uC694. (skills/create-issue.md \uCC38\uACE0)",
1071
- docsCommitIssueUpdate: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs({folderName}): \uC774\uC288 #{issueNumber} \uBC18\uC601"',
1071
+ docsCommitIssueUpdate: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs(#{issueNumber}): {folderName} \uBB38\uC11C \uC5C5\uB370\uC774\uD2B8"',
1072
1072
  standaloneNeedsProjectRoot: "standalone \uBAA8\uB4DC\uC5D0\uC11C\uB294 projectRoot \uC124\uC815\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. (npx lee-spec-kit config --project-root ...)",
1073
1073
  createBranch: 'cd "{projectGitCwd}" && git checkout -b feat/{issueNumber}-{slug}',
1074
1074
  tasksAllDoneButNoChecklist: '\uBAA8\uB4E0 \uD0DC\uC2A4\uD06C\uAC00 DONE\uC774\uC9C0\uB9CC \uC644\uB8CC \uC870\uAC74 \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uC139\uC158\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. tasks.md\uC758 "\uC644\uB8CC \uC870\uAC74" \uC139\uC158\uC744 \uCD94\uAC00/\uD655\uC778\uD558\uC138\uC694.',
@@ -1097,7 +1097,7 @@ var I18N = {
1097
1097
  planWrite: "Write plan.md",
1098
1098
  planApprove: "Approve plan.md",
1099
1099
  tasksWrite: "Write tasks.md",
1100
- docsCommitPlanning: "Commit planning docs",
1100
+ docsCommitPlanning: "Commit docs (sync)",
1101
1101
  issueCreate: "Create GitHub Issue",
1102
1102
  branchCreate: "Create branch",
1103
1103
  tasksExecute: "Execute tasks",
@@ -1114,9 +1114,9 @@ var I18N = {
1114
1114
  planApproval: "Share plan.md with the user and get approval (OK).",
1115
1115
  tasksCreate: "Copy the tasks.md template and write tasks. (See features/feature-base/tasks.md)",
1116
1116
  tasksNeedAtLeastOne: "Add at least one task to tasks.md.",
1117
- docsCommitPlanning: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs({folderName}): planning docs"',
1117
+ docsCommitPlanning: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs(planning): {folderName} planning docs"',
1118
1118
  issueCreateAndWrite: "Create a GitHub Issue, then fill in the issue number in spec.md/tasks.md and prepare to commit docs. (See skills/create-issue.md)",
1119
- docsCommitIssueUpdate: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs({folderName}): issue #{issueNumber}"',
1119
+ docsCommitIssueUpdate: 'cd "{docsGitCwd}" && git add "{featurePath}" && git commit -m "docs(#{issueNumber}): {folderName} docs update"',
1120
1120
  standaloneNeedsProjectRoot: "In standalone mode, projectRoot is required. (npx lee-spec-kit config --project-root ...)",
1121
1121
  createBranch: 'cd "{projectGitCwd}" && git checkout -b feat/{issueNumber}-{slug}',
1122
1122
  tasksAllDoneButNoChecklist: 'All tasks are DONE but no completion checklist section was found. Add/verify the "Completion Criteria" section in tasks.md.',
@@ -1226,12 +1226,21 @@ function getStepDefinitions(lang) {
1226
1226
  step: 6,
1227
1227
  name: tr(lang, "steps", "tasksWrite"),
1228
1228
  checklist: {
1229
- done: (f) => f.docs.tasksExists && f.tasks.total > 0,
1229
+ done: (f) => f.docs.tasksExists && f.tasks.total > 0 && f.docs.prFieldExists && f.docs.prStatusFieldExists,
1230
1230
  detail: (f) => f.tasks.total > 0 ? `(${f.tasks.total})` : ""
1231
1231
  },
1232
1232
  current: {
1233
- when: (f) => f.planStatus === "Approved" && (!f.docs.tasksExists || f.tasks.total === 0),
1233
+ when: (f) => f.planStatus === "Approved" && (!f.docs.tasksExists || f.tasks.total === 0 || f.docs.tasksExists && f.tasks.total > 0 && (!f.docs.prFieldExists || !f.docs.prStatusFieldExists)),
1234
1234
  actions: (f) => {
1235
+ if (f.docs.tasksExists && f.tasks.total > 0 && (!f.docs.prFieldExists || !f.docs.prStatusFieldExists)) {
1236
+ return [
1237
+ {
1238
+ type: "instruction",
1239
+ requiresUserOk: true,
1240
+ message: tr(lang, "messages", "prLegacyAsk")
1241
+ }
1242
+ ];
1243
+ }
1235
1244
  if (!f.docs.tasksExists) {
1236
1245
  return [
1237
1246
  {
@@ -1253,40 +1262,24 @@ function getStepDefinitions(lang) {
1253
1262
  step: 7,
1254
1263
  name: tr(lang, "steps", "docsCommitPlanning"),
1255
1264
  checklist: {
1256
- done: (f) => f.issueNumber ? true : f.docs.tasksExists && f.tasks.total > 0 && f.specStatus === "Approved" && f.planStatus === "Approved" && !f.git.docsHasUncommittedChanges
1265
+ done: (f) => f.docs.tasksExists && f.tasks.total > 0 && f.specStatus === "Approved" && f.planStatus === "Approved" && !f.git.docsHasUncommittedChanges
1257
1266
  },
1258
1267
  current: {
1259
- when: (f) => f.docs.tasksExists && f.tasks.total > 0 && f.specStatus === "Approved" && f.planStatus === "Approved" && !f.issueNumber && f.git.docsHasUncommittedChanges,
1260
- actions: (f) => [
1261
- {
1262
- type: "command",
1263
- requiresUserOk: true,
1264
- scope: "docs",
1265
- cwd: f.git.docsGitCwd,
1266
- cmd: tr(lang, "messages", "docsCommitPlanning", {
1267
- docsGitCwd: f.git.docsGitCwd,
1268
- featurePath: f.docs.featurePathFromDocs,
1269
- folderName: f.folderName
1270
- })
1271
- }
1272
- ]
1273
- }
1274
- },
1275
- {
1276
- step: 8,
1277
- name: tr(lang, "steps", "issueCreate"),
1278
- checklist: {
1279
- done: (f) => !!f.issueNumber && !f.git.docsHasUncommittedChanges
1280
- },
1281
- current: {
1282
- when: (f) => f.docs.tasksExists && f.tasks.total > 0 && f.specStatus === "Approved" && f.planStatus === "Approved" && (!f.issueNumber || f.git.docsHasUncommittedChanges),
1268
+ when: (f) => f.docs.tasksExists && f.tasks.total > 0 && f.specStatus === "Approved" && f.planStatus === "Approved" && !f.activeTask && f.git.docsHasUncommittedChanges,
1283
1269
  actions: (f) => {
1284
- if (!f.issueNumber) {
1270
+ if (f.issueNumber) {
1285
1271
  return [
1286
1272
  {
1287
- type: "instruction",
1273
+ type: "command",
1288
1274
  requiresUserOk: true,
1289
- message: tr(lang, "messages", "issueCreateAndWrite")
1275
+ scope: "docs",
1276
+ cwd: f.git.docsGitCwd,
1277
+ cmd: tr(lang, "messages", "docsCommitIssueUpdate", {
1278
+ docsGitCwd: f.git.docsGitCwd,
1279
+ featurePath: f.docs.featurePathFromDocs,
1280
+ issueNumber: f.issueNumber,
1281
+ folderName: f.folderName
1282
+ })
1290
1283
  }
1291
1284
  ];
1292
1285
  }
@@ -1296,10 +1289,9 @@ function getStepDefinitions(lang) {
1296
1289
  requiresUserOk: true,
1297
1290
  scope: "docs",
1298
1291
  cwd: f.git.docsGitCwd,
1299
- cmd: tr(lang, "messages", "docsCommitIssueUpdate", {
1292
+ cmd: tr(lang, "messages", "docsCommitPlanning", {
1300
1293
  docsGitCwd: f.git.docsGitCwd,
1301
1294
  featurePath: f.docs.featurePathFromDocs,
1302
- issueNumber: f.issueNumber,
1303
1295
  folderName: f.folderName
1304
1296
  })
1305
1297
  }
@@ -1307,6 +1299,25 @@ function getStepDefinitions(lang) {
1307
1299
  }
1308
1300
  }
1309
1301
  },
1302
+ {
1303
+ step: 8,
1304
+ name: tr(lang, "steps", "issueCreate"),
1305
+ checklist: {
1306
+ done: (f) => !!f.issueNumber
1307
+ },
1308
+ current: {
1309
+ when: (f) => f.docs.tasksExists && f.tasks.total > 0 && f.specStatus === "Approved" && f.planStatus === "Approved" && !f.issueNumber,
1310
+ actions: (f) => {
1311
+ return [
1312
+ {
1313
+ type: "instruction",
1314
+ requiresUserOk: true,
1315
+ message: tr(lang, "messages", "issueCreateAndWrite")
1316
+ }
1317
+ ];
1318
+ }
1319
+ }
1320
+ },
1310
1321
  {
1311
1322
  step: 9,
1312
1323
  name: tr(lang, "steps", "branchCreate"),
@@ -1661,7 +1672,7 @@ function parseCompletionChecklist(content) {
1661
1672
  async function parseFeature(featurePath, type, context, options) {
1662
1673
  const lang = options.lang;
1663
1674
  const folderName = path4.basename(featurePath);
1664
- const match = folderName.match(/^(F\\d+)-(.+)$/);
1675
+ const match = folderName.match(/^(F\d+)-(.+)$/);
1665
1676
  const id = match?.[1];
1666
1677
  const slug = match?.[2] || folderName;
1667
1678
  const specPath = path4.join(featurePath, "spec.md");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lee-spec-kit",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Project documentation structure generator for AI-assisted development",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,7 +20,7 @@ npx lee-spec-kit context
20
20
  Execute the `πŸ‘‰ Next Action` exactly as printed by the CLI.
21
21
 
22
22
  - If the CLI points to an active task, focus on that task only.
23
- - If there is no active task, pick the next `[TODO]` task, switch it to `[DOING]`, and start.
23
+ - If there is no active task, **share the task title and get user approval (OK)**, then switch the next `[TODO]` task to `[DOING]` and start.
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
 
26
26
  ### Step 3: Update tasks.md (only what you did)
@@ -12,7 +12,7 @@ Operating rules for AI code assistants to perform consistent code generation and
12
12
  | Action | When to Confirm | What to Share |
13
13
  | --------------------- | ------------------------ | ------------------------- |
14
14
  | Spec Writing | After writing `spec.md` | Full spec content |
15
- | Task Execution | Before each task | Execution plan |
15
+ | Task Execution | Before each task | Task title |
16
16
  | Commit Creation | Before `git commit` | Commit message, file list |
17
17
  | Issue Creation | Before `gh issue create` | Title, body, labels |
18
18
  | PR Creation | Before `gh pr create` | Title, body, labels |
@@ -12,7 +12,7 @@ Operating rules for AI code assistants to perform consistent code generation and
12
12
  | Action | When to Confirm | What to Share |
13
13
  | --------------------- | ------------------------ | ------------------------- |
14
14
  | Spec Writing | After writing `spec.md` | Full spec content |
15
- | Task Execution | Before each task | Execution plan |
15
+ | Task Execution | Before each task | Task title |
16
16
  | Commit Creation | Before `git commit` | Commit message, file list |
17
17
  | Issue Creation | Before `gh issue create` | Title, body, labels |
18
18
  | PR Creation | Before `gh pr create` | Title, body, labels |
@@ -22,7 +22,7 @@ npx lee-spec-kit context
22
22
  CLIκ°€ κ°€λ¦¬ν‚€λŠ” **Active Task** λ˜λŠ” **Next Action**을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
23
23
 
24
24
  - **[DOING] μƒνƒœμΈ νƒœμŠ€ν¬κ°€ μžˆλ‹€λ©΄**: ν•΄λ‹Ή νƒœμŠ€ν¬λ₯Ό μ΅œμš°μ„ μœΌλ‘œ μ™„λ£Œν•˜μ„Έμš”.
25
- - **[DOING]이 μ—†λ‹€λ©΄**: CLIκ°€ μΆ”μ²œν•˜λŠ” λ‹€μŒ νƒœμŠ€ν¬(`[TODO]`)λ₯Ό μ‹œμž‘(`[DOING]`)ν•˜μ„Έμš”.
25
+ - **[DOING]이 μ—†λ‹€λ©΄**: CLIκ°€ μΆ”μ²œν•˜λŠ” λ‹€μŒ νƒœμŠ€ν¬(`[TODO]`)λ₯Ό μ‹œμž‘ν•˜κΈ° 전에, **νƒœμŠ€ν¬ 제λͺ©μ„ κ³΅μœ ν•˜κ³  μ‚¬μš©μž 승인(OK)을 받은 λ’€** `[DOING]`으둜 λ³€κ²½ν•˜μ„Έμš”.
26
26
  - **μ™„λ£Œ 쑰건(Acceptance)을 검증**ν•˜κ³ , ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•΄μ•Όλ§Œ μ™„λ£Œ(`[DONE]`) μ²˜λ¦¬ν•©λ‹ˆλ‹€.
27
27
  - CLIκ°€ λͺ…λ Ήμ–΄λ₯Ό 좜λ ₯ν•˜λ©΄ **κ·ΈλŒ€λ‘œ 볡사해 μ‹€ν–‰**ν•©λ‹ˆλ‹€. (standalone ν™˜κ²½μ—μ„œλ„ 레포 κ²½λ‘œκ°€ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€)
28
28
 
@@ -12,7 +12,7 @@
12
12
  | μž‘μ—… | 확인 μ‹œμ  | 곡유 λ‚΄μš© |
13
13
  | ------------- | -------------------- | --------------------------- |
14
14
  | μŠ€νŽ™ μž‘μ„± | `spec.md` μž‘μ„± ν›„ | μŠ€νŽ™ λ‚΄μš© μ „λ¬Έ |
15
- | νƒœμŠ€ν¬ μ‹€ν–‰ | 각 νƒœμŠ€ν¬ μ‹œμž‘ μ „ | μ‹€ν–‰ κ³„νš |
15
+ | νƒœμŠ€ν¬ μ‹€ν–‰ | 각 νƒœμŠ€ν¬ μ‹œμž‘ μ „ | νƒœμŠ€ν¬ 제λͺ© |
16
16
  | 컀밋 생성 | `git commit` μ „ | 컀밋 λ©”μ‹œμ§€, 포함 파일 λͺ©λ‘ |
17
17
  | 이슈 생성 | `gh issue create` μ „ | 제λͺ©, λ³Έλ¬Έ, 라벨 |
18
18
  | PR 생성 | `gh pr create` μ „ | 제λͺ©, λ³Έλ¬Έ, 라벨 |
@@ -12,7 +12,7 @@
12
12
  | μž‘μ—… | 확인 μ‹œμ  | 곡유 λ‚΄μš© |
13
13
  | ------------- | -------------------- | --------------------------- |
14
14
  | μŠ€νŽ™ μž‘μ„± | `spec.md` μž‘μ„± ν›„ | μŠ€νŽ™ λ‚΄μš© μ „λ¬Έ |
15
- | νƒœμŠ€ν¬ μ‹€ν–‰ | 각 νƒœμŠ€ν¬ μ‹œμž‘ μ „ | μ‹€ν–‰ κ³„νš |
15
+ | νƒœμŠ€ν¬ μ‹€ν–‰ | 각 νƒœμŠ€ν¬ μ‹œμž‘ μ „ | νƒœμŠ€ν¬ 제λͺ© |
16
16
  | 컀밋 생성 | `git commit` μ „ | 컀밋 λ©”μ‹œμ§€, 포함 파일 λͺ©λ‘ |
17
17
  | 이슈 생성 | `gh issue create` μ „ | 제λͺ©, λ³Έλ¬Έ, 라벨 |
18
18
  | PR 생성 | `gh pr create` μ „ | 제λͺ©, λ³Έλ¬Έ, 라벨 |