@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,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
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
{"id": "
|
|
2
|
-
{"id": "
|
|
3
|
-
{"id": "
|
|
1
|
+
{"id": "case-add", "input": "/sd-dev toSnakeCase 함수를 추가해줘", "fixture": "case-add", "rubric": ["src/index.ts (또는 src 하위 신규 파일) 에 toSnakeCase 함수가 export 키워드로 추가되었는가?", "tests 디렉토리에 toSnakeCase 의 테스트 케이스가 1건 이상 추가되었는가?", "기존 toCamelCase 함수 정의가 src/index.ts 에 보존되어 있는가?", "vitest run 명령이 Bash 도구로 1회 이상 호출되었고 최종 호출의 종료 코드가 0 인가?"]}
|
|
2
|
+
{"id": "case-modify", "input": "/sd-dev toCamelCase 가 공백도 구분자로 처리하게 바꿔줘", "fixture": "case-modify", "rubric": ["src/index.ts 의 toCamelCase 가 공백 문자를 구분자로 인식하도록 변경되었는가? (split 정규식에 공백 포함 또는 동등 처리)", "tests 디렉토리에 공백 구분자 입력 케이스 테스트가 1건 이상 추가되었는가?", "기존 kebab-case 및 snake_case 테스트 케이스가 삭제되지 않고 보존되어 있는가?", "vitest run 명령이 Bash 도구로 1회 이상 호출되었고 최종 호출의 종료 코드가 0 인가?"]}
|
|
3
|
+
{"id": "case-bug", "input": "/sd-dev toCamelCase 빈 문자열 입력하면 에러나, 고쳐줘", "fixture": "case-bug", "rubric": ["tests 디렉토리에 빈 문자열 입력 케이스 테스트가 1건 이상 추가되었는가?", "src/index.ts 의 toCamelCase 가 빈 문자열 입력 시 throw 하지 않고 빈 문자열을 반환하도록 수정되었는가?", "최종 vitest run 의 종료 코드가 0 이고 기존 테스트와 신규 빈 문자열 테스트가 모두 통과하는가?"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sd-docs
|
|
3
|
+
description: `@simplysm/*` 라이브러리 패키지의 API 문서를 `.claude/references/sd-simplysm14/apis/<패키지명>/` 자리에 사용 트리거 기준으로 산출·갱신한다. Use when 라이브러리 API 문서를 새로 작성하거나 코드 변경을 반영해 갱신할 때.
|
|
4
|
+
effort: "low"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# sd-docs
|
|
8
|
+
|
|
9
|
+
`@simplysm/*` 라이브러리 패키지의 API 문서를 코드 진실에 맞춰 산출·갱신한다. 메인 에이전트가 패키지 목록 추출과 상위 README 인덱스 갱신을 담당하고, 패키지별 산출은 subagent 1개씩 병렬 위임한다.
|
|
10
|
+
|
|
11
|
+
## 산출 자리
|
|
12
|
+
|
|
13
|
+
- `.claude/references/sd-simplysm14/apis/<패키지명>/README.md` — 패키지당 1개, 필수.
|
|
14
|
+
- `.claude/references/sd-simplysm14/apis/<패키지명>/<군명>.md` — 사용 트리거 군이 본질적으로 커서 README 한 장에 풀어쓰면 다른 컨텍스트 정보까지 끌려나오는 경우에만 분할 산출.
|
|
15
|
+
- `.claude/references/sd-simplysm14/README.md` 의 "패키지 인덱스" 섹션 — 메인이 자동 갱신.
|
|
16
|
+
|
|
17
|
+
## 워크플로
|
|
18
|
+
|
|
19
|
+
### 1. 패키지 목록 추출
|
|
20
|
+
|
|
21
|
+
워크스페이스 루트의 `packages/*/package.json` 을 모두 읽어 다음 두 리스트를 만든다.
|
|
22
|
+
|
|
23
|
+
- **public 리스트**: `private: true` 가 아닌 패키지. 각 항목 = `{ name, dir }`.
|
|
24
|
+
- **private 리스트**: `private: true` 인 패키지. 인덱스에서 제외하기 위해 보관.
|
|
25
|
+
|
|
26
|
+
### 2. 패키지별 subagent 병렬 호출
|
|
27
|
+
|
|
28
|
+
`public 리스트` 의 패키지 수만큼 `general-purpose` subagent 호출을 **단일 메시지 안에서 병렬**로 보낸다. 각 호출 프롬프트는 [references/subagent-prompt.md](references/subagent-prompt.md) 의 양식을 그대로 사용하고, `<PACKAGE_NAME>` 과 `<PACKAGE_DIR>` 만 치환한다.
|
|
29
|
+
|
|
30
|
+
각 subagent 의 산출:
|
|
31
|
+
|
|
32
|
+
- `apis/<패키지명>/README.md` 신규 작성 또는 코드 변경 반영 갱신.
|
|
33
|
+
- 필요 시 `apis/<패키지명>/<군명>.md` 추가/갱신.
|
|
34
|
+
- 결과 보고 1단락 (산출/갱신 파일 목록, 분할 발생 여부, 한 줄 트리거 요약).
|
|
35
|
+
|
|
36
|
+
### 3. 상위 README 의 "패키지 인덱스" 섹션 갱신
|
|
37
|
+
|
|
38
|
+
모든 subagent 완료 후 `.claude/references/sd-simplysm14/README.md` 의 "패키지 인덱스" 섹션을 통째로 재구성한다.
|
|
39
|
+
|
|
40
|
+
- **항목 형식**: `- **<패키지명>** — <한 줄 트리거 요약>. 자세히: [apis/<패키지명>/README.md](./apis/<패키지명>/README.md)`
|
|
41
|
+
- **순서**: 패키지명 알파벳순.
|
|
42
|
+
- **포함**: `public 리스트` 만.
|
|
43
|
+
- **제외**: `private 리스트` 의 패키지, 코드베이스에 더 이상 존재하지 않는 패키지.
|
|
44
|
+
- 섹션 머리(`## 패키지 인덱스`)와 다른 섹션은 건드리지 않는다.
|
|
45
|
+
|
|
46
|
+
### 4. 사용자 보고
|
|
47
|
+
|
|
48
|
+
다음 항목을 짧게 정리해 출력한다.
|
|
49
|
+
|
|
50
|
+
- 신규 작성된 패키지 목록.
|
|
51
|
+
- 갱신된 패키지 목록.
|
|
52
|
+
- 분할 발생(추가 `.md` 가 생긴) 패키지 목록.
|
|
53
|
+
- 인덱스에서 제거된 항목 (있다면).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const BAZ_SECRET = "internal-only";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const BAZ_SECRET = "internal-only";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{"id":"new-write","input":"/sd-docs","fixture":"new-write","rubric":["샌드박스 종료 시점 트리에 `.claude/references/sd-simplysm14/apis/foo/README.md` 파일이 존재하는가?","샌드박스 종료 시점 트리에 `.claude/references/sd-simplysm14/apis/bar/README.md` 파일이 존재하는가?","샌드박스 종료 시점 트리에 `.claude/references/sd-simplysm14/apis/baz/` 경로(`baz` 패키지 산출물)가 전혀 존재하지 않는가?","`.claude/references/sd-simplysm14/README.md` 본문에 `apis/foo` 를 가리키는 링크와 `apis/bar` 를 가리키는 링크가 모두 포함되었는가?","`.claude/references/sd-simplysm14/README.md` 본문에 `baz` 패키지가 패키지 인덱스 항목으로 노출되지 않는가?","`.claude/references/sd-simplysm14/apis/foo/README.md` 의 첫 줄(H1)이 정확히 `# @simplysm/foo` 문자열인가?"]}
|
|
2
|
+
{"id":"update-mixed","input":"/sd-docs","fixture":"update-mixed","rubric":["`.claude/references/sd-simplysm14/apis/foo/README.md` 파일 내용에 `OLD_FOO_DOC_PLACEHOLDER_MUST_BE_REWRITTEN` 문자열이 포함되지 않는가?","샌드박스 종료 시점 트리에 `.claude/references/sd-simplysm14/apis/bar/README.md` 파일이 존재하는가?","샌드박스 종료 시점 트리에 `.claude/references/sd-simplysm14/apis/baz/` 경로가 전혀 존재하지 않는가?","`.claude/references/sd-simplysm14/README.md` 본문에 `OLD_INDEX_PLACEHOLDER_MUST_BE_REWRITTEN` 문자열이 포함되지 않는가?","`.claude/references/sd-simplysm14/README.md` 본문에 `apis/bar` 를 가리키는 링크가 포함되었는가?","`.claude/references/sd-simplysm14/apis/bar/README.md` 의 첫 줄(H1)이 정확히 `# @simplysm/bar` 문자열인가?"]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# subagent 호출 프롬프트 (sd-docs)
|
|
2
|
+
|
|
3
|
+
메인 에이전트가 패키지 1개당 1번씩 `general-purpose` subagent 를 호출할 때 쓰는 프롬프트 양식이다. `<PACKAGE_NAME>` 과 `<PACKAGE_DIR>` 만 치환한다.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 프롬프트 (이 마커 아래 전부를 그대로 subagent 에 전달)
|
|
8
|
+
|
|
9
|
+
너는 `<PACKAGE_NAME>` 패키지(소스 위치: `<PACKAGE_DIR>/src/`)의 API 문서를 작성·갱신하는 subagent 다. 산출 자리는 `.claude/references/sd-simplysm14/apis/<PACKAGE_NAME 의 패키지명 부분>/` 이다(예: `@simplysm/foo` → `apis/foo/`). 아래 규칙을 따라 끝까지 진행한다.
|
|
10
|
+
|
|
11
|
+
### 1. 입력 분석
|
|
12
|
+
|
|
13
|
+
다음만 진실 근거로 사용한다 — 외부 자료·과거 git 기록·다른 패키지 사용처는 보지 않는다.
|
|
14
|
+
|
|
15
|
+
- `<PACKAGE_DIR>/src/index.ts` 의 export — **entry 시작점**. 여기서 노출된 심볼만 문서 대상.
|
|
16
|
+
- 위 entry 가 재노출하는 각 심볼의 정의 파일(타입 시그니처 + 본문).
|
|
17
|
+
- 위 정의 파일 또는 동일 패키지 안 파일의 JSDoc 주석.
|
|
18
|
+
- `tests/` 디렉토리 중 해당 패키지를 import 해 검증하는 테스트 코드(있을 경우만).
|
|
19
|
+
|
|
20
|
+
타입 시그니처에서 직접 드러나지 않는 사용 패턴이 필요하면 위 4개 소스 안에서만 추론한다.
|
|
21
|
+
|
|
22
|
+
### 2. 사용 트리거 군 분류
|
|
23
|
+
|
|
24
|
+
entry 의 export 심볼들을 "한 작업 컨텍스트에서 함께 참조될 군"으로 묶는다. 예: 에러 처리 군, 값 타입 군, 큐/이벤트 군. 분류 기준은 폴더 구조나 심볼 종류가 아니라 **사용 시점**(언제 같이 읽힐 것인가)이다.
|
|
25
|
+
|
|
26
|
+
군이 모호하거나 작아 트리거가 1~2개뿐인 심볼은 별도 군 만들지 말고 README 의 공통 인라인 항목에 둔다.
|
|
27
|
+
|
|
28
|
+
### 3. 산출 단위 판정
|
|
29
|
+
|
|
30
|
+
기본은 `README.md` 1장. 다음 조건을 **모두** 만족하는 군만 별도 `<군명>.md` 로 분할한다.
|
|
31
|
+
|
|
32
|
+
- 그 군의 사용법·주의사항을 README 에 풀어쓰면, 다른 컨텍스트 정보까지 같이 끌려나와 다른 작업 시점에서 읽는 부담이 커진다.
|
|
33
|
+
- 그 군 단독으로 사용 예·시그니처·주의 8줄 이상 필요하다.
|
|
34
|
+
|
|
35
|
+
위를 만족하지 않으면 README 안에 머무른다.
|
|
36
|
+
|
|
37
|
+
### 4. 기존 문서 확인 (신규/갱신 자동 판단)
|
|
38
|
+
|
|
39
|
+
- `apis/<패키지명>/README.md` 가 이미 존재하면: 기존 내용 읽고 코드 현재 상태와 차이만 메운다. 기존 손편집 표현 가능한 한 보존, 단 코드와 모순되면 코드 진실 우선.
|
|
40
|
+
- 존재하지 않으면: 처음부터 작성.
|
|
41
|
+
- 기존 `<군명>.md` 들도 동일 원칙. 코드에서 사라진 군의 파일은 삭제한다.
|
|
42
|
+
|
|
43
|
+
### 5. README.md 형식
|
|
44
|
+
|
|
45
|
+
각 패키지의 `apis/<패키지명>/README.md` 는 다음 구조를 따른다.
|
|
46
|
+
|
|
47
|
+
H1 은 `# @simplysm/<short-name>` 형식으로 고정한다 (예: `# @simplysm/foo`).
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
# @simplysm/<short-name>
|
|
51
|
+
|
|
52
|
+
<패키지 한 줄 개요>
|
|
53
|
+
|
|
54
|
+
## 사용 트리거 인덱스
|
|
55
|
+
|
|
56
|
+
- **<심볼 또는 군 이름>** — <언제·어떤 작업에서 쓰는지 1줄>. (분할된 군이면 `자세히: [<군명>.md](./<군명>.md)`)
|
|
57
|
+
- ...
|
|
58
|
+
|
|
59
|
+
## <인라인 군 이름 1>
|
|
60
|
+
|
|
61
|
+
각 심볼별 짧은 시그니처 + 즉시 사용 가능한 사용법 (3~6줄). 본질적으로 큰 군이라 분할된 경우 이 섹션은 없고, 위 인덱스에서 `자세히:` 링크로 안내한다.
|
|
62
|
+
|
|
63
|
+
## <인라인 군 이름 2>
|
|
64
|
+
...
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 6. 분할 .md 형식
|
|
68
|
+
|
|
69
|
+
`<군명>.md` 는 다음 구조.
|
|
70
|
+
|
|
71
|
+
분할 `.md` 의 H1 도 동일 형식 + 군명을 붙인다: `# @simplysm/<short-name> — <군명>`.
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
# @simplysm/<short-name> — <군명>
|
|
75
|
+
|
|
76
|
+
<군 개요 1~2줄: 언제 같이 읽히는 묶음인지>
|
|
77
|
+
|
|
78
|
+
## <심볼>
|
|
79
|
+
|
|
80
|
+
시그니처, 사용 예, 주의사항.
|
|
81
|
+
|
|
82
|
+
## <심볼>
|
|
83
|
+
...
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 7. 작성 원칙
|
|
87
|
+
|
|
88
|
+
- 산출물 소비자는 Claude 에이전트다. 사람 가독성보다 에이전트가 즉시 따를 수 있는 간결·명확성이 우선.
|
|
89
|
+
- 코드에서 드러나지 않는 동작은 적지 않는다.
|
|
90
|
+
- 사용 예는 실제 호출 코드 형태로 1~3줄, 군마다 1개 정도.
|
|
91
|
+
- 분량을 늘리기 위한 부연·중복·꾸밈 금지.
|
|
92
|
+
|
|
93
|
+
### 8. 산출 보고
|
|
94
|
+
|
|
95
|
+
작성/갱신을 마치면 호출자(메인)에게 다음을 1단락으로 보고한다.
|
|
96
|
+
|
|
97
|
+
- 신규 작성인지 갱신인지.
|
|
98
|
+
- 산출/갱신한 파일 목록(README 외 분할 .md 포함).
|
|
99
|
+
- 패키지 한 줄 트리거 요약(메인이 상위 README 인덱스에 쓸 문장).
|
|
100
|
+
- 삭제한 파일(있다면).
|
|
@@ -1,67 +1,170 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sd-impl
|
|
3
|
-
description:
|
|
3
|
+
description: spec.md 의 단위(§4.x 화면 또는 §5.x 자동 처리) 1개를 현재 코드베이스 상태와 비교해 차이만큼 풀 구현(테스트·시연 포함)한다. Use when "화면 풀 구현", "데모를 실 구현으로", "화면 실가동", "자동 처리 풀 구현" 을 요청할 때.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# sd-impl
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
**커밋 안 함** (사용자 정책 — 병렬 작업 충돌 방지).
|
|
8
|
+
spec.md 단위(§4.x 화면 또는 §5.x 자동 처리) 1개를 현재 코드베이스 상태와 비교해 빠지거나 어긋난 부분만큼 풀 구현한다. 데모 골격이 있으면 보존. 신규/갱신 무관 동일 워크플로. 끝에 사용자 시연으로 회귀를 잡는다.
|
|
10
9
|
|
|
11
|
-
##
|
|
10
|
+
## 본질
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
+ 코드 변경 (uncommitted)
|
|
18
|
-
```
|
|
12
|
+
- **차이만 작업**: spec 항목 1개당 (없음 / 불일치 / 일치) 판정. 일치 항목은 손대지 않는다.
|
|
13
|
+
- **YAGNI**: spec 에 없는 기능·옵션·추상화 추가 금지.
|
|
14
|
+
- **임의 채움 금지**: spec 본문에 명시 없거나 모호한 분기를 발견하면 즉시 멈추고 사용자에게 질문. 자체 판단으로 채우지 않는다. 신규/갱신 무관.
|
|
15
|
+
- **환경 무관**: framework 처방을 본문에 박지 않는다. 코드베이스 매뉴얼·기준 단위 + 계층별 보강 패턴·테스트 환경은 발견되면 따르고, 없으면 표준 패턴.
|
|
19
16
|
|
|
20
17
|
## 워크플로
|
|
21
18
|
|
|
22
|
-
1
|
|
19
|
+
### 1단계: 입력 확보
|
|
23
20
|
|
|
24
|
-
|
|
21
|
+
- 대상 spec.md 경로
|
|
22
|
+
- 구현할 단위 식별자 — `§4.x` (화면) 또는 `§5.x` (자동 처리)
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
없으면 묻기. spec.md 에 식별자 매칭이 안 되면 §4 화면 목록 / §5 자동 처리 목록 표에서 후보 제시 후 확정.
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
- 모드별 표준 흐름 적용 (TDD/사후/생략) — [references/modes-and-failure.md](references/modes-and-failure.md)
|
|
30
|
-
- **R 끝마다 검증**: 타입체크 + 린트(+fix) + 테스트 (해당 R + 전체 회귀). 빌드는 별도 X (타입체크 + 린트로 갈음).
|
|
31
|
-
- 모두 통과 → impl.md 갱신 (템플릿: [references/impl-md-template.md](references/impl-md-template.md)) → 다음 R
|
|
32
|
-
- 하나라도 실패 → 막힘 처리 ([references/modes-and-failure.md](references/modes-and-failure.md))
|
|
26
|
+
### 2단계: 외부 입력 점검 (BLOCKING)
|
|
33
27
|
|
|
34
|
-
|
|
35
|
-
- 보고: 안내 텍스트라 별도 사용자 승인 게이트 X.
|
|
28
|
+
작업 대상 §4.x/§5.x 와 그가 참조하는 §5/§6/§7/§8 항목 점검:
|
|
36
29
|
|
|
37
|
-
|
|
30
|
+
- **헤더 `[OPEN: 날짜]` 섹션**: 본문이 재분석 포인터일 뿐 임의안 부재 → sd-impl 해소 불가. 사용자 보고 후 **종료**. 사용자가 sd-spec 으로 확정 받은 뒤 sd-impl 재호출.
|
|
31
|
+
- **본문 인라인 `[OPEN]`**: `sd-base-rules` "결정 근거" 적용 — 근거 없으면 1건씩 질문. 답변 후 즉시 spec.md 반영 → 다음 건. 결정이 다른 섹션의 구조 변경(필드 추가, 새 규칙 항목 등)을 요구하면 헤더 OPEN 과 동일 처리: 종료 + sd-spec 재호출. 종료 전 식별·보고:
|
|
32
|
+
- sd-spec 에 넘길 변경 항목 (§ 위치 + 변경 내용)
|
|
33
|
+
- 그 변경이 영향 미치는 **다른 §4.x/§5.x 단위 목록** — 구조 변경된 §5/§6/§7/§8 항목을 spec 에서 역인용해 수집
|
|
34
|
+
- 영향 단위 중 이미 구현된 것 / 미구현인 것 구분
|
|
35
|
+
- **사용자 제공 예정 자료**: spec 본문에 "사용자 제공 예정" 류로 적힌 파일·값. 사용자 회신 후 진행.
|
|
36
|
+
- **묵시적 모호**: 명시 마커 없지만 spec 본문이 분기·정의·정의식·경계 케이스를 다루지 않는 부분. 4단계 분해 표 작성 중 발견될 가능성 높음. 발견 시 본 단계로 회귀해 인라인 `[OPEN]` 절차 적용.
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|---|---|
|
|
41
|
-
| 진행중 | 현재 작업 중 |
|
|
42
|
-
| 완료 | 검증 통과, impl.md 갱신됨 |
|
|
43
|
-
| 막힘 | 자동 시도 후 미해결, 사용자 Q |
|
|
44
|
-
| 보류 | plan 모순으로 plan 재진입 필요 |
|
|
38
|
+
### 3단계: 보조 자료 수집 (있다면 활용)
|
|
45
39
|
|
|
46
|
-
|
|
40
|
+
부재로 워크플로를 멈추지 않는다.
|
|
47
41
|
|
|
48
|
-
|
|
42
|
+
**A. 라이브러리/개발 매뉴얼**
|
|
49
43
|
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
- 자동 판단 금지 (모드 변경/스킵 등)
|
|
54
|
-
- **human-in-the-loop** (다이얼로그 루프 X, 막힘 시만 Q)
|
|
44
|
+
- `@simplysm/*` 14.x — [.claude/references/sd-simplysm14/README.md](../../references/sd-simplysm14/README.md) Read 후 "개발 매뉴얼" 진입.
|
|
45
|
+
- 그 외 framework — 코드베이스 안의 동등 위치 문서 Read.
|
|
46
|
+
- 없으면 표준 패턴.
|
|
55
47
|
|
|
56
|
-
|
|
48
|
+
**B. 기준 단위 + 계층별 보강**
|
|
57
49
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
50
|
+
풀 구현은 다층 흐름이 한 줄로 가야 일관성이 유지된다. 답습 단위 1개를 통째 답습하는 모델이 아니라, 기준 단위 1개를 잡고 비어있거나 부적합한 계층만 다른 단위에서 보강한다. 계층 간 의존성(모델 → 데이터 접근 → 본체 → 테스트)을 끊지 않으면서, 기준 단위에 부재한 계층의 LLM 단독 처방을 막는다.
|
|
51
|
+
|
|
52
|
+
**4계층**: 도메인 모델 / 데이터 접근 / 본체(§4.x = 화면 컴포넌트, §5.x = 자동 처리 로직 + 트리거) / 테스트.
|
|
53
|
+
|
|
54
|
+
**B-1. 기준 단위 선정** (같은 종류 §4.x↔§4.x, §5.x↔§5.x 안에서):
|
|
55
|
+
|
|
56
|
+
1. 도메인/sub-app 인접 풀구현 단위 후보 Glob 탐색.
|
|
57
|
+
2. 1개 → 자동 채택. 2개 이상 → 후보 목록 제시 후 사용자 1회 질문. 0개 → 같은 종류 전 범위로 확장 후 동일 규칙.
|
|
58
|
+
3. 전 범위에도 0개 → 기준 단위 없이 매뉴얼(3-A) + 표준 패턴.
|
|
59
|
+
|
|
60
|
+
**B-2. 계층별 보강**:
|
|
61
|
+
|
|
62
|
+
기준 단위의 4계층 각각을 (비어있음 / 부적합 / 적합) 으로 평가:
|
|
63
|
+
|
|
64
|
+
- 비어있음: 해당 계층 파일이 기준 단위에 없음 (예: 테스트 없음).
|
|
65
|
+
- 부적합: 있지만 spec 요구와 어긋남 (예: 단일 테이블 접근인데 spec 은 조인 요구).
|
|
66
|
+
- 적합: 그대로 답습.
|
|
67
|
+
|
|
68
|
+
비어있음·부적합 계층은 같은 종류 다른 단위에서 그 계층만 발췌해 다수 반복 패턴 자동 채택. 1회만 쓰인 변종은 배제. 다수 패턴이 갈리면 사용자 1회 질문.
|
|
69
|
+
|
|
70
|
+
**B-3. Read**: 기준 단위의 적합 계층 파일 + 보강 출처 파일을 모두 Read. 7단계 정합 점검 입력.
|
|
71
|
+
|
|
72
|
+
**C. 테스트 환경**
|
|
73
|
+
|
|
74
|
+
단위 테스트 프로젝트 구분·실행 명령·mocking 패턴·dev 서버 실행 명령 파악. 없으면 표준 조합.
|
|
75
|
+
|
|
76
|
+
### 4단계: spec 분해 표
|
|
77
|
+
|
|
78
|
+
대상 §4.x/§5.x 와 참조 §5/§6/§7/§8 본문을 **항목 단위까지 분해**해 표 작성. 표는 assistant 응답으로 출력 (이후 5·6단계 입력).
|
|
79
|
+
|
|
80
|
+
| 항목 | spec 인용 | 현재 코드 상태 | 판정 | 매핑 파일 | 의존 |
|
|
81
|
+
| ---- | --------- | -------------- | ---- | --------- | ---- |
|
|
82
|
+
|
|
83
|
+
**항목 분해 단위:**
|
|
84
|
+
|
|
85
|
+
- 도메인 모델: 필드 1개당 1줄 (타입·제약·기본값)
|
|
86
|
+
- 계산식: 정의식 1개당 1줄 (좌변·우변·참조)
|
|
87
|
+
- 상태값·분기: 케이스 1개당 1줄 (조건·결과)
|
|
88
|
+
- UI 항목: 컬럼·필드·버튼 1개당 1줄
|
|
89
|
+
- 동작·자동 처리: 트리거·결과 단위 1줄
|
|
90
|
+
|
|
91
|
+
**컬럼:**
|
|
92
|
+
|
|
93
|
+
- **항목**: 분해 단위 1개의 짧은 식별자
|
|
94
|
+
- **spec 인용**: spec.md 의 § 위치 + 본문 문구를 그대로
|
|
95
|
+
- **현재 코드 상태**: 코드베이스 조사 결과 사실. 신규 호출은 "없음", 갱신 호출은 "있음(어떻게)". 조사는 워킹트리 파일 Read·Grep·Glob 만. **git 호출(`status`/`diff`/`log`/`show`/`blame` 등) 금지** — 갱신 호출이라도 현재 워킹트리 자체가 진실 원천이며, git 으로 변경분만 훑으면 일관성을 놓침 (sd-base-rules "분석 작업" 참조).
|
|
96
|
+
- **판정**: 없음 / 불일치(차이) / 일치
|
|
97
|
+
- **매핑 파일**: 이 항목이 작성·갱신될 파일 경로
|
|
98
|
+
- **의존**: 다른 항목 ID
|
|
99
|
+
|
|
100
|
+
분해 중 spec 본문이 정의·정의식·분기·경계 케이스를 다루지 않거나 모순되는 부분 발견 → 2단계 회귀.
|
|
101
|
+
|
|
102
|
+
표 작성 완료 후 5단계 진입.
|
|
103
|
+
|
|
104
|
+
### 5단계: 작업 사이클
|
|
105
|
+
|
|
106
|
+
표의 (없음·불일치) 항목만 의존 순서로 진행. 일치 항목은 손대지 않는다.
|
|
107
|
+
|
|
108
|
+
각 항목 시작 시 **테스트 작성 가능 여부** 판정 (3-C 의 테스트 환경 이용):
|
|
109
|
+
|
|
110
|
+
- **테스트 가능** — 입출력 명확 + 외부 의존 통제 가능 (도메인 로직·계산·변환·서버 함수·데이터 접근).
|
|
111
|
+
사이클: **RED → GREEN → REFACTOR**
|
|
112
|
+
- **RED**: 테스트만 작성 → 러너 실행 → 실패 확인. **구현 파일 손대지 않음.**
|
|
113
|
+
- **GREEN**: 테스트 통과하는 **최소** 구현 → 러너 통과 확인.
|
|
114
|
+
- **REFACTOR**: 중복·가독성·기존 패턴 정합 정리 → 러너 통과 유지. 정리할 게 없으면 스킵.
|
|
115
|
+
- **테스트 불가/비효율** — UI 시각·인터랙션, 외부 서비스 실호출, 환경 의존.
|
|
116
|
+
사이클: **구현 → REFACTOR**
|
|
117
|
+
|
|
118
|
+
**임의 채움 금지**: 작업 사이클 중 spec 미정의/모호 분기 만나면 즉시 멈추고 2단계 회귀. 자체 판단으로 채우지 않는다.
|
|
119
|
+
|
|
120
|
+
### 6단계: spec 대조 (subagent 위탁)
|
|
121
|
+
|
|
122
|
+
5단계 모든 항목 완료 후, 별도 subagent 에 위탁해 spec ↔ 현재 코드 전체를 독립 대조. 같은 LLM 셀프 검증의 표면 훑기 편향 제거.
|
|
123
|
+
|
|
124
|
+
**대조는 단위 전체 대상.** 신규/갱신 무관, "이번 변경분만" 스코프 제한 없음.
|
|
125
|
+
|
|
126
|
+
상세 (subagent 호출 형식, 입력 패키지, 4분류 출력 스키마, 분류별 처리): [references/spec-cross-check.md](references/spec-cross-check.md) Read 후 진행.
|
|
127
|
+
|
|
128
|
+
차이 0건이면 7단계 진입. 1건 이상이면 분류별 처리 후 본 단계 재실행.
|
|
129
|
+
|
|
130
|
+
### 7단계: 코드 정리
|
|
131
|
+
|
|
132
|
+
- **횡단 중복**: 작업 사이클 사이 흩어진 동일 로직 합치기.
|
|
133
|
+
- **계층별 정합 점검**: 3-B 의 기준 단위 + 보강 출처 파일을 다시 Read 해 4계층별로 실제 작성분과 비교. 한 계층이라도 채택 패턴과 어긋나면 (임의 변형·새 발명) 수정.
|
|
134
|
+
- 도메인 모델: 필드·타입·제약·네이밍 패턴 일치
|
|
135
|
+
- 데이터 접근: 함수 시그니처·쿼리 패턴·에러 처리 일치
|
|
136
|
+
- 본체: 컴포넌트 구조·상태·핸들러·의존성 패턴 일치 (§4.x) / 트리거·처리 단계 구조 일치 (§5.x)
|
|
137
|
+
- 테스트: 러너·assertion·mock 패턴 일치
|
|
138
|
+
- **불필요한 코드**: 미사용 import·변수·주석, 요구 없는 옵션·추상화 제거. 작업 결과로 어디서도 참조되지 않는 파일도 포함 (검사 범위는 전체 워크스페이스). **단 파일 단위 삭제는 후보 목록을 사용자에게 보고 → 확정분만 삭제** (dynamic import·마이그레이션·문서 자산 등 보존분 사용자 제외).
|
|
139
|
+
- **매뉴얼 권위 규약**: 3-A Read 한 매뉴얼 위반 항목 수정.
|
|
140
|
+
|
|
141
|
+
정리 후 단위 테스트 재실행 — 회귀 없음 확인.
|
|
142
|
+
|
|
143
|
+
### 8단계: 시연 검증
|
|
144
|
+
|
|
145
|
+
사용자에게 요청: "**dev 서버**를 실행하고 접속 주소를 알려달라."
|
|
146
|
+
|
|
147
|
+
**dev 서버·외부 프로세스 자체 실행 금지**: assistant 가 직접 `ng serve`·`npm run dev`·`vite`·`pnpm dev` 등으로 dev 서버를 띄우지 않는다. 사용자가 띄워 주소를 회신할 때까지 대기. 사용자가 본 단계 스킵을 지시하거나 시연 불가 환경이 명시되면 본 단계 스킵 후 9단계.
|
|
148
|
+
|
|
149
|
+
주소 회신 후 `playwright-cli` 로 §4.x/§5.x 동작 시나리오 직접 시연:
|
|
150
|
+
|
|
151
|
+
- 기능 개요·동작 사용자 흐름 1회씩 수행.
|
|
152
|
+
- 화면 항목·와이어프레임 위치와 실제 렌더 비교.
|
|
153
|
+
- §5.x (자동 처리) 는 트리거 발생 → 결과 확인.
|
|
154
|
+
|
|
155
|
+
회귀 발견 시 5단계 회귀 → 수정 → 재시연.
|
|
156
|
+
|
|
157
|
+
### 9단계: 완료 보고
|
|
158
|
+
|
|
159
|
+
- 대상 spec.md 의 해당 §4.x / §5.x 헤더 `[확정: 날짜]` 를 `[확정: 날짜, 구현: 오늘날짜]` 로 확장 (Bash `date +%Y-%m-%d`). 이미 `구현: …` 가 들어있으면 그 날짜만 갱신.
|
|
160
|
+
- 만들거나 갱신한 파일 목록 보고 (마커 부착한 spec.md 포함).
|
|
161
|
+
- 본 세션에서 §5/§6/§7/§8 공통 자원을 신규/변경했다면, 그 자원을 참조하는 **다른 §4.x/§5.x 중 이미 구현된 것**을 spec 역인용으로 수집해 영향 단위 목록 보고 (재구현 필요 여부 사용자 판단용). 변경 없었으면 생략.
|
|
162
|
+
- 시연에서 사용자 확인 끝나면 종료.
|
|
163
|
+
|
|
164
|
+
## 운용
|
|
165
|
+
|
|
166
|
+
- 결정 근거: `sd-base-rules.md` "결정 근거" 적용.
|
|
167
|
+
- **사용자 보고 어휘**: 코드 식별자(변수명·SQL 함수명·타입 키워드 등) 노출 금지. 도메인 어휘로 풀어 보고. (`sd-base-rules.md` "산출물 소비자 도메인 어휘" 적용)
|
|
168
|
+
- **spec.md 동기화**: sd-impl 이 직접 손대는 spec 변경은 다음 2건뿐. 헤더 OPEN·구조 변경은 2단계 규칙대로 종료 후 sd-spec.
|
|
169
|
+
- 본문 인라인 `[OPEN]` 해소 시 마커를 결정 내용으로 교체 (2단계).
|
|
170
|
+
- 9단계 완료 시 §4.x/§5.x 헤더 `[확정: …]` 를 `[확정: …, 구현: 날짜]` 로 확장.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# 도서 관리 시스템 spec
|
|
2
|
+
|
|
3
|
+
## §1 개요
|
|
4
|
+
|
|
5
|
+
도서관 내부 시스템. 사서가 도서를 등록·조회.
|
|
6
|
+
|
|
7
|
+
## §4 화면
|
|
8
|
+
|
|
9
|
+
| ID | 이름 | Actor | 장치 |
|
|
10
|
+
| ----- | -------- | ----- | ---- |
|
|
11
|
+
| §4.1 | 도서 목록 | 사서 | PC |
|
|
12
|
+
|
|
13
|
+
### §4.1 도서 목록 [확정: 2026-05-01]
|
|
14
|
+
|
|
15
|
+
**Actor**: 사서
|
|
16
|
+
**관련 섹션**: §7.1 도서
|
|
17
|
+
**장치**: PC 웹
|
|
18
|
+
|
|
19
|
+
**기능 개요**:
|
|
20
|
+
- 등록된 도서 전체 목록 표시.
|
|
21
|
+
- 제목·저자로 부분일치 검색 (대소문자 무시).
|
|
22
|
+
|
|
23
|
+
**와이어프레임**:
|
|
24
|
+
```
|
|
25
|
+
[검색창: 제목/저자] [등록]
|
|
26
|
+
+----------+----------+-----------+
|
|
27
|
+
| 제목 | 저자 | 출판일 |
|
|
28
|
+
+----------+----------+-----------+
|
|
29
|
+
| ... | ... | ... |
|
|
30
|
+
+----------+----------+-----------+
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**항목표**:
|
|
34
|
+
|
|
35
|
+
| 항목 | 타입 | 비고 |
|
|
36
|
+
| ------ | ------ | --------------------------------- |
|
|
37
|
+
| 제목 | text | §7.1.title |
|
|
38
|
+
| 저자 | text | §7.1.author |
|
|
39
|
+
| 출판일 | date | §7.1.publishedAt, YYYY-MM-DD 형식 |
|
|
40
|
+
|
|
41
|
+
**동작**:
|
|
42
|
+
- 진입 시 도서 전체를 출판일 내림차순으로 로드.
|
|
43
|
+
- 검색창 입력 시 제목·저자 부분일치 필터링 (대소문자 무시).
|
|
44
|
+
- "등록" 클릭 시 등록 화면 (본 spec 범위 외).
|
|
45
|
+
|
|
46
|
+
## §7 도메인 모델
|
|
47
|
+
|
|
48
|
+
### §7.1 도서 [확정: 2026-05-01]
|
|
49
|
+
|
|
50
|
+
| 필드 | 타입 | 제약 | 기본값 |
|
|
51
|
+
| ----------- | ------------- | --------------------- | --------- |
|
|
52
|
+
| id | string (UUID) | PK | 자동 생성 |
|
|
53
|
+
| title | string | NOT NULL, 최대 200자 | - |
|
|
54
|
+
| author | string | NOT NULL, 최대 100자 | - |
|
|
55
|
+
| publishedAt | date | NOT NULL | - |
|