@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
|
@@ -28,26 +28,17 @@ def run(input_path: Path, out_dir: Path) -> None:
|
|
|
28
28
|
# 임베드된 첨부 (embedded files)
|
|
29
29
|
attachment_links: list[str] = []
|
|
30
30
|
attachments_dir = out_dir / "attachments"
|
|
31
|
-
|
|
32
|
-
count = doc.embfile_count()
|
|
33
|
-
except AttributeError:
|
|
34
|
-
count = 0
|
|
31
|
+
count = doc.embfile_count()
|
|
35
32
|
for i in range(count):
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
data = doc.embfile_get(i)
|
|
39
|
-
except Exception:
|
|
40
|
-
continue
|
|
33
|
+
info = doc.embfile_info(i)
|
|
34
|
+
data = doc.embfile_get(i)
|
|
41
35
|
filename = info.get("filename", f"embedded_{i}.bin") if isinstance(info, dict) else f"embedded_{i}.bin"
|
|
42
36
|
_common.mkdir(attachments_dir)
|
|
43
37
|
dst = _common.unique_path(attachments_dir, filename)
|
|
44
38
|
_common.write_bytes(dst, data)
|
|
45
39
|
recursed = maybe_recurse_attachment(dst, attachments_dir)
|
|
46
40
|
if recursed is not None:
|
|
47
|
-
|
|
48
|
-
os.unlink(_common.long_str(dst))
|
|
49
|
-
except OSError:
|
|
50
|
-
pass
|
|
41
|
+
os.unlink(_common.long_str(dst))
|
|
51
42
|
attachment_links.append(f"attachments/{recursed.name}/")
|
|
52
43
|
else:
|
|
53
44
|
attachment_links.append(f"attachments/{dst.name}")
|
|
@@ -7,6 +7,7 @@ Usage: python unpack.py <file>
|
|
|
7
7
|
"""
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
import shutil
|
|
10
11
|
import sys
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
|
|
@@ -17,10 +18,7 @@ from handlers.dispatch import unpack_to
|
|
|
17
18
|
def main() -> None:
|
|
18
19
|
# Windows 콘솔에서 한글 파일명이 깨지지 않도록 stdout/stderr 을 UTF-8 로 강제.
|
|
19
20
|
for stream in (sys.stdout, sys.stderr):
|
|
20
|
-
|
|
21
|
-
stream.reconfigure(encoding="utf-8")
|
|
22
|
-
except Exception:
|
|
23
|
-
pass
|
|
21
|
+
stream.reconfigure(encoding="utf-8")
|
|
24
22
|
|
|
25
23
|
if len(sys.argv) < 2:
|
|
26
24
|
sys.stderr.write("Usage: python unpack.py <file>\n")
|
|
@@ -32,6 +30,8 @@ def main() -> None:
|
|
|
32
30
|
sys.exit(2)
|
|
33
31
|
|
|
34
32
|
out_dir = _common.output_dir_for(input_path)
|
|
33
|
+
if out_dir.exists():
|
|
34
|
+
shutil.rmtree(out_dir)
|
|
35
35
|
_common.mkdir(out_dir)
|
|
36
36
|
|
|
37
37
|
# 어떤 예외든 그대로 throw 한다. 호출자(Claude 에이전트 또는 사용자)가
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sd-wip
|
|
3
|
+
description: 현재 대화의 분석 컨텍스트를 `_wip.md` 또는 `.wips/...md` 에 누적 기록하거나(기본), 누적된 wip 을 압축한다(명시 요청 시). Use when "wip 정리/갱신/저장", "세션 옮길래", "wip 압축" 요청 시.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# sd-wip
|
|
7
|
+
|
|
8
|
+
여러 세션에 걸친 분석 컨텍스트를 wip 파일에 모아, 다른 새 세션에서 산출물(있다면) + wip 만 첨부해도 대화를 그대로 이어갈 수 있게 한다.
|
|
9
|
+
|
|
10
|
+
## 모드 판정
|
|
11
|
+
|
|
12
|
+
사용자 입력에 **wip 파일 첨부 + "압축" 명시 요청** 이 모두 있으면 **압축 모드**, 그 외는 **누적 모드**.
|
|
13
|
+
|
|
14
|
+
- 누적 모드: 현재 대화의 신규 분석분을 wip 파일 끝에 시간순 append. 카테고리 분류 X.
|
|
15
|
+
- 압축 모드: 첨부된 wip 본문 전체를 7축 구조로 재작성해 덮어쓰기. 절차는 [references/compact.md](references/compact.md).
|
|
16
|
+
|
|
17
|
+
운용 공통:
|
|
18
|
+
|
|
19
|
+
- 갱신은 사용자 명시 요청 시에만. 자동 갱신 X.
|
|
20
|
+
- 합의 사항이 산출물로 이동하면 wip 에서 해당 부분 제거.
|
|
21
|
+
|
|
22
|
+
## 파일 라우팅
|
|
23
|
+
|
|
24
|
+
- **산출물 있는 대화** (본 세션에서 사용자 컨펌된 작성/수정 대상 파일 1건, 예: spec.md, impl.md) → 그 산출물 옆 `_wip.md`.
|
|
25
|
+
- 누적 모드에서도 산출물 옆 `_wip.md` 가 있는지 **MUST** 능동 확인. 있으면 그 파일에 append.
|
|
26
|
+
- **산출물 없는 일반 대화** → `.wips/{yyMMddHHmmss}_{slug}.md`.
|
|
27
|
+
- 기존 `.wips/*.md` 가 입력에 첨부되어 있으면 그 파일에 append.
|
|
28
|
+
- 첨부 없으면 새 파일 생성. `slug` 는 대화 주제 짧은 한·두 단어 (LLM 임의안, 사용자 수정 가능). 타임스탬프는 `date +%y%m%d%H%M%S`.
|
|
29
|
+
|
|
30
|
+
## 누적 모드 절차
|
|
31
|
+
|
|
32
|
+
1. 라우팅 결정 (위 규칙). 대상 파일이 없으면 새로 생성하며 헤더 `# 작업 메모` 한 줄로 시작.
|
|
33
|
+
2. 직전 갱신 이후의 신규 분석분만 추출:
|
|
34
|
+
- 사용자 발화: 의도·결정·정정·명시 가이드·가설·가정·보류
|
|
35
|
+
- LLM 발화: 제안·임의안·대안 중 사용자가 동의/정정한 것
|
|
36
|
+
3. 추출분을 시간순 메모로 파일 끝에 append. 기존 본문은 건드리지 X. 카테고리 헤더(`## 결정 흐름`, `## 사용자 정정 패턴` 등) 만들지 X.
|
|
37
|
+
- 형식: `- <한 줄 메모>` 또는 짧은 문단. 결정·정정·가설·자료 위치 등 본질을 빠뜨리지 않고 자연어로 적되, 분류 헤더로 묶지 않는다.
|
|
38
|
+
4. 산출물에 이미 표면화된 결과·매핑은 wip 에 옮기지 X. (결과에 이르는 흐름·근거·정정·가설·메타 가이드만)
|
package/claude/skills/sd-wip/evals/fixtures/with-existing-wip-for-compact/.wips/260101120000_acct.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 작업 메모
|
|
2
|
+
|
|
3
|
+
- 회계 시스템 분석 시작. ERP 연동 대상 모듈은 매입/매출/원가 3개로 합의됨.
|
|
4
|
+
- 매입 모듈은 처음에 일배치/실시간 두 안 검토. 사용자 정정: "실시간은 부하 우려" → 일배치로 확정.
|
|
5
|
+
- 매입: 공급사 마스터 SAP 연동, 일별 배치, 차이 발생 시 알림.
|
|
6
|
+
- 매출 모듈: 세금계산서 발행 자체구현 검토 → 사용자가 "그건 외부 라이브러리 써" 정정 → e-Tax 라이브러리 사용 확정.
|
|
7
|
+
- 매출: 매출 인식 기준은 수출/내수 분리. 수출은 통관완료일, 내수는 출하일.
|
|
8
|
+
- 원가 모듈: 부문별 배부 로직 → 사용자 보류 ("기준 정해서 다시 알려줄게").
|
|
9
|
+
- 가정: 회계 기간 마감은 매월 5일 (사용자 미확정, 표준 가정으로 진행 중).
|
|
10
|
+
- 가설: 외화 환산은 매월 말일 환율 일괄 적용 — 사용자 미확정.
|
|
11
|
+
- 자료 위치: ./docs/회계요구사항.docx p.3 "원가 배부" 항목, p.7 "외화 처리" 항목.
|
|
12
|
+
- 사용자 가이드: "매입/매출 모듈 우선, 원가는 후순위로 진행".
|
|
13
|
+
- LLM 임의안: 매입 마스터 동기화 주기 1시간 → 사용자 정정: "일배치면 일배치지 뭐가 시간이야".
|
|
14
|
+
- 사용자 명시: 시스템 내부 용어 (예: "마스터데이터 동기화") 노출 X, 사용자 화면 표기는 "공급사 정보 갱신" 으로 통일.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{"id": "case-001-new-accumulate", "input": "방금 회계 시스템 분석 진행했어. ERP 연동 대상은 매입/매출/원가 3개 모듈로 합의됐고, 매입은 SAP 일배치 연동, 매출은 외부 e-Tax 라이브러리 사용. 원가 배부 로직은 사용자가 추후 정의하기로 보류. 이거 wip 정리해줘.", "rubric": [".wips/ 디렉토리에 .md 파일이 정확히 1개 생성되었는가", "생성된 .md 파일 이름이 12자리 숫자로 시작하고 그 다음 언더스코어가 오는 패턴(예: 260518204500_xxx.md)인가", "생성된 .md 파일 본문에 '## 결정 흐름', '## 사용자 정정 패턴', '## 가설·가정', '## 자료 컨텍스트' 헤더가 모두 등장하지 않는가", "생성된 .md 파일 본문에 '회계' 또는 '매입' 또는 '매출' 또는 '원가' 중 최소 한 단어가 포함되었는가"], "fixture": "empty"}
|
|
2
|
+
{"id": "case-002-existing-accumulate", "input": "지난 세션에 .wips/260101120000_acct.md 까지 분석해왔어. 이번 세션에서 매출 인식 기준을 수출=통관완료일, 내수=출하일 로 분리하기로 결정했어. wip 갱신해줘.", "rubric": [".wips/260101120000_acct.md 파일 본문에 'SENTINEL_EXISTING_LINE_A' 문자열이 그대로 남아있는가", ".wips/260101120000_acct.md 파일 본문에 'SENTINEL_EXISTING_LINE_B' 문자열이 그대로 남아있는가", ".wips/ 디렉토리에 .md 파일이 정확히 1개만 존재하는가 (새 파일 생성 X)", ".wips/260101120000_acct.md 파일 본문에 '수출' 또는 '통관완료일' 또는 '출하일' 중 최소 한 단어가 추가되었는가", ".wips/260101120000_acct.md 파일 본문에 '## 결정 흐름' 헤더가 새로 등장하지 않는가"], "fixture": "with-existing-wip"}
|
|
3
|
+
{"id": "case-003-compact", "input": ".wips/260101120000_acct.md 가 너무 길어졌어. 이거 압축 정리해줘.", "rubric": [".wips/260101120000_acct.md 파일이 갱신된 상태로 존재하는가", "갱신된 본문에 '## 결정', '## 결정 흐름', '## 사용자 정정 패턴', '## 사용자 명시 가이드', '## 가설·가정', '## 보류·미합의', '## 자료 컨텍스트' 헤더 중 최소 4개 이상이 등장하는가", ".wips/ 디렉토리에 .md 파일이 정확히 1개만 존재하는가"], "fixture": "with-existing-wip-for-compact"}
|
|
4
|
+
{"id": "case-004-artifact-accumulate", "input": "projects/acct/spec.md 분석 이어왔어. §2.1 매입에서 공급사 마스터 동기화 주기를 1시간 검토했다가 사용자가 일배치로 정정했음. wip 갱신해줘.", "rubric": ["projects/acct/_wip.md 파일 본문에 'SENTINEL_ARTIFACT_LINE' 문자열이 그대로 남아있는가", "projects/acct/_wip.md 파일 본문에 '동기화' 또는 '일배치' 또는 '공급사' 중 최소 한 단어가 추가되었는가", "샌드박스에 .wips/ 디렉토리가 생성되지 않았는가 (산출물 옆 _wip.md 라우팅이 적용됨)"], "fixture": "with-artifact"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# 압축 모드 절차
|
|
2
|
+
|
|
3
|
+
누적된 wip 파일을 7축 구조로 재작성해 덮어쓴다. **정확성·완전성 1순위. 시간·용량 비용 감수. 단순 요약 X.**
|
|
4
|
+
|
|
5
|
+
## 5단계
|
|
6
|
+
|
|
7
|
+
### 단계 1: 입력 전수 스캔
|
|
8
|
+
|
|
9
|
+
입력 source:
|
|
10
|
+
|
|
11
|
+
- 첨부된 wip 파일 본문 전체
|
|
12
|
+
- 현재 대화 turn (첫 turn ~ 마지막)
|
|
13
|
+
|
|
14
|
+
각 source 에서 추출:
|
|
15
|
+
|
|
16
|
+
- 사용자 발화: 의도·결정·정정·명시 코멘트·가이드·가설·가정
|
|
17
|
+
- LLM 발화: 제안·결정 흐름·임의안·대안 제시
|
|
18
|
+
- 기존 wip 본문 항목: 결정·결정 흐름·정정 패턴·가이드·가설·보류·자료 컨텍스트
|
|
19
|
+
|
|
20
|
+
요약식으로 건너뛰기 X. turn 단위·항목 단위로 본다.
|
|
21
|
+
|
|
22
|
+
### 단계 2: 7축 분류
|
|
23
|
+
|
|
24
|
+
추출 항목을 다음 7축으로 분류:
|
|
25
|
+
|
|
26
|
+
1. **결정** — 사용자 확정·합의 사항
|
|
27
|
+
2. **결정 흐름** — 결정 이르기까지 근거·대안·트레이드오프
|
|
28
|
+
3. **사용자 정정 패턴** — LLM 이 틀린 부분 → 사용자 명시 정정 (재발 방지용)
|
|
29
|
+
4. **사용자 명시 가이드** — 메타 행동 지침·작업 원칙
|
|
30
|
+
5. **가설·가정** — 확정 안 받았지만 작업 흐름에 영향
|
|
31
|
+
6. **보류·미합의** — 보류된 결정·미합의 논의
|
|
32
|
+
7. **자료 컨텍스트** — 자료 위치·핵심 발췌
|
|
33
|
+
|
|
34
|
+
### 단계 3: 산출물 중복 제거
|
|
35
|
+
|
|
36
|
+
산출물(있다면)에 이미 표면화된 결과·매핑·포인터는 wip 에 옮기지 X.
|
|
37
|
+
**유지 대상**: 결과는 산출물에 들어갔지만 그 결과에 이르는 흐름·근거·정정·가설·메타 가이드.
|
|
38
|
+
|
|
39
|
+
### 단계 4: 7축 구조로 덮어쓰기
|
|
40
|
+
|
|
41
|
+
대상 wip 파일을 아래 구조로 덮어쓴다 (기존 본문 base 두지 X, 처음부터 재구성).
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
# 작업 메모
|
|
45
|
+
|
|
46
|
+
현재 분석 컨텍스트 압축. 산출물(있다면) 과 함께 읽어 새 세션에서 대화를 그대로 이어가도록.
|
|
47
|
+
|
|
48
|
+
## 결정
|
|
49
|
+
- <결정 항목 1줄씩>
|
|
50
|
+
|
|
51
|
+
## 결정 흐름
|
|
52
|
+
### <결정 항목 1>
|
|
53
|
+
- 결정: <무엇>
|
|
54
|
+
- 근거: <왜>
|
|
55
|
+
- 대안: <어떤 대안이 있었는지>
|
|
56
|
+
- 정정 흐름: <사용자 정정 있었으면 그 흐름>
|
|
57
|
+
|
|
58
|
+
## 사용자 정정 패턴
|
|
59
|
+
- <정정 1줄씩>
|
|
60
|
+
|
|
61
|
+
## 사용자 명시 가이드
|
|
62
|
+
- <가이드 1줄씩>
|
|
63
|
+
|
|
64
|
+
## 가설·가정
|
|
65
|
+
- <가설 1줄씩>
|
|
66
|
+
|
|
67
|
+
## 보류·미합의
|
|
68
|
+
- <보류 항목 1줄씩>
|
|
69
|
+
|
|
70
|
+
## 자료 컨텍스트
|
|
71
|
+
- `<파일 경로>` <L범위 또는 페이지> — `핵심 발췌` 또는 메모
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
- 정보량 누락 X. "한 페이지 요약" = 누락이지 압축 아님.
|
|
75
|
+
- 산출물 본문 표현은 옮기지 X (단계 3).
|
|
76
|
+
|
|
77
|
+
### 단계 5: 누락 검증
|
|
78
|
+
|
|
79
|
+
단계 1 의 입력 source 재스캔. 단계 2 의 7축 전체에 대해 누락 검증. 누락 발견 시 단계 4 보강. 검증 통과 후 작업 종료.
|
package/package.json
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# ORM 작업 가이드
|
|
2
|
-
|
|
3
|
-
## 단일 쿼리 우선
|
|
4
|
-
|
|
5
|
-
연관 데이터는 **select 의 `join` 으로 한 쿼리에 모아** 가져온다. 여러 쿼리로 나눠 받아 코드(서버/UI)에서 합치지 않는다.
|
|
6
|
-
|
|
7
|
-
raw query로는 가능하나, ORM 라이브러리에서 제공되지 않은 기능으로 판단될 경우, 중단하고 사용자에게 보고한다.
|
|
8
|
-
|
|
9
|
-
예외: raw query로도 표현 불가하거나 단일 쿼리화가 명백히 비효율일 때만. 사유를 코드 주석에 남긴다.
|
|
10
|
-
|
|
11
|
-
이종 엔티티(예: 입고 + 출고)를 한 목록으로 보여줘야 할 때 두 결과를 코드에서 merge 하지 않으려면 → [orm-union.md](./orm-union.md) 참조.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# REQ-001-입고지시서긴급표시
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 상태: specified
|
|
5
|
-
- 생성일: 2026-05-03
|
|
6
|
-
- 마지막 갱신: 2026-05-03
|
|
7
|
-
- 관련 영역: WMS / 입고관리
|
|
8
|
-
|
|
9
|
-
## 요약
|
|
10
|
-
입고지시서에 긴급 여부 표시 기능 추가 (체크박스 + PDF 강조).
|
|
11
|
-
|
|
12
|
-
## 세부 요구
|
|
13
|
-
- [ ] R1: 입고지시서 입력 화면 헤더 우측에 "긴급" 체크박스 추가
|
|
14
|
-
> [2026-05-03, 사용자 요청] "긴급 표시 기능 필요. 헤더 우측 체크박스 형태"
|
|
15
|
-
> 출처: 사용자 직접 요청 (2026-05-03)
|
|
16
|
-
|
|
17
|
-
- **A**: 디폴트는 unchecked (2026-05-03 확정)
|
|
18
|
-
|
|
19
|
-
- [ ] R2: 긴급 표시된 건 PDF 출력 시 빨간색 강조
|
|
20
|
-
> [2026-05-03, 사용자 요청] "PDF에 빨간색으로 강조"
|
|
21
|
-
> 출처: 사용자 직접 요청 (2026-05-03)
|
|
22
|
-
|
|
23
|
-
- **A**: 빨간색은 #D32F2F (2026-05-03 확정)
|
|
24
|
-
|
|
25
|
-
- [ ] R3: 입고지시서 목록 화면에 긴급 건 필터 추가
|
|
26
|
-
> [2026-05-03, 사용자 요청] "목록에서 긴급만 모아 보고 싶음"
|
|
27
|
-
> 출처: 사용자 직접 요청 (2026-05-03)
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// 디자인 시스템 컴포넌트 (stub)
|
|
2
|
-
import React from 'react'
|
|
3
|
-
|
|
4
|
-
export interface ButtonProps {
|
|
5
|
-
children: React.ReactNode
|
|
6
|
-
onClick?: () => void
|
|
7
|
-
variant?: 'primary' | 'secondary'
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export const Button: React.FC<ButtonProps> = ({ children, onClick, variant = 'primary' }) => {
|
|
11
|
-
return <button className={`btn btn-${variant}`} onClick={onClick}>{children}</button>
|
|
12
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// 디자인 시스템 컴포넌트 (stub)
|
|
2
|
-
import React from 'react'
|
|
3
|
-
|
|
4
|
-
export interface InputProps {
|
|
5
|
-
value: string
|
|
6
|
-
onChange: (v: string) => void
|
|
7
|
-
placeholder?: string
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export const Input: React.FC<InputProps> = ({ value, onChange, placeholder }) => {
|
|
11
|
-
return <input value={value} onChange={(e) => onChange(e.target.value)} placeholder={placeholder} />
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface CheckboxProps {
|
|
15
|
-
checked: boolean
|
|
16
|
-
onChange: (v: boolean) => void
|
|
17
|
-
label?: string
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const Checkbox: React.FC<CheckboxProps> = ({ checked, onChange, label }) => {
|
|
21
|
-
return (
|
|
22
|
-
<label>
|
|
23
|
-
<input type="checkbox" checked={checked} onChange={(e) => onChange(e.target.checked)} />
|
|
24
|
-
{label}
|
|
25
|
-
</label>
|
|
26
|
-
)
|
|
27
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# REQ-001-거래처목록화면
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 상태: specified
|
|
5
|
-
- 생성일: 2026-05-03
|
|
6
|
-
- 마지막 갱신: 2026-05-03
|
|
7
|
-
- 관련 영역: 거래처관리
|
|
8
|
-
|
|
9
|
-
## 요약
|
|
10
|
-
거래처 목록 조회 화면 (검색/필터/페이지네이션).
|
|
11
|
-
|
|
12
|
-
## 세부 요구
|
|
13
|
-
- [ ] R1: 거래처 목록 표시 (이름, 사업자번호, 담당자, 연락처)
|
|
14
|
-
> [2026-05-03, 사용자 요청] "거래처 목록 화면. 4개 컬럼"
|
|
15
|
-
> 출처: 사용자 직접 요청
|
|
16
|
-
|
|
17
|
-
- **A**: 한 페이지 20건 (2026-05-03 확정)
|
|
18
|
-
|
|
19
|
-
- [ ] R2: 거래처명 검색
|
|
20
|
-
> [2026-05-03, 사용자 요청] "이름으로 검색 가능"
|
|
21
|
-
> 출처: 사용자 직접 요청
|
|
22
|
-
|
|
23
|
-
- [ ] R3: 페이지네이션
|
|
24
|
-
> [2026-05-03, 사용자 요청] "페이지 이동 버튼"
|
|
25
|
-
> 출처: 사용자 직접 요청
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// 디자인 시스템 컴포넌트 (stub)
|
|
2
|
-
import React from 'react'
|
|
3
|
-
|
|
4
|
-
export const Input: React.FC<{ value: string; onChange: (v: string) => void; placeholder?: string }> = ({ value, onChange, placeholder }) => {
|
|
5
|
-
return <input value={value} onChange={(e) => onChange(e.target.value)} placeholder={placeholder} />
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export const Table: React.FC<{ rows: any[]; columns: { key: string; label: string }[] }> = ({ rows, columns }) => {
|
|
9
|
-
return (
|
|
10
|
-
<table>
|
|
11
|
-
<thead><tr>{columns.map((c) => <th key={c.key}>{c.label}</th>)}</tr></thead>
|
|
12
|
-
<tbody>{rows.map((r, i) => <tr key={i}>{columns.map((c) => <td key={c.key}>{r[c.key]}</td>)}</tr>)}</tbody>
|
|
13
|
-
</table>
|
|
14
|
-
)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const Pagination: React.FC<{ page: number; total: number; onChange: (p: number) => void }> = ({ page, total, onChange }) => {
|
|
18
|
-
return (
|
|
19
|
-
<div>
|
|
20
|
-
<button onClick={() => onChange(page - 1)}>이전</button>
|
|
21
|
-
<span>{page} / {total}</span>
|
|
22
|
-
<button onClick={() => onChange(page + 1)}>다음</button>
|
|
23
|
-
</div>
|
|
24
|
-
)
|
|
25
|
-
}
|
|
File without changes
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# REQ-001-RTP입력화면
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 상태: specified
|
|
5
|
-
- 생성일: 2026-05-03
|
|
6
|
-
- 마지막 갱신: 2026-05-03
|
|
7
|
-
- 관련 영역: RTP / 입력
|
|
8
|
-
|
|
9
|
-
## 요약
|
|
10
|
-
RTP 항목을 입력받는 화면.
|
|
11
|
-
|
|
12
|
-
## 세부 요구
|
|
13
|
-
- [ ] R1: RTP 입력 폼 (필드: 코드, 명칭, 단위, 비고)
|
|
14
|
-
> [2026-05-03, 사용자 요청] "RTP 입력 화면이 필요. 4개 필드"
|
|
15
|
-
> 출처: 사용자 직접 요청
|
|
16
|
-
|
|
17
|
-
- [ ] R2: 저장 버튼 + 취소 버튼
|
|
18
|
-
> [2026-05-03, 사용자 요청] "표준 저장/취소 패턴"
|
|
19
|
-
> 출처: 사용자 직접 요청
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# REQ-002-RTP출력화면
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 상태: specified
|
|
5
|
-
- 생성일: 2026-05-03
|
|
6
|
-
- 마지막 갱신: 2026-05-03
|
|
7
|
-
- 관련 영역: RTP / 출력
|
|
8
|
-
- 의존: REQ-001
|
|
9
|
-
|
|
10
|
-
## 요약
|
|
11
|
-
RTP 항목 목록 + 상세 조회 화면.
|
|
12
|
-
|
|
13
|
-
## 세부 요구
|
|
14
|
-
- [ ] R1: RTP 목록 표시 (코드/명칭/단위 컬럼)
|
|
15
|
-
> [2026-05-03, 사용자 요청] "입력한 RTP 항목 목록"
|
|
16
|
-
> 출처: 사용자 직접 요청
|
|
17
|
-
|
|
18
|
-
- [ ] R2: 항목 클릭 시 상세 화면 표시
|
|
19
|
-
> [2026-05-03, 사용자 요청] "클릭하면 상세 보기"
|
|
20
|
-
> 출처: 사용자 직접 요청
|
package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/overview.md
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Session 260503143025
|
|
2
|
-
|
|
3
|
-
## 메타
|
|
4
|
-
- 생성일: 2026-05-03
|
|
5
|
-
- raw input 출처: 사용자 직접 요청
|
|
6
|
-
- 입력 모드: Direct
|
|
7
|
-
|
|
8
|
-
## 요약
|
|
9
|
-
RTP 기능 신규 도입 (입력/출력 화면).
|
|
10
|
-
|
|
11
|
-
## REQ 목록
|
|
12
|
-
- REQ-001-RTP입력화면: RTP 항목 입력 폼
|
|
13
|
-
- REQ-002-RTP출력화면: RTP 결과 조회 화면
|
|
14
|
-
|
|
15
|
-
## 도메인 그룹
|
|
16
|
-
- RTP: REQ-001, REQ-002
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// 디자인 시스템 컴포넌트 (stub)
|
|
2
|
-
import React from 'react'
|
|
3
|
-
|
|
4
|
-
export const Input: React.FC<{ value: string; onChange: (v: string) => void }> = ({ value, onChange }) => {
|
|
5
|
-
return <input value={value} onChange={(e) => onChange(e.target.value)} />
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export const Table: React.FC<{ rows: any[]; columns: string[] }> = ({ rows, columns }) => {
|
|
9
|
-
return (
|
|
10
|
-
<table>
|
|
11
|
-
<thead><tr>{columns.map((c) => <th key={c}>{c}</th>)}</tr></thead>
|
|
12
|
-
<tbody>{rows.map((r, i) => <tr key={i}>{columns.map((c) => <td key={c}>{r[c]}</td>)}</tr>)}</tbody>
|
|
13
|
-
</table>
|
|
14
|
-
)
|
|
15
|
-
}
|
|
File without changes
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# demo.md 템플릿
|
|
2
|
-
|
|
3
|
-
위치: `.specs/{yyMMdd_HHmmss}/DEMO-XXX-슬러그/demo.md`
|
|
4
|
-
|
|
5
|
-
## 템플릿
|
|
6
|
-
|
|
7
|
-
```markdown
|
|
8
|
-
# DEMO-001-슬러그 / Demo
|
|
9
|
-
|
|
10
|
-
## 메타
|
|
11
|
-
- 상태: drafting | demo-ready | reviewing | done
|
|
12
|
-
- 대상 REQ: REQ-001, REQ-002
|
|
13
|
-
- 생성일: YYYY-MM-DD
|
|
14
|
-
- 마지막 갱신: YYYY-MM-DD
|
|
15
|
-
- 라운드: 0 (산출물 소비자 피드백 라운드 진행 횟수)
|
|
16
|
-
|
|
17
|
-
## 시나리오
|
|
18
|
-
시연 흐름 (사용자가 산출물 소비자에게 보여줄 순서):
|
|
19
|
-
1. <화면명> → <액션> (<설명, mock 동작 등>)
|
|
20
|
-
2. ...
|
|
21
|
-
|
|
22
|
-
## 만든 파일
|
|
23
|
-
- `src/pages/<신규파일>.tsx` (신규)
|
|
24
|
-
- `src/data/mock-<도메인>.ts` (mock data, MOCK_ prefix)
|
|
25
|
-
|
|
26
|
-
## Mock Data 요약
|
|
27
|
-
- 위치: `src/data/mock-<도메인>.ts`
|
|
28
|
-
- 샘플: <간략 설명>
|
|
29
|
-
|
|
30
|
-
## 산출물 소비자 피드백 라운드
|
|
31
|
-
<!-- 라운드 진행 시 append-only로 추가. 초안 작성 시점엔 비어있음 -->
|
|
32
|
-
|
|
33
|
-
### 라운드 1 (YYYY-MM-DD)
|
|
34
|
-
- **산출물 소비자 피드백**:
|
|
35
|
-
- <피드백 1>
|
|
36
|
-
- <피드백 2>
|
|
37
|
-
- **분류** (사용자 확정):
|
|
38
|
-
- <피드백 1> → UI 조정 / spec 변경
|
|
39
|
-
- <피드백 2> → ...
|
|
40
|
-
- **처리**:
|
|
41
|
-
- <적용 결과>
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## 섹션별 역할
|
|
45
|
-
|
|
46
|
-
| 섹션 | 용도 |
|
|
47
|
-
|---|---|
|
|
48
|
-
| `## 메타` | 상태/대상 REQ/라운드 횟수 |
|
|
49
|
-
| `## 시나리오` | 시연 흐름 (사용자가 산출물 소비자에게 보여줄 순서) |
|
|
50
|
-
| `## 만든 파일` | demo가 생성/수정한 파일 목록 (audit) |
|
|
51
|
-
| `## Mock Data 요약` | 어떤 mock 사용했는지 |
|
|
52
|
-
| `## 산출물 소비자 피드백 라운드` | append-only 라운드 기록 (피드백/분류/처리) |
|
|
53
|
-
|
|
54
|
-
## 라운드 처리 흐름
|
|
55
|
-
|
|
56
|
-
라운드 한 번이 끝나면 `## 산출물 소비자 피드백 라운드` 섹션에 새 `### 라운드 N` 블록을 **추가만** (이전 라운드는 보존).
|
|
57
|
-
|
|
58
|
-
분류는 자동 판단 X. 사용자 확정 받기:
|
|
59
|
-
- UI 조정 → demo 코드 수정
|
|
60
|
-
- spec 변경 (R 단위) → spec.md 수정 + 메타 `이력` 기록
|
|
61
|
-
- REQ 구조 변경 → spec 재진입 후보 알림 (demo 단독 처리 X)
|
|
62
|
-
|
|
63
|
-
## 예시
|
|
64
|
-
|
|
65
|
-
```markdown
|
|
66
|
-
# DEMO-001-RTP / Demo
|
|
67
|
-
|
|
68
|
-
## 메타
|
|
69
|
-
- 상태: demo-ready
|
|
70
|
-
- 대상 REQ: REQ-001, REQ-002, REQ-003
|
|
71
|
-
- 생성일: 2026-05-03
|
|
72
|
-
- 마지막 갱신: 2026-05-03
|
|
73
|
-
- 라운드: 0
|
|
74
|
-
|
|
75
|
-
## 시나리오
|
|
76
|
-
1. RTP 입력 화면 → 필드 X 입력 → 저장 클릭 (저장은 안 됨, 말로 설명)
|
|
77
|
-
2. RTP 출력 화면 → 입력한 mock 데이터 표시
|
|
78
|
-
3. RTP 설정 화면 → 옵션 변경 (시각만 반영)
|
|
79
|
-
|
|
80
|
-
## 만든 파일
|
|
81
|
-
- `src/pages/RTPInput.tsx` (신규)
|
|
82
|
-
- `src/pages/RTPOutput.tsx` (신규)
|
|
83
|
-
- `src/pages/RTPSettings.tsx` (신규)
|
|
84
|
-
- `src/data/mock-rtp.ts` (mock data, MOCK_ prefix)
|
|
85
|
-
|
|
86
|
-
## Mock Data 요약
|
|
87
|
-
- 위치: `src/data/mock-rtp.ts`
|
|
88
|
-
- 샘플: 5건 (입력/출력 시나리오 커버)
|
|
89
|
-
|
|
90
|
-
## 산출물 소비자 피드백 라운드
|
|
91
|
-
<!-- 아직 진행 안 함 -->
|
|
92
|
-
```
|
|
File without changes
|
|
File without changes
|