@simplysm/sd-claude 14.0.65 → 14.0.66

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 (227) 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} +133 -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 +172 -79
  70. package/claude/sd-check-bash.py +5 -0
  71. package/claude/sd-statusline.py +7 -12
  72. package/claude/skills/sd-commit/SKILL.md +7 -3
  73. package/claude/skills/sd-demo/SKILL.md +81 -62
  74. package/claude/skills/sd-demo/evals/fixtures/empty/.specs/260513120000_warehouse/spec.md +45 -0
  75. package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/.specs/260513120000_warehouse/spec.md +42 -0
  76. package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  77. package/claude/skills/sd-demo/evals/fixtures/with-master-screen/.specs/260513120000_warehouse/spec.md +45 -0
  78. package/claude/skills/sd-demo/evals/fixtures/with-master-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  79. package/claude/skills/sd-demo/evals/fixtures/with-modal/.specs/260513120000_warehouse/spec.md +75 -0
  80. package/claude/skills/sd-demo/evals/fixtures/with-modal/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  81. package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md +45 -0
  82. package/claude/skills/sd-demo/evals/fixtures/with-screens/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  83. package/claude/skills/sd-demo/evals/golden.jsonl +5 -3
  84. package/claude/skills/sd-dev/SKILL.md +33 -63
  85. package/claude/skills/sd-dev/evals/fixtures/case-add/package.json +13 -0
  86. package/claude/skills/sd-dev/evals/fixtures/case-add/src/index.ts +10 -0
  87. package/claude/skills/sd-dev/evals/fixtures/case-add/tests/index.test.ts +11 -0
  88. package/claude/skills/sd-dev/evals/fixtures/case-add/tsconfig.json +12 -0
  89. package/claude/skills/sd-dev/evals/fixtures/case-bug/package.json +13 -0
  90. package/claude/skills/sd-dev/evals/fixtures/case-bug/src/index.ts +10 -0
  91. package/claude/skills/sd-dev/evals/fixtures/case-bug/tests/index.test.ts +11 -0
  92. package/claude/skills/sd-dev/evals/fixtures/case-bug/tsconfig.json +12 -0
  93. package/claude/skills/sd-dev/evals/fixtures/case-modify/package.json +13 -0
  94. package/claude/skills/sd-dev/evals/fixtures/case-modify/src/index.ts +10 -0
  95. package/claude/skills/sd-dev/evals/fixtures/case-modify/tests/index.test.ts +11 -0
  96. package/claude/skills/sd-dev/evals/fixtures/case-modify/tsconfig.json +12 -0
  97. package/claude/skills/sd-dev/evals/golden.jsonl +3 -3
  98. package/claude/skills/sd-docs/SKILL.md +53 -0
  99. package/claude/skills/sd-docs/evals/fixtures/new-write/.claude/references/sd-simplysm14/README.md +7 -0
  100. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/package.json +5 -0
  101. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/src/index.ts +3 -0
  102. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/package.json +6 -0
  103. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/src/index.ts +1 -0
  104. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/package.json +5 -0
  105. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/src/index.ts +8 -0
  106. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/README.md +7 -0
  107. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/apis/foo/README.md +3 -0
  108. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/package.json +5 -0
  109. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/src/index.ts +3 -0
  110. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/package.json +6 -0
  111. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/src/index.ts +1 -0
  112. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/package.json +5 -0
  113. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/src/index.ts +8 -0
  114. package/claude/skills/sd-docs/evals/golden.jsonl +2 -0
  115. package/claude/skills/sd-docs/references/subagent-prompt.md +100 -0
  116. package/claude/skills/sd-impl/SKILL.md +125 -46
  117. package/claude/skills/sd-impl/evals/fixtures/case-new/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
  118. package/claude/skills/sd-impl/evals/fixtures/case-update/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
  119. 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
  120. 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
  121. package/claude/skills/sd-impl/evals/golden.jsonl +2 -3
  122. package/claude/skills/sd-skill/SKILL.md +3 -3
  123. package/claude/skills/sd-skill/evals/golden.jsonl +0 -1
  124. package/claude/skills/sd-skill/references/eval-authoring.md +15 -0
  125. package/claude/skills/sd-skill/references/eval-run.md +1 -1
  126. package/claude/skills/sd-skill/references/skill-authoring.md +8 -5
  127. package/claude/skills/sd-skill/scripts/run_eval.py +39 -60
  128. package/claude/skills/sd-spec/SKILL.md +163 -105
  129. package/claude/skills/sd-spec/references/example-spec.md +585 -0
  130. package/claude/skills/sd-spec/references/spec-authoring.md +287 -0
  131. package/claude/skills/sd-spec/references/spec-md-template.md +15 -93
  132. package/claude/skills/sd-unpack/SKILL.md +7 -1
  133. package/claude/skills/sd-unpack/scripts/handlers/_common.py +10 -0
  134. package/claude/skills/sd-unpack/scripts/handlers/eml_handler.py +5 -13
  135. package/claude/skills/sd-unpack/scripts/handlers/msg_handler.py +3 -12
  136. package/claude/skills/sd-unpack/scripts/handlers/office_com.py +23 -37
  137. package/claude/skills/sd-unpack/scripts/handlers/office_worker.py +1 -4
  138. package/claude/skills/sd-unpack/scripts/handlers/pdf_handler.py +4 -13
  139. package/claude/skills/sd-unpack/scripts/unpack.py +4 -4
  140. package/claude/skills/sd-use/SKILL.md +1 -0
  141. package/claude/skills/sd-wip/SKILL.md +38 -0
  142. package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/_wip.md +3 -0
  143. package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/spec.md +15 -0
  144. package/claude/skills/sd-wip/evals/fixtures/with-existing-wip/.wips/260101120000_acct.md +6 -0
  145. package/claude/skills/sd-wip/evals/fixtures/with-existing-wip-for-compact/.wips/260101120000_acct.md +14 -0
  146. package/claude/skills/sd-wip/evals/golden.jsonl +4 -0
  147. package/claude/skills/sd-wip/references/compact.md +79 -0
  148. package/package.json +1 -1
  149. package/claude/references/sd-simplysm14/orm.md +0 -11
  150. 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
  151. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/.specs/260503143025/overview.md +0 -12
  152. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Button.tsx +0 -12
  153. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Input.tsx +0 -27
  154. 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
  155. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/.specs/260503143025/overview.md +0 -12
  156. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/components/Input.tsx +0 -25
  157. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/pages/.gitkeep +0 -0
  158. 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
  159. 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
  160. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/overview.md +0 -16
  161. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Button.tsx +0 -6
  162. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Input.tsx +0 -15
  163. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/pages/.gitkeep +0 -0
  164. package/claude/skills/sd-demo/references/demo-md-template.md +0 -92
  165. 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
  166. 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
  167. 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
  168. package/claude/skills/sd-dev/evals/fixtures/single-req-auto-chain/src/lib/.gitkeep +0 -0
  169. 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
  170. package/claude/skills/sd-dev/evals/fixtures/start-from-plan/src/lib/.gitkeep +0 -0
  171. 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
  172. 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
  173. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/components/Input.tsx +0 -6
  174. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/pages/.gitkeep +0 -0
  175. 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
  176. 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
  177. package/claude/skills/sd-impl/evals/fixtures/multi-r/src/components/Input.tsx +0 -25
  178. package/claude/skills/sd-impl/evals/fixtures/multi-r/src/pages/.gitkeep +0 -0
  179. 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
  180. 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
  181. package/claude/skills/sd-impl/evals/fixtures/with-test-file/src/lib/.gitkeep +0 -0
  182. package/claude/skills/sd-impl/references/impl-md-template.md +0 -87
  183. package/claude/skills/sd-impl/references/modes-and-failure.md +0 -65
  184. package/claude/skills/sd-plan/SKILL.md +0 -130
  185. 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
  186. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/api/user.ts +0 -13
  187. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/components/Input.tsx +0 -15
  188. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/pages/UserList.tsx +0 -29
  189. 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
  190. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/components/Input.tsx +0 -6
  191. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/pages/.gitkeep +0 -0
  192. 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
  193. 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
  194. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/components/Input.tsx +0 -25
  195. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/data/mock-customer.ts +0 -16
  196. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/pages/CustomerList.tsx +0 -25
  197. package/claude/skills/sd-plan/evals/golden.jsonl +0 -3
  198. package/claude/skills/sd-plan/references/plan-md-template.md +0 -138
  199. 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
  200. 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
  201. 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
  202. 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
  203. 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
  204. package/claude/skills/sd-spec/evals/fixtures/direct-simple/.gitkeep +0 -0
  205. package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/REQ-001-test/spec.md +0 -19
  206. package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/overview.md +0 -18
  207. package/claude/skills/sd-spec/evals/golden.jsonl +0 -4
  208. package/claude/skills/sd-spec/references/overview-md-template.md +0 -89
  209. package/claude/skills/sd-spec/references/raw-input-handling.md +0 -96
  210. package/claude/skills/sd-verify/SKILL.md +0 -96
  211. 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
  212. 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
  213. 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
  214. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.test.ts +0 -11
  215. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.ts +0 -7
  216. 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
  217. 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
  218. 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
  219. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/src/pages/UserList.tsx +0 -19
  220. 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
  221. 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
  222. 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
  223. package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.test.ts +0 -10
  224. package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.ts +0 -7
  225. package/claude/skills/sd-verify/evals/golden.jsonl +0 -3
  226. package/claude/skills/sd-verify/references/verify-md-template.md +0 -99
  227. /package/claude/skills/{sd-demo/evals/fixtures/basic-single-req/src/pages → sd-wip/evals/fixtures/empty}/.gitkeep +0 -0
@@ -1,28 +0,0 @@
1
- # REQ-001-입고지시서긴급표시 / Plan
2
-
3
- ## 메타
4
- - 상태: planned
5
- - 생성일: 2026-05-03
6
- - 마지막 갱신: 2026-05-03
7
- - 결과: proceed
8
-
9
- ## 결과 사유
10
- proceed — R1 미구현, 신규 페이지 + 체크박스 추가 필요.
11
-
12
- ## R 단위 계획
13
- - [ ] R1: 입고지시서 화면 헤더 우측에 "긴급" 체크박스 추가
14
- - **현황**: 미구현 (입고지시서 페이지 자체가 없음)
15
- - **변경 위치**:
16
- - `src/pages/InboundOrder.tsx` (신설) - `InboundOrderForm` 컴포넌트
17
- - **변경 방식**:
18
- - 입고지시서 폼 화면 신설. 헤더 우측에 `<Checkbox label="긴급" />` 배치, formState.urgent와 연동.
19
- - **테스트**:
20
- - 방식: 사후 테스트 (UI 변경)
21
- - 케이스: 체크박스 클릭 → 상태 토글 확인
22
-
23
- ## 작업 순서
24
- - 의존: 없음 (R1 단독)
25
- - 권장 순서: R1
26
-
27
- ## 통합/E2E 테스트
28
- - 입고지시서 폼 진입 → 긴급 체크박스 표시 확인 → 클릭 → 체크 상태 변화 확인
@@ -1,14 +0,0 @@
1
- # REQ-001-입고지시서긴급표시
2
-
3
- ## 메타
4
- - 상태: planned
5
- - 생성일: 2026-05-03
6
- - 마지막 갱신: 2026-05-03
7
- - 관련 영역: WMS / 입고관리
8
-
9
- ## 요약
10
- 입고지시서 화면 헤더에 "긴급" 체크박스 추가.
11
-
12
- ## 세부 요구
13
- - [ ] R1: 입고지시서 화면 헤더 우측에 "긴급" 체크박스 추가
14
- - **A**: 디폴트 unchecked
@@ -1,6 +0,0 @@
1
- // 디자인 시스템 stub
2
- import React from 'react'
3
-
4
- export const Checkbox: React.FC<{ checked: boolean; onChange: (v: boolean) => void; label?: string }> = ({ checked, onChange, label }) => {
5
- return <label><input type="checkbox" checked={checked} onChange={(e) => onChange(e.target.checked)} /> {label}</label>
6
- }
@@ -1,40 +0,0 @@
1
- # REQ-001-거래처목록 / Plan
2
-
3
- ## 메타
4
- - 상태: planned
5
- - 결과: proceed
6
-
7
- ## 결과 사유
8
- proceed — 모두 미구현, 신규 페이지 + 데이터 + 로직 추가 필요.
9
-
10
- ## R 단위 계획
11
- - [ ] R1: 거래처 목록 표시 (이름/사업자번호/담당자/연락처)
12
- - **현황**: 미구현
13
- - **변경 위치**:
14
- - `src/pages/CustomerList.tsx` (신설) - `CustomerList` 컴포넌트
15
- - `src/data/customers.ts` (신설) - 샘플 데이터
16
- - **변경 방식**: Table 컴포넌트로 4개 컬럼 표시
17
- - **테스트**: 사후 (UI 변경)
18
-
19
- - [ ] R2: 거래처명 검색
20
- - **현황**: 미구현
21
- - **변경 위치**:
22
- - `src/pages/CustomerList.tsx` - `CustomerList` 검색 로직 추가
23
- - `src/lib/customer-filter.ts` (신설) - 필터 함수
24
- - **변경 방식**: Input으로 검색어 받고, 부분 일치 필터링
25
- - **테스트**: TDD (필터 함수 단위 테스트)
26
-
27
- - [ ] R3: 페이지네이션 (한 페이지 20건)
28
- - **현황**: 미구현
29
- - **변경 위치**:
30
- - `src/pages/CustomerList.tsx` - 페이지네이션 로직
31
- - `src/lib/paginate.ts` (신설) - 페이지 분할 함수
32
- - **변경 방식**: 20건씩 슬라이스, Pagination 컴포넌트 사용
33
- - **테스트**: TDD (페이지 함수 단위 테스트)
34
-
35
- ## 작업 순서
36
- - 의존: R3는 R2(필터 결과)에 의존
37
- - 권장 순서: R1 → R2 → R3
38
-
39
- ## 통합/E2E 테스트
40
- - 목록 진입 → 검색 → 결과 페이지네이션 동작 확인
@@ -1,13 +0,0 @@
1
- # REQ-001-거래처목록
2
-
3
- ## 메타
4
- - 상태: planned
5
- - 관련 영역: 거래처관리
6
-
7
- ## 요약
8
- 거래처 목록 화면 (검색 + 페이지네이션).
9
-
10
- ## 세부 요구
11
- - [ ] R1: 거래처 목록 표시
12
- - [ ] R2: 거래처명 검색
13
- - [ ] R3: 페이지네이션 (20건/페이지)
@@ -1,25 +0,0 @@
1
- // 디자인 시스템 stub
2
- import React from 'react'
3
-
4
- export const Input: React.FC<{ value: string; onChange: (v: string) => void; placeholder?: string }> = ({ value, onChange, placeholder }) => {
5
- return <input value={value} onChange={(e) => onChange(e.target.value)} placeholder={placeholder} />
6
- }
7
-
8
- export const Table: React.FC<{ rows: any[]; columns: { key: string; label: string }[] }> = ({ rows, columns }) => {
9
- return (
10
- <table>
11
- <thead><tr>{columns.map((c) => <th key={c.key}>{c.label}</th>)}</tr></thead>
12
- <tbody>{rows.map((r, i) => <tr key={i}>{columns.map((c) => <td key={c.key}>{r[c.key]}</td>)}</tr>)}</tbody>
13
- </table>
14
- )
15
- }
16
-
17
- export const Pagination: React.FC<{ page: number; total: number; onChange: (p: number) => void }> = ({ page, total, onChange }) => {
18
- return (
19
- <div>
20
- <button onClick={() => onChange(page - 1)}>이전</button>
21
- <span>{page} / {total}</span>
22
- <button onClick={() => onChange(page + 1)}>다음</button>
23
- </div>
24
- )
25
- }
@@ -1,26 +0,0 @@
1
- # REQ-001-할인계산 / Plan
2
-
3
- ## 메타
4
- - 상태: planned
5
- - 결과: proceed
6
-
7
- ## 결과 사유
8
- proceed — 비즈니스 로직 신규 구현 필요.
9
-
10
- ## R 단위 계획
11
- - [ ] R1: 할인율 계산 함수 (금액별 차등)
12
- - **현황**: 미구현
13
- - **변경 위치**:
14
- - `src/lib/discount.ts` (신설) - `calcDiscountRate(amount: number): number` 함수
15
- - **변경 방식**:
16
- - 100만원 이상: 0.15 / 50만원 이상: 0.10 / 10만원 이상: 0.05 / 그 외: 0
17
- - 큰 구간부터 비교
18
- - **테스트**:
19
- - **방식: TDD** (순수 함수, 비즈니스 로직)
20
- - 케이스: 0원, 99999원, 100000원, 499999원, 500000원, 999999원, 1000000원
21
-
22
- ## 작업 순서
23
- - 의존: 없음
24
-
25
- ## 통합/E2E 테스트
26
- - 단위 함수만 있으므로 통합 시나리오 X (단위 테스트로 충분)
@@ -1,12 +0,0 @@
1
- # REQ-001-할인계산
2
-
3
- ## 메타
4
- - 상태: planned
5
- - 관련 영역: 주문/결제
6
-
7
- ## 요약
8
- 주문 금액에 따른 할인 계산 로직 추가.
9
-
10
- ## 세부 요구
11
- - [ ] R1: 할인율 계산 함수 (금액별 차등: 10만↑ 5%, 50만↑ 10%, 100만↑ 15%)
12
- - **A**: 적용 우선순위는 금액 큰 구간 먼저
@@ -1,87 +0,0 @@
1
- # impl.md 템플릿
2
-
3
- 위치: `.specs/{yyMMdd_HHmmss}/REQ-XXX-슬러그/impl.md`
4
-
5
- ## 템플릿
6
-
7
- ```markdown
8
- # REQ-001-슬러그 / Implementation
9
-
10
- ## 메타
11
- - 상태: implementing | implemented
12
- - 생성일: YYYY-MM-DD
13
- - 마지막 갱신: YYYY-MM-DD
14
-
15
- ## R 단위 구현 결과
16
-
17
- ### R1: <요구 제목>
18
- - **상태**: 진행중 | 완료 | 막힘 | 보류
19
- - **모드**: TDD | 사후 | 생략
20
- - **변경 파일**:
21
- - `<파일경로>`
22
- - 변경 함수: `<함수/컴포넌트명>`
23
- - 변경 종류: 추가 | 수정 | 삭제 | 신설
24
- - **테스트**:
25
- - 추가/수정: `<테스트 파일>`
26
- - 케이스: <케이스 이름들>
27
- - 결과: PASS / FAIL
28
- - **plan 대비 차이**: 없음 | <차이 설명>
29
- - **변경 의도**: spec.md R1 + plan.md R1 그대로 | <사유>
30
- - **이슈/결정**: (있을 때만) <막힘/시도/결정 기록>
31
- ```
32
-
33
- ## 섹션별 역할
34
-
35
- | 섹션 | 용도 |
36
- |---|---|
37
- | `## 메타` | 상태 |
38
- | `## R 단위 구현 결과` | R별 상태/모드/변경/테스트/차이/의도 인라인 통합 |
39
-
40
- ## R 항목 내부 요소
41
-
42
- | 요소 | 의미 |
43
- |---|---|
44
- | **상태** | `완료` / `진행중` / `막힘` / `보류` (종료 시엔 모두 `완료`) |
45
- | **모드** | TDD / 사후 / 생략 |
46
- | **변경 파일** | 파일 경로 + 변경 함수 + 변경 종류 (라인 번호 X) |
47
- | **테스트** | 추가/수정 테스트 + 케이스 + 결과 |
48
- | **plan 대비 차이** | 계획 vs 실제 (verify가 활용) |
49
- | **변경 의도** | 자명하면 "그대로", 자명하지 않으면 사유 |
50
- | **이슈/결정** | (있을 때만) 막힘 상황, 시도 횟수, 결정 |
51
-
52
- `plan 대비 차이`가 "없음"이 아니거나 `이슈/결정`에 결정이 발생한 경우, 결정 출처를 `근거:` 줄로 명시한다.
53
-
54
- ## 예시
55
-
56
- ```markdown
57
- ### R1: 입고지시서 화면에 "긴급" 체크박스 추가
58
- - **상태**: 완료
59
- - **모드**: 사후 테스트
60
- - **변경 파일**:
61
- - `src/pages/InboundOrder.tsx`
62
- - 변경 함수: `InboundOrderForm`
63
- - 변경 종류: 추가 (Checkbox 컴포넌트, formState.urgent 연동)
64
- - **테스트**:
65
- - 추가: `src/pages/InboundOrder.test.tsx`
66
- - 케이스: "체크박스 클릭 → 저장 → 재조회 시 상태 유지"
67
- - 결과: PASS (1/1)
68
- - **plan 대비 차이**: 없음
69
- - **변경 의도**: spec.md R1 + plan.md R1 그대로
70
-
71
- ### R3: 권한 체크 추가
72
- - **상태**: 완료
73
- - **모드**: TDD
74
- - **변경 파일**:
75
- - `src/contexts/PermissionContext.tsx` (신설)
76
- - **테스트**:
77
- - 추가: `src/contexts/PermissionContext.test.tsx`
78
- - 케이스: "권한 있는 사용자 → true" / "권한 없는 사용자 → false"
79
- - 결과: PASS (2/2)
80
- - **plan 대비 차이**: PermissionContext 신설 (plan은 기존 hasPermission 가정)
81
- - 근거: 사용자 답변 (2026-05-04)
82
- - **이슈/결정**:
83
- - 이슈: hasPermission 패턴이 사용 안 되고 있음 발견
84
- - 시도: 1회
85
- - 결정: PermissionContext 신설
86
- - 근거: 사용자 답변 (2026-05-04)
87
- ```
@@ -1,65 +0,0 @@
1
- # 모드별 표준 흐름 + 막힘 처리
2
-
3
- ## 모드별 표준 흐름
4
-
5
-
6
- ### TDD (비즈니스 로직, 알고리즘)
7
- ```
8
- 1. 실패하는 테스트 작성 (RED)
9
- 2. 테스트 실행 → 실패 확인
10
- 3. 통과하는 최소 코드 (GREEN)
11
- 4. 테스트 실행 → 통과 확인
12
- 5. 정리 (REFACTOR)
13
- 6. 테스트 재실행 → 통과 유지
14
- ```
15
-
16
- ### 사후 테스트 (UI, 외부 API)
17
- ```
18
- 1. 코드 작성
19
- 2. 동작 확인
20
- 3. 테스트 작성
21
- 4. 테스트 실행 → 통과 확인
22
- ```
23
-
24
- ### 생략 (마이그레이션, 일회성 스크립트)
25
- ```
26
- 1. 코드 작성
27
- 2. 타입체크/린트 통과 확인
28
- ```
29
-
30
- ### 모드 변경 정책
31
-
32
- implement 도중 "이 R은 plan과 다른 모드 적합" 판단되면:
33
- - **자동 변경 금지**. 사용자에게 Q → 승인 받으면 변경 + impl.md `이슈/결정` 기록.
34
-
35
- ## 막힘 처리
36
-
37
- ### 자동 시도
38
- 단순 에러(타입/린트/단순 테스트 실패)는 **자동 N=2회 시도**:
39
- - 성공 → 다음 단계, impl.md `이슈/결정`에 "N회 시도 후 해결" 기록
40
- - 실패 → 종류별 분기 (아래)
41
-
42
- ### 막힘 종류 (4가지)
43
-
44
- | 종류 | 예시 | 처리 |
45
- |---|---|---|
46
- | 단순 에러 | 타입/린트/단순 테스트 실패 | 자동 N=2회 |
47
- | 코드 문제 | 회귀 검증 실패, 비단순 테스트 실패 | impl.md `상태: 막힘` + Q (해결 방안) |
48
- | 계획 문제 | plan.md ↔ 실제 코드 모순 | impl.md `상태: 보류` + plan 재진입 알림 |
49
- | 정보 부족 | 패턴 모름, 옵션 선택 필요 | impl.md `상태: 막힘` + Q (정보 요청) |
50
-
51
- ### 사용자 답변 후
52
-
53
- - 해결 방안 적용 → 다음 시도
54
- - 우회 → 적용 + impl.md `결정` 기록
55
- - 중단 → implement 단계 중단, plan 재진입
56
-
57
- ### 계획 재진입 절차
58
-
59
- ```
60
- 1. impl.md `상태: 보류` + 사유 기록
61
- 2. plan.md 메타 `상태: re-planning`
62
- 3. 사용자 알림 ("implement 중 X 발견. plan 재토론 필요")
63
- 4. plan 재진입 → 변경된 부분만 재계획 → 새 체크포인트
64
- 5. implement 재개 (보류된 R만 재구현)
65
- ```
@@ -1,130 +0,0 @@
1
- ---
2
- name: sd-plan
3
- description: spec.md(요구사항)를 기존 코드베이스에 매핑하고 R별 변경 계획(위치/방식/테스트)과 작업 순서를 plan.md로 작성하는 스킬. Use when spec 단계 후 implement 진입 전, 변경 계획 수립이 필요할 때
4
- ---
5
-
6
- # plan 단계
7
-
8
- 대상 spec.md 및 관련 자료를 읽고 → 현황 매핑 + 변경 계획 (R별 변경 위치/방식/테스트 + R 간 작업 순서).
9
-
10
- ## 산출물
11
-
12
- ```
13
- .specs/{yyMMdd_HHmmss}/REQ-XXX-슬러그/
14
- spec.md ← 입력 (이미 존재)
15
- plan.md ← 본 단계 산출물
16
- ```
17
-
18
- ## 워크플로
19
-
20
- 1. 입력: 대상 REQ ID
21
-
22
- 2. 읽기: 대상 spec.md + overview.md + raw input(있으면) + 관련 타 spec.md 및 plan.md + 기존 코드베이스
23
- - 특히 "spec.md, overview.md, raw input(있으면), 관련 타 spec.md 및 plan.md"는 반드시 통독할것
24
-
25
- 3. 초안 plan.md 작성 (템플릿: [references/plan-md-template.md](references/plan-md-template.md))
26
- - **R별 현황 매핑** (4단계: 구현/부분/미구현/차이있음)
27
- - **R별 설계** (R 성격별 조건부 — 아래 "R 성격별 설계 정보" 참조)
28
- - **R별 변경 위치** (파일 경로 + 함수/컴포넌트 이름. 라인 번호 X)
29
- - **R별 변경 방식** (자연어. 복잡한 로직만 의사코드)
30
- - **R별 테스트** (방식: TDD/사후/생략 + 케이스)
31
- - **작업 순서** (R 간 의존성, 권장 순서, 병렬 가능 여부)
32
- - **통합/E2E 테스트** (R 간 흐름)
33
- - **결과** 메타 필드 (`proceed` | `skip-to-verify`)
34
- - 결정 근거 없는 부분 → Q. 모든 결정은 plan.md에 근거 출처 명시.
35
-
36
- 4. Q 다이얼로그 (한 번에 하나씩) → 사용자 답변 → 즉시 plan.md 갱신
37
- - **spec 모순 발견 시**: Q로 알림 → 사용자 답변 받아 spec.md 수정 + spec.md 메타 `이력` 기록 → 변경된 R 부분만 재계획. plan 단계 종료 X.
38
-
39
- 5. Q 0개 도달 시 종료 절차:
40
- ```
41
- loop:
42
- plan.md 전체 재검토 (R별 현황/변경 위치/방식 정합성 / 누락 결정거리 / 작업 순서 / 테스트 모드 / 모호 표현 / 미해결 의존)
43
- if 신규 Q 등록됨:
44
- "Q 다이얼로그" 재진입 → Q 0 도달
45
- continue
46
- break
47
-
48
- loop:
49
- 역방향 문서 검토 (overview, spec, demo)
50
- if 신규 모순/수정 등록됨:
51
- "Q 다이얼로그" 재진입 → Q 0 도달
52
- continue
53
- break
54
-
55
- 산출물 소비자 친화적 보고
56
- 상태 ← planned
57
- ```
58
- - 보고: 산출물 소비자가 그대로 읽어도 의도가 전달되는 수준 자연어. REQ 차원 "어디를 어떻게 바꿀지" 요약 (R별 변경 위치/방식 핵심) + 작업 순서 + 결과. 기술 용어 최소화 (단, 파일·함수명 같은 위치 식별자는 필요). 안내 텍스트라 별도 사용자 승인 게이트 X.
59
-
60
- ## 현황 분류 (4단계)
61
-
62
- | 분류 | 의미 |
63
- |---|---|
64
- | **구현** | spec R 의도가 코드에 이미 반영됨 |
65
- | **부분** | R 일부만 구현됨 (예: UI는 있으나 로직 없음) |
66
- | **미구현** | 관련 코드 없음 |
67
- | **차이있음** | 구현되어 있으나 R 의도와 불일치 |
68
-
69
- ## 변경 계획 입도
70
-
71
- - **변경 위치**: 파일 경로 + 함수/컴포넌트 이름 (라인 번호 X — 코드 변경에 취약)
72
- - **변경 방식**: 자연어. 복잡한 로직(상태 머신, 알고리즘)만 의사코드. 완전한 코드 스니펫 X (implement 단계 의미 무력화)
73
-
74
- ## R 성격별 설계 정보
75
-
76
- R의 성격에 따라 "변경 위치/방식"만으로는 산출물 소비자가 그림을 그릴 수 없는 경우가 있다. 아래 표에 해당하는 R은 **설계** 서브섹션을 추가한다. 단순 변경(예: 색상/문구/상수 값)은 생략한다.
77
-
78
- | R 성격 | 설계 서브섹션 내용 |
79
- |---|---|
80
- | **UI** | 레이아웃(좌우 분할/배치/주요 영역), 사용자 이벤트 흐름(클릭→모달→저장 같은 시퀀스), 상태 변화 |
81
- | **API** | 엔드포인트(메서드+경로), 요청/응답 스키마, 에러 케이스, 인증/권한 |
82
- | **데이터 모델** | 스키마 변경(테이블/컬럼/제약), 마이그레이션 전략, 기존 데이터 처리 |
83
- | **외부 연동** | 호출 시퀀스, 실패/재시도/타임아웃 정책, 멱등성 |
84
- | **단순 변경** | (생략) |
85
-
86
- 표현은 **자연어 우선**. 그림이 꼭 필요하면 짧은 ASCII 박스 허용하되 강제는 아님. 예: "좌측 목록 / 우측 상세 폼, 우상단 + 버튼 → 신규 등록 모달".
87
-
88
- **demo 산출물이 있는 UI R**: 레이아웃/이벤트 흐름은 demo.md를 정본으로 삼고, plan에서는 "demo.md 참조" + plan에서 추가로 결정해야 할 부분만 짧게 적는다 (중복 작성 X).
89
-
90
- ## 테스트 모드 선택
91
-
92
- **우선순위: TDD > 사후 테스트 > 생략**. 위에서부터 적용 가능 여부를 따져 가능한 **가장 높은** 모드를 고른다. 낮은 모드로 내려갈수록 테스트가 실제로 작성되지 않을 위험이 커지므로, 안일하게 떨어뜨리지 않는다.
93
-
94
- | 모드 | 적용 조건 | 일반적인 R 성격 |
95
- |---|---|---|
96
- | **TDD** | 입력 → 출력을 코드로 단언 가능 | 비즈니스 로직, 알고리즘, 데이터 변환, 순수 함수, mock 가능한 외부 연동 |
97
- | **사후 테스트** | TDD 불가하지만 동작 후 상태/응답을 코드로 단언 가능 | UI 동작, 실제 외부 API 응답, DB 변경 결과 |
98
- | **생략** | 위 둘 다 불가하거나 검증 비용 대비 가치 낮음 | 일회성 스크립트, 단순 마이그레이션 |
99
-
100
- 판단 모호 → Q. 특히 "TDD로 끌어올릴 여지가 있나?"를 먼저 검토.
101
-
102
- ## 결과
103
-
104
- | 결과 | 의미 | 다음 동작 |
105
- |---|---|---|
106
- | `proceed` | 변경할 R 있음 | implement 진행 |
107
- | `skip-to-verify` | 모든 R 이미 구현됨 | verify 직행 |
108
-
109
- (`back-to-spec` 분기는 없음. spec 모순은 plan 안에서 처리 후 계속.)
110
-
111
- ## 핵심 원칙
112
-
113
- - self-contained 블록 (R 블록 안에 현황/변경/테스트 인라인)
114
- - raw input 불변
115
- - ID 불변
116
- - 자동 판단 금지: 결정 근거 없으면 Q 등록 (현황/모드 판단 포함). 모든 결정은 plan.md에 근거 출처 명시.
117
- - 한 번에 하나씩 Q
118
-
119
- ## 안티패턴
120
-
121
- - ❌ 라인 번호로 변경 위치 표기
122
- - ❌ 변경 방식에 완전한 코드 스니펫
123
- - ❌ 결정 근거 없는 추정을 Q 없이 단정
124
- - ❌ R 단위 정보를 별도 섹션으로 분리 (self-contained 블록 깨짐)
125
- - ❌ 작업 순서를 R 안에 적기 (R 간 관계는 별도 섹션)
126
- - ❌ 마지막 Q 답변 직후 plan.md 전체 재검토 없이 planned 전환
127
- - ❌ 역방향 검토 없이 planned 전환
128
- - ❌ 단순 변경 R(색상/문구/상수)에 설계 서브섹션 추가
129
- - ❌ demo.md가 있는 UI R인데 plan에 레이아웃/이벤트 흐름 중복 작성
130
- - ❌ UI/API/데이터 모델/외부 연동 R인데 설계 서브섹션 누락
@@ -1,14 +0,0 @@
1
- # REQ-001-사용자목록
2
-
3
- ## 메타
4
- - 상태: specified
5
- - 생성일: 2026-05-03
6
- - 마지막 갱신: 2026-05-03
7
- - 관련 영역: 사용자관리
8
-
9
- ## 요약
10
- 사용자 목록 화면 (이름/이메일 표시, 이메일 검색).
11
-
12
- ## 세부 요구
13
- - [ ] R1: 사용자 목록 표시 (이름, 이메일)
14
- - [ ] R2: 이메일 검색
@@ -1,13 +0,0 @@
1
- // 실제 구현된 API 호출
2
- export interface User {
3
- id: string
4
- name: string
5
- email: string
6
- }
7
-
8
- export async function fetchUsers(emailQuery?: string): Promise<User[]> {
9
- const url = emailQuery ? `/api/users?email=${encodeURIComponent(emailQuery)}` : '/api/users'
10
- const res = await fetch(url)
11
- if (!res.ok) throw new Error('Failed to fetch users')
12
- return res.json()
13
- }
@@ -1,15 +0,0 @@
1
- // 디자인 시스템 stub
2
- import React from 'react'
3
-
4
- export const Input: React.FC<{ value: string; onChange: (v: string) => void; placeholder?: string }> = ({ value, onChange, placeholder }) => {
5
- return <input value={value} onChange={(e) => onChange(e.target.value)} placeholder={placeholder} />
6
- }
7
-
8
- export const Table: React.FC<{ rows: any[]; columns: { key: string; label: string }[] }> = ({ rows, columns }) => {
9
- return (
10
- <table>
11
- <thead><tr>{columns.map((c) => <th key={c.key}>{c.label}</th>)}</tr></thead>
12
- <tbody>{rows.map((r, i) => <tr key={i}>{columns.map((c) => <td key={c.key}>{r[c.key]}</td>)}</tr>)}</tbody>
13
- </table>
14
- )
15
- }
@@ -1,29 +0,0 @@
1
- // 이미 구현된 사용자 목록 화면 (실제 API 호출, 검색 동작)
2
- import React, { useState, useEffect } from 'react'
3
- import { Input, Table } from '../components/Input'
4
- import { fetchUsers, User } from '../api/user'
5
-
6
- export const UserList: React.FC = () => {
7
- const [search, setSearch] = useState('')
8
- const [users, setUsers] = useState<User[]>([])
9
- const [loading, setLoading] = useState(false)
10
-
11
- useEffect(() => {
12
- setLoading(true)
13
- fetchUsers(search || undefined)
14
- .then(setUsers)
15
- .finally(() => setLoading(false))
16
- }, [search])
17
-
18
- const columns = [
19
- { key: 'name', label: '이름' },
20
- { key: 'email', label: '이메일' },
21
- ]
22
-
23
- return (
24
- <div>
25
- <Input value={search} onChange={setSearch} placeholder="이메일 검색" />
26
- {loading ? <p>로딩 중...</p> : <Table rows={users} columns={columns} />}
27
- </div>
28
- )
29
- }
@@ -1,17 +0,0 @@
1
- # REQ-001-입고지시서긴급표시
2
-
3
- ## 메타
4
- - 상태: specified
5
- - 생성일: 2026-05-03
6
- - 마지막 갱신: 2026-05-03
7
- - 관련 영역: WMS / 입고관리
8
-
9
- ## 요약
10
- 입고지시서에 긴급 여부 표시 기능 추가.
11
-
12
- ## 세부 요구
13
- - [ ] R1: 입고지시서 화면 헤더 우측에 "긴급" 체크박스 추가
14
- - **A**: 디폴트 unchecked
15
-
16
- - [ ] R2: 긴급 표시 PDF 빨간색 강조
17
- - **A**: 빨간색은 #D32F2F
@@ -1,6 +0,0 @@
1
- // 디자인 시스템 stub
2
- import React from 'react'
3
-
4
- export const Checkbox: React.FC<{ checked: boolean; onChange: (v: boolean) => void; label?: string }> = ({ checked, onChange, label }) => {
5
- return <label><input type="checkbox" checked={checked} onChange={(e) => onChange(e.target.checked)} /> {label}</label>
6
- }
@@ -1,26 +0,0 @@
1
- # DEMO-001-거래처 / Demo
2
-
3
- ## 메타
4
- - 상태: done
5
- - 대상 REQ: REQ-001
6
- - 생성일: 2026-05-03
7
- - 마지막 갱신: 2026-05-03
8
- - 라운드: 1
9
-
10
- ## 시나리오
11
- 1. 거래처 목록 화면 진입 → mock 데이터 표시
12
- 2. 검색창에 텍스트 입력 → 시각적 필터 (실제 검색 X)
13
- 3. 페이지네이션 버튼 클릭 → 다음 페이지 표시 (mock)
14
-
15
- ## 만든 파일
16
- - `src/pages/CustomerList.tsx` (신규)
17
- - `src/data/mock-customer.ts` (mock data)
18
-
19
- ## Mock Data 요약
20
- - 위치: `src/data/mock-customer.ts`
21
- - 샘플: 25건
22
-
23
- ## 산출물 소비자 피드백 라운드
24
- ### 라운드 1 (2026-05-03)
25
- - **산출물 소비자 피드백**: OK
26
- - **처리**: demo 종료
@@ -1,15 +0,0 @@
1
- # REQ-001-거래처목록화면
2
-
3
- ## 메타
4
- - 상태: specified
5
- - 생성일: 2026-05-03
6
- - 마지막 갱신: 2026-05-03
7
- - 관련 영역: 거래처관리
8
-
9
- ## 요약
10
- 거래처 목록 조회 화면.
11
-
12
- ## 세부 요구
13
- - [ ] R1: 거래처 목록 표시 (이름/사업자번호/담당자/연락처)
14
- - [ ] R2: 거래처명 검색
15
- - [ ] R3: 페이지네이션 (한 페이지 20건)
@@ -1,25 +0,0 @@
1
- // 디자인 시스템 stub
2
- import React from 'react'
3
-
4
- export const Input: React.FC<{ value: string; onChange: (v: string) => void; placeholder?: string }> = ({ value, onChange, placeholder }) => {
5
- return <input value={value} onChange={(e) => onChange(e.target.value)} placeholder={placeholder} />
6
- }
7
-
8
- export const Table: React.FC<{ rows: any[]; columns: { key: string; label: string }[] }> = ({ rows, columns }) => {
9
- return (
10
- <table>
11
- <thead><tr>{columns.map((c) => <th key={c.key}>{c.label}</th>)}</tr></thead>
12
- <tbody>{rows.map((r, i) => <tr key={i}>{columns.map((c) => <td key={c.key}>{r[c.key]}</td>)}</tr>)}</tbody>
13
- </table>
14
- )
15
- }
16
-
17
- export const Pagination: React.FC<{ page: number; total: number; onChange: (p: number) => void }> = ({ page, total, onChange }) => {
18
- return (
19
- <div>
20
- <button onClick={() => onChange(page - 1)}>이전</button>
21
- <span>{page} / {total}</span>
22
- <button onClick={() => onChange(page + 1)}>다음</button>
23
- </div>
24
- )
25
- }
@@ -1,16 +0,0 @@
1
- // MOCK DATA - replaced in implement stage
2
- export interface Customer {
3
- id: string
4
- name: string
5
- bizNumber: string
6
- manager: string
7
- phone: string
8
- }
9
-
10
- export const MOCK_CUSTOMER_LIST: Customer[] = Array.from({ length: 25 }, (_, i) => ({
11
- id: `c-${i + 1}`,
12
- name: `샘플거래처 ${i + 1}`,
13
- bizNumber: `123-45-${String(i).padStart(5, '0')}`,
14
- manager: `담당자 ${i + 1}`,
15
- phone: `010-0000-${String(i).padStart(4, '0')}`,
16
- }))