@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,25 +0,0 @@
|
|
|
1
|
-
// demo가 만든 UI scaffold (mock data 사용, 기능 미구현)
|
|
2
|
-
import React, { useState } from 'react'
|
|
3
|
-
import { Input, Table, Pagination } from '../components/Input'
|
|
4
|
-
import { MOCK_CUSTOMER_LIST } from '../data/mock-customer'
|
|
5
|
-
|
|
6
|
-
export const CustomerList: React.FC = () => {
|
|
7
|
-
const [search, setSearch] = useState('')
|
|
8
|
-
const [page, setPage] = useState(1)
|
|
9
|
-
|
|
10
|
-
const columns = [
|
|
11
|
-
{ key: 'name', label: '이름' },
|
|
12
|
-
{ key: 'bizNumber', label: '사업자번호' },
|
|
13
|
-
{ key: 'manager', label: '담당자' },
|
|
14
|
-
{ key: 'phone', label: '연락처' },
|
|
15
|
-
]
|
|
16
|
-
|
|
17
|
-
// NOTE: mock 데이터 그대로 표시. 실제 검색/페이지네이션 로직 없음 (demo 단계)
|
|
18
|
-
return (
|
|
19
|
-
<div>
|
|
20
|
-
<Input value={search} onChange={setSearch} placeholder="거래처명 검색" />
|
|
21
|
-
<Table rows={MOCK_CUSTOMER_LIST} columns={columns} />
|
|
22
|
-
<Pagination page={page} total={2} onChange={setPage} />
|
|
23
|
-
</div>
|
|
24
|
-
)
|
|
25
|
-
}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
{"id": "basic-greenfield-001", "input": "/sd-plan REQ-001 계획 짜줘", "rubric": [".specs/260503143025/REQ-001-입고지시서긴급표시/plan.md 파일이 생성되었는가?", "plan.md 본문에 '## 메타', '## R 단위 계획', '## 작업 순서' 3개 섹션 헤더가 모두 포함되어 있는가?", "plan.md 본문 메타에 '결과: proceed' 또는 '결과:proceed' 표기가 포함되어 있는가? (모든 R 미구현 케이스)", "plan.md 본문에 '미구현' 키워드가 1회 이상 포함되어 있는가? (현황 분류)", "plan.md 본문에 '- [ ] R' 패턴(R 항목) 1개 이상 포함되어 있는가?", "에이전트의 마지막 텍스트 응답에 'REQ-' 또는 'R1' 형태의 ID 매핑이 1개 이상 포함되어 있고, 변경 계획 요약(예: '변경'/'추가'/'수정'/'미구현'/'구현' 같은 단어)이 함께 등장하는가? (고객 친화적 보고 단계 도달 확인)"], "fixture": "basic-greenfield"}
|
|
2
|
-
{"id": "demo-built-001", "input": "/sd-plan REQ-001 계획 짜줘", "rubric": [".specs/260503143025/REQ-001-거래처목록화면/plan.md 파일이 생성되었는가?", "plan.md 본문 메타에 '결과: proceed' 또는 '결과:proceed' 표기가 포함되어 있는가? (UI scaffold 있지만 기능 미구현, 변경 필요)", "plan.md 본문에 '부분' 또는 '차이있음' 키워드가 1회 이상 포함되어 있는가? (demo가 만든 scaffold가 부분 구현으로 분류)", "plan.md 본문에 'CustomerList' 또는 'mock' 키워드가 1회 이상 포함되어 있는가? (demo 결과 인지)", "plan.md 본문에 '**설계**:' 또는 '**설계**' 표기가 1회 이상 포함되어 있는가? (UI R 설계 서브섹션 작성)", "plan.md 본문에 'demo.md' 또는 'DEMO-001' 키워드가 1회 이상 포함되어 있는가? (demo 산출물 참조)", "에이전트의 마지막 텍스트 응답에 'REQ-' 또는 'R1' 형태의 ID 매핑이 1개 이상 포함되어 있고, 변경 계획 요약(예: '변경'/'추가'/'수정'/'미구현'/'구현' 같은 단어)이 함께 등장하는가? (고객 친화적 보고 단계 도달 확인)"], "fixture": "demo-built"}
|
|
3
|
-
{"id": "already-implemented-001", "input": "/sd-plan REQ-001 계획 짜줘", "rubric": [".specs/260503143025/REQ-001-사용자목록/plan.md 파일이 생성되었는가?", "plan.md 본문 메타에 '결과: skip-to-verify' 또는 '결과:skip-to-verify' 표기가 포함되어 있는가? (모든 R 이미 구현됨)", "plan.md 본문에 '구현' 키워드가 1회 이상 포함되어 있는가? (현황 분류)", "에이전트의 마지막 텍스트 응답에 'REQ-' 또는 'R1' 형태의 ID 매핑이 1개 이상 포함되어 있고, 변경 계획 요약(예: '변경'/'추가'/'수정'/'미구현'/'구현' 같은 단어)이 함께 등장하는가? (고객 친화적 보고 단계 도달 확인)"], "fixture": "already-implemented"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
# plan.md 템플릿
|
|
2
|
-
|
|
3
|
-
위치: `.specs/{yyMMdd_HHmmss}/REQ-XXX-슬러그/plan.md`
|
|
4
|
-
|
|
5
|
-
## 템플릿
|
|
6
|
-
|
|
7
|
-
```markdown
|
|
8
|
-
# REQ-001-슬러그 / Plan
|
|
9
|
-
|
|
10
|
-
## 메타
|
|
11
|
-
- 상태: planning | planned
|
|
12
|
-
- 생성일: YYYY-MM-DD
|
|
13
|
-
- 마지막 갱신: YYYY-MM-DD
|
|
14
|
-
- 결과: proceed | skip-to-verify
|
|
15
|
-
|
|
16
|
-
## 결과 사유
|
|
17
|
-
<proceed/skip 결정 근거 한두 줄>
|
|
18
|
-
|
|
19
|
-
## R 단위 계획
|
|
20
|
-
- [ ] R1: <요구 제목>
|
|
21
|
-
- **현황**: 구현 / 부분 / 미구현 / 차이있음 (사유)
|
|
22
|
-
- 근거: <항상 명시. 사용자 답변 (YYYY-MM-DD) / 코드경로:L범위 등>
|
|
23
|
-
- **설계**: (UI/API/데이터 모델/외부 연동에서 필요. 단순 변경은 생략)
|
|
24
|
-
- <자연어 우선. UI에 demo.md 있으면 "demo.md 참조" + 추가 결정 사항만>
|
|
25
|
-
- 근거: <항상 명시>
|
|
26
|
-
- **변경 위치**:
|
|
27
|
-
- `<파일경로>` - `<함수/컴포넌트명>`
|
|
28
|
-
- 근거: <항상 명시>
|
|
29
|
-
- **변경 방식**:
|
|
30
|
-
- <자연어 변경 방식>
|
|
31
|
-
- 근거: <항상 명시>
|
|
32
|
-
- **테스트**:
|
|
33
|
-
- 방식: TDD / 사후 / 생략
|
|
34
|
-
- 케이스: <시나리오>
|
|
35
|
-
- 근거: <항상 명시. 모드 결정 출처>
|
|
36
|
-
- [ ] **Q**: <확인 필요 사항> (있을 때만)
|
|
37
|
-
|
|
38
|
-
- [ ] R2: ...
|
|
39
|
-
|
|
40
|
-
## 작업 순서
|
|
41
|
-
- **의존**:
|
|
42
|
-
- R3는 R1에 의존 (사유)
|
|
43
|
-
- R2는 독립
|
|
44
|
-
- **권장 순서**: R1, R2, R3
|
|
45
|
-
- **병렬 가능**: R1과 R2
|
|
46
|
-
|
|
47
|
-
## 통합/E2E 테스트
|
|
48
|
-
- <시나리오 1>
|
|
49
|
-
- <시나리오 2>
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## 섹션별 역할
|
|
53
|
-
|
|
54
|
-
| 섹션 | 용도 |
|
|
55
|
-
|---|---|
|
|
56
|
-
| `## 메타` | 상태, 결과 분기 |
|
|
57
|
-
| `## 결과 사유` | 분기 결정 근거 |
|
|
58
|
-
| `## R 단위 계획` | R별 현황/변경/테스트 인라인 통합 |
|
|
59
|
-
| `## 작업 순서` | R 간 의존성, 권장 순서, 병렬 가능 |
|
|
60
|
-
| `## 통합/E2E 테스트` | R 간 흐름 검증 |
|
|
61
|
-
|
|
62
|
-
## R 항목 내부 요소
|
|
63
|
-
|
|
64
|
-
| 요소 | 의미 |
|
|
65
|
-
|---|---|
|
|
66
|
-
| **현황** | 4단계 분류 (구현/부분/미구현/차이있음) |
|
|
67
|
-
| **설계** | (R 성격별 조건부) UI 레이아웃·이벤트 흐름 / API 엔드포인트·스키마 / 데이터 모델 / 외부 연동 시퀀스. 단순 변경은 생략 |
|
|
68
|
-
| **변경 위치** | 파일 경로 + 함수/컴포넌트 이름 (라인 번호 X) |
|
|
69
|
-
| **변경 방식** | 자연어. 복잡한 로직만 의사코드 |
|
|
70
|
-
| **테스트** | 방식(TDD/사후/생략) + 케이스 |
|
|
71
|
-
| **Q** | (있을 때만) 사용자 확인 필요 |
|
|
72
|
-
|
|
73
|
-
각 요소(현황/설계/변경 위치/변경 방식/테스트) 아래에 들여쓴 `근거:` 줄로 출처를 항상 한 줄 명시한다.
|
|
74
|
-
|
|
75
|
-
## 예시
|
|
76
|
-
|
|
77
|
-
```markdown
|
|
78
|
-
- [ ] R1: 입고지시서 관리 화면 — 좌우 분할, 우측 신규 등록 시 품목 선택 모달
|
|
79
|
-
- **현황**: 미구현
|
|
80
|
-
- 근거: src/pages/ 전수 grep 결과 InboundOrder 관련 파일 없음
|
|
81
|
-
- **설계**:
|
|
82
|
-
- 레이아웃: 좌측 입고지시서 목록(검색/페이징), 우측 선택 항목 상세 폼. 우상단 [+ 신규] 버튼.
|
|
83
|
-
- 이벤트 흐름:
|
|
84
|
-
- [+ 신규] 클릭 → 우측 폼 빈 상태로 초기화 → 폼 안 [품목 선택] 버튼 클릭 → 품목 선택 모달 오픈
|
|
85
|
-
- 모달에서 품목 선택 → 닫힘 → 폼의 품목 영역에 반영
|
|
86
|
-
- [저장] 클릭 → 검증 통과 시 API 호출 → 성공하면 좌측 목록에 새 항목 추가 + 우측 폼 그대로 유지(편집 모드)
|
|
87
|
-
- 상태: `selectedId | null`, `formMode = 'create' | 'edit'`, `pickerOpen`
|
|
88
|
-
- 근거: DEMO-001 demo.md 시나리오 그대로
|
|
89
|
-
- **변경 위치**:
|
|
90
|
-
- `src/pages/InboundOrder.tsx` - `InboundOrderPage` (분할 레이아웃)
|
|
91
|
-
- `src/pages/InboundOrder/PickerModal.tsx` - 신규 (품목 선택 모달)
|
|
92
|
-
- 근거: src/pages/Outbound.tsx:L10-L40 동일 좌우 분할 패턴
|
|
93
|
-
- **변경 방식**:
|
|
94
|
-
- 좌측은 기존 `InboundOrderList` 재사용, 우측은 `InboundOrderForm`을 페이지에 직접 임베드.
|
|
95
|
-
- 근거: 사용자 답변 (2026-05-04)
|
|
96
|
-
- **테스트**:
|
|
97
|
-
- 방식: 사후 테스트 (UI)
|
|
98
|
-
- 케이스: 신규 → 품목 선택 → 저장 → 좌측 목록 반영 확인
|
|
99
|
-
- 근거: UI 동작 → TDD 불가, 사후 검증 가능
|
|
100
|
-
|
|
101
|
-
- [ ] R2: 입고지시서 저장 API
|
|
102
|
-
- **현황**: 미구현
|
|
103
|
-
- 근거: src/server/routes/ 에 inbound-order 라우트 파일 없음
|
|
104
|
-
- **설계**:
|
|
105
|
-
- 엔드포인트: `POST /api/inbound-orders`
|
|
106
|
-
- 요청: `{ itemId: string, quantity: number, urgent: boolean, note?: string }`
|
|
107
|
-
- 응답 200: `{ id: string, createdAt: string }`
|
|
108
|
-
- 에러: 400(검증 실패 — 필드별 메시지), 401(미인증), 409(중복 키)
|
|
109
|
-
- 권한: `inbound-order.write` 롤 필요
|
|
110
|
-
- 근거: 사용자 답변 (2026-05-04, 권한·중복 키 정책)
|
|
111
|
-
- **변경 위치**:
|
|
112
|
-
- `src/server/routes/inbound-order.ts` - `registerInboundOrderRoutes`
|
|
113
|
-
- `src/server/services/inbound-order-service.ts` - `createInboundOrder`
|
|
114
|
-
- 근거: src/server/routes/outbound.ts:L1-L30 동일 라우트·서비스 분리 패턴
|
|
115
|
-
- **변경 방식**:
|
|
116
|
-
- 라우트는 zod 스키마 검증 → 서비스 호출 → 결과 반환. 트랜잭션은 서비스 레이어.
|
|
117
|
-
- 근거: src/server/services/outbound-service.ts:L20 동일 트랜잭션 위치 패턴
|
|
118
|
-
- **테스트**:
|
|
119
|
-
- 방식: TDD
|
|
120
|
-
- 케이스: 정상 생성 / 필수 누락 400 / 권한 없음 401 / 중복 409
|
|
121
|
-
- 근거: 입력→출력 단언 가능 → TDD
|
|
122
|
-
|
|
123
|
-
- [ ] R3: 긴급 표시 PDF 빨간색 강조
|
|
124
|
-
- **현황**: 부분 (PDF 출력 로직 있음, 색상 처리 없음)
|
|
125
|
-
- 근거: src/pdf/InboundOrderPdf.tsx:L40-L88 `renderHeader` 색상 분기 없음
|
|
126
|
-
- **변경 위치**:
|
|
127
|
-
- `src/pdf/InboundOrderPdf.tsx` - `renderHeader` 함수
|
|
128
|
-
- 근거: 색상 분기 들어갈 유일한 함수
|
|
129
|
-
- **변경 방식**:
|
|
130
|
-
- urgent === true 인 경우 헤더 배경색 #D32F2F 적용
|
|
131
|
-
- 근거: spec.md R2 A "PDF는 #D32F2F"
|
|
132
|
-
- **테스트**:
|
|
133
|
-
- 방식: 사후 테스트
|
|
134
|
-
- 케이스: 긴급 표시된 데이터 PDF 출력 → 빨간색 확인
|
|
135
|
-
- 근거: PDF 렌더 결과 픽셀 검증 비용 큼 → TDD 대신 사후
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
R1(UI), R2(API)는 성격에 따라 **설계** 추가, R3(단순 변경)은 생략.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
From: Ethan <ethan@example.com>
|
|
2
|
-
To: 우리회사 <us@example.com>
|
|
3
|
-
Date: 2026-01-22 16:31
|
|
4
|
-
Subject: [ADTEK] 입고지시서 화면 개선 요청
|
|
5
|
-
|
|
6
|
-
안녕하세요.
|
|
7
|
-
|
|
8
|
-
입고지시서 화면을 사용하면서 몇 가지 개선이 필요한 부분이 있어 요청드립니다.
|
|
9
|
-
|
|
10
|
-
1. 긴급 입고 건을 표시할 방법이 필요합니다. 현재는 전부 동일하게 보여서
|
|
11
|
-
우선순위 구분이 어렵습니다. 화면에 "긴급" 체크박스 같은 걸로 표시하고,
|
|
12
|
-
그 건들은 PDF 출력 시에도 빨간색으로 강조되었으면 합니다.
|
|
13
|
-
|
|
14
|
-
2. 입고지시서 PDF 출력 시 회사 로고가 누락되는 경우가 있습니다.
|
|
15
|
-
확인 부탁드립니다.
|
|
16
|
-
|
|
17
|
-
빠른 검토 부탁드립니다.
|
|
18
|
-
|
|
19
|
-
감사합니다.
|
|
20
|
-
Ethan
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
From: Kaya <kaya@example.com>
|
|
2
|
-
To: 우리회사 <us@example.com>
|
|
3
|
-
Date: 2026-02-05 10:15
|
|
4
|
-
Subject: [ADTEK] 출고관리 화면 추가 요청
|
|
5
|
-
|
|
6
|
-
안녕하세요.
|
|
7
|
-
|
|
8
|
-
현재 출고 처리 시 출고예정에서 출고로 바로 넘어가는 구조인데,
|
|
9
|
-
실무에서는 그 사이에 "상차" 단계가 필요합니다.
|
|
10
|
-
|
|
11
|
-
차량에 적재 중인 상태를 별도로 표시할 수 있어야 하고,
|
|
12
|
-
상차 중에 취소되는 경우도 있어서 출고예정으로 되돌릴 수 있어야 합니다.
|
|
13
|
-
|
|
14
|
-
검토 부탁드립니다.
|
|
15
|
-
|
|
16
|
-
감사합니다.
|
|
17
|
-
Kaya
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
From: Ethan <ethan@example.com>
|
|
2
|
-
To: 우리회사 <us@example.com>
|
|
3
|
-
Date: 2026-03-01 09:42
|
|
4
|
-
Subject: [ADTEK] 사용자 권한 체계 변경
|
|
5
|
-
|
|
6
|
-
안녕하세요.
|
|
7
|
-
|
|
8
|
-
WMS 사용자 권한 체계를 변경하려고 합니다.
|
|
9
|
-
|
|
10
|
-
기존: 단일 권한 그룹 (전체 또는 무권한)
|
|
11
|
-
변경: 역할별 권한 (입고담당 / 출고담당 / 관리자)
|
|
12
|
-
|
|
13
|
-
각 역할별로 접근 가능한 화면과 액션이 구분되어야 합니다.
|
|
14
|
-
|
|
15
|
-
세부 권한 매트릭스는 다음 회의에서 논의 예정입니다.
|
|
16
|
-
|
|
17
|
-
감사합니다.
|
|
18
|
-
Ethan
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
From: Ethan <ethan@example.com>
|
|
2
|
-
To: 우리회사 <us@example.com>
|
|
3
|
-
Date: 2026-03-17 14:20
|
|
4
|
-
Subject: [ADTEK] 긴급 입고 처리 방침
|
|
5
|
-
|
|
6
|
-
안녕하세요.
|
|
7
|
-
|
|
8
|
-
긴급 입고 처리 단위에 대해 정리하여 전달드립니다.
|
|
9
|
-
|
|
10
|
-
긴급 처리는 **주문 단위**로 적용합니다.
|
|
11
|
-
즉, 주문 한 건이 긴급으로 분류되면 그 주문에 포함된 모든 품목이
|
|
12
|
-
긴급 처리됩니다. 일부 품목만 긴급 처리하는 경우는 없습니다.
|
|
13
|
-
|
|
14
|
-
이 기준으로 시스템 반영 부탁드립니다.
|
|
15
|
-
|
|
16
|
-
감사합니다.
|
|
17
|
-
Ethan
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
[회의 대본 — 2026-03-20]
|
|
2
|
-
참석: B 차장, C 과장, D 대리 (고객사 측), 우리회사 PM
|
|
3
|
-
|
|
4
|
-
...
|
|
5
|
-
[14:30 경]
|
|
6
|
-
B 차장: 긴급 처리 단위 다시 한번 확인하고 싶은데요. 저는 품목 단위가 맞다고 봅니다.
|
|
7
|
-
C 과장: 네, 그게 현장에서 더 유용해요. 한 주문에 여러 품목이 섞여 있는데
|
|
8
|
-
일부만 급한 경우가 많거든요.
|
|
9
|
-
B 차장: 그러니까 품목 단위로 가는 게 맞다고 봅니다. 주문 전체를 긴급 처리하면
|
|
10
|
-
오히려 비용이 늘어나요.
|
|
11
|
-
PM: 메일에서는 주문 단위라고 하셨던 것 같은데...
|
|
12
|
-
B 차장: 그건 다시 봐야겠네요. 일단 회의 결과로는 품목 단위로 가는 걸로 정리합시다.
|
|
13
|
-
...
|
|
File without changes
|
package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/REQ-001-test/spec.md
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# REQ-001-test
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 상태: specifying
|
|
5
|
-
- 생성일: 2026-01-01
|
|
6
|
-
- 마지막 갱신: 2026-01-01
|
|
7
|
-
- 관련 영역: 테스트
|
|
8
|
-
|
|
9
|
-
## 요약
|
|
10
|
-
테스트용 REQ. 입력 분기 검증을 위한 fixture.
|
|
11
|
-
|
|
12
|
-
## 세부 요구
|
|
13
|
-
|
|
14
|
-
- [ ] R1: 테스트 기능 구현
|
|
15
|
-
> [2026-01-01, 사용자 요청] "테스트 기능을 추가해 주세요"
|
|
16
|
-
> 출처: 사용자 직접 요청 (2026-01-01)
|
|
17
|
-
|
|
18
|
-
- [ ] **Q**: 테스트 기능의 입력 형식은 무엇인가요? (예: JSON / CSV / 자유 텍스트)
|
|
19
|
-
- [ ] **Q**: 출력 형식은 어떻게 표시해야 하나요? (예: 화면 표시 / 파일 다운로드)
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Session 260101120000
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 생성일: 2026-01-01 12:00
|
|
5
|
-
- raw input 출처: (eval fixture — 5단계 완료된 가상 세션)
|
|
6
|
-
- 입력 모드: Direct
|
|
7
|
-
|
|
8
|
-
## 요약
|
|
9
|
-
테스트용 단일 REQ 세션. 6단계 진입 검증.
|
|
10
|
-
|
|
11
|
-
## REQ 목록
|
|
12
|
-
- REQ-001-test: 테스트 항목
|
|
13
|
-
|
|
14
|
-
## 도메인 그룹
|
|
15
|
-
- 단일 도메인 (테스트)
|
|
16
|
-
|
|
17
|
-
## 의존성
|
|
18
|
-
없음
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
{"id": "direct-simple-001", "input": "/sd-spec 입고지시서 지시 상태에 출고예정과 출고 사이에 상차 상태를 추가하고 싶어", "rubric": [".specs/ 디렉토리가 생성되었고 그 안에 정확히 12자리 숫자(yyMMdd_HHmmss 형식)로 된 디렉토리가 1개 이상 존재하는가?", "그 12자리 숫자 디렉토리(세션 폴더) 안에 'overview.md' 파일이 존재하는가?", "그 세션 폴더 안에 'REQ-' 로 시작하는 디렉토리가 1개 이상 존재하는가?", "각 REQ-* 디렉토리 안에 'spec.md' 파일이 존재하는가?", "spec.md 본문에 '## 메타', '## 요약', '## 세부 요구' 3개 섹션 헤더가 모두 포함되어 있는가?", "spec.md 본문에 '- [ ] R' 패턴(R 항목 체크리스트) 1개 이상 포함되어 있는가?", "에이전트의 마지막 텍스트 응답에 'REQ-' 로 시작하는 ID 매핑이 1개 이상 포함되어 있는가? (REQ specified 종료 안내 도달)", "에이전트의 마지막 텍스트 응답에 사용자 확인 요청 표현이 포함되어 있는가? (예: '진행할까요', '체크포인트', '맞나요', '괜찮을까요' 중 하나 이상)", "spec.md 본문에 '상태: specified' 또는 '최근 체크포인트' 표기가 포함되어 있는가? (체크포인트 적용 확인)"], "fixture": "direct-simple"}
|
|
2
|
-
{"id": "bulk-multi-source-001", "input": "/sd-spec .docs/ 폴더의 자료들 정리해줘", "rubric": [".specs/ 디렉토리 안에 12자리 숫자 디렉토리(세션 폴더)가 1개 이상 존재하는가?", "세션 폴더 안에 'overview.md' 파일이 존재하는가?", "세션 폴더 안에 'REQ-' 로 시작하는 디렉토리가 2개 이상 존재하는가? (다중 출처 분류 결과로 여러 REQ 생성)", "각 REQ-* 디렉토리의 spec.md 본문에 '출처' 라는 인용 출처 표기가 1개 이상 포함되어 있는가?", "overview.md 본문에 'REQ-' 로 시작하는 ID 가 2개 이상 언급되어 있는가?", "에이전트의 마지막 텍스트 응답에 'REQ-' 로 시작하는 ID 매핑이 2개 이상 포함되어 있는가? (REQ specified 종료 안내 도달)", "에이전트의 마지막 텍스트 응답에 사용자 확인 요청 표현이 포함되어 있는가? (예: '진행할까요', '체크포인트', '맞나요', '괜찮을까요' 중 하나 이상)", "각 REQ-* 디렉토리의 spec.md 본문에 '상태: specified' 또는 '최근 체크포인트' 표기가 포함되어 있는가? (체크포인트 적용 확인)"], "fixture": "bulk-multi-source"}
|
|
3
|
-
{"id": "conflict-detection-001", "input": "/sd-spec .docs/ 자료 정리해줘. 메일과 회의록에 충돌이 있을 수 있음", "rubric": [".specs/ 디렉토리 안에 12자리 숫자 디렉토리(세션 폴더)가 1개 이상 존재하는가?", "세션 폴더 안 어느 REQ의 spec.md 본문에 '주문 단위' 와 '품목 단위' 두 표현이 모두 포함되어 있는가? (양쪽 출처 인용 보존)", "spec.md 본문에 '주문 단위' 와 '품목 단위' 둘 다 포함되어 있어 한쪽만 자동 채택되어 다른 쪽이 폐기된 상태가 아닌가?", "에이전트의 마지막 텍스트 응답에 'REQ-' 로 시작하는 ID 매핑이 1개 이상 포함되어 있는가? (REQ specified 종료 안내 도달)", "에이전트의 마지막 텍스트 응답에 사용자 확인 요청 표현이 포함되어 있는가? (예: '진행할까요', '체크포인트', '맞나요', '괜찮을까요' 중 하나 이상)", "spec.md 본문에 '상태: specified' 또는 '최근 체크포인트' 표기가 포함되어 있는가? (체크포인트 적용 확인)"], "fixture": "conflict-detection"}
|
|
4
|
-
{"id": "resume-from-spec-md-001", "input": "/sd-spec .specs/260101120000/REQ-001-test/spec.md 파일로 6단계부터 해줘", "rubric": [".specs/ 디렉토리 안에 12자리 숫자 디렉토리가 정확히 1개만 존재하는가? (새 세션 폴더 생성하지 않고 기존 세션의 6단계부터 시작했는지 검증)", ".specs/260101120000/REQ-001-test/spec.md 파일이 여전히 존재하는가? (입력 파일 보존)", ".specs/260101120000/REQ-001-test/spec.md 본문의 미해결 'Q:' 또는 '**Q**:' 패턴 개수가 fixture 시작 시점(2개)보다 줄었는가? (Q 다이얼로그 처리 진행)", ".specs/260101120000/REQ-001-test/spec.md 본문에 '상태: specified' 또는 '최근 체크포인트' 표기가 포함되어 있는가? (체크포인트 도달)", "에이전트의 마지막 텍스트 응답에 사용자 확인 요청 표현이 포함되어 있는가? (예: '진행할까요', '체크포인트', '맞나요', '괜찮을까요' 중 하나 이상)"], "fixture": "spec-md-input"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# overview.md 템플릿 (세션 차원)
|
|
2
|
-
|
|
3
|
-
세션 폴더 안에 위치 (`.specs/{yyMMdd_HHmmss}/overview.md`).
|
|
4
|
-
spec 단계 워크플로 4번(전체 구조 잡기)에서 초안 작성. 이후 REQ 추가/폐기/분리/병합/번호 재배치/의존성 변경 시 즉시 갱신.
|
|
5
|
-
|
|
6
|
-
## 템플릿
|
|
7
|
-
|
|
8
|
-
```markdown
|
|
9
|
-
# Session {yyMMdd_HHmmss}
|
|
10
|
-
|
|
11
|
-
## 메타
|
|
12
|
-
- 생성일: YYYY-MM-DD HH:MM
|
|
13
|
-
- raw input 출처: <어디서 왔는지 — 폴더 경로/파일/채팅 paste 등>
|
|
14
|
-
- 입력 모드: Bulk | Direct | Mixed
|
|
15
|
-
|
|
16
|
-
## 요약
|
|
17
|
-
<세션 전체에 대한 1~2줄 요약>
|
|
18
|
-
|
|
19
|
-
## REQ 목록
|
|
20
|
-
- REQ-001-슬러그: <한 줄 요약>
|
|
21
|
-
- REQ-002-슬러그: <한 줄 요약>
|
|
22
|
-
- REQ-003-슬러그: <한 줄 요약>
|
|
23
|
-
|
|
24
|
-
## 도메인 그룹 (있을 때만)
|
|
25
|
-
<같은 도메인의 REQ들이 명확히 묶이면 표시>
|
|
26
|
-
- RTP: REQ-001, REQ-002
|
|
27
|
-
- WMS: REQ-003
|
|
28
|
-
|
|
29
|
-
## 의존성 (있을 때만)
|
|
30
|
-
- REQ-002 depends on REQ-001 (이유)
|
|
31
|
-
- REQ-003 depends on REQ-001 (이유)
|
|
32
|
-
|
|
33
|
-
## Cross-cutting concerns (있을 때만)
|
|
34
|
-
<여러 REQ를 가로지르는 메모. 예: "전체적으로 권한 체계 개편 필요">
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## 섹션별 역할
|
|
38
|
-
|
|
39
|
-
| 섹션 | 용도 |
|
|
40
|
-
|---|---|
|
|
41
|
-
| `## 메타` | 세션 시작 시점/입력 출처/모드 |
|
|
42
|
-
| `## 요약` | 세션 전체 1~2줄 |
|
|
43
|
-
| `## REQ 목록` | 세션 안의 모든 REQ를 한눈에 |
|
|
44
|
-
| `## 도메인 그룹` | 도메인 명확할 때 grouping (선택) |
|
|
45
|
-
| `## 의존성` | REQ 간 의존 (선택) |
|
|
46
|
-
| `## Cross-cutting concerns` | 가로지르는 메모 (선택) |
|
|
47
|
-
|
|
48
|
-
## 갱신 정책
|
|
49
|
-
|
|
50
|
-
- **워크플로 4번(전체 구조 잡기)**에서 초안 작성
|
|
51
|
-
- 이후 REQ 변경 (추가/폐기/분리/병합/번호 재배치/의존성 변경) 시 즉시 갱신
|
|
52
|
-
- 갱신 책임:
|
|
53
|
-
- spec 단계 안에서 발생한 변경: spec 단계가 갱신
|
|
54
|
-
- demo 단계에서 발생한 변경: demo 단계가 갱신
|
|
55
|
-
- plan 단계에서 spec 모순 발견 시: plan이 갱신
|
|
56
|
-
|
|
57
|
-
## 도메인 그룹/의존성 표기 정책
|
|
58
|
-
|
|
59
|
-
- **도메인 그룹**: 명확히 묶이는 경우만 표시. 단일 REQ는 grouping 생략.
|
|
60
|
-
- **의존성**: 한 REQ가 다른 REQ에 의존할 때만 표시. 독립 REQ는 표시 X.
|
|
61
|
-
|
|
62
|
-
## 예시
|
|
63
|
-
|
|
64
|
-
```markdown
|
|
65
|
-
# Session 20260503143025
|
|
66
|
-
|
|
67
|
-
## 메타
|
|
68
|
-
- 생성일: 2026-05-03 14:30
|
|
69
|
-
- raw input 출처: .docs/ 폴더 (메일 6개 + 회의록 5개)
|
|
70
|
-
- 입력 모드: Bulk
|
|
71
|
-
|
|
72
|
-
## 요약
|
|
73
|
-
ADTEK WMS 입고/출고 관련 5개 기능 개선 요청 정리.
|
|
74
|
-
|
|
75
|
-
## REQ 목록
|
|
76
|
-
- REQ-001-입고지시서수정: 긴급 표시 체크박스 + PDF 강조
|
|
77
|
-
- REQ-002-입고지시서Reporting: 입고 보고서 출력 기능
|
|
78
|
-
- REQ-003-출고관리상차: 상차 상태 추가
|
|
79
|
-
- REQ-004-WMS권한: 권한 체계 개편
|
|
80
|
-
- REQ-005-알림: 긴급 입고 시 알림
|
|
81
|
-
|
|
82
|
-
## 도메인 그룹
|
|
83
|
-
- 입고: REQ-001, REQ-002
|
|
84
|
-
- 출고: REQ-003
|
|
85
|
-
- 시스템: REQ-004, REQ-005
|
|
86
|
-
|
|
87
|
-
## 의존성
|
|
88
|
-
- REQ-005 depends on REQ-001 (긴급 표시 후 알림)
|
|
89
|
-
```
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
# raw input 부정확성 처리
|
|
2
|
-
|
|
3
|
-
raw input은 산출물 소비자 발화 원본이라 부정확/모호한 부분이 많다. 각 종류별 특성과 처리 정책.
|
|
4
|
-
|
|
5
|
-
## 종류별 특성
|
|
6
|
-
|
|
7
|
-
| 종류 | 부정확성 |
|
|
8
|
-
|---|---|
|
|
9
|
-
| **STT 회의록** | 텍스트 오타, 화자 잘못 매칭, 발화 끊김, 다중 화자 발언 섞임 |
|
|
10
|
-
| **이메일** | 비격식 문장, 주어 생략, 지시대명사("그거", "이렇게") |
|
|
11
|
-
| **채팅 paste** | 짧은 토막글, 맥락 부족 |
|
|
12
|
-
| **사용자 직접 요청** | 도메인 전문용어 생략, 암묵 가정 많음 |
|
|
13
|
-
|
|
14
|
-
## 처리 정책
|
|
15
|
-
|
|
16
|
-
### STT 텍스트 보정
|
|
17
|
-
|
|
18
|
-
**명백한 오타만 보정**. 보정 시 `[원문]` 인용으로 원본도 보존.
|
|
19
|
-
|
|
20
|
-
```markdown
|
|
21
|
-
> [2026-03-17 회의] "PDF에 빨간색으로 강조"
|
|
22
|
-
> [원문] "PDF에 빨간색으루 강조"
|
|
23
|
-
> 출처: .docs/회의대본_3.txt:L120
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
판정:
|
|
27
|
-
- ✅ 명백 (오타 1~2글자, 의미 자명): 보정
|
|
28
|
-
- ❌ 모호 (의미가 여러 갈래로 해석 가능): **Q로 등록**, 원문 그대로 인용
|
|
29
|
-
|
|
30
|
-
### 화자 추정
|
|
31
|
-
|
|
32
|
-
회의록 화자가 부정확/누락된 경우 컨텍스트로 추정. `[추정: ...]` 표기.
|
|
33
|
-
|
|
34
|
-
```markdown
|
|
35
|
-
> [2026-03-17 회의, 추정: B 차장] "주문 단위로 가는 게 맞다"
|
|
36
|
-
> 출처: .docs/회의대본_3.txt:L78-L80
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
판정:
|
|
40
|
-
- ✅ 컨텍스트로 명확 (예: 직전 발언자가 B 차장이고 응답 흐름 명확): 추정
|
|
41
|
-
- ❌ 모호 (여러 화자 가능): **Q로 등록**, 화자 미상으로 인용
|
|
42
|
-
|
|
43
|
-
### 모호 발화 처리
|
|
44
|
-
|
|
45
|
-
지시대명사·생략 표현·비격식 발언:
|
|
46
|
-
- "그거 그렇게" / "이렇게 가는 걸로" / "지난번처럼" / "알아서"
|
|
47
|
-
|
|
48
|
-
처리:
|
|
49
|
-
- **자동 해석 금지** (이전 발언/맥락 추측해서 채워 넣지 말 것)
|
|
50
|
-
- **Q로 등록** — "그거"가 무엇인지, "그렇게"가 어떤 방식인지 사용자에게 확인
|
|
51
|
-
|
|
52
|
-
### 다중 화자 발언 섞임 (회의록)
|
|
53
|
-
|
|
54
|
-
여러 사람이 같은 주제를 다른 입장에서 말한 경우:
|
|
55
|
-
- 양쪽(또는 모든) 발언 모두 인용 보존
|
|
56
|
-
- 사용자에게 어느 의견 채택할지 Q (충돌 처리와 동일)
|
|
57
|
-
|
|
58
|
-
### 비격식 메일 / paste
|
|
59
|
-
|
|
60
|
-
주어 생략, 맥락 누락:
|
|
61
|
-
- 보충 가능한 부분(자명한 주어 등): 인용 시 `[추정 보충: ...]` 표기로 원문에 덧붙이지 않고 명시
|
|
62
|
-
- 모호한 부분: Q
|
|
63
|
-
|
|
64
|
-
### 도메인 용어 다의성
|
|
65
|
-
|
|
66
|
-
raw input은 시스템 용어가 아니라 **현장 은어**. 같은 단어가 시스템상 여러 동작에 매핑될 수 있음.
|
|
67
|
-
|
|
68
|
-
- 예: "출고" → 창고간 재고이동 / 고객사 납품 / 차량 적재 / 그 외 — 현장에서는 이 모두를 "출고"로 부름
|
|
69
|
-
- 예: "마감" → 일마감 / 월마감 / 정산마감 / 작업종료
|
|
70
|
-
- 예: "주문" → 고객 발주 / 내부 작업지시 / 견적 단계
|
|
71
|
-
|
|
72
|
-
**위험도 역설**: 일반적으로 들리는 업무 용어(출고/입고/재고/주문/마감/등록 등)일수록 더 의심. 낯선 용어는 자연스럽게 의문이 생기지만, 익숙한 용어는 모두가 안다고 착각함.
|
|
73
|
-
|
|
74
|
-
처리:
|
|
75
|
-
- **자동 매핑 금지** — 단어를 첫 번째로 떠오르는 시스템 동작에 임의 매핑하지 말 것
|
|
76
|
-
- **Q로 등록** — "이 단어가 시스템상 어떤 동작을 가리키는지" 사용자에게 확인
|
|
77
|
-
- **후보 나열 금지** — Claude가 추측한 후보를 제시하면 사용자가 그 안에서만 고르게 가둠. 후보는 사용자가 답하게 둘 것
|
|
78
|
-
|
|
79
|
-
```markdown
|
|
80
|
-
> [2026-03-17 회의] "출고 처리할 때 자동으로 라벨 출력되게"
|
|
81
|
-
> 출처: .docs/회의대본_3.txt:L45
|
|
82
|
-
> Q: 여기서 "출고"는 시스템상 어떤 동작을 가리키는가?
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## 인용 출처 표기 (모드별)
|
|
86
|
-
|
|
87
|
-
- 파일 입력: `<파일경로>:L<범위>`
|
|
88
|
-
- 채팅 paste: `채팅 paste (YYYY-MM-DD)`
|
|
89
|
-
- 사용자 직접 요청: `사용자 직접 요청 (YYYY-MM-DD)`
|
|
90
|
-
|
|
91
|
-
## 핵심 원칙
|
|
92
|
-
|
|
93
|
-
- **원본 인용을 spec.md inline에 풍부하게** (보정/추정 결과만 굳히지 말고 원문도 함께)
|
|
94
|
-
- **자동 판단 금지** — 모호하면 무조건 Q
|
|
95
|
-
- **현장 용어 ≠ 시스템 용어** — 익숙한 단어일수록 자동 매핑 금지
|
|
96
|
-
- **raw input 자체 수정 X** — 보정/추정은 spec.md 인용 시점에만
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sd-verify
|
|
3
|
-
description: overview/spec/plan/impl + 실제 코드를 REQ 단위로 통합 읽어 충돌·누락(문서 미업데이트 / 놓친 구현 / 단계 간 모순)을 발견하고 verify.md로 기록. Use when implement 단계 후 인수 검증이 필요할 때
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# verify 단계
|
|
7
|
-
|
|
8
|
-
REQ 단위로 4문서(overview/spec/plan/impl) + 코드 통합 읽기. 자동 검증 + 사용자 시연 결합.
|
|
9
|
-
|
|
10
|
-
## 산출물
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
.specs/{yyMMdd_HHmmss}/
|
|
14
|
-
overview.md ← 입력 (해당 REQ + 공통)
|
|
15
|
-
REQ-XXX-슬러그/
|
|
16
|
-
spec.md / plan.md / impl.md ← 입력
|
|
17
|
-
verify.md ← 산출물
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## 워크플로
|
|
21
|
-
|
|
22
|
-
1. 입력: 대상 REQ ID
|
|
23
|
-
2. 읽기: 4문서 + 코드 (+ raw input 재참조)
|
|
24
|
-
3. **충돌·누락 점검** (양방향, 자연어 추출 — 아래 표 참조)
|
|
25
|
-
4. **테스트 실행**: impl.md 케이스 직접 실행, 보고와 비교
|
|
26
|
-
5. **회귀 검증**: 전체 테스트
|
|
27
|
-
6. **시연** (필요 R만, plan 모드 기준 — 아래 표 참조)
|
|
28
|
-
7. 모든 R 충족 + 충돌·누락 0건 → 체크포인트 (메타 `상태: verified`, spec.md 메타 `상태: done`)
|
|
29
|
-
|
|
30
|
-
발견 시: verify.md 기록 + 즉시 보고 + 해결방안 제안 (예: 새 REQ 분리 / 현 REQ 재작업 / 무시). 결정은 사용자.
|
|
31
|
-
|
|
32
|
-
## 충돌·누락 (양방향 점검)
|
|
33
|
-
|
|
34
|
-
페어 매트릭스로 정형화하지 말고, 다 읽은 뒤 발견된 것만 자연어로 추출.
|
|
35
|
-
|
|
36
|
-
| 유형 | 의미 | 예 |
|
|
37
|
-
|---|---|---|
|
|
38
|
-
| **문서 미업데이트** (뒤 → 앞) | 코드/구현이 앞 문서를 추월 | 코드에 있는 동작이 spec엔 없음, plan 진행 중 추가된 의존성이 overview 미반영 |
|
|
39
|
-
| **놓친 구현·문서화** (앞 → 뒤) | 앞 문서 항목이 뒤로 안 닿음 | spec R이 plan에 미매핑, plan 위치가 코드 미반영, impl이 보고 안 한 변경 |
|
|
40
|
-
| **단계 간 모순** | 두 단계가 다른 결론 | plan은 분리, 코드는 단일 파일 |
|
|
41
|
-
|
|
42
|
-
## 충족 판정
|
|
43
|
-
|
|
44
|
-
| 분류 | 의미 |
|
|
45
|
-
|---|---|
|
|
46
|
-
| 충족 | R 의도 완전 만족 + 충돌·누락 없음 |
|
|
47
|
-
| 부분충족 | 일부 sub-criteria 미만족 또는 충돌·누락 발견 |
|
|
48
|
-
| 미충족 | 만족 X |
|
|
49
|
-
|
|
50
|
-
종료 시 모든 R 충족 + 발견 0건. 미해소 항목 남은 채 done 금지.
|
|
51
|
-
|
|
52
|
-
## 시연 (plan 모드 기준)
|
|
53
|
-
|
|
54
|
-
| plan 모드 | 시연 |
|
|
55
|
-
|---|---|
|
|
56
|
-
| TDD | 불필요 |
|
|
57
|
-
| 사후 테스트 | 필수 |
|
|
58
|
-
| 생략 | 필수 |
|
|
59
|
-
|
|
60
|
-
시나리오는 plan.md / impl.md 케이스 사용. 한 번에 하나씩, 결과 verify.md 기록.
|
|
61
|
-
|
|
62
|
-
시연 도구·환경 실패(playwright 미동작, 빌드 실패, 접근 불가 등)는 **충족 판정 사유 아님**. 상황(도구·증상·재현 시도)을 사용자에 즉시 보고하고 판단 대기. 임의 스킵·done 금지.
|
|
63
|
-
|
|
64
|
-
사용자가 명시적으로 미수행으로 결정한 R은 verify.md에 "시연 미수행 — <사유>"로 기록하고 REQ done 차단.
|
|
65
|
-
|
|
66
|
-
## 예시 (보고 형식)
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
발견 — plan.md는 컴포넌트 분리 명시, 코드는 단일 파일 (모순).
|
|
70
|
-
verify.md 기록 완료.
|
|
71
|
-
제안:
|
|
72
|
-
(a) 분리 유지가 맞다면 → 현 REQ 재작업 (코드 분리)
|
|
73
|
-
(b) 단일 파일이 맞다면 → 현 REQ 재작업 (plan 갱신, 사유 기록)
|
|
74
|
-
(c) 범위 큰 재설계라면 → 별도 REQ 분리
|
|
75
|
-
결정 부탁.
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## 핵심 원칙
|
|
79
|
-
|
|
80
|
-
- **양방향 점검**: 뒤→앞과 앞→뒤 둘 다. 한 방향만 보면 절반 놓침.
|
|
81
|
-
- **자연어 추출**: 페어 매트릭스로 정형화 X (OK 채우기 함정)
|
|
82
|
-
- **발견은 보고·제안까지**: 직접 수정·재진입 X, 결정은 사용자
|
|
83
|
-
- self-contained 블록 (R 블록 안에 검증/시연/판정 인라인)
|
|
84
|
-
- raw input·ID 불변
|
|
85
|
-
|
|
86
|
-
## 안티패턴
|
|
87
|
-
|
|
88
|
-
- ❌ impl.md 보고 그대로 신뢰 (테스트 직접 실행 X)
|
|
89
|
-
- ❌ overview/plan 안 읽고 spec+impl+코드만 보기
|
|
90
|
-
- ❌ 한 방향만 점검 (문서 미업데이트 통째로 놓침)
|
|
91
|
-
- ❌ 페어 매트릭스로 정형화
|
|
92
|
-
- ❌ verify가 문서/코드 직접 수정 또는 임의 재진입 트리거
|
|
93
|
-
- ❌ 시연 시나리오 새로 정의
|
|
94
|
-
- ❌ TDD R에 시연 강요 / 사후·생략 R 시연 생략
|
|
95
|
-
- ❌ 시연 도구(playwright 등) 실패·미실행을 보고 없이 넘기고 충족 판정 / REQ done
|
|
96
|
-
- ❌ 미해소 항목 남은 채로 REQ done
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# REQ-001-할인계산 / Implementation
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 상태: implemented
|
|
5
|
-
|
|
6
|
-
## R 단위 구현 결과
|
|
7
|
-
|
|
8
|
-
### R1: 할인율 계산 함수
|
|
9
|
-
- **상태**: 완료
|
|
10
|
-
- **모드**: TDD
|
|
11
|
-
- **변경 파일**:
|
|
12
|
-
- `src/lib/discount.ts` (신설)
|
|
13
|
-
- 변경 함수: `calcDiscountRate`
|
|
14
|
-
- 변경 종류: 신설
|
|
15
|
-
- **테스트**:
|
|
16
|
-
- 추가: `src/lib/discount.test.ts`
|
|
17
|
-
- 케이스: "0원 → 0", "99999원 → 0", "100000원 → 0.05", "499999원 → 0.05", "500000원 → 0.10", "999999원 → 0.10", "1000000원 → 0.15"
|
|
18
|
-
- 결과: PASS (7/7)
|
|
19
|
-
- **plan 대비 차이**: 없음
|
|
20
|
-
- **변경 의도**: spec.md R1 + plan.md R1 그대로
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# REQ-001-할인계산 / Plan
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 상태: planned
|
|
5
|
-
- 결과: proceed
|
|
6
|
-
|
|
7
|
-
## R 단위 계획
|
|
8
|
-
- [ ] R1: 할인율 계산 함수
|
|
9
|
-
- **현황**: 미구현
|
|
10
|
-
- **변경 위치**: `src/lib/discount.ts` - `calcDiscountRate`
|
|
11
|
-
- **변경 방식**: 100만↑ 0.15, 50만↑ 0.10, 10만↑ 0.05, 그 외 0
|
|
12
|
-
- **테스트**:
|
|
13
|
-
- 방식: TDD
|
|
14
|
-
- 케이스: 0, 99999, 100000, 499999, 500000, 999999, 1000000
|