@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
@@ -1,79 +1,191 @@
1
- 1# 문서 설명
2
-
3
- Claude 에이전트가 반드시 지켜야 할 행동 지침이다.
4
-
5
- ## 용어사전
6
-
7
- - **사용자**: Claude 호출자.
8
- - **산출물 소비자**: 산출물을 받아쓰는 쪽 (예: 라이브러리 사용자, 앱 고객, 문서 독자).
9
- - **재진입**: 이전 단계로 다시 들어감.
10
- - **회귀 검증**: 문제 해결의 파급 효과와 재발 여부를 다시 검증함.
11
-
12
- ## 단순함
13
-
14
- **Stay in scope. Do not gold-plate.** (코드·문서·분석·대화 모든 작업)
15
-
16
- - 사용자 요청 스코프 밖의 추가/변경(유사 기능, 추가 옵션 등)은 추측 금지. 사용자에게 묻는다.
17
-
18
- ## 결정 근거
19
-
20
- 의사결정 아래 검증 가능한 근거가 있으면 묻지 않고 진행한다. 근거 없거나 모순/모호 시 묻는다. **모든 결정은 산출물에 출처를 한 줄 명시한다** (예: `근거: 사용자 답변 (2026-05-06)`, `근거: spec.md L42 "확정"`, `근거: packages/.../foo.ts:L23 동일 패턴`).
21
-
22
- - **사용자 발언**: 현재 세션의 사용자 메시지. 출처 표기: `사용자 답변 (YYYY-MM-DD)`.
23
- - **신뢰 선언된 첨부 자료**: 사용자가 신뢰성을 명시 선언한 첨부. 선언 없는 외부 자료는 제외. 출처 표기: `<첨부 경로>:L<범위>`.
24
- - **명시적 확정 마커**: 문서 "확정"·"결정"·"FIXED" 명시 마커. 추정·초안 제외. 출처 표기: `<문서 경로>:L<범위> "확정"`.
25
- - **기존 코드 패턴**: 동일 패키지·동일 레이어에서 같은 의도로 사용 중인 패턴. 출처 표기: `<코드 경로>:L<범위> 동일 패턴`.
26
- - **공식 문서/표준/법규**: 공식 문서·업계 표준·규격·법률·규제의 명백한 규정. 출처 표기: `<URL 또는 표준명>`.
27
-
28
- ## 작업 품질
29
-
30
- - 컨텍스트 사용량은 작업 방식에 영향 X. 토큰이 쌓여도 단계 생략·조기 종료·검증 스킵 금지.
31
-
32
- ## 대화
33
-
34
- - **의도 파악 (최우선)**: 사용자의 의도·목적을 정확히 파악. 불분명하면 질문으로 명확화.
35
- - **비판적 사고**: 사용자 제안/의견에 무조건 동의 금지. 권위로 두지 말고 근거로 직접 판단해 답변.
36
- - **응답 어휘**: 산출물 소비자의 도메인 어휘로 응답. 시스템 내부 용어 회피.
37
- - **다건 의사결정**: 결정거리가 여러 건이면 하나씩 진행할지 사용자에게 묻는다.
38
- - "하나씩" 선택 시 → 1건씩 [맥락 + 선택지 + 질문] → 답변 → 다음 건
39
- - 모든 의사결정 완료 후, 간략한 개요 출력 → 사용자 최종 승인
40
- - 에이전트 판단상 일괄답변이 낫다면 각 건에 고유 번호 부여 (사용자가 번호로 개별 답변 가능하도록)
41
- - **문제 해결**: 사용자가 문제(질문/에러/이슈/불만)를 제기하면 해결 방법을 먼저 제시. 컨펌 실행 금지. (자주 하는 실수: 문제 제기 즉시 코드 수정)
42
- - **피드백 일반화**: 사용자 피드백을 글자 그대로 굳히지 말고 본질 의도를 추출해 일반 규칙으로.
43
- - 잘못된 굳히기: 운용 디테일(위치/이름/형식) 1회 케이스 그대로. (예: "A라고 했을 B라고 하지 것")
44
- - 올바른 일반화: 본질 의도 + 적용 범위 정의. (예: "~한 상황에서는 ~를 수행")
45
- - 본질 의도 불명확하면 추측 금지. 사용자에게 적극 질문.
46
- - **질문 도구 금지**: AskUserQuestion 도구 사용 금지.
47
-
48
- ## 문서 작성
49
-
50
- - **CRITICAL**: Claude 에이전트용 문서는 에이전트가 즉시 따를 있게 작성. 사람 가독성 기준 X.
51
- - 최소 분량. 중복·꾸밈 금지. 표준용어로 통할 내용을 풀어쓰지 말 것.
52
- - 예시는 글만으로 규칙이 모호할 때만, 흔한 도메인(예: 재고관리)으로 최소.
53
- - 산출물 소비자 도메인을 파악한 해당 도메인 용어로 작성. (나쁜 예: 소비자용 문서에 내부 기술용어)
54
-
55
- ## 분석 작업
56
-
57
- - `.back` 폴더 `.gitignore` 등재 경로는 코드베이스에서 배제. 명시 첨부 없이 읽거나 참고 금지.
58
- - 현재 워킹트리만 기준. git history 등 과거 버전은 읽지 말 것 (이미 폐기된 패턴을 답습하는 실수 방지).
59
- - 입력 파일 옆에 가공/펼친 산출물이 있으면 원본 대신 가공본부터.
60
-
61
- ## 코드 설계·변경
62
-
63
- - 변경 전, 변경 영역의 기존 코드 패턴과 개발 매뉴얼을 먼저 조사.
64
- - 의존 라이브러리 동작 이상 → 우회 코드 작성 전 라이브러리 측 원인 먼저 조사.
65
- - 라이브러리 버그/누락 판단 사용자에게 보고 수정 경로 제안 (예: 모노레포 내부=직접 패치, 외부=이슈 등록).
66
- - 이슈 본문 형식: 발생 현상 + 기대 동작 + 실제 동작 + 재현 정보(코드/조건/버전).
67
- - 우회 코드는 사용자가 명시 지시한 경우에만.
68
-
69
- ## 도구 사용
70
-
71
- - Playwright CLI 산출물 저장 인자(`screenshot/pdf/snapshot/state-save/video-start --filename` 등) 사용 금지. 생략 자동 경로(`.playwright-cli/...`)로 저장되며, 출력 메시지의 경로를 그대로 인용해 후속 참조. (명시 cwd 기준 resolve 되어 프로젝트 루트로 떨어짐. 읽기 인자는 무관.)
72
-
73
- ## 상황별 참고 자료
74
-
75
- 아래 표의 **트리거 조건이 처음 충족될 때** 해당 자료를 Read. 같은 세션에서 재독 불필요.
76
-
77
- | 트리거 | 참고 자료 |
78
- | --------------------------------------------- | -------------------------------------------- |
79
- | `@simplysm/*` 14.x 패키지의 코드 설계변경 | `.claude/references/sd-simplysm14/README.md` |
1
+ # 행동 규칙
2
+
3
+ Claude 에이전트가 반드시 지켜야 할 행동 지침이다.
4
+
5
+ ## 단순함
6
+
7
+ **Stay in scope. Do not gold-plate.** (코드·문서·분석·대화 모든 작업)
8
+
9
+ - 사용자 요청 스코프 밖의 추가/변경(유사 기능, 추가 옵션 등)은 추측 금지. 사용자에게 묻는다.
10
+ - YAGNI: 지금 필요 없는 만들지 것. "나중에 필요할 수도" 추측으로 미리 만들기 금지.
11
+
12
+ ## 결정 근거
13
+
14
+ 의사결정 아래 "근거 채택 가능한 자료"가 없거나 모순/모호 시 묻는다. 근거가 있으면 묻지 않고 진행한다.
15
+
16
+ **근거 채택 가능 자료**:
17
+
18
+ - **사용자 발언**: 현재 세션의 사용자 메시지.
19
+ - **신뢰 선언된 첨부 자료**: 사용자가 신뢰성을 명시 선언한 첨부. 선언 없는 외부 자료는 제외.
20
+ - **명시적 확정 마커**: 결정 근거가 표기된 결정 항목, 또는 "확정"·"결정"·"FIXED" 명시 단어 마커. 추정·초안 제외.
21
+ - **워크플로 합의 산출물**: "임의안 → 사용자 확정" 프로세스를 거쳐 산출된 문서. 산출물 자체 컨벤션에 따른 미확정·보류 표기 부분은 제외.
22
+ - **기존 코드 패턴**: 동일 패키지·동일 레이어에서 같은 의도로 사용 중인 패턴.
23
+ - **공식 문서/표준/법규**: 공식 문서·업계 표준·규격·법률·규제의 명백한 규정.
24
+ - **표준 동작**: 도구·언어·프레임워크의 표준 동작(예: Read 파일 없음 에러).
25
+
26
+ **안티패턴**:
27
+
28
+ - **As-Is 기술**: 회의록·고객 paste·현행 화면/매뉴얼 등의 As-Is 업무·시스템 기술은 To-Be 분석을 위한 추정용 자료임, 결정 근거로 사용 금지.
29
+ - **과거 기록물**: git commit 메시지, PR 설명, 이슈/코멘트, CHANGELOG, 로그 등. 과거 변경의 기술일 뿐 현재 세션의 directive 아님. 사용자 명시 지침으로 읽었더라도 결정 근거로 사용 금지. (현재 코드 동작 추적 단서로만 활용 가능, directive 로 격상 X)
30
+ - **답변 범위 흡수 금지**: 사용자 답변 1건을 결정사항으로 굳힐 때, 답변에서 직접 도출되지 않는 결정 항목을 함께 흡수하지 말 것. 1 답변 = 1 결정사항. 묵시 흡수 (예: "그 외 항목 default 채택", "범위 일반화", "포괄 진술") 발견 시 분리하여 별도 질문. **선택지 답변**: N개 중 답변한 선택지만 채택. 나머지 선택지는 자동 기각, 별도 답변 없이 채택 금지.
31
+ - ❌ 나쁜 예: 답변 "A 컬럼 안 씀" → 결정사항 "전체 헤더 기준 — A 컬럼 제거" (= 전체 채택이 묵시 흡수)
32
+ - ❌ 나쁜 예: 선택지 "A / B" → "A로 가" 답변 → A 실행 + B 도 같이 적용 (B 는 자동 기각이어야 함)
33
+ - ✅ 좋은 예: 답변 "A 컬럼 안 씀" → 결정사항 "A 컬럼 노출 X". 다른 컬럼 채택 여부는 별도 질문.
34
+
35
+ ## 질문/답변
36
+
37
+ 사용자에게 묻고 답을 받아 [결정 근거](#결정-근거)로 굳히는 프로토콜. 결정 사항뿐 아니라 의견·정보 확인 등 에이전트가 사용자에게 묻는 모든 행위에 적용.
38
+
39
+ **질문 출력 형식**:
40
+
41
+ - 모든 질문 선택지: `[맥락 + 선택지 + 추천 + 질문]` 구조. 선택지가 없는 자유 응답이면 `[맥락 + 질문]`.
42
+ - 상위 도메인 시나리오(업무 흐름·사용자 행위 등)가 있으면 [맥락]에 포함.
43
+ - 선택지 추천 항목 라벨 끝에 `(추천)` 마커 **MUST** 부착. 마커 없는 선택지 출력 금지. "권장은 A입니다" 별도 문장 풀어쓰기 금지(라벨 마커로 통일).
44
+ - 추천을 선정할 [결정 근거](#결정-근거) 자료가 없으면 자료를 수집한 질문.
45
+ - 응답당 선택지 세트 **1개**. 결정 항목이 여러 개로 보여도 첫 1건만 질문하고, 답변 받은 뒤 다음 건. 묶음 출력 금지.
46
+ - **NEVER** use the `AskUserQuestion` tool.
47
+
48
+ **질문 점검**:
49
+
50
+ - 점검 없이 "근거 없음" 결론 금지. 표면 검색 1회로 결론 X. 점검·검색 대상은 [결정 근거](#결정-근거) 섹션의 근거 채택 가능 자료.
51
+ - 답을 주면 묻지 말고 진행.
52
+ - **자연 도출 자가 점검**: 결정 옵션을 던지기 전, "식·로직·기존 정의가 자연 도출하는 결과를 결정이라 부르고 있지 않은가" 자가 점검. 자연 도출이면 묻지 말고 그대로 진행.
53
+ - 나쁜 예: 부호로 자연 분기되는 케이스를 옵션 A/B/C 묶어 던지기 (식대로 자동 결정됨)
54
+ - 나쁜 예: 기존 정의에 이미 포함된 항목을 "추가 결정 필요" 로 던지기
55
+ - 출력 직전 체크 (위반 시 출력 보류):
56
+ - [ ] 선택지 중 정확히 1개에 `(추천)` 마커가 있는가
57
+ - [ ] 응답 선택지 세트가 정확히 1개인가
58
+ - [ ] [결정 근거](#결정-근거) 자료 점검을 충분히 했는가
59
+ - [ ] 자연 도출 가능 항목을 결정으로 포장하지 않았는가
60
+
61
+ **진행 근거 인용**:
62
+
63
+ - **결정근거 없는 추론만으로 작업 절대 금지** — 상태 변경 도구(Write/Edit/NotebookEdit, Bash 변경성 명령 rm·mv·cp·git commit·git reset·pnpm install 등) 호출 직전 출력에 다음 형식 1줄을 **MUST** 포함:
64
+
65
+ `> 진행 근거: 사용자 발언 "<verbatim 인용>" "<신호/directive 부분 인용>"`
66
+
67
+ 사용자 발언에서 verbatim 인용 불가능 호출 금지. 자기 발언("~할게"·"수정할게"·"먼저 ~하고") 인용 절대 금지 — 자기 발언을 자기 컨펌으로 둔갑 금지.
68
+
69
+ **스코프 한정**: 인용한 발언이 직접 승인하는 단일 결정 항목만 직후 도구 호출로 실행. 인용 외 추론·부연·정당화로 스코프 확장 금지. 인용이 커버하지 않는 결정 항목은 별도 인용 또는 별도 질문 필수.
70
+ - ❌ 나쁜 예: 사용자 "이거 왜 X 아니지?" 직후 인용 가능한 진행 신호 없는데 Write 호출
71
+ - 나쁜 예: 사용자가 결정 항목 X 승인 인용 1줄 X + Y 실행 (Y 인용 스코프 자기 추론으로 확장 괄호 부연 "(→ Y 도 필요)" 로 둔갑 금지)
72
+ - ✅ 좋은 예: 사용자 "응 그렇게 해줘" → `> 진행 근거: 사용자 발언 "응 그렇게 해줘" 의 "응", "해줘"` → Write 호출
73
+
74
+ ## 문제 해결
75
+
76
+ - 문제 발견 시(사용자 제기·자체 발견 모두) 증상이 아닌 근본 원인부터 분석. 원인과 해결 방법을 먼저 제시. 진행/질의 여부는 [결정 근거](#결정-근거)에 따름.
77
+ - 예시: A로 수정한 B가 이상함 / 작업 중 B 이상 발견
78
+ - 나쁜예: B 수정
79
+ - 좋은예: 근본적인 A의 문제 식별A 수정
80
+
81
+ ## 대화
82
+
83
+ - 사용자의 의도·목적을 정확히 파악.
84
+ - 불분명하면 질문으로 명확화.
85
+ - 사용자 제안/의견에 무조건 동의 금지.
86
+ - 권위로 두지 말고 근거로 직접 판단해 답변.
87
+ - 산출물 소비자의 도메인 어휘로 응답.
88
+ - 시스템 내부 용어 회피.
89
+ - 사람을 위한 간결하고 명확하게 응답.
90
+ - 문서의 식별자(코드·약어·번호·라벨·§번호 등)만 노출 금지. 인용 시 식별자 옆에 실제 의미(이름·내용 요약)를 함께 표기해, 사용자가 원본을 펴보지 않아도 문장만으로 의미가 통해야 함. 응답·질문·산출물 모두 동일.
91
+ - 다음 표현은 그대로 단독 노출 금지 — 모두 도메인 어휘·시나리오로 풀어쓸 것:
92
+ - 수식·계산식 단독 (예: `(A − B) − C` 만 던지기) → 도메인 시나리오 예시 1건 (값 대입) 동반
93
+ - 영문 변수명·코드 식별자 (예: `surplus`, `isCompleted`, `joinSingle`) → 한국어 도메인 어휘로 풀이
94
+ - SQL/프레임워크/구현 용어 (예: "LEFT JOIN 깊이 1 자르기", "subagent 위탁") → 도메인 흐름으로 풀이
95
+ - 사용자가 "이해 못함"·"무슨 소리야" 류 피드백을 주면 같은 내용을 반복하지 말고 도메인 시나리오 예시로 다시 풀어쓸 것.
96
+
97
+ 질문·답변 프로토콜은 [질문/답변](#질문답변) 참조.
98
+
99
+ ## Convention 굳히기 금지
100
+
101
+ 사용자 피드백을 글자 그대로 문서화하지 말 것. 본질 의도를 추출해 일반 표현으로.
102
+
103
+ - **잘못된 굳히기**: 1회 케이스의 운용 디테일(위치/이름/형식/특정 단어)을 그대로 규칙화.
104
+ - 나쁜 예: "A라고 했을 때 B라고 하지 말 것", "X 파일에 Y를 쓰지 말 것"
105
+ - **올바른 일반화**: 본질 의도 + 적용 범위 정의.
106
+ - 좋은 예: "~한 상황에서는 ~를 수행"
107
+ - 본질 의도 불명확 시 추측 금지. 사용자에게 적극 질문.
108
+ - 피드백 받을 때마다 자문: "이게 1회 사례인가, 일반 규칙인가?" → 1회면 굳히지 말 것.
109
+
110
+ **모호 표현 굳히기 금지** (자체 임의안 작성 시 적용):
111
+
112
+ - 사용자 답변 없이 자체 임의안을 산출물에 작성할 때, 추상 단어·추측 단어·미정의 외부 의존을 표현으로 박지 말 것.
113
+ - 나쁜 예: "기본값 = 시스템 설정값" (정의 없는 외부 의존), "필요 시 자동 처리" (조건 미정), "적절한 값" (구체 X)
114
+ - 좋은 예: "기본값 = 14일" (구체 값 + 사용자 확정 마커 부착)
115
+ - 임의안이면 구체 값 1개 + 결정 근거 출처 또는 사용자 확정 필요 마커 (`[OPEN]` 등) 부착.
116
+
117
+ ## 문서 작성
118
+
119
+ - **CRITICAL**: Claude 에이전트용 문서는 에이전트가 즉시 따를 수 있게 작성. 사람 가독성 기준 X.
120
+ - 최소 분량. 중복·꾸밈 금지. 가장 적합한 자리에 한번만 명시.
121
+ - 표준용어로 통할 내용을 풀어쓰지 말 것.
122
+ - 예시는 글만으로 규칙이 모호할 때만, 흔한 도메인(예: 재고관리)으로 최소로 작성.
123
+ - 산출물 소비자 도메인을 파악한 후 해당 도메인 용어로 작성. (나쁜 예: 소비자용 문서에 내부 기술용어)
124
+ - **합의 누락 금지**: 확정된 모든 결정·근거·예외·단서는 즉시 산출물에 작성. ([결정 근거](#결정-근거))
125
+ - "이 단계 범위 밖" / "템플릿에 자리 없음" 등을 이유로 누락 금지
126
+ - 대화 메모리에만 두고 진행 금지. 후속 세션이 산출물만 읽어도 동일하게 이어갈 수 있어야 함.
127
+ - **상위 룰 중복 금지**: 자동 로드되는 상위 룰(예: `sd-base-rules.md`)에 이미 명시된 내용을 하위 지침 문서(`CLAUDE.md`·스킬 SKILL.md·참고 자료 등)에 다시 옮겨 적지 말 것. 하위 문서는 해당 스코프 고유 내용만 작성.
128
+
129
+ ## ASCII 그림
130
+
131
+ 다이어그램·구성도·와이어프레임 등 모든 ASCII 그림에 적용.
132
+
133
+ - 이모지(그림성 문자: ✏ ☐ ❌ ⭐ ♥ 등) 금지: 렌더러에 따라 1칸/2칸 변동 → 정렬 깨짐.
134
+ - 그 외 ASCII·한글·박스 라인(┌─┐ │ └┘ ├┤)·도형(▲ ▼ ► ◄)·화살표(← → ↑ ↓) 등 폭 안정 문자는 허용.
135
+
136
+ ## 타임스탬프
137
+
138
+ 산출 폴더·파일명에 시각을 포함할 때:
139
+
140
+ - 형식: `yyMMddHHmmss` (예: `260513204500` = 2026-05-13 20:45:00)
141
+ - 획득: Bash 도구 `date +%y%m%d%H%M%S` 실행 결과
142
+
143
+ ## slug
144
+
145
+ 산출 폴더·파일명에 포함하는 짧은 인간 가독 식별자.
146
+
147
+ - 짧은 한·두 단어.
148
+ - 허용 문자: 한글, 영문, `_`, `-`, 공백. 그 외 금지.
149
+
150
+ ## 분석 작업
151
+
152
+ - `.back` 폴더 및 `.gitignore` 등재 경로는 코드베이스에서 배제. 명시 첨부 없이 읽거나 참고 금지.
153
+ - 현재 워킹트리만 기준. 사용자 명시 지침 없이 과거 버전 또는 변경분을 git 으로 조회하지 말 것 — `git status`·`diff`·`log`·`show`·`blame`·`reflog` 등 모든 조회 명령 포함. 워킹트리 파일·디렉터리 상태는 Read·Grep·Glob 으로만 확인 (이미 폐기된 패턴 답습 또는 변경분만 훑어 일관성 놓치는 실수 방지). Pre-tool 훅이 이들을 차단함.
154
+ - 사용자가 명시 지시한 경우에만 git 조회 가능. 이 때도 명령 prefix `$env:SDGIT='1'; ` (PowerShell) 또는 `SDGIT=1 ` (Bash) 를 붙여야 훅이 통과.
155
+ - 입력 파일 옆에 가공/펼친 산출물이 있으면 원본 대신 가공본부터.
156
+
157
+ ## 코드 설계·변경
158
+
159
+ - 산출물 소비자 표면(공개 API/props/옵션/UI/출력 등) 단순함이 내부 구현 단순함보다 우선. 충돌 시 복잡도는 내부로 흡수.
160
+ - 내부 구현 난이도 회피를 위해 소비자 요구 완화/근사화 제안 금지. 난이도는 내부로 흡수. 불가 시 사용자 보고 후 결정.
161
+ - **명시 정의 자체 단순화·임의 처리 금지**: spec·사용자 directive·합의 산출물에 식·정의·분기·경계가 명시된 항목은 코드에서 자체 단순화·근사화·안전 처리(NULL 강제·0 클램프·방어 가드·생략 분기 등) 임의 추가 금지. 식 그대로 풀어쓸 것. 정확 구현 부담이 크면 단순화안을 사용자에 보고 후 합의. ([결정 근거](#결정-근거) "안티패턴" 의 코드 적용형)
162
+ - 변경 전, 변경 영역의 기존 코드 패턴과 개발 매뉴얼을 먼저 조사.
163
+ - 의존 라이브러리 동작 이상 → 우회 코드 작성 전 라이브러리 측 원인 먼저 조사.
164
+ - 라이브러리 버그/누락 판단 시 → 사용자에게 보고 후 수정 경로 제안 (예: 모노레포 내부=직접 패치, 외부=이슈 등록).
165
+ - 이슈 본문 형식: 발생 현상 + 기대 동작 + 실제 동작 + 재현 정보(코드/조건/버전).
166
+ - 우회 코드는 사용자가 명시 지시한 경우에만.
167
+ - 문제 발생 시 throw. silent skip 금지 (예외 캐치 후 대안 없이 진행 — 후속 프로세스가 결손된 채 동작). **자동 복구**(예: 의존 미설치 → 설치·재시도 = 완전 동작 회복)는 silent skip 아님. 부분 살리기는 사용자가 명시 지시한 경우에만.
168
+ - 사용자 표면 알림(로그·토스트·다이얼로그 등) severity 분류 기준은 *복구 가능 여부* 가 아니라 *사건의 본질*:
169
+ - `error`(danger): 문제 발생. catch·무시·재시도 여부와 무관하게 "문제가 일어난 사실" 이면 전부 해당.
170
+ - `warn`: 문제는 아니지만 사용자가 인지해야 할 중요 알림.
171
+ - `info`: 알면 좋은 일반 알림.
172
+ - `success`: 정상 완료 알림.
173
+ - 안티패턴: 무중단/복구 처리되었다는 이유로 `error` 대신 `warn` 선택 — 분류 기준 오용.
174
+
175
+ ## 도구 사용
176
+
177
+ - Playwright CLI 산출물 저장 인자(`screenshot/pdf/snapshot/state-save/video-start --filename` 등) 사용 금지. 생략 시 자동 경로(`.playwright-cli/...`)로 저장되며, 출력 메시지의 경로를 그대로 인용해 후속 참조. (명시 시 cwd 기준 resolve 되어 프로젝트 루트로 떨어짐. 읽기 인자는 무관.)
178
+
179
+ ## 상황별 참고 자료
180
+
181
+ 아래 표의 **트리거 조건이 처음 충족될 때** 해당 자료를 Read.
182
+
183
+ | 트리거 | 참고 자료 |
184
+ | ---------------------------------------------------------------------------------- | ------------------------------------------------------ |
185
+ | `@simplysm/*` 14.x 패키지의 코드 설계 및 변경 | `.claude/references/sd-simplysm14/README.md` |
186
+ | Requirement Source 부정확성 (STT 오타·화자 모호·발화 모호·도메인 용어 다의성) 처리 | `.claude/references/sd-requirement-source-handling.md` |
187
+
188
+ ## 용어 사전
189
+
190
+ - **Requirement Source**: sd-spec 의 입력 자료 (회의록·고객 paste·문서·메일 등 분석 출발 자료).
191
+ - **최종 사용자**: 시스템의 실제 도메인 사용자 (개발자·시스템 관리자 등 외).
@@ -0,0 +1,22 @@
1
+ """공용 경로 헬퍼.
2
+
3
+ 실행 위치는 항상 프로젝트 루트라고 가정한다 (cd 금지 규칙).
4
+ """
5
+ from __future__ import annotations
6
+
7
+ import json
8
+ import tempfile
9
+ from pathlib import Path
10
+
11
+
12
+ def resolve_tmp_base() -> Path:
13
+ """프로젝트 루트의 .claude/simplysm.json 의 tmpdir → 없으면 OS tmp."""
14
+ cfg_path = Path(".claude/simplysm.json")
15
+ if cfg_path.exists():
16
+ try:
17
+ cfg = json.loads(cfg_path.read_text(encoding="utf-8"))
18
+ if cfg.get("tmpdir"):
19
+ return Path(cfg["tmpdir"])
20
+ except Exception:
21
+ pass
22
+ return Path(tempfile.gettempdir())
@@ -19,9 +19,28 @@ BLOCKED = [
19
19
  (CMD_POS + r"npx\s+tsc\b", "npx tsc (use {PM} typecheck)"),
20
20
  # Use {PM} lint instead
21
21
  (CMD_POS + r"npx\s+eslint\b", "npx eslint (use {PM} lint)"),
22
+ # Playwright CLI: do not specify save paths; let it auto-save under .playwright-cli/
23
+ (CMD_POS + r"(npx\s+)?playwright-cli\s+(?:-s=\S+\s+)?(screenshot|pdf|snapshot)\b[^|;&\n]*[ \t]--filename\b",
24
+ "playwright-cli {screenshot|pdf|snapshot} --filename (omit to auto-save under .playwright-cli/)"),
25
+ (CMD_POS + r"(npx\s+)?playwright-cli\s+(?:-s=\S+\s+)?(state-save|video-start)[ \t]+\S",
26
+ "playwright-cli {state-save|video-start} <path> (omit path to auto-save under .playwright-cli/)"),
22
27
  ]
23
28
 
24
29
  for pattern, label in BLOCKED:
25
30
  if re.search(pattern, cmd):
26
31
  print(f"Blocked: {label}", file=sys.stderr)
27
32
  sys.exit(2)
33
+
34
+ # Git read-only inspection block (working-tree-only policy).
35
+ # Bypass: any occurrence of `SDGIT` token in the command.
36
+ GIT_READ_VERBS = r"status|diff|log|show|blame|reflog|rev-list|rev-parse|ls-files|ls-tree|cat-file|describe|whatchanged|shortlog|grep"
37
+ if not re.search(r"\bSDGIT\b", cmd):
38
+ m = re.search(CMD_POS + rf"git\s+(?P<verb>{GIT_READ_VERBS})\b", cmd)
39
+ if m:
40
+ print(
41
+ f"Blocked: git {m.group('verb')} "
42
+ "(working-tree inspection via git is forbidden; use Read/Grep/Glob). "
43
+ "If intentional, prefix the command with `SDGIT=1 ` (bash) or `$env:SDGIT='1'; ` (PowerShell).",
44
+ file=sys.stderr,
45
+ )
46
+ sys.exit(2)
@@ -196,16 +196,17 @@ def main():
196
196
  cwd = stdin_data.get("workspace", {}).get("current_dir") or stdin_data.get("cwd", "")
197
197
  folder = os.path.basename(cwd) if cwd else "?"
198
198
 
199
- # Extract model
199
+ # Extract model (+ effort if present)
200
200
  model_id = stdin_data.get("model", {}).get("id", "")
201
201
  model = format_model(model_id) if model_id else "?"
202
+ effort_level = (stdin_data.get("effort") or {}).get("level")
203
+ if effort_level:
204
+ model = f"{model} {effort_level}"
202
205
 
203
206
  # Extract context %
204
- ctx_window = stdin_data.get("context_window")
205
- if ctx_window is not None:
206
- ctx_str = f"{ctx_window.get('used_percentage') or 0}%"
207
- else:
208
- ctx_str = "?"
207
+ ctx_window = stdin_data.get("context_window") or {}
208
+ used_pct = ctx_window.get("used_percentage")
209
+ ctx_str = f"{used_pct}%" if used_pct is not None else "?"
209
210
 
210
211
  # Rate limits from stdin
211
212
  rate_limits = stdin_data.get("rate_limits", {})
@@ -220,12 +221,6 @@ def main():
220
221
  if eu.get("is_enabled") and eu.get("used_credits") is not None:
221
222
  extra_str = f"${eu['used_credits'] / 100:.2f}"
222
223
 
223
- # Write rate_limits to cache
224
- cache = cache or {}
225
- cache["rate_limits"] = rate_limits
226
- cache["rate_limits_ts"] = time.time()
227
- write_cache_atomic(cache)
228
-
229
224
  # Spawn background fetch if needed
230
225
  version = stdin_data.get("version", "2.1.86")
231
226
  if should_fetch(cache):
@@ -5,8 +5,13 @@ description: 워크스페이스의 모든 변경을 단일 커밋으로 묶는
5
5
 
6
6
  # 총괄 커밋
7
7
 
8
- 시스템 기본 커밋 절차를 따르되, 아래만 적용한다.
8
+ system prompt "Committing changes with git" 절차를 따르되, 아래만 적용한다.
9
9
 
10
- - Staging은 `git add -A` 사용.
11
- - 변경이 여러 갈래면 메시지를 갈래별 섹션으로 나눠 변경을 설명.
10
+ - 모든 git 호출(`status`/`diff`/`log`/`add`/`commit`)prefix `$env:SDGIT='1'; git ...` (PowerShell) 또는 `SDGIT=1 git ...` (Bash) 로 호출. (Pre-tool 훅의 전역 git 조회 차단 우회 마커. add/commit 도 일관성으로 동일 prefix.)
11
+ - Staging은 `git add -A` 사용. 스킬 호출 = 사용자가 -A 위험(민감 파일 staging) 인지·동의한 것으로 간주.
12
+ - 메시지는 사용자 응답 언어와 일치.
13
+ - 변경이 여러 갈래면:
14
+ - 제목: 갈래들을 `및`/`,` 로 한 줄 병합
15
+ - 본문(빈 줄 후): 갈래별 헤더 `[<type>]: <갈래 요약>` + 변경 항목 불릿(`-`). 갈래 간 빈 줄로 분리.
16
+ - `<type>`: conventional commits (`fix`/`feat`/`refactor`/`docs`/`chore`/`test`/`build`/`ci`/`style`/`perf`)
12
17
  - 푸시는 수행하지 않음.
@@ -1,93 +1,134 @@
1
1
  ---
2
2
  name: sd-demo
3
- description: spec.md(요구사항) 기반으로 UI scaffold를 메인 코드베이스에 작성하고 산출물 소비자 시연용 demo.md를 생성하는 스킬. Use when 산출물 소비자에게 화면을 시연해 spec 검증이 필요할 (선택적 단계, spec과 plan 사이)
3
+ description: spec.md 화면 1개를 클라이언트 패키지의 화면 컴포넌트 자리에 인터랙티브 데모 골격으로 만든다. Use when "데모 만들기", "화면 데모", "spec 화면을 시각화" 요청할
4
4
  ---
5
5
 
6
- # demo 단계
6
+ # sd-demo
7
7
 
8
- spec.md 1+ REQ UI scaffold(메인 코드베이스 직접) + demo.md(시나리오/만든 파일/라운드 기록).
9
- production의 첫 단계 (throwaway 아님). plan/implement가 그 위에 기능을 입힘.
8
+ spec.md 화면 1개를 클라이언트 패키지의 화면 컴포넌트 자리에 데모로 만든다. 와이어프레임 상의 배치·라벨·동작 흐름이 일치하는 클릭 가능 UI. 후속 단계에서 같은 자리에 실제 로직을 채워 진화한다.
10
9
 
11
- ## 산출물
10
+ ## 본질: UI 가 1순위
12
11
 
13
- ```
14
- src/ ← UI scaffold (메인 코드베이스 직접)
15
- pages/<신규>.tsx
16
- data/mock-<도메인>.ts ← mock data 별도 파일
12
+ 소비자는 시연 받는 사용자. 사용자는 화면만 본다. 코드는 후속 단계가 다시 짠다.
17
13
 
18
- .specs/{yyMMdd_HHmmss}/DEMO-001-슬러그/
19
- demo.md ← 시나리오/만든 파일/Mock 요약/피드백 라운드
20
- ```
21
-
22
- 세션 폴더(`{yyMMdd_HHmmss}`)는 spec 단계의 결과를 그대로 사용 (이미 존재).
14
+ - **주의·시간의 90% 를 template 에 쓴다.** 와이어프레임을 시각적으로 정확·정돈되게 복원하는 게 본 작업의 본질.
15
+ - 코드 골격(시그널·effect·DI·핸들러)은 **코드베이스에서 분석해 따라간다** — 본 스킬은 framework 처방을 박아두지 않는다.
16
+ - 데이터 변경 시뮬레이션 금지. 저장·삭제 핸들러는 마커만. 클릭은 받되 결과 반영 X.
17
+ - 모달 띄우기는 실제로 작동시켜 시연 가치 확보.
23
18
 
24
19
  ## 워크플로
25
20
 
26
- 1. 입력 받기: 대상 REQ ID 목록 (예: `REQ-001`, 또는 여러 개)
21
+ ### 1단계: 입력 확보
22
+
23
+ 호출에 다음 필요:
24
+
25
+ - 대상 spec.md 경로
26
+ - 만들 화면 식별자 — `[화면.X]` 또는 §4.x
27
+ - 산출 위치 — 클라이언트 패키지 + 화면 폴더. client 타겟이 1개면 자동, 여러 개면 후보 제시 후 사용자 확정. **3단계-C 의 도메인 인접 화면이 명확히 식별되면 그 위치(같은 도메인 폴더)로 자동 채택** (1단계 초안을 인접 위치로 갱신).
28
+
29
+ 없으면 묻기. spec.md 에 식별자 매칭이 안 되면 §4 화면 목록 표에서 후보 제시 후 확정.
30
+
31
+ ### 2단계: spec §4.x 분석
32
+
33
+ §4.x 에서 추출:
34
+
35
+ - 헤더 인덱스(Actor · 관련 섹션 · 장치)
36
+ - 기능 개요 · 와이어프레임 · 항목표 · 동작 · 도메인 규칙(해당 시)
37
+ - §동작에 등장하는 모달 호출 `→ [화면.Y] 을 모달로 띄움` 모두 수집
38
+
39
+ ### 3단계: 분석 자료 확보
40
+
41
+ 산출물을 만들기 전, 다음을 분석해 framework 처방을 확보한다.
42
+
43
+ **A. 라이브러리 문서**
44
+
45
+ 코드베이스에 권위 규약/매뉴얼 문서가 있으면 1순위로 따른다.
46
+
47
+ - `@simplysm/*` 14.x 사용 시 — [.claude/references/sd-simplysm14/README.md](../../references/sd-simplysm14/README.md) Read 후 "개발 매뉴얼" 항목 진입. 클라이언트 화면은 `client-component.md`, 화면 컨트롤은 `client-tab.md` 등.
48
+ - 그 외 framework 는 코드베이스 안의 동등 위치 문서를 찾아 Read.
49
+
50
+ **B. 라이브러리 컴포넌트 소스**
51
+
52
+ 쓰려는 컴포넌트(예: `sd-form`, `sd-crud-list`)가 있으면 **본체 소스를 직접 Read** 해 input/output·동작을 정확히 파악. 사용처 grep 만으로는 누락된 prop 을 놓친다.
53
+
54
+ **C. 부위별 패턴 레퍼런스 수집**
55
+
56
+ 코드베이스의 클라이언트 화면 전반에서 **부위(부분)별로 공통 패턴**을 수집한다. "구성 똑같은 화면 1개를 골라 통째 답습" 모델이 아니다. 일치 화면이 있어도, 부위별 종합 결과 위에 추가로 얹는다.
57
+
58
+ **수집 대상 부위** (대상 화면이 사용하는 것만 골라 수집):
59
+
60
+ | 부위 | 수집 내용 |
61
+ | ----------- | --------------------------------------------------------------- |
62
+ | 화면 골격 | 컴포넌트 selector·파일 위치·라우팅/메뉴 등록 위치 |
63
+ | 헤더/타이틀 | 페이지 타이틀·도구 버튼 배치 |
64
+ | 툴바 | 검색·필터·추가/삭제 버튼·페이지네이션 위치·정렬 인터랙션 |
65
+ | 영역 분할 | 좌우/상하 split·탭·sheet·dock 사용 |
66
+ | 리스트 | 테이블·카드 그리드·트리 마크업·헤더 셀·행 셀·선택/정렬·빈 상태 |
67
+ | 폼 | 필드 그리드·라벨/입력 배치·필수 표시·버튼 푸터 |
68
+ | 모달 | 헤더·본문·푸터·확인/취소 버튼·크기 |
69
+ | 빈 상태 | 아이콘·여백·문구 |
70
+ | 도메인 위치 | 같은 sub-app·같은 도메인 폴더 후보(산출 위치 자동 채택용) |
71
+
72
+ **절차**:
73
+
74
+ 1. 클라이언트 패키지의 화면 폴더 전반 Glob 으로 훑어 화면 목록 확보.
75
+ 2. 위 부위별로 **각 부위마다 화면 2~4개**를 골라 template 부분 발췌 Read. 도메인 영역(같은 sub-app)이 가까운 화면 우선. 부위마다 다른 화면을 골라도 됨 (예: 헤더는 화면 X·Y, 리스트는 화면 Z·W).
76
+ 3. 부위별 공통 패턴(자주 쓰는 슬롯·클래스·요소 구조) 메모화. 1회만 쓰인 변종은 채택 후보에서 배제, 다수에서 반복되는 것을 채택.
77
+ 4. 부위별 패턴이 화면마다 갈라지면 (예: 리스트가 테이블·카드 두 갈래) 대상 화면의 와이어프레임이 어느 쪽인지로 선택.
78
+
79
+ **도메인 인접 후보**: 같은 sub-app·같은 도메인 폴더에 화면이 1개 이상 있으면 그 폴더를 산출 위치 자동 채택 근거로 쓴다. 0개면 라우팅·메뉴 등록 위치를 사용자에게 1회 질문.
27
80
 
28
- 2. 대상 REQ들의 spec.md 읽기 + 코드베이스(디자인 시스템 ) 파악
81
+ LLM 단독 판단 한계: 동일 구성 화면이 한 곳도 없다고 framework 처방만으로 그리면 안 된다. **반드시 부위별로 수집한 패턴을 근거로** 그려야 한다. 부위별 후보가 0개인 부위가 있으면 그 부위만 사용자에게 1회 질문 ( 화면의 그 부위 어떻게 처리할지).
29
82
 
30
- 3. DEMO ID 부여 + `.specs/{yyMMdd_HHmmss}/DEMO-XXX-슬러그/` 생성
31
- - DEMO ID는 세션 폴더 내 `DEMO-001` 부터 순번
32
- - 슬러그는 한글 OK
83
+ ### 4단계: 충돌 확인
33
84
 
34
- 4. UI scaffold 작성 (메인 코드베이스에 직접)
35
- - 페이지 + 컴포넌트 배치 (디자인 시스템 활용)
36
- - mock data는 **별도 파일** + `MOCK_` prefix + 상단 주석
37
- - 데모 흐름 필수 인터랙션만 (페이지 이동/폼 입력 시각/클릭 반응)
38
- - 모호한 부분 → Q
85
+ 대상 화면(또는 동반 모달 §4.x) 파일이 이미 있으면 묻기:
39
86
 
40
- 5. demo.md 작성 (템플릿: [references/demo-md-template.md](references/demo-md-template.md))
87
+ - 덮어쓰기 / ② spec 변경분만 보강 / ③ 취소
41
88
 
42
- 6. Q 다이얼로그 (있다면, 번에 하나씩) 사용자 답변 → 즉시 갱신
89
+ 호출자 발화에 명시 분기가 있으면 묻지 않고 분기로 진행.
43
90
 
44
- 7. demo 작성 끝 → 메타 `상태: demo-ready` → 사용자에게 "산출물 소비자에게 보여주세요" 알림
91
+ ### 5단계: 생성
45
92
 
46
- 8. 사용자가 산출물 소비자 피드백 가져옴 메타 `상태: reviewing`
93
+ 3단계 분석 자료(A/B/C)를 1순위 근거로, **template 부터** 채운다.
47
94
 
48
- 9. 피드백 분류 (UI 조정 / spec 변경 / 모호) — 사용자 확정
49
- - UI 조정 demo 코드 수정
50
- - spec 변경 (R 단위) spec.md 수정 + 메타 `이력` 기록
51
- - REQ 구조 변경(분리/병합) spec 재진입 후보 알림 (demo 단독 처리 X)
95
+ - 파일명·selector·시그널·DI 명명 등은 라이브러리 문서(A) 정한 형식 그대로.
96
+ - 슬롯·영역 분할·클래스 패턴은 3단계-C 부위별 패턴 채택분 그대로. 부위별로 다른 화면을 참조했더라도 각 부위 채택분을 그대로 옮긴다.
97
+ - 부위별 채택분이 코드베이스 어느 화면에서 왔는지 출처를 머릿속에 두고 비교 가능 상태로 유지(6단계 점검용).
98
+ - 모달 호출 화면이면 동반 모달 §4.x 같은 단계로 생성.
52
99
 
53
- 10. 라운드 기록 (append-only) → "다음 라운드? 종료?"
54
- - 다음 → 7번으로
55
- - 종료 → **demo.md 형식 점검** (만든 파일 목록 / 라운드 기록 / 메타 일관성) → **역방향 자잘 갱신** (spec 메타 이력 누락 등 — 라운드 중 spec 변경은 9번에서 이미 처리, 여기선 잔여 점검만) → 메타 `상태: done`
100
+ **표식 마커 (고정)**
56
101
 
57
- ## 책임 범위
102
+ | 위치 | 마커 |
103
+ | ------------------------ | ---------------------------------------------------------- |
104
+ | 더미 데이터 선언 위 | `// sd-demo: 더미 — 구현 단계에서 교체` |
105
+ | 미구현 핸들러 본문 | `// sd-demo: 미구현 — 동작 자리` |
106
+ | 더미 타입 인라인 선언 위 | `// sd-demo: 더미 타입 — 구현 단계에서 @모델/X 로 교체` |
107
+ | 종류 매핑 임의 추정 | `// sd-demo: 종류 매핑 임의 — 확인 필요` |
108
+ | 권한 path 임의 추정 | `// sd-demo: 권한 path 임의 — 확인 필요` |
58
109
 
59
- 만들 것: 페이지 레이아웃·컴포넌트 배치 / mock data 표시 / 페이지 이동·폼 입력 시각·클릭 반응
110
+ 다른 변형 사용 금지. 후속 단계가 grep 으로 추적한다.
60
111
 
61
- 만들지 것: 실제 데이터 저장·삭제·수정 / API 호출(mock 포함) / 비즈니스 로직 / 인증·권한 처리
112
+ ### 6단계: 자체 점검
62
113
 
63
- 원칙: **말로 설명할 있는 만들지 않는다**
114
+ **패스 1: 부위별 패턴 일치** 3단계-C 에서 부위마다 채택한 레퍼런스 화면을 다시 Read 해 부위별로 비교:
64
115
 
65
- ## Mock Data 정책 (3중 강한 표시)
116
+ - 헤더/툴바: 도구 버튼 배치·라벨 형식·간격·클래스 동일
117
+ - 영역 분할: split/탭/sheet/dock 사용 동일
118
+ - 리스트: 헤더 셀·행 셀 마크업·정렬/선택 슬롯 동일
119
+ - 폼: 필드 그리드·라벨/입력 배치·푸터 버튼 동일
120
+ - 모달: 헤더·본문·푸터 구조 동일
121
+ - 빈 상태: 아이콘·여백·문구 동일
66
122
 
67
- ```typescript
68
- // src/data/mock-rtp.ts
69
- // MOCK DATA - replaced in implement stage
70
- export const MOCK_RTP_LIST = [...]
71
- ```
123
+ 부위 중 한 곳이라도 채택 패턴과 어긋나면(임의 변형·새 클래스 발명·새 슬롯 사용) 수정. "비슷한 화면이 없어서 알아서 그렸다"는 자기 합리화 금지 — 그 부위 채택분이 비어 있다는 뜻이므로 3단계-C 로 돌아가 수집·재선택.
72
124
 
73
- - 반드시 별도 파일 (페이지 inline 금지)
74
- - 변수/상수 `MOCK_` prefix 필수
75
- - 파일 상단 주석에 `MOCK` 키워드 필수
125
+ **패스 2: 라이브러리 문서 위배 점검** — 3단계-A 의 매뉴얼 문서 항목별 일치 확인. 위배 항목이 있으면 수정 후 재점검.
76
126
 
77
- ## 핵심 원칙
127
+ ### 7단계: 완료 보고
78
128
 
79
- - self-contained 블록 (라운드 단위 demo.md)
80
- - raw input 불변
81
- - ID 불변 (DEMO-001 = 영원히 DEMO-001)
82
- - 자동 판단 금지 (피드백 분류는 사용자)
83
- - 한 번에 하나씩 Q
129
+ 만든 파일 목록 보고 종료.
84
130
 
85
- ## 안티패턴
131
+ ## 운용
86
132
 
87
- - throwaway로 만들기 (격리 폴더에 만들고 폐기) — production 첫 단계임
88
- - 실제 데이터 처리 로직 (저장/삭제/계산)
89
- - ❌ Mock data를 페이지 inline에 굳히기
90
- - ❌ 피드백 분류 자동 결정
91
- - ❌ REQ 구조 변경을 demo 단독 처리 (spec 재진입)
92
- - ❌ 라운드 기록 누락
93
- - ❌ 종료 결정 직후 demo.md 형식 점검 없이 done 전환
133
+ - 결정 근거: `sd-base-rules.md` "결정 근거" 적용.
134
+ - 스킬은 framework 처방을 박아두지 않는다. 매 호출 시 3단계에서 분석한 라이브러리 문서·컴포넌트 소스·답습 화면을 근거로 산출.