@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.
- package/claude/references/sd-requirement-source-handling.md +64 -0
- package/claude/references/sd-simplysm14/README.md +44 -40
- package/claude/references/sd-simplysm14/apis/angular/README.md +95 -0
- package/claude/references/sd-simplysm14/apis/angular/app-structure.md +49 -0
- package/claude/references/sd-simplysm14/apis/angular/buttons.md +42 -0
- package/claude/references/sd-simplysm14/apis/angular/crud.md +35 -0
- package/claude/references/sd-simplysm14/apis/angular/forms.md +63 -0
- package/claude/references/sd-simplysm14/apis/angular/infrastructure.md +80 -0
- package/claude/references/sd-simplysm14/apis/angular/kanban.md +33 -0
- package/claude/references/sd-simplysm14/apis/angular/layout.md +41 -0
- package/claude/references/sd-simplysm14/apis/angular/modal.md +63 -0
- package/claude/references/sd-simplysm14/apis/angular/routing.md +45 -0
- package/claude/references/sd-simplysm14/apis/angular/select-dropdown.md +35 -0
- package/claude/references/sd-simplysm14/apis/angular/selection-managers.md +50 -0
- package/claude/references/sd-simplysm14/apis/angular/shared-data.md +42 -0
- package/claude/references/sd-simplysm14/apis/angular/sheet.md +52 -0
- package/claude/references/sd-simplysm14/apis/angular/toast.md +46 -0
- package/claude/references/sd-simplysm14/apis/angular/visual.md +41 -0
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-auto-update/README.md +76 -0
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-file-system/README.md +83 -0
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-intent/README.md +80 -0
- package/claude/references/sd-simplysm14/apis/capacitor-plugin-usb-storage/README.md +39 -0
- package/claude/references/sd-simplysm14/apis/core-browser/README.md +112 -0
- package/claude/references/sd-simplysm14/apis/core-common/README.md +53 -0
- package/claude/references/sd-simplysm14/apis/core-common/extensions.md +123 -0
- package/claude/references/sd-simplysm14/apis/core-common/features.md +46 -0
- package/claude/references/sd-simplysm14/apis/core-common/types.md +114 -0
- package/claude/references/sd-simplysm14/apis/core-common/utils.md +158 -0
- package/claude/references/sd-simplysm14/apis/core-node/README.md +12 -0
- package/claude/references/sd-simplysm14/apis/core-node/consola.md +64 -0
- package/claude/references/sd-simplysm14/apis/core-node/cpx.md +52 -0
- package/claude/references/sd-simplysm14/apis/core-node/fs-watcher.md +53 -0
- package/claude/references/sd-simplysm14/apis/core-node/fsx.md +81 -0
- package/claude/references/sd-simplysm14/apis/core-node/pathx.md +55 -0
- package/claude/references/sd-simplysm14/apis/core-node/worker.md +111 -0
- package/claude/references/sd-simplysm14/apis/excel/README.md +81 -0
- package/claude/references/sd-simplysm14/apis/lint/README.md +80 -0
- package/claude/references/sd-simplysm14/apis/orm-common/README.md +33 -0
- package/claude/references/sd-simplysm14/apis/orm-common/db-context.md +77 -0
- package/claude/references/sd-simplysm14/apis/orm-common/executable.md +20 -0
- package/claude/references/sd-simplysm14/apis/orm-common/expr.md +92 -0
- package/claude/references/sd-simplysm14/apis/orm-common/queryable.md +98 -0
- package/claude/references/sd-simplysm14/apis/orm-common/schema-builders.md +128 -0
- package/claude/references/sd-simplysm14/apis/orm-node/README.md +59 -0
- package/claude/references/sd-simplysm14/apis/sd-claude/README.md +9 -0
- package/claude/references/sd-simplysm14/apis/sd-cli/README.md +50 -0
- package/claude/references/sd-simplysm14/apis/sd-cli/sd-config.md +155 -0
- package/claude/references/sd-simplysm14/apis/service-client/README.md +92 -0
- package/claude/references/sd-simplysm14/apis/service-common/README.md +29 -0
- package/claude/references/sd-simplysm14/apis/service-common/app-structure.md +63 -0
- package/claude/references/sd-simplysm14/apis/service-common/messages.md +56 -0
- package/claude/references/sd-simplysm14/apis/service-common/protocol.md +64 -0
- package/claude/references/sd-simplysm14/apis/service-common/service-types.md +43 -0
- package/claude/references/sd-simplysm14/apis/service-server/README.md +20 -0
- package/claude/references/sd-simplysm14/apis/service-server/auth.md +31 -0
- package/claude/references/sd-simplysm14/apis/service-server/builtin-services.md +47 -0
- package/claude/references/sd-simplysm14/apis/service-server/define-service.md +71 -0
- package/claude/references/sd-simplysm14/apis/service-server/internals.md +41 -0
- package/claude/references/sd-simplysm14/apis/service-server/server.md +66 -0
- package/claude/references/sd-simplysm14/apis/storage/README.md +69 -0
- package/claude/references/sd-simplysm14/{client-component.md → manuals/client-component.md} +134 -128
- package/claude/references/sd-simplysm14/manuals/client-crud.md +102 -0
- package/claude/references/sd-simplysm14/manuals/client-demo.md +128 -0
- package/claude/references/sd-simplysm14/manuals/client-rules.md +7 -0
- package/claude/references/sd-simplysm14/{client-setup.md → manuals/client-setup.md} +2 -2
- package/claude/references/sd-simplysm14/{client-tab.md → manuals/client-tab.md} +13 -11
- package/claude/references/sd-simplysm14/{orm-union.md → manuals/orm-union.md} +1 -1
- package/claude/references/sd-simplysm14/manuals/orm.md +75 -0
- package/claude/rules/sd-base-rules.md +191 -79
- package/claude/scripts/sd_paths.py +22 -0
- package/claude/sd-check-bash.py +19 -0
- package/claude/sd-statusline.py +7 -12
- package/claude/skills/sd-commit/SKILL.md +8 -3
- package/claude/skills/sd-demo/SKILL.md +103 -62
- package/claude/skills/sd-demo/evals/fixtures/empty/.specs/260513120000_warehouse/spec.md +45 -0
- package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/.specs/260513120000_warehouse/spec.md +42 -0
- package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
- package/claude/skills/sd-demo/evals/fixtures/with-master-screen/.specs/260513120000_warehouse/spec.md +45 -0
- package/claude/skills/sd-demo/evals/fixtures/with-master-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
- package/claude/skills/sd-demo/evals/fixtures/with-modal/.specs/260513120000_warehouse/spec.md +75 -0
- package/claude/skills/sd-demo/evals/fixtures/with-modal/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
- package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md +45 -0
- package/claude/skills/sd-demo/evals/fixtures/with-screens/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
- package/claude/skills/sd-demo/evals/golden.jsonl +5 -3
- package/claude/skills/sd-dev/SKILL.md +33 -63
- package/claude/skills/sd-dev/evals/fixtures/case-add/package.json +13 -0
- package/claude/skills/sd-dev/evals/fixtures/case-add/src/index.ts +10 -0
- package/claude/skills/sd-dev/evals/fixtures/case-add/tests/index.test.ts +11 -0
- package/claude/skills/sd-dev/evals/fixtures/case-add/tsconfig.json +12 -0
- package/claude/skills/sd-dev/evals/fixtures/case-bug/package.json +13 -0
- package/claude/skills/sd-dev/evals/fixtures/case-bug/src/index.ts +10 -0
- package/claude/skills/sd-dev/evals/fixtures/case-bug/tests/index.test.ts +11 -0
- package/claude/skills/sd-dev/evals/fixtures/case-bug/tsconfig.json +12 -0
- package/claude/skills/sd-dev/evals/fixtures/case-modify/package.json +13 -0
- package/claude/skills/sd-dev/evals/fixtures/case-modify/src/index.ts +10 -0
- package/claude/skills/sd-dev/evals/fixtures/case-modify/tests/index.test.ts +11 -0
- package/claude/skills/sd-dev/evals/fixtures/case-modify/tsconfig.json +12 -0
- package/claude/skills/sd-dev/evals/golden.jsonl +3 -3
- package/claude/skills/sd-docs/SKILL.md +53 -0
- package/claude/skills/sd-docs/evals/fixtures/new-write/.claude/references/sd-simplysm14/README.md +7 -0
- package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/package.json +5 -0
- package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/src/index.ts +3 -0
- package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/package.json +6 -0
- package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/src/index.ts +1 -0
- package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/package.json +5 -0
- package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/src/index.ts +8 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/README.md +7 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/apis/foo/README.md +3 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/package.json +5 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/src/index.ts +3 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/package.json +6 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/src/index.ts +1 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/package.json +5 -0
- package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/src/index.ts +8 -0
- package/claude/skills/sd-docs/evals/golden.jsonl +2 -0
- package/claude/skills/sd-docs/references/subagent-prompt.md +100 -0
- package/claude/skills/sd-impl/SKILL.md +149 -46
- package/claude/skills/sd-impl/evals/fixtures/case-001-new-screen/spec.md +55 -0
- package/claude/skills/sd-impl/evals/fixtures/case-002-auto-process/spec.md +55 -0
- package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/packages/client/src/pages/book-list.ts +22 -0
- package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/spec.md +57 -0
- package/claude/skills/sd-impl/evals/fixtures/case-004-ambiguous-spec/spec.md +58 -0
- package/claude/skills/sd-impl/evals/fixtures/case-005-id-mismatch/spec.md +52 -0
- 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
- 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
- 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
- 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
- package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/spec.md +77 -0
- package/claude/skills/sd-impl/evals/fixtures/case-new/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
- package/claude/skills/sd-impl/evals/fixtures/case-update/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
- 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
- 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
- package/claude/skills/sd-impl/evals/golden.jsonl +6 -3
- package/claude/skills/sd-impl/references/spec-cross-check.md +82 -0
- package/claude/skills/sd-skill/SKILL.md +4 -4
- package/claude/skills/sd-skill/evals/golden.jsonl +1 -2
- package/claude/skills/sd-skill/references/eval-authoring.md +31 -0
- package/claude/skills/sd-skill/references/eval-run.md +1 -1
- package/claude/skills/sd-skill/references/skill-authoring.md +8 -5
- package/claude/skills/sd-skill/scripts/run_eval.py +39 -60
- package/claude/skills/sd-spec/SKILL.md +163 -105
- package/claude/skills/sd-spec/references/example-spec.md +585 -0
- package/claude/skills/sd-spec/references/spec-authoring.md +287 -0
- package/claude/skills/sd-spec/references/spec-md-template.md +15 -93
- package/claude/skills/sd-unpack/SKILL.md +7 -1
- package/claude/skills/sd-unpack/scripts/handlers/_common.py +10 -0
- package/claude/skills/sd-unpack/scripts/handlers/eml_handler.py +5 -13
- package/claude/skills/sd-unpack/scripts/handlers/msg_handler.py +3 -12
- package/claude/skills/sd-unpack/scripts/handlers/office_com.py +23 -37
- package/claude/skills/sd-unpack/scripts/handlers/office_worker.py +1 -4
- package/claude/skills/sd-unpack/scripts/handlers/pdf_handler.py +4 -13
- package/claude/skills/sd-unpack/scripts/unpack.py +4 -4
- package/claude/skills/sd-use/SKILL.md +1 -0
- package/claude/skills/sd-wip/SKILL.md +38 -0
- package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/_wip.md +3 -0
- package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/spec.md +15 -0
- package/claude/skills/sd-wip/evals/fixtures/with-existing-wip/.wips/260101120000_acct.md +6 -0
- package/claude/skills/sd-wip/evals/fixtures/with-existing-wip-for-compact/.wips/260101120000_acct.md +14 -0
- package/claude/skills/sd-wip/evals/golden.jsonl +4 -0
- package/claude/skills/sd-wip/references/compact.md +79 -0
- package/package.json +1 -1
- package/scripts/sd-entries.mjs +2 -2
- package/claude/references/sd-simplysm14/orm.md +0 -11
- 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
- package/claude/skills/sd-demo/evals/fixtures/basic-single-req/.specs/260503143025/overview.md +0 -12
- package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Button.tsx +0 -12
- package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Input.tsx +0 -27
- 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
- package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/.specs/260503143025/overview.md +0 -12
- package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/components/Input.tsx +0 -25
- package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/pages/.gitkeep +0 -0
- 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
- 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
- package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/overview.md +0 -16
- package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Button.tsx +0 -6
- package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Input.tsx +0 -15
- package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/pages/.gitkeep +0 -0
- package/claude/skills/sd-demo/references/demo-md-template.md +0 -92
- 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
- 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
- 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
- package/claude/skills/sd-dev/evals/fixtures/single-req-auto-chain/src/lib/.gitkeep +0 -0
- 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
- package/claude/skills/sd-dev/evals/fixtures/start-from-plan/src/lib/.gitkeep +0 -0
- 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
- 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
- package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/components/Input.tsx +0 -6
- package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/pages/.gitkeep +0 -0
- 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
- 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
- package/claude/skills/sd-impl/evals/fixtures/multi-r/src/components/Input.tsx +0 -25
- package/claude/skills/sd-impl/evals/fixtures/multi-r/src/pages/.gitkeep +0 -0
- 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
- 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
- package/claude/skills/sd-impl/evals/fixtures/with-test-file/src/lib/.gitkeep +0 -0
- package/claude/skills/sd-impl/references/impl-md-template.md +0 -87
- package/claude/skills/sd-impl/references/modes-and-failure.md +0 -65
- package/claude/skills/sd-plan/SKILL.md +0 -130
- 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
- package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/api/user.ts +0 -13
- package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/components/Input.tsx +0 -15
- package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/pages/UserList.tsx +0 -29
- 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
- package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/components/Input.tsx +0 -6
- package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/pages/.gitkeep +0 -0
- 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
- 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
- package/claude/skills/sd-plan/evals/fixtures/demo-built/src/components/Input.tsx +0 -25
- package/claude/skills/sd-plan/evals/fixtures/demo-built/src/data/mock-customer.ts +0 -16
- package/claude/skills/sd-plan/evals/fixtures/demo-built/src/pages/CustomerList.tsx +0 -25
- package/claude/skills/sd-plan/evals/golden.jsonl +0 -3
- package/claude/skills/sd-plan/references/plan-md-template.md +0 -138
- 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
- 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
- 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
- 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
- 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
- package/claude/skills/sd-spec/evals/fixtures/direct-simple/.gitkeep +0 -0
- package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/REQ-001-test/spec.md +0 -19
- package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/overview.md +0 -18
- package/claude/skills/sd-spec/evals/golden.jsonl +0 -4
- package/claude/skills/sd-spec/references/overview-md-template.md +0 -89
- package/claude/skills/sd-spec/references/raw-input-handling.md +0 -96
- package/claude/skills/sd-verify/SKILL.md +0 -96
- 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
- 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
- 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
- package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.test.ts +0 -11
- package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.ts +0 -7
- 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
- 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
- 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
- package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/src/pages/UserList.tsx +0 -19
- 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
- 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
- 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
- package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.test.ts +0 -10
- package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.ts +0 -7
- package/claude/skills/sd-verify/evals/golden.jsonl +0 -3
- package/claude/skills/sd-verify/references/verify-md-template.md +0 -99
- /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
|
+
}
|
package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md
ADDED
|
@@ -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": "
|
|
2
|
-
{"id": "
|
|
3
|
-
{"id": "
|
|
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:
|
|
3
|
+
description: 코드 변경 요청을 받아 의도 합의·테스트 우선 구현·검증까지 한 번에 수행한다. Use when 화면 단위 spec 분석이 필요 없는 라이브러리·CLI·내부 모듈의 기능 추가·수정·버그 수정 요청 시.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# sd-dev
|
|
7
7
|
|
|
8
|
-
|
|
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
|
-
|
|
20
|
-
> 모호하면 그 외로 판단 → sd-spec.
|
|
14
|
+
사용자 발화를 토대로 무엇을 만들거나 바꿀지 합의. **1건씩 질문 → 답변 → 다음 건** (sd-base-rules "결정 근거"). 합의 결과는 대화 메모리에만 (필요 시 사용자가 `/sd-wip`).
|
|
21
15
|
|
|
22
|
-
|
|
16
|
+
다음을 확정해야 진행:
|
|
23
17
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
34
|
-
├─ skip-to-verify → 자동 sd-verify
|
|
35
|
-
└─ proceed → 자동 sd-impl
|
|
22
|
+
근거 충분(사용자 발화에 명시 + 기존 코드 패턴 추론 가능)이면 묻지 않고 진행. 외부 자료(시크릿·시안·샘플 데이터)가 필요하면 이 단계에서 요청.
|
|
36
23
|
|
|
37
|
-
|
|
24
|
+
### 2단계: 분석
|
|
38
25
|
|
|
39
|
-
|
|
40
|
-
```
|
|
26
|
+
작업 영역의 코드베이스 분석.
|
|
41
27
|
|
|
42
|
-
|
|
28
|
+
### 3단계: 계획
|
|
43
29
|
|
|
44
|
-
|
|
45
|
-
- `화면`, `UI`, `표시`, `버튼`, `필드`, `폼`, `목록`, `리스트`, `클릭`, `입력`
|
|
30
|
+
분석을 토대로 TDD 기반 개발 계획 수립.
|
|
46
31
|
|
|
47
|
-
|
|
32
|
+
### 4단계: TDD 사이클
|
|
48
33
|
|
|
49
|
-
|
|
34
|
+
각 작업 시작 시 **테스트 작성 가능 여부** 판정 — 입출력 명확 + 외부 의존 통제 가능한가.
|
|
50
35
|
|
|
51
|
-
|
|
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
|
-
-
|
|
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,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,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
|
+
});
|