@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.
- 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} +133 -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 +172 -79
- package/claude/sd-check-bash.py +5 -0
- package/claude/sd-statusline.py +7 -12
- package/claude/skills/sd-commit/SKILL.md +7 -3
- package/claude/skills/sd-demo/SKILL.md +81 -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 +125 -46
- 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 +2 -3
- package/claude/skills/sd-skill/SKILL.md +3 -3
- package/claude/skills/sd-skill/evals/golden.jsonl +0 -1
- package/claude/skills/sd-skill/references/eval-authoring.md +15 -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/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
|
@@ -1,79 +1,172 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Claude 에이전트가 반드시 지켜야 할 행동 지침이다.
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
##
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
+
- [ ] 선택지 중 정확히 1개에 `(추천)` 마커가 있는가
|
|
54
|
+
- [ ] 응답 내 선택지 세트가 정확히 1개인가
|
|
55
|
+
- [ ] [결정 근거](#결정-근거) 자료 점검을 충분히 했는가
|
|
56
|
+
|
|
57
|
+
**진행 근거 인용**:
|
|
58
|
+
|
|
59
|
+
- **결정근거 없는 추론만으로 작업 절대 금지** — 상태 변경 도구(Write/Edit/NotebookEdit, Bash 의 변경성 명령 — rm·mv·cp·git commit·git reset·pnpm install 등) 호출 직전 출력에 다음 형식 1줄을 **MUST** 포함:
|
|
60
|
+
|
|
61
|
+
`> 진행 근거: 사용자 발언 "<verbatim 인용>" 의 "<신호/directive 부분 인용>"`
|
|
62
|
+
|
|
63
|
+
사용자 발언에서 verbatim 인용 불가능 시 호출 금지. 자기 발언("~할게"·"수정할게"·"먼저 ~하고") 인용 절대 금지 — 자기 발언을 자기 컨펌으로 둔갑 금지.
|
|
64
|
+
|
|
65
|
+
**스코프 한정**: 인용한 발언이 직접 승인하는 단일 결정 항목만 직후 도구 호출로 실행. 인용 외 추론·부연·정당화로 스코프 확장 금지. 인용이 커버하지 않는 결정 항목은 별도 인용 또는 별도 질문 필수.
|
|
66
|
+
- ❌ 나쁜 예: 사용자 "이거 왜 X 아니지?" 직후 인용 가능한 진행 신호 없는데 Write 호출
|
|
67
|
+
- ❌ 나쁜 예: 사용자가 결정 항목 X 만 승인 → 인용 1줄 뒤 X + Y 둘 다 실행 (Y 는 인용 스코프 밖 자기 추론으로 확장 — 괄호 부연 "(→ Y 도 필요)" 로 둔갑 금지)
|
|
68
|
+
- ✅ 좋은 예: 사용자 "응 그렇게 해줘" → `> 진행 근거: 사용자 발언 "응 그렇게 해줘" 의 "응", "해줘"` → Write 호출
|
|
69
|
+
|
|
70
|
+
## 문제 해결
|
|
71
|
+
|
|
72
|
+
- 문제 발견 시(사용자 제기·자체 발견 모두) 증상이 아닌 근본 원인부터 분석. 원인과 해결 방법을 먼저 제시. 진행/질의 여부는 [결정 근거](#결정-근거)에 따름.
|
|
73
|
+
- 예시: A로 수정한 B가 이상함 / 작업 중 B 이상 발견
|
|
74
|
+
- 나쁜예: B 수정
|
|
75
|
+
- 좋은예: 근본적인 A의 문제 식별 및 A 수정
|
|
76
|
+
|
|
77
|
+
## 대화
|
|
78
|
+
|
|
79
|
+
- 사용자의 의도·목적을 정확히 파악.
|
|
80
|
+
- 불분명하면 질문으로 명확화.
|
|
81
|
+
- 사용자 제안/의견에 무조건 동의 금지.
|
|
82
|
+
- 권위로 두지 말고 근거로 직접 판단해 답변.
|
|
83
|
+
- 산출물 소비자의 도메인 어휘로 응답.
|
|
84
|
+
- 시스템 내부 용어 회피.
|
|
85
|
+
- 사람을 위한 간결하고 명확하게 응답.
|
|
86
|
+
- 문서의 식별자(코드·약어·번호·라벨·§번호 등)만 노출 금지. 인용 시 식별자 옆에 실제 의미(이름·내용 요약)를 함께 표기해, 사용자가 원본을 펴보지 않아도 문장만으로 의미가 통해야 함. 응답·질문·산출물 모두 동일.
|
|
87
|
+
|
|
88
|
+
질문·답변 프로토콜은 [질문/답변](#질문답변) 참조.
|
|
89
|
+
|
|
90
|
+
## Convention 굳히기 금지
|
|
91
|
+
|
|
92
|
+
사용자 피드백을 글자 그대로 문서화하지 말 것. 본질 의도를 추출해 일반 표현으로.
|
|
93
|
+
|
|
94
|
+
- **잘못된 굳히기**: 1회 케이스의 운용 디테일(위치/이름/형식/특정 단어)을 그대로 규칙화.
|
|
95
|
+
- 나쁜 예: "A라고 했을 때 B라고 하지 말 것", "X 파일에 Y를 쓰지 말 것"
|
|
96
|
+
- **올바른 일반화**: 본질 의도 + 적용 범위 정의.
|
|
97
|
+
- 좋은 예: "~한 상황에서는 ~를 수행"
|
|
98
|
+
- 본질 의도 불명확 시 추측 금지. 사용자에게 적극 질문.
|
|
99
|
+
- 피드백 받을 때마다 자문: "이게 1회 사례인가, 일반 규칙인가?" → 1회면 굳히지 말 것.
|
|
100
|
+
|
|
101
|
+
## 문서 작성
|
|
102
|
+
|
|
103
|
+
- **CRITICAL**: Claude 에이전트용 문서는 에이전트가 즉시 따를 수 있게 작성. 사람 가독성 기준 X.
|
|
104
|
+
- 최소 분량. 중복·꾸밈 금지. 가장 적합한 자리에 한번만 명시.
|
|
105
|
+
- 표준용어로 통할 내용을 풀어쓰지 말 것.
|
|
106
|
+
- 예시는 글만으로 규칙이 모호할 때만, 흔한 도메인(예: 재고관리)으로 최소로 작성.
|
|
107
|
+
- 산출물 소비자 도메인을 파악한 후 해당 도메인 용어로 작성. (나쁜 예: 소비자용 문서에 내부 기술용어)
|
|
108
|
+
- **합의 누락 금지**: 확정된 모든 결정·근거·예외·단서는 즉시 산출물에 작성. ([결정 근거](#결정-근거))
|
|
109
|
+
- "이 단계 범위 밖" / "템플릿에 자리 없음" 등을 이유로 누락 금지
|
|
110
|
+
- 대화 메모리에만 두고 진행 금지. 후속 세션이 산출물만 읽어도 동일하게 이어갈 수 있어야 함.
|
|
111
|
+
|
|
112
|
+
## ASCII 그림
|
|
113
|
+
|
|
114
|
+
다이어그램·구성도·와이어프레임 등 모든 ASCII 그림에 적용.
|
|
115
|
+
|
|
116
|
+
- 이모지(그림성 문자: ✏ ☐ ❌ ⭐ ♥ 등) 금지: 렌더러에 따라 1칸/2칸 변동 → 정렬 깨짐.
|
|
117
|
+
- 그 외 ASCII·한글·박스 라인(┌─┐ │ └┘ ├┤)·도형(▲ ▼ ► ◄)·화살표(← → ↑ ↓) 등 폭 안정 문자는 허용.
|
|
118
|
+
|
|
119
|
+
## 타임스탬프
|
|
120
|
+
|
|
121
|
+
산출 폴더·파일명에 시각을 포함할 때:
|
|
122
|
+
|
|
123
|
+
- 형식: `yyMMddHHmmss` (예: `260513204500` = 2026-05-13 20:45:00)
|
|
124
|
+
- 획득: Bash 도구 `date +%y%m%d%H%M%S` 실행 결과
|
|
125
|
+
|
|
126
|
+
## slug
|
|
127
|
+
|
|
128
|
+
산출 폴더·파일명에 포함하는 짧은 인간 가독 식별자.
|
|
129
|
+
|
|
130
|
+
- 짧은 한·두 단어.
|
|
131
|
+
- 허용 문자: 한글, 영문, `_`, `-`, 공백. 그 외 금지.
|
|
132
|
+
|
|
133
|
+
## 분석 작업
|
|
134
|
+
|
|
135
|
+
- `.back` 폴더 및 `.gitignore` 등재 경로는 코드베이스에서 배제. 명시 첨부 없이 읽거나 참고 금지.
|
|
136
|
+
- 현재 워킹트리만 기준. 사용자 명시 지침 없이 과거 버전(git history 등) 읽지 말 것 (이미 폐기된 패턴을 답습하는 실수 방지).
|
|
137
|
+
- 입력 파일 옆에 가공/펼친 산출물이 있으면 원본 대신 가공본부터.
|
|
138
|
+
|
|
139
|
+
## 코드 설계·변경
|
|
140
|
+
|
|
141
|
+
- 산출물 소비자 표면(공개 API/props/옵션/UI/출력 등) 단순함이 내부 구현 단순함보다 우선. 충돌 시 복잡도는 내부로 흡수.
|
|
142
|
+
- 내부 구현 난이도 회피를 위해 소비자 요구 완화/근사화 제안 금지. 난이도는 내부로 흡수. 불가 시 사용자 보고 후 결정.
|
|
143
|
+
- 변경 전, 변경 영역의 기존 코드 패턴과 개발 매뉴얼을 먼저 조사.
|
|
144
|
+
- 의존 라이브러리 동작 이상 → 우회 코드 작성 전 라이브러리 측 원인 먼저 조사.
|
|
145
|
+
- 라이브러리 버그/누락 판단 시 → 사용자에게 보고 후 수정 경로 제안 (예: 모노레포 내부=직접 패치, 외부=이슈 등록).
|
|
146
|
+
- 이슈 본문 형식: 발생 현상 + 기대 동작 + 실제 동작 + 재현 정보(코드/조건/버전).
|
|
147
|
+
- 우회 코드는 사용자가 명시 지시한 경우에만.
|
|
148
|
+
- 문제 발생 시 throw. silent skip 금지 (예외 캐치 후 대안 없이 진행 — 후속 프로세스가 결손된 채 동작). **자동 복구**(예: 의존 미설치 → 설치·재시도 = 완전 동작 회복)는 silent skip 아님. 부분 살리기는 사용자가 명시 지시한 경우에만.
|
|
149
|
+
- 사용자 표면 알림(로그·토스트·다이얼로그 등) severity 분류 기준은 *복구 가능 여부* 가 아니라 *사건의 본질*:
|
|
150
|
+
- `error`(danger): 문제 발생. catch·무시·재시도 여부와 무관하게 "문제가 일어난 사실" 이면 전부 해당.
|
|
151
|
+
- `warn`: 문제는 아니지만 사용자가 인지해야 할 중요 알림.
|
|
152
|
+
- `info`: 알면 좋은 일반 알림.
|
|
153
|
+
- `success`: 정상 완료 알림.
|
|
154
|
+
- 안티패턴: 무중단/복구 처리되었다는 이유로 `error` 대신 `warn` 선택 — 분류 기준 오용.
|
|
155
|
+
|
|
156
|
+
## 도구 사용
|
|
157
|
+
|
|
158
|
+
- Playwright CLI 산출물 저장 인자(`screenshot/pdf/snapshot/state-save/video-start --filename` 등) 사용 금지. 생략 시 자동 경로(`.playwright-cli/...`)로 저장되며, 출력 메시지의 경로를 그대로 인용해 후속 참조. (명시 시 cwd 기준 resolve 되어 프로젝트 루트로 떨어짐. 읽기 인자는 무관.)
|
|
159
|
+
|
|
160
|
+
## 상황별 참고 자료
|
|
161
|
+
|
|
162
|
+
아래 표의 **트리거 조건이 처음 충족될 때** 해당 자료를 Read.
|
|
163
|
+
|
|
164
|
+
| 트리거 | 참고 자료 |
|
|
165
|
+
| ---------------------------------------------------------------------------------- | ------------------------------------------------------ |
|
|
166
|
+
| `@simplysm/*` 14.x 패키지의 코드 설계 및 변경 | `.claude/references/sd-simplysm14/README.md` |
|
|
167
|
+
| Requirement Source 부정확성 (STT 오타·화자 모호·발화 모호·도메인 용어 다의성) 처리 | `.claude/references/sd-requirement-source-handling.md` |
|
|
168
|
+
|
|
169
|
+
## 용어 사전
|
|
170
|
+
|
|
171
|
+
- **Requirement Source**: sd-spec 의 입력 자료 (회의록·고객 paste·문서·메일 등 분석 출발 자료).
|
|
172
|
+
- **최종 사용자**: 시스템의 실제 도메인 사용자 (개발자·시스템 관리자 등 외).
|
package/claude/sd-check-bash.py
CHANGED
|
@@ -19,6 +19,11 @@ 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:
|
package/claude/sd-statusline.py
CHANGED
|
@@ -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
|
-
|
|
206
|
-
|
|
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,12 @@ description: 워크스페이스의 모든 변경을 단일 커밋으로 묶는
|
|
|
5
5
|
|
|
6
6
|
# 총괄 커밋
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
system prompt 의 "Committing changes with git" 절차를 따르되, 아래만 적용한다.
|
|
9
9
|
|
|
10
|
-
- Staging은 `git add -A` 사용.
|
|
11
|
-
-
|
|
10
|
+
- Staging은 `git add -A` 사용. 본 스킬 호출 = 사용자가 -A 위험(민감 파일 staging) 인지·동의한 것으로 간주.
|
|
11
|
+
- 메시지는 사용자 응답 언어와 일치.
|
|
12
|
+
- 변경이 여러 갈래면:
|
|
13
|
+
- 제목: 갈래들을 `및`/`,` 로 한 줄 병합
|
|
14
|
+
- 본문(빈 줄 후): 갈래별 헤더 `[<type>]: <갈래 요약>` + 변경 항목 불릿(`-`). 갈래 간 빈 줄로 분리.
|
|
15
|
+
- `<type>`: conventional commits (`fix`/`feat`/`refactor`/`docs`/`chore`/`test`/`build`/`ci`/`style`/`perf`)
|
|
12
16
|
- 푸시는 수행하지 않음.
|
|
@@ -1,93 +1,112 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sd-demo
|
|
3
|
-
description: spec.md
|
|
3
|
+
description: spec.md 의 화면 1개를 클라이언트 패키지의 화면 컴포넌트 자리에 인터랙티브 데모 골격으로 만든다. Use when "데모 만들기", "화면 데모", "spec 의 화면을 시각화" 를 요청할 때
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# demo
|
|
6
|
+
# sd-demo
|
|
7
7
|
|
|
8
|
-
spec.md 1
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
세션 폴더(`{yyMMdd_HHmmss}`)는 spec 단계의 결과를 그대로 사용 (이미 존재).
|
|
14
|
+
- **주의·시간의 90% 를 template 에 쓴다.** 와이어프레임을 시각적으로 정확·정돈되게 복원하는 게 본 작업의 본질.
|
|
15
|
+
- 코드 골격(시그널·effect·DI·핸들러)은 **코드베이스에서 분석해 따라간다** — 본 스킬은 framework 처방을 박아두지 않는다.
|
|
16
|
+
- 데이터 변경 시뮬레이션 금지. 저장·삭제 핸들러는 마커만. 클릭은 받되 결과 반영 X.
|
|
17
|
+
- 모달 띄우기는 실제로 작동시켜 시연 가치 확보.
|
|
23
18
|
|
|
24
19
|
## 워크플로
|
|
25
20
|
|
|
26
|
-
1
|
|
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
|
+
LLM 단독으로 답습 원본 1개를 뽑으면 부적절한 화면을 고르는 경우가 잦다. 다음 절차:
|
|
27
57
|
|
|
28
|
-
|
|
58
|
+
1. 코드베이스에서 화면 구성(단순 목록 / 마스터-디테일 / 마스터-라인 / 폼 편집 / 모달) 일치하는 **후보 2~3개** 추리기. 도메인 영역(같은 sub-app)이 같으면 우선.
|
|
59
|
+
2. 사용자에게 후보 목록 제시 후 1회 질문 — "이 중 답습할 화면 선택 부탁".
|
|
60
|
+
3. 사용자 확정분 1개(또는 복수) Read 후 답습 항목:
|
|
61
|
+
- template 슬롯 사용·영역 분할·항목 클래스 패턴
|
|
62
|
+
- 빈 상태 마크업(아이콘·여백·문구)
|
|
63
|
+
- 도메인 폴더 위치 · 라우팅·메뉴 등록 위치·방식 · 슬러그 규칙
|
|
29
64
|
|
|
30
|
-
|
|
31
|
-
- DEMO ID는 세션 폴더 내 `DEMO-001` 부터 순번
|
|
32
|
-
- 슬러그는 한글 OK
|
|
65
|
+
후보 0개면 사용자에게 1회 보고 후 라이브러리 문서(A) + 컴포넌트 소스(B) 만으로 진행.
|
|
33
66
|
|
|
34
|
-
4
|
|
35
|
-
- 페이지 + 컴포넌트 배치 (디자인 시스템 활용)
|
|
36
|
-
- mock data는 **별도 파일** + `MOCK_` prefix + 상단 주석
|
|
37
|
-
- 데모 흐름 필수 인터랙션만 (페이지 이동/폼 입력 시각/클릭 반응)
|
|
38
|
-
- 모호한 부분 → Q
|
|
67
|
+
### 4단계: 충돌 확인
|
|
39
68
|
|
|
40
|
-
|
|
69
|
+
대상 화면(또는 동반 모달 §4.x) 파일이 이미 있으면 묻기:
|
|
41
70
|
|
|
42
|
-
|
|
71
|
+
- ① 덮어쓰기 / ② spec 변경분만 보강 / ③ 취소
|
|
43
72
|
|
|
44
|
-
|
|
73
|
+
호출자 발화에 명시 분기가 있으면 묻지 않고 그 분기로 진행.
|
|
45
74
|
|
|
46
|
-
|
|
75
|
+
### 5단계: 생성
|
|
47
76
|
|
|
48
|
-
|
|
49
|
-
- UI 조정 → demo 코드 수정
|
|
50
|
-
- spec 변경 (R 단위) → spec.md 수정 + 메타 `이력` 기록
|
|
51
|
-
- REQ 구조 변경(분리/병합) → spec 재진입 후보 알림 (demo 단독 처리 X)
|
|
77
|
+
3단계 분석 자료(A/B/C)를 1순위 근거로, **template 부터** 채운다.
|
|
52
78
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
79
|
+
- 파일명·selector·시그널·DI 명명 등은 라이브러리 문서(A) 가 정한 형식 그대로.
|
|
80
|
+
- 슬롯·영역 분할·클래스 패턴은 답습 화면(C) 그대로.
|
|
81
|
+
- 모달 호출 화면이면 동반 모달 §4.x 도 같은 단계로 생성.
|
|
56
82
|
|
|
57
|
-
|
|
83
|
+
**표식 마커 (고정)**
|
|
58
84
|
|
|
59
|
-
|
|
85
|
+
| 위치 | 마커 |
|
|
86
|
+
| ------------------------ | ---------------------------------------------------------- |
|
|
87
|
+
| 더미 데이터 선언 위 | `// sd-demo: 더미 — 구현 단계에서 교체` |
|
|
88
|
+
| 미구현 핸들러 본문 | `// sd-demo: 미구현 — 동작 자리` |
|
|
89
|
+
| 더미 타입 인라인 선언 위 | `// sd-demo: 더미 타입 — 구현 단계에서 @모델/X 로 교체` |
|
|
90
|
+
| 종류 매핑 임의 추정 | `// sd-demo: 종류 매핑 임의 — 확인 필요` |
|
|
91
|
+
| 권한 path 임의 추정 | `// sd-demo: 권한 path 임의 — 확인 필요` |
|
|
60
92
|
|
|
61
|
-
|
|
93
|
+
다른 변형 사용 금지. 후속 단계가 grep 으로 추적한다.
|
|
62
94
|
|
|
63
|
-
|
|
95
|
+
### 6단계: 자체 점검
|
|
64
96
|
|
|
65
|
-
|
|
97
|
+
**패스 1: 답습 매칭** — 3단계-C 의 사용자 확정 화면 다시 Read 후 비교:
|
|
66
98
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
export const MOCK_RTP_LIST = [...]
|
|
71
|
-
```
|
|
99
|
+
- 슬롯 사용 위치·내용 패턴 동일
|
|
100
|
+
- 영역 분할·클래스 패턴 동일
|
|
101
|
+
- 빈 상태·아이콘·여백 동일
|
|
72
102
|
|
|
73
|
-
|
|
74
|
-
- 변수/상수 `MOCK_` prefix 필수
|
|
75
|
-
- 파일 상단 주석에 `MOCK` 키워드 필수
|
|
103
|
+
**패스 2: 라이브러리 문서 위배 점검** — 3단계-A 의 매뉴얼 문서 항목별 일치 확인. 위배 항목이 있으면 수정 후 재점검.
|
|
76
104
|
|
|
77
|
-
|
|
105
|
+
### 7단계: 완료 보고
|
|
78
106
|
|
|
79
|
-
|
|
80
|
-
- raw input 불변
|
|
81
|
-
- ID 불변 (DEMO-001 = 영원히 DEMO-001)
|
|
82
|
-
- 자동 판단 금지 (피드백 분류는 사용자)
|
|
83
|
-
- 한 번에 하나씩 Q
|
|
107
|
+
만든 파일 목록 보고 후 종료.
|
|
84
108
|
|
|
85
|
-
##
|
|
109
|
+
## 운용
|
|
86
110
|
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
- ❌ Mock data를 페이지 inline에 굳히기
|
|
90
|
-
- ❌ 피드백 분류 자동 결정
|
|
91
|
-
- ❌ REQ 구조 변경을 demo 단독 처리 (spec 재진입)
|
|
92
|
-
- ❌ 라운드 기록 누락
|
|
93
|
-
- ❌ 종료 결정 직후 demo.md 형식 점검 없이 done 전환
|
|
111
|
+
- 결정 근거: `sd-base-rules.md` "결정 근거" 적용.
|
|
112
|
+
- 본 스킬은 framework 처방을 박아두지 않는다. 매 호출 시 3단계에서 분석한 라이브러리 문서·컴포넌트 소스·답습 화면을 근거로 산출.
|
|
@@ -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
|
+
}
|