@simplysm/sd-claude 14.0.65 → 14.0.68

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.
Files changed (241) hide show
  1. package/claude/references/sd-requirement-source-handling.md +64 -0
  2. package/claude/references/sd-simplysm14/README.md +44 -40
  3. package/claude/references/sd-simplysm14/apis/angular/README.md +95 -0
  4. package/claude/references/sd-simplysm14/apis/angular/app-structure.md +49 -0
  5. package/claude/references/sd-simplysm14/apis/angular/buttons.md +42 -0
  6. package/claude/references/sd-simplysm14/apis/angular/crud.md +35 -0
  7. package/claude/references/sd-simplysm14/apis/angular/forms.md +63 -0
  8. package/claude/references/sd-simplysm14/apis/angular/infrastructure.md +80 -0
  9. package/claude/references/sd-simplysm14/apis/angular/kanban.md +33 -0
  10. package/claude/references/sd-simplysm14/apis/angular/layout.md +41 -0
  11. package/claude/references/sd-simplysm14/apis/angular/modal.md +63 -0
  12. package/claude/references/sd-simplysm14/apis/angular/routing.md +45 -0
  13. package/claude/references/sd-simplysm14/apis/angular/select-dropdown.md +35 -0
  14. package/claude/references/sd-simplysm14/apis/angular/selection-managers.md +50 -0
  15. package/claude/references/sd-simplysm14/apis/angular/shared-data.md +42 -0
  16. package/claude/references/sd-simplysm14/apis/angular/sheet.md +52 -0
  17. package/claude/references/sd-simplysm14/apis/angular/toast.md +46 -0
  18. package/claude/references/sd-simplysm14/apis/angular/visual.md +41 -0
  19. package/claude/references/sd-simplysm14/apis/capacitor-plugin-auto-update/README.md +76 -0
  20. package/claude/references/sd-simplysm14/apis/capacitor-plugin-file-system/README.md +83 -0
  21. package/claude/references/sd-simplysm14/apis/capacitor-plugin-intent/README.md +80 -0
  22. package/claude/references/sd-simplysm14/apis/capacitor-plugin-usb-storage/README.md +39 -0
  23. package/claude/references/sd-simplysm14/apis/core-browser/README.md +112 -0
  24. package/claude/references/sd-simplysm14/apis/core-common/README.md +53 -0
  25. package/claude/references/sd-simplysm14/apis/core-common/extensions.md +123 -0
  26. package/claude/references/sd-simplysm14/apis/core-common/features.md +46 -0
  27. package/claude/references/sd-simplysm14/apis/core-common/types.md +114 -0
  28. package/claude/references/sd-simplysm14/apis/core-common/utils.md +158 -0
  29. package/claude/references/sd-simplysm14/apis/core-node/README.md +12 -0
  30. package/claude/references/sd-simplysm14/apis/core-node/consola.md +64 -0
  31. package/claude/references/sd-simplysm14/apis/core-node/cpx.md +52 -0
  32. package/claude/references/sd-simplysm14/apis/core-node/fs-watcher.md +53 -0
  33. package/claude/references/sd-simplysm14/apis/core-node/fsx.md +81 -0
  34. package/claude/references/sd-simplysm14/apis/core-node/pathx.md +55 -0
  35. package/claude/references/sd-simplysm14/apis/core-node/worker.md +111 -0
  36. package/claude/references/sd-simplysm14/apis/excel/README.md +81 -0
  37. package/claude/references/sd-simplysm14/apis/lint/README.md +80 -0
  38. package/claude/references/sd-simplysm14/apis/orm-common/README.md +33 -0
  39. package/claude/references/sd-simplysm14/apis/orm-common/db-context.md +77 -0
  40. package/claude/references/sd-simplysm14/apis/orm-common/executable.md +20 -0
  41. package/claude/references/sd-simplysm14/apis/orm-common/expr.md +92 -0
  42. package/claude/references/sd-simplysm14/apis/orm-common/queryable.md +98 -0
  43. package/claude/references/sd-simplysm14/apis/orm-common/schema-builders.md +128 -0
  44. package/claude/references/sd-simplysm14/apis/orm-node/README.md +59 -0
  45. package/claude/references/sd-simplysm14/apis/sd-claude/README.md +9 -0
  46. package/claude/references/sd-simplysm14/apis/sd-cli/README.md +50 -0
  47. package/claude/references/sd-simplysm14/apis/sd-cli/sd-config.md +155 -0
  48. package/claude/references/sd-simplysm14/apis/service-client/README.md +92 -0
  49. package/claude/references/sd-simplysm14/apis/service-common/README.md +29 -0
  50. package/claude/references/sd-simplysm14/apis/service-common/app-structure.md +63 -0
  51. package/claude/references/sd-simplysm14/apis/service-common/messages.md +56 -0
  52. package/claude/references/sd-simplysm14/apis/service-common/protocol.md +64 -0
  53. package/claude/references/sd-simplysm14/apis/service-common/service-types.md +43 -0
  54. package/claude/references/sd-simplysm14/apis/service-server/README.md +20 -0
  55. package/claude/references/sd-simplysm14/apis/service-server/auth.md +31 -0
  56. package/claude/references/sd-simplysm14/apis/service-server/builtin-services.md +47 -0
  57. package/claude/references/sd-simplysm14/apis/service-server/define-service.md +71 -0
  58. package/claude/references/sd-simplysm14/apis/service-server/internals.md +41 -0
  59. package/claude/references/sd-simplysm14/apis/service-server/server.md +66 -0
  60. package/claude/references/sd-simplysm14/apis/storage/README.md +69 -0
  61. package/claude/references/sd-simplysm14/{client-component.md → manuals/client-component.md} +134 -128
  62. package/claude/references/sd-simplysm14/manuals/client-crud.md +102 -0
  63. package/claude/references/sd-simplysm14/manuals/client-demo.md +128 -0
  64. package/claude/references/sd-simplysm14/manuals/client-rules.md +7 -0
  65. package/claude/references/sd-simplysm14/{client-setup.md → manuals/client-setup.md} +2 -2
  66. package/claude/references/sd-simplysm14/{client-tab.md → manuals/client-tab.md} +13 -11
  67. package/claude/references/sd-simplysm14/{orm-union.md → manuals/orm-union.md} +1 -1
  68. package/claude/references/sd-simplysm14/manuals/orm.md +75 -0
  69. package/claude/rules/sd-base-rules.md +191 -79
  70. package/claude/scripts/sd_paths.py +22 -0
  71. package/claude/sd-check-bash.py +19 -0
  72. package/claude/sd-statusline.py +7 -12
  73. package/claude/skills/sd-commit/SKILL.md +8 -3
  74. package/claude/skills/sd-demo/SKILL.md +103 -62
  75. package/claude/skills/sd-demo/evals/fixtures/empty/.specs/260513120000_warehouse/spec.md +45 -0
  76. package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/.specs/260513120000_warehouse/spec.md +42 -0
  77. package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  78. package/claude/skills/sd-demo/evals/fixtures/with-master-screen/.specs/260513120000_warehouse/spec.md +45 -0
  79. package/claude/skills/sd-demo/evals/fixtures/with-master-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  80. package/claude/skills/sd-demo/evals/fixtures/with-modal/.specs/260513120000_warehouse/spec.md +75 -0
  81. package/claude/skills/sd-demo/evals/fixtures/with-modal/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  82. package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md +45 -0
  83. package/claude/skills/sd-demo/evals/fixtures/with-screens/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  84. package/claude/skills/sd-demo/evals/golden.jsonl +5 -3
  85. package/claude/skills/sd-dev/SKILL.md +33 -63
  86. package/claude/skills/sd-dev/evals/fixtures/case-add/package.json +13 -0
  87. package/claude/skills/sd-dev/evals/fixtures/case-add/src/index.ts +10 -0
  88. package/claude/skills/sd-dev/evals/fixtures/case-add/tests/index.test.ts +11 -0
  89. package/claude/skills/sd-dev/evals/fixtures/case-add/tsconfig.json +12 -0
  90. package/claude/skills/sd-dev/evals/fixtures/case-bug/package.json +13 -0
  91. package/claude/skills/sd-dev/evals/fixtures/case-bug/src/index.ts +10 -0
  92. package/claude/skills/sd-dev/evals/fixtures/case-bug/tests/index.test.ts +11 -0
  93. package/claude/skills/sd-dev/evals/fixtures/case-bug/tsconfig.json +12 -0
  94. package/claude/skills/sd-dev/evals/fixtures/case-modify/package.json +13 -0
  95. package/claude/skills/sd-dev/evals/fixtures/case-modify/src/index.ts +10 -0
  96. package/claude/skills/sd-dev/evals/fixtures/case-modify/tests/index.test.ts +11 -0
  97. package/claude/skills/sd-dev/evals/fixtures/case-modify/tsconfig.json +12 -0
  98. package/claude/skills/sd-dev/evals/golden.jsonl +3 -3
  99. package/claude/skills/sd-docs/SKILL.md +53 -0
  100. package/claude/skills/sd-docs/evals/fixtures/new-write/.claude/references/sd-simplysm14/README.md +7 -0
  101. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/package.json +5 -0
  102. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/src/index.ts +3 -0
  103. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/package.json +6 -0
  104. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/src/index.ts +1 -0
  105. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/package.json +5 -0
  106. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/src/index.ts +8 -0
  107. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/README.md +7 -0
  108. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/apis/foo/README.md +3 -0
  109. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/package.json +5 -0
  110. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/src/index.ts +3 -0
  111. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/package.json +6 -0
  112. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/src/index.ts +1 -0
  113. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/package.json +5 -0
  114. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/src/index.ts +8 -0
  115. package/claude/skills/sd-docs/evals/golden.jsonl +2 -0
  116. package/claude/skills/sd-docs/references/subagent-prompt.md +100 -0
  117. package/claude/skills/sd-impl/SKILL.md +149 -46
  118. package/claude/skills/sd-impl/evals/fixtures/case-001-new-screen/spec.md +55 -0
  119. package/claude/skills/sd-impl/evals/fixtures/case-002-auto-process/spec.md +55 -0
  120. package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/packages/client/src/pages/book-list.ts +22 -0
  121. package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/spec.md +57 -0
  122. package/claude/skills/sd-impl/evals/fixtures/case-004-ambiguous-spec/spec.md +58 -0
  123. package/claude/skills/sd-impl/evals/fixtures/case-005-id-mismatch/spec.md +52 -0
  124. package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/client/src/pages//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/251/353/241/235.test.ts +10 -0
  125. package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/client/src/pages//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/251/353/241/235.ts +11 -0
  126. package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/server/src/data-access//352/261/260/353/236/230/354/262/230-/354/240/221/352/267/274.ts +12 -0
  127. package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/packages/server/src/models//352/261/260/353/236/230/354/262/230.ts +8 -0
  128. package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/spec.md +77 -0
  129. package/claude/skills/sd-impl/evals/fixtures/case-new/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
  130. package/claude/skills/sd-impl/evals/fixtures/case-update/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
  131. package/claude/skills/sd-impl/evals/fixtures/case-update/src//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/250/353/215/270.txt +1 -0
  132. package/claude/skills/sd-impl/evals/fixtures/case-update/src//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/251/353/241/235.txt +1 -0
  133. package/claude/skills/sd-impl/evals/golden.jsonl +6 -3
  134. package/claude/skills/sd-impl/references/spec-cross-check.md +82 -0
  135. package/claude/skills/sd-skill/SKILL.md +4 -4
  136. package/claude/skills/sd-skill/evals/golden.jsonl +1 -2
  137. package/claude/skills/sd-skill/references/eval-authoring.md +31 -0
  138. package/claude/skills/sd-skill/references/eval-run.md +1 -1
  139. package/claude/skills/sd-skill/references/skill-authoring.md +8 -5
  140. package/claude/skills/sd-skill/scripts/run_eval.py +39 -60
  141. package/claude/skills/sd-spec/SKILL.md +163 -105
  142. package/claude/skills/sd-spec/references/example-spec.md +585 -0
  143. package/claude/skills/sd-spec/references/spec-authoring.md +287 -0
  144. package/claude/skills/sd-spec/references/spec-md-template.md +15 -93
  145. package/claude/skills/sd-unpack/SKILL.md +7 -1
  146. package/claude/skills/sd-unpack/scripts/handlers/_common.py +10 -0
  147. package/claude/skills/sd-unpack/scripts/handlers/eml_handler.py +5 -13
  148. package/claude/skills/sd-unpack/scripts/handlers/msg_handler.py +3 -12
  149. package/claude/skills/sd-unpack/scripts/handlers/office_com.py +23 -37
  150. package/claude/skills/sd-unpack/scripts/handlers/office_worker.py +1 -4
  151. package/claude/skills/sd-unpack/scripts/handlers/pdf_handler.py +4 -13
  152. package/claude/skills/sd-unpack/scripts/unpack.py +4 -4
  153. package/claude/skills/sd-use/SKILL.md +1 -0
  154. package/claude/skills/sd-wip/SKILL.md +38 -0
  155. package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/_wip.md +3 -0
  156. package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/spec.md +15 -0
  157. package/claude/skills/sd-wip/evals/fixtures/with-existing-wip/.wips/260101120000_acct.md +6 -0
  158. package/claude/skills/sd-wip/evals/fixtures/with-existing-wip-for-compact/.wips/260101120000_acct.md +14 -0
  159. package/claude/skills/sd-wip/evals/golden.jsonl +4 -0
  160. package/claude/skills/sd-wip/references/compact.md +79 -0
  161. package/package.json +1 -1
  162. package/scripts/sd-entries.mjs +2 -2
  163. package/claude/references/sd-simplysm14/orm.md +0 -11
  164. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/spec.md +0 -27
  165. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/.specs/260503143025/overview.md +0 -12
  166. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Button.tsx +0 -12
  167. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Input.tsx +0 -27
  168. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/355/231/224/353/251/264/spec.md +0 -25
  169. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/.specs/260503143025/overview.md +0 -12
  170. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/components/Input.tsx +0 -25
  171. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/pages/.gitkeep +0 -0
  172. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/REQ-001-RTP/354/236/205/353/240/245/355/231/224/353/251/264/spec.md +0 -19
  173. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/REQ-002-RTP/354/266/234/353/240/245/355/231/224/353/251/264/spec.md +0 -20
  174. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/overview.md +0 -16
  175. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Button.tsx +0 -6
  176. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Input.tsx +0 -15
  177. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/pages/.gitkeep +0 -0
  178. package/claude/skills/sd-demo/references/demo-md-template.md +0 -92
  179. package/claude/skills/sd-dev/evals/fixtures/multi-req-stop-after-spec/.docs/20260301_/352/263/240/352/260/235/354/202/254_/354/236/205/352/263/240/354/232/224/354/262/255.eml +0 -5
  180. package/claude/skills/sd-dev/evals/fixtures/multi-req-stop-after-spec/.docs/20260305_/352/263/240/352/260/235/354/202/254_/354/266/234/352/263/240/354/232/224/354/262/255.eml +0 -6
  181. package/claude/skills/sd-dev/evals/fixtures/multi-req-stop-after-spec/.docs/20260310_/352/263/240/352/260/235/354/202/254_/352/266/214/355/225/234.eml +0 -6
  182. package/claude/skills/sd-dev/evals/fixtures/single-req-auto-chain/src/lib/.gitkeep +0 -0
  183. package/claude/skills/sd-dev/evals/fixtures/start-from-plan/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/spec.md +0 -12
  184. package/claude/skills/sd-dev/evals/fixtures/start-from-plan/src/lib/.gitkeep +0 -0
  185. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/plan.md +0 -28
  186. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/spec.md +0 -14
  187. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/components/Input.tsx +0 -6
  188. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/pages/.gitkeep +0 -0
  189. package/claude/skills/sd-impl/evals/fixtures/multi-r/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/plan.md +0 -40
  190. package/claude/skills/sd-impl/evals/fixtures/multi-r/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/spec.md +0 -13
  191. package/claude/skills/sd-impl/evals/fixtures/multi-r/src/components/Input.tsx +0 -25
  192. package/claude/skills/sd-impl/evals/fixtures/multi-r/src/pages/.gitkeep +0 -0
  193. package/claude/skills/sd-impl/evals/fixtures/with-test-file/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/plan.md +0 -26
  194. package/claude/skills/sd-impl/evals/fixtures/with-test-file/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/spec.md +0 -12
  195. package/claude/skills/sd-impl/evals/fixtures/with-test-file/src/lib/.gitkeep +0 -0
  196. package/claude/skills/sd-impl/references/impl-md-template.md +0 -87
  197. package/claude/skills/sd-impl/references/modes-and-failure.md +0 -65
  198. package/claude/skills/sd-plan/SKILL.md +0 -130
  199. package/claude/skills/sd-plan/evals/fixtures/already-implemented/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/spec.md +0 -14
  200. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/api/user.ts +0 -13
  201. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/components/Input.tsx +0 -15
  202. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/pages/UserList.tsx +0 -29
  203. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/spec.md +0 -17
  204. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/components/Input.tsx +0 -6
  205. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/pages/.gitkeep +0 -0
  206. package/claude/skills/sd-plan/evals/fixtures/demo-built/.specs/260503143025/DEMO-001-/352/261/260/353/236/230/354/262/230/demo.md +0 -26
  207. package/claude/skills/sd-plan/evals/fixtures/demo-built/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/355/231/224/353/251/264/spec.md +0 -15
  208. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/components/Input.tsx +0 -25
  209. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/data/mock-customer.ts +0 -16
  210. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/pages/CustomerList.tsx +0 -25
  211. package/claude/skills/sd-plan/evals/golden.jsonl +0 -3
  212. package/claude/skills/sd-plan/references/plan-md-template.md +0 -138
  213. package/claude/skills/sd-spec/evals/fixtures/bulk-multi-source/.docs/20260122_/352/263/240/352/260/235/354/202/254_/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/260/234/354/204/240/354/232/224/354/262/255.eml +0 -20
  214. package/claude/skills/sd-spec/evals/fixtures/bulk-multi-source/.docs/20260205_/352/263/240/352/260/235/354/202/254_/354/266/234/352/263/240/355/231/224/353/251/264/352/264/200/353/240/250.eml +0 -17
  215. package/claude/skills/sd-spec/evals/fixtures/bulk-multi-source/.docs/20260301_/352/263/240/352/260/235/354/202/254_/352/266/214/355/225/234/354/262/264/352/263/204.eml +0 -18
  216. package/claude/skills/sd-spec/evals/fixtures/conflict-detection/.docs/20260317_/352/263/240/352/260/235/354/202/254_/352/270/264/352/270/211/354/262/230/353/246/254/353/260/251/354/271/250.eml +0 -17
  217. package/claude/skills/sd-spec/evals/fixtures/conflict-detection/.docs//355/232/214/354/235/230/353/214/200/353/263/270_20260320.txt +0 -13
  218. package/claude/skills/sd-spec/evals/fixtures/direct-simple/.gitkeep +0 -0
  219. package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/REQ-001-test/spec.md +0 -19
  220. package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/overview.md +0 -18
  221. package/claude/skills/sd-spec/evals/golden.jsonl +0 -4
  222. package/claude/skills/sd-spec/references/overview-md-template.md +0 -89
  223. package/claude/skills/sd-spec/references/raw-input-handling.md +0 -96
  224. package/claude/skills/sd-verify/SKILL.md +0 -96
  225. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/impl.md +0 -20
  226. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/plan.md +0 -14
  227. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/spec.md +0 -12
  228. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.test.ts +0 -11
  229. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.ts +0 -7
  230. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/impl.md +0 -21
  231. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/plan.md +0 -21
  232. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/spec.md +0 -12
  233. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/src/pages/UserList.tsx +0 -19
  234. package/claude/skills/sd-verify/evals/fixtures/tdd-only/.specs/260503143025/REQ-001-/352/270/210/354/225/241/352/262/200/354/246/235/impl.md +0 -19
  235. package/claude/skills/sd-verify/evals/fixtures/tdd-only/.specs/260503143025/REQ-001-/352/270/210/354/225/241/352/262/200/354/246/235/plan.md +0 -14
  236. package/claude/skills/sd-verify/evals/fixtures/tdd-only/.specs/260503143025/REQ-001-/352/270/210/354/225/241/352/262/200/354/246/235/spec.md +0 -12
  237. package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.test.ts +0 -10
  238. package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.ts +0 -7
  239. package/claude/skills/sd-verify/evals/golden.jsonl +0 -3
  240. package/claude/skills/sd-verify/references/verify-md-template.md +0 -99
  241. /package/claude/skills/{sd-demo/evals/fixtures/basic-single-req/src/pages → sd-wip/evals/fixtures/empty}/.gitkeep +0 -0
@@ -0,0 +1,45 @@
1
+ # 창고 관리 요구 분석서
2
+
3
+ ## 1. 개요
4
+
5
+ ### 1.1 핵심 목적
6
+
7
+ 창고 입출고 및 기준정보를 관리한다.
8
+
9
+ ## 4. 화면
10
+
11
+ | § | 분류 | 화면 | 유형 | 장치 |
12
+ | --- | -------- | ------------- | ------ | ---- |
13
+ | 4.1 | 기준정보 | Item Register | 마스터 | PC |
14
+
15
+ ### 4.1 Item Register (PC) [확정: 2026-05-13]
16
+
17
+ Actor: Warehouse Manager
18
+
19
+ 기능 개요:
20
+
21
+ - Register and edit items.
22
+
23
+ 와이어프레임:
24
+
25
+ ```
26
+ ┌──────────────────────────┐
27
+ │ Code [ ] │
28
+ │ Name [ ] │
29
+ │ [Save] [Cancel] │
30
+ └──────────────────────────┘
31
+ ```
32
+
33
+ 항목:
34
+
35
+ **입력 폼**
36
+
37
+ | 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
38
+ | ---- | ------ | ---- | ---------------- | ---- |
39
+ | Code | 텍스트 | O | [모델.Item.code] | - |
40
+ | Name | 텍스트 | O | [모델.Item.name] | - |
41
+
42
+ 동작:
43
+
44
+ - [Save]: Save the form.
45
+ - [Cancel]: Reset the form.
@@ -0,0 +1,42 @@
1
+ # 창고 관리 요구 분석서
2
+
3
+ ## 1. 개요
4
+
5
+ ### 1.1 핵심 목적
6
+
7
+ 창고 입출고 및 기준정보를 관리한다.
8
+
9
+ ## 4. 화면
10
+
11
+ | § | 분류 | 화면 | 유형 | 장치 |
12
+ | --- | ---- | --------- | ---- | ---- |
13
+ | 4.1 | 메인 | Dashboard | 조회 | PC |
14
+
15
+ ### 4.1 Dashboard (PC) [확정: 2026-05-13]
16
+
17
+ Actor: Warehouse Manager
18
+
19
+ 기능 개요:
20
+
21
+ - Show warehouse summary.
22
+
23
+ 와이어프레임:
24
+
25
+ ```
26
+ ┌──────────────────────────┐
27
+ │ Total stock: ____ │
28
+ │ [Refresh] │
29
+ └──────────────────────────┘
30
+ ```
31
+
32
+ 항목:
33
+
34
+ **입력 폼**
35
+
36
+ | 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
37
+ | ----------- | ---- | ---- | ----------- | -------------------- |
38
+ | Total stock | 숫자 | X | - | 표시 전용 (readonly) |
39
+
40
+ 동작:
41
+
42
+ - [Refresh]: Refresh data.
@@ -0,0 +1,33 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ViewEncapsulation,
5
+ signal,
6
+ } from "@angular/core";
7
+ import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
8
+
9
+ @Component({
10
+ selector: "app-dashboard-view",
11
+ standalone: true,
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ encapsulation: ViewEncapsulation.None,
14
+ imports: [SdBaseContainer],
15
+ template: `
16
+ <sd-base-container
17
+ [(ready)]="ready"
18
+ [initialized]="initialized()"
19
+ [(busyCount)]="busyCount"
20
+ [viewType]="viewType()"
21
+ >
22
+ <ng-template #contentTpl>
23
+ <div class="p-default">Existing Dashboard - manually edited</div>
24
+ </ng-template>
25
+ </sd-base-container>
26
+ `,
27
+ })
28
+ export class DashboardView {
29
+ ready = signal(false);
30
+ initialized = signal(true);
31
+ busyCount = signal(0);
32
+ viewType = injectViewTypeSignal();
33
+ }
@@ -0,0 +1,45 @@
1
+ # 창고 관리 요구 분석서
2
+
3
+ ## 1. 개요
4
+
5
+ ### 1.1 핵심 목적
6
+
7
+ 창고 입출고 및 기준정보를 관리한다.
8
+
9
+ ## 4. 화면
10
+
11
+ | § | 분류 | 화면 | 유형 | 장치 |
12
+ | --- | -------- | --------------- | ------ | ---- |
13
+ | 4.1 | 기준정보 | Location Master | 마스터 | PC |
14
+
15
+ ### 4.1 Location Master (PC) [확정: 2026-05-13]
16
+
17
+ Actor: Warehouse Admin
18
+
19
+ 기능 개요:
20
+
21
+ - 창고 로케이션 마스터를 관리한다 (등록·수정·삭제·복구·엑셀 입출력 포함 표준 마스터 화면).
22
+
23
+ 와이어프레임:
24
+
25
+ ```
26
+ [등록] [선택 삭제] [선택 복구] [엑셀 업로드] [엑셀 다운로드]
27
+ | [ ] | ID | 코드 | 이름 |
28
+ | [ ] | [E 2] | L-02 | 2층 창고 |
29
+ | [ ] | [E 1] | L-01 | 1층 창고 |
30
+ ```
31
+
32
+ 범례: `[ ]` = 행 선택 체크박스, `[E N]` = 편집 버튼 (N = ID). 클릭 시 인라인 편집.
33
+
34
+ 항목:
35
+
36
+ **시트 컬럼**
37
+
38
+ | 컬럼 | 종류 | 도메인 매핑 | 비고 |
39
+ | ---- | ------ | -------------------- | ---- |
40
+ | 코드 | 텍스트 | [모델.Location.code] | - |
41
+ | 이름 | 텍스트 | [모델.Location.name] | - |
42
+
43
+ 동작:
44
+
45
+ - 표준 마스터 동작 (등록·선택 삭제·선택 복구·엑셀 업/다운로드·ID 편집 클릭 시 인라인 편집).
@@ -0,0 +1,33 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ViewEncapsulation,
5
+ signal,
6
+ } from "@angular/core";
7
+ import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
8
+
9
+ @Component({
10
+ selector: "app-dashboard-view",
11
+ standalone: true,
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ encapsulation: ViewEncapsulation.None,
14
+ imports: [SdBaseContainer],
15
+ template: `
16
+ <sd-base-container
17
+ [(ready)]="ready"
18
+ [initialized]="initialized()"
19
+ [(busyCount)]="busyCount"
20
+ [viewType]="viewType()"
21
+ >
22
+ <ng-template #contentTpl>
23
+ <div class="p-default">대시보드</div>
24
+ </ng-template>
25
+ </sd-base-container>
26
+ `,
27
+ })
28
+ export class DashboardView {
29
+ ready = signal(false);
30
+ initialized = signal(true);
31
+ busyCount = signal(0);
32
+ viewType = injectViewTypeSignal();
33
+ }
@@ -0,0 +1,75 @@
1
+ # 창고 관리 요구 분석서
2
+
3
+ ## 1. 개요
4
+
5
+ ### 1.1 핵심 목적
6
+
7
+ 창고 입출고 및 기준정보를 관리한다.
8
+
9
+ ## 4. 화면
10
+
11
+ | § | 분류 | 화면 | 유형 | 장치 |
12
+ | --- | -------- | --------------- | -------- | ---- |
13
+ | 4.1 | 기준정보 | Item List | 조회 | PC |
14
+ | 4.2 | 기준정보 | Item Edit Modal | 트랜잭션 | PC |
15
+
16
+ ### 4.1 Item List (PC) [확정: 2026-05-13]
17
+
18
+ Actor: Warehouse Manager
19
+
20
+ 기능 개요:
21
+
22
+ - Browse items registered in the warehouse.
23
+
24
+ 와이어프레임:
25
+
26
+ ```
27
+ [Register]
28
+ | Code | Name | Edit |
29
+ ```
30
+
31
+ 항목:
32
+
33
+ **시트 컬럼**
34
+
35
+ | 컬럼 | 종류 | 도메인 매핑 | 비고 |
36
+ | ---- | ------ | ---------------- | ---- |
37
+ | Code | 텍스트 | [모델.Item.code] | - |
38
+ | Name | 텍스트 | [모델.Item.name] | - |
39
+
40
+ 동작:
41
+
42
+ - [Register]: → [화면.Item Edit Modal] 을 모달로 띄움.
43
+ - [Edit] (행 버튼): → [화면.Item Edit Modal] 을 모달로 띄움.
44
+
45
+ ### 4.2 Item Edit Modal (PC) [확정: 2026-05-13]
46
+
47
+ Actor: Warehouse Manager
48
+
49
+ 기능 개요:
50
+
51
+ - Create or edit an item via modal.
52
+
53
+ 와이어프레임:
54
+
55
+ ```
56
+ ┌──────────────────────────┐
57
+ │ Code [ ] │
58
+ │ Name [ ] │
59
+ │ [Save] [Cancel] │
60
+ └──────────────────────────┘
61
+ ```
62
+
63
+ 항목:
64
+
65
+ **입력 폼**
66
+
67
+ | 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
68
+ | ---- | ------ | ---- | ---------------- | ---- |
69
+ | Code | 텍스트 | O | [모델.Item.code] | - |
70
+ | Name | 텍스트 | O | [모델.Item.name] | - |
71
+
72
+ 동작:
73
+
74
+ - [Save]: Save and close the modal.
75
+ - [Cancel]: Close without saving.
@@ -0,0 +1,33 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ViewEncapsulation,
5
+ signal,
6
+ } from "@angular/core";
7
+ import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
8
+
9
+ @Component({
10
+ selector: "app-dashboard-view",
11
+ standalone: true,
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ encapsulation: ViewEncapsulation.None,
14
+ imports: [SdBaseContainer],
15
+ template: `
16
+ <sd-base-container
17
+ [(ready)]="ready"
18
+ [initialized]="initialized()"
19
+ [(busyCount)]="busyCount"
20
+ [viewType]="viewType()"
21
+ >
22
+ <ng-template #contentTpl>
23
+ <div class="p-default">대시보드</div>
24
+ </ng-template>
25
+ </sd-base-container>
26
+ `,
27
+ })
28
+ export class DashboardView {
29
+ ready = signal(false);
30
+ initialized = signal(true);
31
+ busyCount = signal(0);
32
+ viewType = injectViewTypeSignal();
33
+ }
@@ -0,0 +1,45 @@
1
+ # 창고 관리 요구 분석서
2
+
3
+ ## 1. 개요
4
+
5
+ ### 1.1 핵심 목적
6
+
7
+ 창고 입출고 및 기준정보를 관리한다.
8
+
9
+ ## 4. 화면
10
+
11
+ | § | 분류 | 화면 | 유형 | 장치 |
12
+ | --- | -------- | ------------- | ------ | ---- |
13
+ | 4.1 | 기준정보 | Item Register | 마스터 | PC |
14
+
15
+ ### 4.1 Item Register (PC) [확정: 2026-05-13]
16
+
17
+ Actor: Warehouse Manager
18
+
19
+ 기능 개요:
20
+
21
+ - Register and edit items.
22
+
23
+ 와이어프레임:
24
+
25
+ ```
26
+ ┌──────────────────────────┐
27
+ │ Code [ ] │
28
+ │ Name [ ] │
29
+ │ [Save] [Cancel] │
30
+ └──────────────────────────┘
31
+ ```
32
+
33
+ 항목:
34
+
35
+ **입력 폼**
36
+
37
+ | 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
38
+ | ---- | ------ | ---- | ---------------- | ---- |
39
+ | Code | 텍스트 | O | [모델.Item.code] | - |
40
+ | Name | 텍스트 | O | [모델.Item.name] | - |
41
+
42
+ 동작:
43
+
44
+ - [Save]: Save the form.
45
+ - [Cancel]: Reset the form.
@@ -0,0 +1,33 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ViewEncapsulation,
5
+ signal,
6
+ } from "@angular/core";
7
+ import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
8
+
9
+ @Component({
10
+ selector: "app-dashboard-view",
11
+ standalone: true,
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ encapsulation: ViewEncapsulation.None,
14
+ imports: [SdBaseContainer],
15
+ template: `
16
+ <sd-base-container
17
+ [(ready)]="ready"
18
+ [initialized]="initialized()"
19
+ [(busyCount)]="busyCount"
20
+ [viewType]="viewType()"
21
+ >
22
+ <ng-template #contentTpl>
23
+ <div class="p-default">대시보드</div>
24
+ </ng-template>
25
+ </sd-base-container>
26
+ `,
27
+ })
28
+ export class DashboardView {
29
+ ready = signal(false);
30
+ initialized = signal(true);
31
+ busyCount = signal(0);
32
+ viewType = injectViewTypeSignal();
33
+ }
@@ -1,3 +1,5 @@
1
- {"id": "basic-single-req-001", "input": "/sd-demo REQ-001 데모 만들어줘", "rubric": [".specs/260503143025/ 안에 'DEMO-' 시작하는 디렉토리가 1개 이상 새로 생성되었는가?", " DEMO-* 디렉토리 안에 'demo.md' 파일이 존재하는가?", "demo.md 본문에 '## 메타', '## 시나리오', '## 만든 파일' 3개 섹션 헤더가 모두 포함되어 있는가?", "demo.md 본문의 '대상 REQ' 표기에 'REQ-001' 포함되어 있는가?", "src/pages/ 디렉토리에 .tsx 확장자 파일이 1개 이상 새로 생성되었는가?", "에이전트의 마지막 텍스트 응답에 '고객' 또는 '시연' 또는 'demo-ready' 하나 이상의 표현이 포함되어 있는가? (사용자에게 시연 알림 단계 도달)"], "fixture": "basic-single-req"}
2
- {"id": "multi-req-domain-001", "input": "/sd-demo REQ-001 REQ-002 묶어서 데모 만들어줘", "rubric": [".specs/260503143025/ 안에 'DEMO-' 시작하는 디렉토리가 1개 이상 새로 생성되었는가?", " DEMO-* 디렉토리 안에 'demo.md' 파일이 존재하는가?", "demo.md 본문의 '대상 REQ' 표기에 'REQ-001' 'REQ-002' 모두 포함되어 있는가?", "src/pages/ 디렉토리에 .tsx 확장자 파일이 2개 이상 새로 생성되었는가? (다중 REQ 대응)", "에이전트의 마지막 텍스트 응답에 '고객' 또는 '시연' 또는 'demo-ready' 하나 이상의 표현이 포함되어 있는가?"], "fixture": "multi-req-domain"}
3
- {"id": "mock-data-policy-001", "input": "/sd-demo REQ-001 데모 만들어줘", "rubric": [".specs/260503143025/ 안에 'DEMO-' 시작하는 디렉토리가 1개 이상 새로 생성되었는가?", "src/data/ 또는 src/mocks/ 또는 그와 유사한 별도 폴더에 mock data 파일이 1 이상 생성되었는가? (페이지 inline 금지)", "그 mock data 파일에 'MOCK_' prefix 붙은 변수/상수가 1개 이상 포함되어 있는가?", " mock data 파일 본문(주석 포함)에 'MOCK' 키워드가 1회 이상 포함되어 있는가?", "src/pages/ 페이지 파일들 본문에 'const mock' 또는 'let mock' 같은 inline mock 데이터 정의가 없는가? (mock data 는 별도 파일에만)"], "fixture": "mock-data-policy"}
1
+ {"id": "simple-screen", "input": "/sd-demo .specs/260513120000_warehouse/spec.md §4.1 화면을 데모로 만들어줘", "rubric": ["packages/app/src/screens/ 아래에 .ts 파일이 1개 이상 생성되었는가? (.specs/, dashboard/ 하위 제외)", "새로 생성된 .ts 파일의 파일명이 권위 규약(<domain>.list.ts / .detail.ts / .view.ts / .modal.ts / .ts) 중 하나의 형식을 따르는가? (.component.ts 형식이면 FAIL)", "새로 생성된 .ts 파일 적어도 하나의 @Component selector 가 'app-' prefix 로 시작하는가?", "새로 생성된 .ts 파일 적어도 하나에 'standalone: true' 가 포함되었는가?", "새로 생성된 .ts 파일 적어도 하나의 템플릿에 'sd-textfield' 또는 '<input' 중 하나가 1개 이상 포함되었는가?", "새로 생성된 .ts 파일 적어도 하나에 '// sd-demo: 더미' 로 시작하는 주석이 1개 이상 있는가?", "새로 생성된 .ts 파일 적어도 하나에 '// sd-demo: 미구현' 으로 시작하는 주석이 1개 이상 있는가?", "기존 packages/app/src/screens/dashboard/dashboard.view.ts 파일이 손실되지 않고 보존되었는가?"], "fixture": "with-screens"}
2
+ {"id": "modal-screen", "input": "/sd-demo .specs/260513120000_warehouse/spec.md §4.1 화면을 데모로 만들어줘", "rubric": ["packages/app/src/screens/ 아래에 .ts 파일이 2개 이상 생성되었는가? (호출 화면 + 모달 화면, dashboard/ 하위 제외)", "새로 생성된 파일 모달 역할 파일이 권위 규약의 '.modal.ts' 접미사를 사용하는가?", "새로 생성된 파일 적어도 하나에 'SdModalProvider' 식별자가 포함되었는가?", "새로 생성된 파일 적어도 하나에 '_sdModal.showAsync(' 호출 코드가 포함되었는가?", "새로 생성된 파일 적어도 하나에 'close' 라는 이름의 output 선언이 포함되었는가?", "기존 packages/app/src/screens/dashboard/dashboard.view.ts 파일이 손실되지 않고 보존되었는가?"], "fixture": "with-modal"}
3
+ {"id": "recall-overwrite", "input": "/sd-demo .specs/260513120000_warehouse/spec.md §4.1 화면을 데모로 만들어줘. 이미 파일이 있으면 ① 덮어쓰기 분기로 진행해줘.", "rubric": ["packages/app/src/screens/dashboard/ 디렉토리 안의 화면 파일이 spec §4.1 'Total stock' 또는 'Refresh' 하나의 문자열을 포함하는가?", "packages/app/src/screens/dashboard/ 디렉토리 안의 화면 파일에 'standalone: true' 포함되었는가?", "packages/app/src/screens/dashboard/ 디렉토리 안의 화면 파일에 '// sd-demo:' 시작하는 주석이 1개 이상 있는가?"], "fixture": "with-existing-screen"}
4
+ {"id": "empty-screen", "input": "/sd-demo .specs/260513120000_warehouse/spec.md 의 §4.1 화면을 데모로 만들어줘", "rubric": ["fixture 안 어딘가에 .ts 파일이 새로 1개 이상 생성되었는가? (.specs/, 메타 파일 제외)", "새로 생성된 파일의 파일명이 권위 규약(<domain>.list.ts / .detail.ts / .view.ts / .modal.ts / .ts) 중 하나의 형식을 따르는가? (.component.ts 형식이면 FAIL)", "새로 생성된 파일 중 적어도 하나의 @Component selector 가 'app-' prefix 로 시작하는가?", "새로 생성된 파일 중 적어도 하나에 'standalone: true' 가 포함되었는가?", "새로 생성된 파일 중 적어도 하나에 'sd-textfield' 또는 '<input' 중 하나가 1개 이상 포함되었는가?", "새로 생성된 파일 중 적어도 하나에 '// sd-demo:' 로 시작하는 주석이 1개 이상 있는가?"], "fixture": "empty"}
5
+ {"id": "master-screen", "input": "/sd-demo .specs/260513120000_warehouse/spec.md 의 §4.1 화면을 데모로 만들어줘", "rubric": ["packages/app/src/screens/ 아래에 새 .ts 파일이 1개 이상 생성되었는가? (dashboard/ 하위 제외)", "새로 생성된 파일의 파일명이 권위 규약의 '.list.ts' 접미사를 사용하는가? (마스터 화면은 sd-crud-list 채택이 표준이며 .list.ts 가 권위 규약)", "새로 생성된 .ts 파일 중 적어도 하나의 템플릿에 'sd-crud-list' selector 가 1개 이상 포함되었는가?", "새로 생성된 .ts 파일 중 적어도 하나에 '// sd-demo:' 로 시작하는 주석이 1개 이상 있는가?"], "fixture": "with-master-screen"}
@@ -1,89 +1,59 @@
1
1
  ---
2
2
  name: sd-dev
3
- description: SD 워크플로(spec/demo/plan/impl/verify) 오케스트레이터. 입력 분석으로 시작 단계를 판별하고, 단일 단위(REQ 1개·R 1개)는 자동 chain, 분기점에서는 멈춤+보고. Use when raw input부터 끝까지 번에 진행하거나, 중간 산출물(spec.md/plan.md)에서 이어서 진행할 때
3
+ description: 코드 변경 요청을 받아 의도 합의·테스트 우선 구현·검증까지 번에 수행한다. Use when 화면 단위 spec 분석이 필요 없는 라이브러리·CLI·내부 모듈의 기능 추가·수정·버그 수정 요청 시.
4
4
  ---
5
5
 
6
- # SD 오케스트레이터
6
+ # sd-dev
7
7
 
8
- 5개 sd-* 스킬(sd-spec/sd-demo/sd-plan/sd-impl/sd-verify)을 입력 따라 자동 chain.
8
+ spec.md 없이 진행하는 가벼운 코드 작업. 의도 합의가 끝나면 분석·계획·구현·검증까지 사용자 추가 개입 없이 자동.
9
9
 
10
- ## 입력 분석 → 시작 스킬
10
+ ## 워크플로
11
11
 
12
- | 입력 상태 | 시작 스킬 |
13
- |---|---|
14
- | spec.md(`상태: specified`) 존재 | sd-plan |
15
- | plan.md(`상태: planned`) 존재 | sd-impl |
16
- | impl.md(`상태: implemented`) 존재 | sd-verify |
17
- | 그 외 (raw input / draft / 없음) | sd-spec |
12
+ ### 1단계: 의도파악
18
13
 
19
- > 입력에 spec.md/plan.md 경로가 명시되어 있거나 사용자가 특정 REQ ID 지목한 경우 그대로 사용.
20
- > 모호하면 그 외로 판단 → sd-spec.
14
+ 사용자 발화를 토대로 무엇을 만들거나 바꿀지 합의. **1건씩 질문 답변 다음 건** (sd-base-rules "결정 근거"). 합의 결과는 대화 메모리에만 (필요 시 사용자가 `/sd-wip`).
21
15
 
22
- ## 자동 chain 분기
16
+ 다음을 확정해야 진행:
23
17
 
24
- ```
25
- sd-spec 끝:
26
- ├─ REQ 1개:
27
- │ ├─ demo 후보 (UI 키워드) → "demo 만들까요?" 묻기
28
- │ │ ├─ Yes → sd-demo → 종료(보고)
29
- │ │ └─ No → 자동 sd-plan
30
- │ └─ demo 불필요 → 자동 sd-plan
31
- └─ REQ N개 → 멈춤(보고)
18
+ - 작업 종류: 신규 추가 / 기존 수정 / 버그 수정
19
+ - 대상 파일·모듈·패키지
20
+ - 변경의 입출력·동작 — 이름·시그니처·예외 동작 등
32
21
 
33
- sd-plan 끝:
34
- ├─ skip-to-verify → 자동 sd-verify
35
- └─ proceed → 자동 sd-impl
22
+ 근거 충분(사용자 발화에 명시 + 기존 코드 패턴 추론 가능)이면 묻지 않고 진행. 외부 자료(시크릿·시안·샘플 데이터)가 필요하면 이 단계에서 요청.
36
23
 
37
- sd-impl → 자동 sd-verify
24
+ ### 2단계: 분석
38
25
 
39
- sd-verify 종료(보고)
40
- ```
26
+ 작업 영역의 코드베이스 분석.
41
27
 
42
- ## demo 필요 판단 (휴리스틱)
28
+ ### 3단계: 계획
43
29
 
44
- spec.md R 항목 본문에 다음 UI 키워드 **1개 이상** 등장 → demo 후보:
45
- - `화면`, `UI`, `표시`, `버튼`, `필드`, `폼`, `목록`, `리스트`, `클릭`, `입력`
30
+ 분석을 토대로 TDD 기반 개발 계획 수립.
46
31
 
47
- 외(백엔드 로직, 마이그레이션, 데이터 변환, 검증 함수 등) → demo 불필요.
32
+ ### 4단계: TDD 사이클
48
33
 
49
- ## sd-* 스킬 호출 방식
34
+ 작업 시작 **테스트 작성 가능 여부** 판정 — 입출력 명확 + 외부 의존 통제 가능한가.
50
35
 
51
- 단계에서 해당 sd-* 스킬을 호출. sd-* 스킬 내부 동작/결정엔 개입 X (sd-* 스킬의 자체 체크포인트가 그대로 통과).
36
+ - **테스트 가능**: **RED GREEN REFACTOR**
37
+ - **RED**: 테스트만 작성 → 러너 실행 → 실패 확인. **이 단계에서 구현 파일 절대 손대지 말 것.**
38
+ - **GREEN**: 통과하는 최소 구현 → 러너 재실행 → 통과 확인.
39
+ - **REFACTOR**: 중복·가독성·기존 패턴 정합 정리 → 통과 유지 확인. 정리할 게 없으면 스킵.
40
+ - **테스트 불가/비효율** (UI 시각·외부 서비스 실호출 등): **구현 → REFACTOR**.
52
41
 
53
- ## 멈춤 보고 형식
42
+ ### 5단계: 코드 정리
54
43
 
55
- ```
56
- [현재까지 만든 것]
57
- - <단계>: <산출물 요약 — 산출물 소비자가 봐도 이해 가능한 자연어>
44
+ 전체 변경분을 한번 훑어 정돈. 4단계 REFACTOR 가 잡지 못한 횡단 이슈와 작업 잔재가 대상.
58
45
 
59
- [멈춤 사유]
60
- - <왜 멈췄는지>
46
+ - **횡단 중복**: 작업 사이클 사이에 동일 로직이 흩어져 있으면 합치기.
47
+ - **인접 코드 패턴 정합**: 코드베이스 컨벤션 vs 실제 작성 — 파일 위치·네이밍·구조.
48
+ - **불필요한 코드**: 미사용 import·변수·주석, 요구 없는 옵션·추상화 제거. 갱신·덮어쓰기 결과로 어디서도 참조되지 않는 파일도 포함. **단 파일 단위 삭제는 후보 목록을 사용자에게 보고 → 확정분만 삭제** (dynamic import·문서 자산 등 보존분 사용자 제외).
49
+ - **매뉴얼 권위 규약**: 코드베이스 매뉴얼 위반 항목 수정.
61
50
 
62
- [다음 권장 액션]
63
- - <다음 단계>를 진행하려면: <명령 예시>
64
- ```
51
+ 정리 단위 테스트 재실행 — 회귀 없음 확인.
65
52
 
66
- ## 종료 시 보고 형식
53
+ ### 6단계: 검증
67
54
 
68
- ```
69
- [완료된 것]
70
- - <REQ ID>: <기능 요약 — 산출물 소비자 이해 가능 자연어>
71
- - 산출물: spec.md / plan.md / impl.md / verify.md (또는 demo.md)
72
- ```
55
+ 산출물이 브라우저 시연이 필요한 화면·UI 면 사용자에게 dev 서버 실행 요청 → `playwright-cli` 로 시연. 그 외(라이브러리·CLI·내부 모듈·서버 함수)는 4단계 단위 테스트 통과로 종결.
73
56
 
74
- ## 핵심 원칙
57
+ ## 운용
75
58
 
76
- - REQ 단일 단위만 자동 chain (REQ 다수 → 멈춤)
77
- - 단계 사이(plan→impl, impl→verify)는 자동 진행
78
- - 자체 산출물 만들지 말 것 (chain만 담당)
79
- - sd-* 스킬 결정엔 개입 X
80
- - demo는 후보 판단 시만 묻기 (강제 X)
81
-
82
- ## 안티패턴
83
-
84
- - ❌ REQ 여러 개를 자동으로 모두 처리 (사용자 결정 필요)
85
- - ❌ sd-impl 안에서 R 사이에 멈춤 (REQ 완료 전 중단 금지)
86
- - ❌ demo를 매번 묻기 (UI 키워드 없으면 안 물음)
87
- - ❌ sd-* 스킬 내부 결정 침범 (예: sd-spec의 Q 풀이를 sd-dev가 대신함)
88
- - ❌ 자체 dev.md 같은 산출물 만들기
89
- - ❌ 멈췄는데 자체 판단으로 "그냥 진행" 하기 (멈춤 = 사용자 결정 대기)
59
+ - 결정 근거: `sd-base-rules.md` "결정 근거" 적용.
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "sd-dev-eval-fixture",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "test": "vitest run"
7
+ },
8
+ "devDependencies": {
9
+ "@types/node": "^20.0.0",
10
+ "typescript": "^5.4.0",
11
+ "vitest": "^2.0.0"
12
+ }
13
+ }
@@ -0,0 +1,10 @@
1
+ export function toCamelCase(input: string): string {
2
+ return input
3
+ .split(/[-_]/)
4
+ .map((part, i) =>
5
+ i === 0
6
+ ? part.toLowerCase()
7
+ : part.charAt(0).toUpperCase() + part.slice(1).toLowerCase(),
8
+ )
9
+ .join("");
10
+ }
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { toCamelCase } from "../src/index.js";
3
+
4
+ describe("toCamelCase", () => {
5
+ it("converts kebab-case to camelCase", () => {
6
+ expect(toCamelCase("foo-bar")).toBe("fooBar");
7
+ });
8
+ it("converts snake_case to camelCase", () => {
9
+ expect(toCamelCase("foo_bar_baz")).toBe("fooBarBaz");
10
+ });
11
+ });
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "strict": true,
7
+ "esModuleInterop": true,
8
+ "skipLibCheck": true,
9
+ "verbatimModuleSyntax": true
10
+ },
11
+ "include": ["src/**/*", "tests/**/*"]
12
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "sd-dev-eval-fixture",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "test": "vitest run"
7
+ },
8
+ "devDependencies": {
9
+ "@types/node": "^20.0.0",
10
+ "typescript": "^5.4.0",
11
+ "vitest": "^2.0.0"
12
+ }
13
+ }
@@ -0,0 +1,10 @@
1
+ export function toCamelCase(input: string): string {
2
+ const parts = input.split(/[-_]/).filter(Boolean);
3
+ return (
4
+ parts[0].toLowerCase() +
5
+ parts
6
+ .slice(1)
7
+ .map((p) => p.charAt(0).toUpperCase() + p.slice(1).toLowerCase())
8
+ .join("")
9
+ );
10
+ }
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { toCamelCase } from "../src/index.js";
3
+
4
+ describe("toCamelCase", () => {
5
+ it("converts kebab-case to camelCase", () => {
6
+ expect(toCamelCase("foo-bar")).toBe("fooBar");
7
+ });
8
+ it("converts snake_case to camelCase", () => {
9
+ expect(toCamelCase("foo_bar_baz")).toBe("fooBarBaz");
10
+ });
11
+ });
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "strict": true,
7
+ "esModuleInterop": true,
8
+ "skipLibCheck": true,
9
+ "verbatimModuleSyntax": true
10
+ },
11
+ "include": ["src/**/*", "tests/**/*"]
12
+ }