@simplysm/sd-claude 14.0.79 → 14.0.81
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 +17 -17
- package/claude/references/sd-simplysm14/README.md +58 -58
- package/claude/references/sd-simplysm14/manuals/client-component.md +739 -739
- package/claude/references/sd-simplysm14/manuals/client-crud.md +1 -1
- package/claude/references/sd-simplysm14/manuals/client-demo.md +1 -1
- package/claude/references/sd-simplysm14/manuals/client-setup.md +2 -2
- package/claude/references/sd-simplysm14/manuals/client-tab.md +2 -2
- package/claude/references/sd-simplysm14/manuals/logging.md +3 -3
- package/claude/references/sd-simplysm14/manuals/orm-union.md +7 -7
- package/claude/references/sd-simplysm14/manuals/orm.md +75 -75
- package/claude/references/sd-simplysm14/manuals/test.md +8 -8
- package/claude/rules/sd-base-rules.md +261 -354
- package/claude/rules/sd-design-rules.md +44 -0
- package/claude/{sd-check-forbidden-files.py → sd-check-edit.py} +2 -1
- package/claude/{sd-check-bash.py → sd-check-shell.py} +2 -2
- package/claude/settings.json +3 -4
- package/claude/skills/sd-commit/SKILL.md +17 -17
- package/claude/skills/sd-config/SKILL.md +4 -4
- package/claude/skills/sd-demo/SKILL.md +41 -43
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/.specs/inventory/spec.md +99 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/package.json +12 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/index.ts +3 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/inbound/inbound.list.ts +150 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/inventory/inventory-master.list.ts +143 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/outbound/outbound.list.ts +150 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/pnpm-workspace.yaml +2 -0
- package/claude/skills/sd-demo/evals/fixtures/inventory-list/sd.config.ts +12 -0
- package/claude/skills/sd-demo/evals/golden.jsonl +1 -5
- package/claude/skills/sd-dev/SKILL.md +49 -22
- package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/package.json +8 -0
- package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/tests/.gitkeep +0 -0
- package/claude/skills/sd-dev/evals/fixtures/{case-modify → minimal-ts-pkg}/tsconfig.json +1 -3
- package/claude/skills/sd-dev/evals/golden.jsonl +1 -3
- package/claude/skills/sd-docs/SKILL.md +8 -8
- package/claude/skills/sd-impl/SKILL.md +172 -82
- package/claude/skills/sd-impl/evals/fixtures/case-a-new-screen/.specs/260513120000_warehouse/spec.md +101 -0
- package/claude/skills/sd-impl/evals/fixtures/case-b-update-with-demo/.specs/260513120000_warehouse/spec.md +101 -0
- package/claude/skills/sd-impl/evals/fixtures/case-b-update-with-demo/packages/app/src/screens/box-register/box-register.view.ts +46 -0
- package/claude/skills/sd-impl/evals/fixtures/case-c-new-cross/.specs/260513120000_warehouse/spec.md +89 -0
- package/claude/skills/sd-impl/evals/fixtures/case-d-spec-modify/.specs/260513120000_warehouse/spec.md +101 -0
- package/claude/skills/sd-impl/evals/golden.jsonl +4 -6
- package/claude/skills/sd-review/SKILL.md +33 -0
- package/claude/skills/sd-review/evals/fixtures/code-review/src/foo.ts +7 -0
- package/claude/skills/sd-review/evals/fixtures/doc-review/docs/foo.md +4 -0
- package/claude/skills/sd-review/evals/golden.jsonl +2 -0
- package/claude/skills/sd-skill/SKILL.md +217 -29
- package/claude/skills/sd-skill/evals/fixtures/existing-skill/.claude/skills/todo-format/SKILL.md +14 -0
- package/claude/skills/sd-skill/evals/fixtures/new-skill/.gitkeep +0 -0
- package/claude/skills/sd-skill/evals/golden.jsonl +2 -5
- package/claude/skills/sd-spec/SKILL.md +384 -305
- package/claude/skills/sd-spec/references/example-spec.md +41 -64
- package/claude/skills/sd-unpack/SKILL.md +83 -83
- package/claude/skills/sd-use/SKILL.md +4 -4
- package/package.json +1 -1
- package/claude/output-styles/sd-tone.md +0 -152
- package/claude/skills/sd-demo/evals/fixtures/empty/.specs/260513120000_warehouse/spec.md +0 -45
- package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/.specs/260513120000_warehouse/spec.md +0 -42
- package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-demo/evals/fixtures/with-master-screen/.specs/260513120000_warehouse/spec.md +0 -45
- package/claude/skills/sd-demo/evals/fixtures/with-master-screen/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-demo/evals/fixtures/with-modal/.specs/260513120000_warehouse/spec.md +0 -75
- package/claude/skills/sd-demo/evals/fixtures/with-modal/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md +0 -45
- package/claude/skills/sd-demo/evals/fixtures/with-screens/packages/app/src/screens/dashboard/dashboard.view.ts +0 -33
- package/claude/skills/sd-dev/evals/fixtures/case-add/package.json +0 -13
- package/claude/skills/sd-dev/evals/fixtures/case-add/src/index.ts +0 -10
- package/claude/skills/sd-dev/evals/fixtures/case-add/tests/index.test.ts +0 -11
- package/claude/skills/sd-dev/evals/fixtures/case-add/tsconfig.json +0 -12
- package/claude/skills/sd-dev/evals/fixtures/case-bug/package.json +0 -13
- package/claude/skills/sd-dev/evals/fixtures/case-bug/src/index.ts +0 -10
- package/claude/skills/sd-dev/evals/fixtures/case-bug/tests/index.test.ts +0 -11
- package/claude/skills/sd-dev/evals/fixtures/case-bug/tsconfig.json +0 -12
- package/claude/skills/sd-dev/evals/fixtures/case-modify/package.json +0 -13
- package/claude/skills/sd-dev/evals/fixtures/case-modify/src/index.ts +0 -10
- package/claude/skills/sd-dev/evals/fixtures/case-modify/tests/index.test.ts +0 -11
- package/claude/skills/sd-impl/evals/fixtures/case-001-new-screen/spec.md +0 -55
- package/claude/skills/sd-impl/evals/fixtures/case-002-auto-process/spec.md +0 -55
- package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/packages/client/src/pages/book-list.ts +0 -22
- package/claude/skills/sd-impl/evals/fixtures/case-003-update-screen/spec.md +0 -57
- package/claude/skills/sd-impl/evals/fixtures/case-004-ambiguous-spec/spec.md +0 -58
- package/claude/skills/sd-impl/evals/fixtures/case-005-id-mismatch/spec.md +0 -52
- 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 +0 -10
- 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 +0 -11
- 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 +0 -12
- 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 +0 -8
- package/claude/skills/sd-impl/evals/fixtures/case-006-with-reference-units/spec.md +0 -77
- package/claude/skills/sd-impl/evals/fixtures/case-new/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +0 -101
- package/claude/skills/sd-impl/evals/fixtures/case-update/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +0 -101
- 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 +0 -1
- 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 +0 -1
- package/claude/skills/sd-impl/references/spec-cross-check.md +0 -82
- package/claude/skills/sd-skill/evals/fixtures/with-existing-review/.claude/skills/review/SKILL.md +0 -14
- package/claude/skills/sd-skill/references/eval-authoring.md +0 -81
- package/claude/skills/sd-skill/references/eval-run.md +0 -32
- package/claude/skills/sd-skill/references/skill-authoring.md +0 -70
- /package/claude/skills/{sd-skill/evals/fixtures/empty → sd-dev/evals/fixtures/minimal-ts-pkg/src}/.gitkeep +0 -0
|
@@ -1,121 +1,150 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sd-impl
|
|
3
|
-
description: spec.md 의 단위(§4.x 화면 / §5.x 자동 처리 / §6.x 횡단 처리) 1개를 현재 코드베이스 상태와 비교해 차이만큼 풀 구현(테스트·시연 포함)
|
|
3
|
+
description: spec.md 의 단위(§4.x 화면 / §5.x 자동 처리 / §6.x 횡단 처리) 1개를 현재 코드베이스 상태와 비교해 차이만큼 풀 구현(테스트·시연 포함). Use when "화면 풀 구현", "데모를 실 구현으로", "화면 실가동", "자동 처리 풀 구현", "횡단 처리 풀 구현" 을 요청할 때.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# sd-impl
|
|
7
7
|
|
|
8
|
-
spec.md 단위(§4.x 화면 / §5.x 자동 처리 / §6.x 횡단 처리) 1개를 현재 코드베이스 상태와 비교해 빠지거나 어긋난 부분만큼 풀
|
|
8
|
+
spec.md 단위(§4.x 화면 / §5.x 자동 처리 / §6.x 횡단 처리) 1개를 현재 코드베이스 상태와 비교해 빠지거나 어긋난 부분만큼 풀 구현함. 데모 골격이 있으면 보존. 끝에 사용자 시연으로 회귀를 잡음.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
호출 시나리오 2종 — 동일 워크플로:
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
- **신규**: spec 단위가 코드베이스에 아직 없음 — 처음 구현.
|
|
13
|
+
- **갱신**: spec 단위가 이미 구현되어 있고 spec 변경분에 맞춰 수정.
|
|
14
|
+
|
|
15
|
+
## 본질 (횡단 룰)
|
|
16
|
+
|
|
17
|
+
워크플로 전 단계 적용:
|
|
18
|
+
|
|
19
|
+
- **임의 채움 금지**: spec 본문에 명시 없거나 모호한 분기를 발견하면 즉시 멈추고 사용자에게 질문. 자체 판단으로 채우지 않음.
|
|
20
|
+
- **사용자 보고 어휘**: 사용자 보고에 코드 식별자(변수명·SQL 함수명·타입 키워드 등) 노출 금지. 도메인 어휘로 풀어 보고.
|
|
16
21
|
|
|
17
22
|
## 워크플로
|
|
18
23
|
|
|
19
24
|
### 1단계: 입력 확보
|
|
20
25
|
|
|
21
|
-
- 대상 spec.md
|
|
22
|
-
- 구현할 단위 식별자 — `§4.x` (화면) / `§5.x` (자동 처리) / `§6.x` (횡단 처리)
|
|
26
|
+
- 대상 spec.md 경로.
|
|
27
|
+
- 구현할 단위 식별자 — `§4.x` (화면) / `§5.x` (자동 처리) / `§6.x` (횡단 처리).
|
|
23
28
|
|
|
24
29
|
없으면 묻기. spec.md 에 식별자 매칭이 안 되면 §4 화면 목록 표 / §5 자동 처리 / §6 횡단 처리 헤더 목록에서 후보 제시 후 확정.
|
|
25
30
|
|
|
26
|
-
### 2단계: 외부 입력 점검
|
|
31
|
+
### 2단계: 외부 입력 점검
|
|
27
32
|
|
|
28
33
|
작업 대상 §4.x/§5.x/§6.x 와 그가 참조하는 §5/§6/§7/§8/§9 항목 점검:
|
|
29
34
|
|
|
30
|
-
- **헤더 `[OPEN: 날짜]` 섹션**: 본문이 재분석 포인터일 뿐 임의안 부재 →
|
|
31
|
-
- **본문 인라인 `[OPEN]`**:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
- **헤더 `[OPEN: 날짜]` 섹션**: 본문이 재분석 포인터일 뿐 임의안 부재 → "spec 수정 절차" 적용.
|
|
36
|
+
- **본문 인라인 `[OPEN]`**: 결정 근거 있으면 결정. 없으면 1건씩 질문 → 답변 후 "spec 수정 절차" 적용.
|
|
37
|
+
- **사용자 제공 예정 자료**: spec 본문에 사용자 회신 대기로 적힌 자료. 사용자 회신 후 진행.
|
|
38
|
+
- **묵시적 모호**: 명시 마커 없지만 spec 본문이 분기·정의·정의식·경계 케이스를 다루지 않는 부분. 4단계 분해 중 발견 가능성 높음. 발견 시 본 단계로 회귀.
|
|
39
|
+
|
|
40
|
+
#### spec 수정 절차
|
|
41
|
+
|
|
42
|
+
spec 본문 수정이 필요한 경우(인라인 `[OPEN]` 해소·헤더 `[OPEN]` 해소·구조 변경·6단계 (b)(d) 분류 처리 등) 메인 LLM 이 직접 처리:
|
|
43
|
+
|
|
44
|
+
1. **sd-spec SKILL.md Read** — 룰 인지 (임의안 작성 사이클·헤더 마커 형식·관련 섹션·의존 식별 룰).
|
|
45
|
+
2. **임의안 → "맞나요?" → 확정 → spec.md Edit** (sd-spec 사이클 적용).
|
|
46
|
+
3. **의존 식별** — 수정된 § 항목이 의존인 §4.x/§5.x/§6.x 탐색 (sd-spec "의존 식별" 룰). 본 작업 단위 본인은 제외 (작업 중).
|
|
47
|
+
4. **마커 제거** — 의존 §4.x/§5.x/§6.x 헤더의 `, 구현: YYYY-MM-DD` 부분만 제거 (이전 구현 무효화).
|
|
48
|
+
- 영향 단위 번호 매겨 사용자에게 모아 "맞나요?" — 전체 동의 → 일괄 제거 / 일부 유지 지목 → 지목 항목 마커 유지.
|
|
49
|
+
|
|
50
|
+
본 작업 단위(§4.x/§5.x/§6.x 본인) 의 헤더 `[확정]` 은 9단계에서 `[확정, 구현]` 으로 확장.
|
|
37
51
|
|
|
38
52
|
### 3단계: 보조 자료 수집 (있다면 활용)
|
|
39
53
|
|
|
40
|
-
부재로 워크플로를 멈추지
|
|
54
|
+
부재로 워크플로를 멈추지 않음. framework 처방은 본 SKILL.md 본문에 박지 않음 — 코드베이스 매뉴얼·기준 단위·테스트 환경을 발견되면 따르고, 부재 시 framework 자체 표준(Angular CLI 기본 구조·esbuild 기본 옵션 등) 채움 가능. 도메인 결정·분기·계산식 등 spec 결정 사항은 본질 "임의 채움 금지" 적용.
|
|
41
55
|
|
|
42
|
-
|
|
56
|
+
#### A. 라이브러리·개발 매뉴얼
|
|
43
57
|
|
|
44
|
-
- `@simplysm/*` 14.x — [.claude/references/sd-simplysm14/README.md](../../references/sd-simplysm14/README.md)
|
|
45
|
-
- 그 외 framework — 코드베이스 안의 동등 위치 문서
|
|
46
|
-
- 없으면 표준 패턴.
|
|
58
|
+
- `@simplysm/*` 14.x — [.claude/references/sd-simplysm14/README.md](../../references/sd-simplysm14/README.md) 참조 후 "개발 매뉴얼" 진입.
|
|
59
|
+
- 그 외 framework — 코드베이스 안의 동등 위치 문서 참조.
|
|
47
60
|
|
|
48
|
-
|
|
61
|
+
#### B. 기준 단위 + 계층별 보강
|
|
49
62
|
|
|
50
|
-
풀 구현은 다층 흐름이 한 줄로 가야 일관성이
|
|
63
|
+
풀 구현은 다층 흐름이 한 줄로 가야 일관성이 유지됨. 답습 단위 1개를 통째 답습하는 모델이 아니라, 기준 단위 1개를 잡고 비어있거나 부적합한 계층만 다른 단위에서 보강함.
|
|
51
64
|
|
|
52
|
-
**4계층**:
|
|
65
|
+
**4계층**:
|
|
53
66
|
|
|
54
|
-
|
|
67
|
+
| 계층 | §4.x (화면) | §5.x (자동 처리) | §6.x (횡단 처리) |
|
|
68
|
+
| ----------- | ------------- | ----------------------- | ------------------------------ |
|
|
69
|
+
| 도메인 모델 | 엔티티·필드 | 동일 | 동일 |
|
|
70
|
+
| 데이터 접근 | 쿼리·서비스 | 동일 | 동일 |
|
|
71
|
+
| 본체 | 화면 컴포넌트 | 자동 처리 로직 + 트리거 | 횡단 처리 로직 + 부수효과 후크 |
|
|
72
|
+
| 테스트 | 단위 테스트 | 동일 | 동일 |
|
|
55
73
|
|
|
56
|
-
|
|
57
|
-
2. 1개 → 자동 채택. 2개 이상 → 후보 목록 제시 후 사용자 1회 질문. 0개 → 같은 종류 전 범위로 확장 후 동일 규칙.
|
|
58
|
-
3. 전 범위에도 0개 → 기준 단위 없이 매뉴얼(3-A) + 표준 패턴.
|
|
74
|
+
**기준 단위 선정** (같은 종류 §4.x↔§4.x, §5.x↔§5.x, §6.x↔§6.x 안에서):
|
|
59
75
|
|
|
60
|
-
|
|
76
|
+
1. 도메인 인접 풀구현 단위 후보 탐색 (인접 도메인 정의는 sd-spec §4 화면 목록 분류·코드베이스 구조 등 자유 도출).
|
|
77
|
+
2. 1개 → 자동 채택. 2개 이상 → 후보 목록 제시 후 사용자 1회 질문. 0개 → 같은 종류 전 범위로 확장 후 동일 규칙.
|
|
78
|
+
3. 전 범위에도 0개 → 기준 단위 없이 매뉴얼(A) + framework 자체 표준.
|
|
61
79
|
|
|
62
|
-
기준 단위의 4계층 각각을
|
|
80
|
+
**계층별 보강**: 기준 단위의 4계층 각각을 평가:
|
|
63
81
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
82
|
+
| 평가 | 의미 | 처리 |
|
|
83
|
+
| -------- | --------------------------------- | ----------------------------------------- |
|
|
84
|
+
| 비어있음 | 해당 계층 파일이 기준 단위에 없음 | 같은 종류 다른 단위에서 그 계층 패턴 답습 |
|
|
85
|
+
| 부적합 | 있지만 spec 요구와 어긋남 | 같은 종류 다른 단위에서 그 계층 패턴 답습 |
|
|
86
|
+
| 적합 | 그대로 답습 | 변경 없이 사용 |
|
|
67
87
|
|
|
68
|
-
비어있음·부적합 계층은
|
|
88
|
+
비어있음·부적합 계층은 2회 이상 반복된 패턴 자동 채택. 1회만 쓰인 변종은 배제. 다수 패턴이 갈리면 사용자 1회 질문.
|
|
69
89
|
|
|
70
|
-
|
|
90
|
+
**읽기**: 기준 단위의 적합 계층 파일 + 보강 출처 파일을 모두 읽기. 7단계 정합 점검 입력.
|
|
71
91
|
|
|
72
|
-
|
|
92
|
+
#### C. 테스트 환경
|
|
73
93
|
|
|
74
|
-
단위 테스트 프로젝트 구분·실행 명령·mocking 패턴·dev 서버 실행 명령 파악.
|
|
94
|
+
단위 테스트 프로젝트 구분·실행 명령·mocking 패턴·dev 서버 실행 명령 파악. 부재 시 framework 자체 표준 조합.
|
|
75
95
|
|
|
76
96
|
### 4단계: spec 분해 표
|
|
77
97
|
|
|
78
|
-
대상 §4.x/§5.x/§6.x 와 참조 §5/§6/§7/§8/§9 본문을 **항목 단위까지 분해**해 표 작성. 표는 assistant 응답으로 출력 (이후 5·6단계 입력).
|
|
98
|
+
대상 §4.x/§5.x/§6.x 와 참조 §5/§6/§7/§8/§9 본문을 **항목 단위까지 분해**해 표 작성. 표는 assistant 응답으로 출력 (이후 5·6단계 입력). 일치 항목은 손대지 않음(차이만 작업).
|
|
79
99
|
|
|
80
|
-
|
|
81
|
-
| ---- | --------- | -------------- | ---- | --------- | ---- |
|
|
100
|
+
**예시** (재고관리 도메인, 박스 입고 화면 §4.1 일부):
|
|
82
101
|
|
|
83
|
-
|
|
102
|
+
| 항목 ID | spec 인용 | 현재 코드 상태 | 판정 | 매핑 파일 | 의존 |
|
|
103
|
+
| ------- | ------------------------------------------ | ---------------- | ------ | -------------------------------------------------- | ---- |
|
|
104
|
+
| 1 | §4.1 항목 "박스 바코드" (필수·문자열·24자) | 없음 | 없음 | packages/app/src/screens/incoming/box-form.view.ts | - |
|
|
105
|
+
| 2 | §4.1 동작 "스캔: 바코드 검증·박스 등록" | 있음 (검증 누락) | 불일치 | (동일) | 1 |
|
|
84
106
|
|
|
85
|
-
|
|
86
|
-
- 계산식: 정의식 1개당 1줄 (좌변·우변·참조)
|
|
87
|
-
- 상태값·분기: 케이스 1개당 1줄 (조건·결과)
|
|
88
|
-
- UI 항목: 컬럼·필드·버튼 1개당 1줄
|
|
89
|
-
- 동작·자동 처리: 트리거·결과 단위 1줄
|
|
107
|
+
**항목 분해 단위**:
|
|
90
108
|
|
|
91
|
-
|
|
109
|
+
- 도메인 모델: 필드 1개당 1줄 (타입·제약·기본값).
|
|
110
|
+
- 계산식: 정의식 1개당 1줄 (좌변·우변·참조).
|
|
111
|
+
- 상태값·분기: 케이스 1개당 1줄 (조건·결과).
|
|
112
|
+
- UI 항목: 컬럼·필드·버튼 1개당 1줄.
|
|
113
|
+
- 동작·자동 처리: 트리거·결과 단위 1줄.
|
|
92
114
|
|
|
93
|
-
|
|
94
|
-
- **spec 인용**: spec.md 의 § 위치 + 본문 문구를 그대로
|
|
95
|
-
- **현재 코드 상태**: 코드베이스 조사 결과 사실. 신규 호출은 "없음", 갱신 호출은 "있음(어떻게)". 조사는 워킹트리 파일 Read·Grep·Glob 만. **git 호출(`status`/`diff`/`log`/`show`/`blame` 등) 금지** — 갱신 호출이라도 현재 워킹트리 자체가 진실 원천이며, git 으로 변경분만 훑으면 일관성을 놓침 (sd-base-rules "분석 작업" 참조).
|
|
96
|
-
- **판정**: 없음 / 불일치(차이) / 일치
|
|
97
|
-
- **매핑 파일**: 이 항목이 작성·갱신될 파일 경로
|
|
98
|
-
- **의존**: 다른 항목 ID
|
|
115
|
+
**컬럼**:
|
|
99
116
|
|
|
100
|
-
|
|
117
|
+
- **항목 ID**: 1, 2 ... (이후 의존 컬럼 참조용. 형식 자유).
|
|
118
|
+
- **spec 인용**: spec.md § 위치 + 본문 문구.
|
|
119
|
+
- **현재 코드 상태**: 코드베이스 조사 결과 사실. 신규 = "없음", 갱신 = "있음(어떻게)". 조사는 워킹트리 파일 Read·Grep·Glob 만. 갱신 호출도 동일.
|
|
120
|
+
- **판정**: 없음 / 불일치 / 일치.
|
|
121
|
+
- **매핑 파일**: 이 항목이 작성·갱신될 파일 경로.
|
|
122
|
+
- **의존**: 다른 항목 ID.
|
|
123
|
+
|
|
124
|
+
분해 중 spec 본문이 정의·정의식·분기·경계 케이스를 다루지 않거나 모순되는 부분 발견 → 2단계 회귀("spec 수정 절차" 적용).
|
|
101
125
|
|
|
102
126
|
표 작성 완료 후 5단계 진입.
|
|
103
127
|
|
|
104
128
|
### 5단계: 작업 사이클
|
|
105
129
|
|
|
106
|
-
표의 (없음·불일치) 항목만 의존 순서로
|
|
130
|
+
표의 (없음·불일치) 항목만 의존 순서로 진행 (차이만 작업). 일치 항목은 손대지 않음.
|
|
131
|
+
|
|
132
|
+
**데모 골격 보존**: 작업 대상 매핑 파일이 데모 골격(sd-demo 산출물)이면 골격 구조 유지하며 차이만 보강.
|
|
107
133
|
|
|
108
134
|
각 항목 시작 시 **테스트 작성 가능 여부** 판정 (3-C 의 테스트 환경 이용):
|
|
109
135
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
사이클: **구현 → REFACTOR**
|
|
136
|
+
| 분류 | 적용 대상 | 사이클 |
|
|
137
|
+
| ------------------ | --------------------------------------------- | ---------------------- |
|
|
138
|
+
| 테스트 가능 | 도메인 로직·계산·변환·서버 함수·데이터 접근 | RED → GREEN → REFACTOR |
|
|
139
|
+
| 테스트 불가·비효율 | UI 시각·인터랙션·외부 서비스 실호출·환경 의존 | 구현 → REFACTOR |
|
|
140
|
+
|
|
141
|
+
**사이클 단계 정의**:
|
|
117
142
|
|
|
118
|
-
|
|
143
|
+
- **RED**: 테스트만 작성 → 러너 실행 → 실패 확인. **구현 파일 손대지 않음.**
|
|
144
|
+
- **GREEN**: 테스트 통과하는 **최소** 구현 → 러너 통과 확인.
|
|
145
|
+
- **REFACTOR**: 중복·가독성·기존 패턴 정합 정리 → 러너 통과 유지. 정리할 게 없으면 스킵.
|
|
146
|
+
|
|
147
|
+
작업 사이클 중 spec 미정의·모호 분기 만나면 2단계 회귀.
|
|
119
148
|
|
|
120
149
|
### 6단계: spec 대조 (subagent 위탁)
|
|
121
150
|
|
|
@@ -123,18 +152,87 @@ spec.md 단위(§4.x 화면 / §5.x 자동 처리 / §6.x 횡단 처리) 1개를
|
|
|
123
152
|
|
|
124
153
|
**대조는 단위 전체 대상.** 신규/갱신 무관, "이번 변경분만" 스코프 제한 없음.
|
|
125
154
|
|
|
126
|
-
|
|
155
|
+
#### subagent 호출
|
|
156
|
+
|
|
157
|
+
- 도구: `Agent`.
|
|
158
|
+
- `subagent_type`: `general-purpose` (추론·도메인 어휘 풀어 보고 필요해 read-only 에이전트 X).
|
|
159
|
+
- `description`: `sd-impl spec 대조`.
|
|
160
|
+
- `prompt`: 아래 입력 패키지 (그대로 복사 후 `<…>` 부분만 채움).
|
|
161
|
+
|
|
162
|
+
````
|
|
163
|
+
sd-impl 의 spec ↔ 코드 독립 대조를 수행해줘.
|
|
164
|
+
|
|
165
|
+
**대상**:
|
|
166
|
+
- spec.md 경로: <절대경로>
|
|
167
|
+
- 단위 식별자: <§4.x / §5.x / §6.x>
|
|
168
|
+
|
|
169
|
+
**참조 자료**:
|
|
170
|
+
|
|
171
|
+
(1) 4단계 spec 분해 표 (인라인):
|
|
127
172
|
|
|
128
|
-
|
|
173
|
+
| 항목 ID | spec 인용 | 현재 코드 상태 | 판정 | 매핑 파일 | 의존 |
|
|
174
|
+
| ------- | --------- | -------------- | ---- | --------- | ---- |
|
|
175
|
+
| ... | ... | ... | ... | ... | ... |
|
|
176
|
+
|
|
177
|
+
(2) 현재 구현 파일 목록 (절대경로):
|
|
178
|
+
- <file1>
|
|
179
|
+
- <file2>
|
|
180
|
+
- ...
|
|
181
|
+
|
|
182
|
+
**작업**:
|
|
183
|
+
|
|
184
|
+
1. spec.md 의 §<단위> 본문 + 참조 §5/§6/§7/§8/§9 항목을 다시 읽는다.
|
|
185
|
+
2. 현재 구현 파일을 모두 읽는다.
|
|
186
|
+
3. spec ↔ 코드를 항목 단위로 1:1 대조 (단위 전체 대상. "이번 변경분만" 스코프 제한 없음).
|
|
187
|
+
4. 차이 발견 시 아래 3분류로 보고:
|
|
188
|
+
|
|
189
|
+
- (a) **코드 위반**: spec 명확한데 코드가 빠뜨림·다름.
|
|
190
|
+
- (b) **spec 내부 모순**: §A 정의 vs §B 정의 충돌. (양쪽 인용 명시)
|
|
191
|
+
- (d) **spec 미정의 + 코드 임의 채움**: spec 본문에 정의·분기·경계 케이스 명시 없는데 코드가 채움.
|
|
192
|
+
|
|
193
|
+
5. 보고 형식 (각 차이 1건마다):
|
|
194
|
+
|
|
195
|
+
### 차이 N: <도메인 어휘로 표현된 한줄 요약>
|
|
196
|
+
- 분류: (a) / (b) / (d)
|
|
197
|
+
- spec 위치: §X.x line Y
|
|
198
|
+
- spec 인용: "..."
|
|
199
|
+
- 코드 위치: <file:line>
|
|
200
|
+
- 코드 동작: <도메인 어휘로>
|
|
201
|
+
- 비고: (b) 면 모순 상대 인용 함께
|
|
202
|
+
|
|
203
|
+
6. 차이 0건이면 `차이 없음, 검증 통과` 1줄만 응답.
|
|
204
|
+
|
|
205
|
+
**제약**:
|
|
206
|
+
|
|
207
|
+
- 보고 본문에 코드 식별자(변수명·SQL 함수명·타입 키워드 등) 노출 금지. 모두 도메인 어휘로 풀 것.
|
|
208
|
+
- "코드가 spec 위반" 으로 단정 금지. 3분류 중 어디인지 명시.
|
|
209
|
+
- spec 본문에 인용 가능한 문구가 없으면 (b)(d) 후보.
|
|
210
|
+
|
|
211
|
+
**산출**: 위 3분류 보고 목록 또는 `차이 없음, 검증 통과`.
|
|
212
|
+
````
|
|
213
|
+
|
|
214
|
+
#### 결과 처리
|
|
215
|
+
|
|
216
|
+
subagent 출력을 받은 후 분류별 처리:
|
|
217
|
+
|
|
218
|
+
- **(a) 코드 위반**: 5단계 사이클 재진입. 코드 수정.
|
|
219
|
+
- **(b) spec 내부 모순**: 사용자에게 1건씩 보고 (모순 양쪽 인용 + 어느 쪽이 합리적인지 의견) → 처리 방향 묻기 (spec 수정 / 코드 정정) → spec 수정 시 2단계 "spec 수정 절차" 적용.
|
|
220
|
+
- **(d) spec 미정의 + 코드 임의 채움**: 사용자에게 1건씩 질문 → 결정 받기 → 2단계 "spec 수정 절차" (인라인 결정 반영) → 5단계 사이클 재진입.
|
|
221
|
+
|
|
222
|
+
(b)(d) 모두 한꺼번에 묶음 보고 금지. 1건씩 합의.
|
|
223
|
+
|
|
224
|
+
처리 완료 후 6단계 재실행 (재대조). 차이 0건 확인 후 7단계 진입.
|
|
129
225
|
|
|
130
226
|
### 7단계: 코드 정리
|
|
131
227
|
|
|
228
|
+
spec 에 없는 기능·옵션·추상화 추가 금지(YAGNI).
|
|
229
|
+
|
|
132
230
|
- **횡단 중복**: 작업 사이클 사이 흩어진 동일 로직 합치기.
|
|
133
|
-
- **계층별 정합 점검**: 3-B 의 기준 단위 + 보강 출처 파일을 다시 Read 해 4계층별로 실제 작성분과 비교. 한 계층이라도 채택 패턴과 어긋나면
|
|
134
|
-
- 도메인 모델: 필드·타입·제약·네이밍 패턴
|
|
135
|
-
- 데이터 접근: 함수 시그니처·쿼리 패턴·에러 처리
|
|
136
|
-
- 본체:
|
|
137
|
-
- 테스트: 러너·assertion·mock 패턴
|
|
231
|
+
- **계층별 정합 점검**: 3-B 의 기준 단위 + 보강 출처 파일을 다시 Read 해 4계층별로 실제 작성분과 비교. 한 계층이라도 채택 패턴과 어긋나면(임의 변형·새 발명) 수정.
|
|
232
|
+
- 도메인 모델: 필드·타입·제약·네이밍 패턴 일치.
|
|
233
|
+
- 데이터 접근: 함수 시그니처·쿼리 패턴·에러 처리 일치.
|
|
234
|
+
- 본체: 컴포넌트·트리거·처리 단계·핸들러·의존성 패턴 일치.
|
|
235
|
+
- 테스트: 러너·assertion·mock 패턴 일치.
|
|
138
236
|
- **불필요한 코드**: 미사용 import·변수·주석, 요구 없는 옵션·추상화 제거. 작업 결과로 어디서도 참조되지 않는 파일도 포함 (검사 범위는 전체 워크스페이스). **단 파일 단위 삭제는 후보 목록을 사용자에게 보고 → 확정분만 삭제** (dynamic import·마이그레이션·문서 자산 등 보존분 사용자 제외).
|
|
139
237
|
- **매뉴얼 권위 규약**: 3-A Read 한 매뉴얼 위반 항목 수정.
|
|
140
238
|
|
|
@@ -144,7 +242,7 @@ spec.md 단위(§4.x 화면 / §5.x 자동 처리 / §6.x 횡단 처리) 1개를
|
|
|
144
242
|
|
|
145
243
|
사용자에게 요청: "**dev 서버**를 실행하고 접속 주소를 알려달라."
|
|
146
244
|
|
|
147
|
-
**dev 서버·외부 프로세스 자체 실행 금지**: assistant 가 직접 `ng serve`·`npm run dev`·`vite`·`pnpm dev` 등으로 dev 서버를 띄우지
|
|
245
|
+
**dev 서버·외부 프로세스 자체 실행 금지**: assistant 가 직접 `ng serve`·`npm run dev`·`vite`·`pnpm dev` 등으로 dev 서버를 띄우지 않음. 사용자가 띄워 주소를 회신할 때까지 대기. 사용자가 본 단계 스킵을 지시하거나 시연 불가 환경이 명시되면 본 단계 스킵 후 9단계.
|
|
148
246
|
|
|
149
247
|
주소 회신 후 `playwright-cli` 로 §4.x/§5.x/§6.x 동작 시나리오 직접 시연:
|
|
150
248
|
|
|
@@ -157,15 +255,7 @@ spec.md 단위(§4.x 화면 / §5.x 자동 처리 / §6.x 횡단 처리) 1개를
|
|
|
157
255
|
|
|
158
256
|
### 9단계: 완료 보고
|
|
159
257
|
|
|
160
|
-
- 대상 spec.md 의 해당 §4.x / §5.x / §6.x 헤더 `[확정:
|
|
258
|
+
- 대상 spec.md 의 해당 §4.x / §5.x / §6.x 헤더 `[확정: YYYY-MM-DD]` 를 `[확정: YYYY-MM-DD, 구현: YYYY-MM-DD]` 로 확장. 이미 `, 구현: …` 가 들어있으면 그 날짜만 갱신. 날짜 = Bash `date +%Y-%m-%d`.
|
|
161
259
|
- 만들거나 갱신한 파일 목록 보고 (마커 부착한 spec.md 포함).
|
|
162
|
-
- 본 세션에서
|
|
260
|
+
- 본 세션에서 2단계·6단계 "spec 수정 절차" 로 의존 §4.x/§5.x/§6.x 마커가 제거된 항목이 있으면 영향 단위 목록 보고 (재구현 필요 알림). 없으면 생략.
|
|
163
261
|
- 시연에서 사용자 확인 끝나면 종료.
|
|
164
|
-
|
|
165
|
-
## 운용
|
|
166
|
-
|
|
167
|
-
- 결정 근거: `sd-base-rules.md` "결정 근거" 적용.
|
|
168
|
-
- **사용자 보고 어휘**: 코드 식별자(변수명·SQL 함수명·타입 키워드 등) 노출 금지. 도메인 어휘로 풀어 보고. (output-style `sd-tone` "산출물 소비자 도메인 어휘" 적용)
|
|
169
|
-
- **spec.md 동기화**: sd-impl 이 직접 손대는 spec 변경은 다음 2건뿐. 헤더 OPEN·구조 변경은 2단계 규칙대로 종료 후 sd-spec.
|
|
170
|
-
- 본문 인라인 `[OPEN]` 해소 시 마커를 결정 내용으로 교체 (2단계).
|
|
171
|
-
- 9단계 완료 시 §4.x/§5.x/§6.x 헤더 `[확정: …]` 를 `[확정: …, 구현: 날짜]` 로 확장.
|
package/claude/skills/sd-impl/evals/fixtures/case-a-new-screen/.specs/260513120000_warehouse/spec.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# 재고관리 요구 분석서
|
|
2
|
+
|
|
3
|
+
## 1. 개요
|
|
4
|
+
|
|
5
|
+
### 1.1 핵심 목적
|
|
6
|
+
|
|
7
|
+
- 박스 단위 입고·재고 관리
|
|
8
|
+
|
|
9
|
+
### 1.2 주요 목표
|
|
10
|
+
|
|
11
|
+
- 박스 1건 등록
|
|
12
|
+
|
|
13
|
+
### 1.3 최종 사용자/이해관계자
|
|
14
|
+
|
|
15
|
+
- 창고 작업자
|
|
16
|
+
|
|
17
|
+
### 1.4 환경/장치
|
|
18
|
+
|
|
19
|
+
#### 구성도
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
┌──────────────┐ ┌──────────────┐
|
|
23
|
+
│ PC 클라이언트 │───→│ 서버 │
|
|
24
|
+
└──────────────┘ └──────────────┘
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
#### 장치 목록
|
|
28
|
+
|
|
29
|
+
- PC: 창고 작업자용. Chrome 최신. 1920x1080
|
|
30
|
+
- 서버: Node 20
|
|
31
|
+
|
|
32
|
+
## 2. 업무 프로세스
|
|
33
|
+
|
|
34
|
+
## 3. 기타 요구사항
|
|
35
|
+
|
|
36
|
+
## 4. 화면
|
|
37
|
+
|
|
38
|
+
| § | 분류 | 화면 | 유형 | 장치 |
|
|
39
|
+
| --- | -------- | --------- | -------- | ---- |
|
|
40
|
+
| 4.1 | 기준정보 | 박스 등록 | 트랜잭션 | PC |
|
|
41
|
+
|
|
42
|
+
### 4.1 박스 등록 (PC) [확정: 2026-05-20]
|
|
43
|
+
|
|
44
|
+
Actor: 창고 작업자
|
|
45
|
+
관련 섹션: [모델.박스]
|
|
46
|
+
|
|
47
|
+
기능 개요:
|
|
48
|
+
|
|
49
|
+
- 박스 1건 신규 등록
|
|
50
|
+
|
|
51
|
+
#### 와이어프레임 (텍스트)
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
┌─────────────────────────┐
|
|
55
|
+
│ 박스 등록 │
|
|
56
|
+
├─────────────────────────┤
|
|
57
|
+
│ <등록 폼> │
|
|
58
|
+
│ │
|
|
59
|
+
│ [저장] │
|
|
60
|
+
└─────────────────────────┘
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### 항목
|
|
64
|
+
|
|
65
|
+
**등록 폼**
|
|
66
|
+
|
|
67
|
+
| 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
|
|
68
|
+
| --------- | ------ | ---- | ---------------- | ------------------- |
|
|
69
|
+
| 박스 코드 | 문자열 | Y | [모델.박스.코드] | 코드 길이 규칙 따름 |
|
|
70
|
+
| 품목 코드 | 문자열 | Y | [모델.박스.품목] | - |
|
|
71
|
+
|
|
72
|
+
#### 동작
|
|
73
|
+
|
|
74
|
+
- `[저장]` 클릭: 입력값으로 박스 1건 등록
|
|
75
|
+
|
|
76
|
+
## 5. 자동 처리
|
|
77
|
+
|
|
78
|
+
## 6. 횡단 처리
|
|
79
|
+
|
|
80
|
+
## 7. 공통 정의
|
|
81
|
+
|
|
82
|
+
## 8. 도메인 모델
|
|
83
|
+
|
|
84
|
+
### 8.1 박스 [확정: 2026-05-20]
|
|
85
|
+
|
|
86
|
+
필드:
|
|
87
|
+
|
|
88
|
+
| 필드 | 타입 | 필수 | 비고 |
|
|
89
|
+
| ---- | ------ | ---- | ---------------------- |
|
|
90
|
+
| ID | 숫자 | Y | 자동 부여 |
|
|
91
|
+
| 코드 | 문자열 | Y | 12자, 영문 대문자·숫자 |
|
|
92
|
+
| 품목 | 문자열 | Y | 품목 코드 |
|
|
93
|
+
|
|
94
|
+
키/제약:
|
|
95
|
+
|
|
96
|
+
- 식별 키: ID
|
|
97
|
+
- 비즈니스 키: 코드 (수정 가능)
|
|
98
|
+
|
|
99
|
+
## 9. 외부 인터페이스
|
|
100
|
+
|
|
101
|
+
## 10. 본문 외 결정사항
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# 재고관리 요구 분석서
|
|
2
|
+
|
|
3
|
+
## 1. 개요
|
|
4
|
+
|
|
5
|
+
### 1.1 핵심 목적
|
|
6
|
+
|
|
7
|
+
- 박스 단위 입고·재고 관리
|
|
8
|
+
|
|
9
|
+
### 1.2 주요 목표
|
|
10
|
+
|
|
11
|
+
- 박스 1건 등록
|
|
12
|
+
|
|
13
|
+
### 1.3 최종 사용자/이해관계자
|
|
14
|
+
|
|
15
|
+
- 창고 작업자
|
|
16
|
+
|
|
17
|
+
### 1.4 환경/장치
|
|
18
|
+
|
|
19
|
+
#### 구성도
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
┌──────────────┐ ┌──────────────┐
|
|
23
|
+
│ PC 클라이언트 │───→│ 서버 │
|
|
24
|
+
└──────────────┘ └──────────────┘
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
#### 장치 목록
|
|
28
|
+
|
|
29
|
+
- PC: 창고 작업자용. Chrome 최신. 1920x1080
|
|
30
|
+
- 서버: Node 20
|
|
31
|
+
|
|
32
|
+
## 2. 업무 프로세스
|
|
33
|
+
|
|
34
|
+
## 3. 기타 요구사항
|
|
35
|
+
|
|
36
|
+
## 4. 화면
|
|
37
|
+
|
|
38
|
+
| § | 분류 | 화면 | 유형 | 장치 |
|
|
39
|
+
| --- | -------- | --------- | -------- | ---- |
|
|
40
|
+
| 4.1 | 기준정보 | 박스 등록 | 트랜잭션 | PC |
|
|
41
|
+
|
|
42
|
+
### 4.1 박스 등록 (PC) [확정: 2026-05-20]
|
|
43
|
+
|
|
44
|
+
Actor: 창고 작업자
|
|
45
|
+
관련 섹션: [모델.박스]
|
|
46
|
+
|
|
47
|
+
기능 개요:
|
|
48
|
+
|
|
49
|
+
- 박스 1건 신규 등록
|
|
50
|
+
|
|
51
|
+
#### 와이어프레임 (텍스트)
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
┌─────────────────────────┐
|
|
55
|
+
│ 박스 등록 │
|
|
56
|
+
├─────────────────────────┤
|
|
57
|
+
│ <등록 폼> │
|
|
58
|
+
│ │
|
|
59
|
+
│ [저장] │
|
|
60
|
+
└─────────────────────────┘
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### 항목
|
|
64
|
+
|
|
65
|
+
**등록 폼**
|
|
66
|
+
|
|
67
|
+
| 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
|
|
68
|
+
| --------- | ------ | ---- | ---------------- | ------------------- |
|
|
69
|
+
| 박스 코드 | 문자열 | Y | [모델.박스.코드] | 코드 길이 규칙 따름 |
|
|
70
|
+
| 품목 코드 | 문자열 | Y | [모델.박스.품목] | - |
|
|
71
|
+
|
|
72
|
+
#### 동작
|
|
73
|
+
|
|
74
|
+
- `[저장]` 클릭: 입력값으로 박스 1건 등록
|
|
75
|
+
|
|
76
|
+
## 5. 자동 처리
|
|
77
|
+
|
|
78
|
+
## 6. 횡단 처리
|
|
79
|
+
|
|
80
|
+
## 7. 공통 정의
|
|
81
|
+
|
|
82
|
+
## 8. 도메인 모델
|
|
83
|
+
|
|
84
|
+
### 8.1 박스 [확정: 2026-05-20]
|
|
85
|
+
|
|
86
|
+
필드:
|
|
87
|
+
|
|
88
|
+
| 필드 | 타입 | 필수 | 비고 |
|
|
89
|
+
| ---- | ------ | ---- | ---------------------- |
|
|
90
|
+
| ID | 숫자 | Y | 자동 부여 |
|
|
91
|
+
| 코드 | 문자열 | Y | 12자, 영문 대문자·숫자 |
|
|
92
|
+
| 품목 | 문자열 | Y | 품목 코드 |
|
|
93
|
+
|
|
94
|
+
키/제약:
|
|
95
|
+
|
|
96
|
+
- 식별 키: ID
|
|
97
|
+
- 비즈니스 키: 코드 (수정 가능)
|
|
98
|
+
|
|
99
|
+
## 9. 외부 인터페이스
|
|
100
|
+
|
|
101
|
+
## 10. 본문 외 결정사항
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Component, signal } from "@angular/core";
|
|
2
|
+
|
|
3
|
+
@Component({
|
|
4
|
+
selector: "app-box-register",
|
|
5
|
+
template: `
|
|
6
|
+
<div class="box-register">
|
|
7
|
+
<h2>박스 등록</h2>
|
|
8
|
+
<div class="form">
|
|
9
|
+
<label>
|
|
10
|
+
박스 코드
|
|
11
|
+
<input
|
|
12
|
+
type="text"
|
|
13
|
+
[value]="boxCode()"
|
|
14
|
+
(input)="onBoxCodeInput($event)"
|
|
15
|
+
/>
|
|
16
|
+
</label>
|
|
17
|
+
<label>
|
|
18
|
+
품목 코드
|
|
19
|
+
<input
|
|
20
|
+
type="text"
|
|
21
|
+
[value]="itemCode()"
|
|
22
|
+
(input)="onItemCodeInput($event)"
|
|
23
|
+
/>
|
|
24
|
+
</label>
|
|
25
|
+
</div>
|
|
26
|
+
<button (click)="onSave()">저장</button>
|
|
27
|
+
</div>
|
|
28
|
+
`,
|
|
29
|
+
})
|
|
30
|
+
export class BoxRegisterView {
|
|
31
|
+
boxCode = signal("");
|
|
32
|
+
itemCode = signal("");
|
|
33
|
+
|
|
34
|
+
onBoxCodeInput(e: Event) {
|
|
35
|
+
this.boxCode.set((e.target as HTMLInputElement).value);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
onItemCodeInput(e: Event) {
|
|
39
|
+
this.itemCode.set((e.target as HTMLInputElement).value);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
onSave() {
|
|
43
|
+
// 데모 골격: 실제 저장 동작 없음 (sd-impl 풀 구현 대기)
|
|
44
|
+
console.log("박스 등록 데모", { box: this.boxCode(), item: this.itemCode() });
|
|
45
|
+
}
|
|
46
|
+
}
|