@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,152 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sd-tone
|
|
3
|
-
description: simplysm 워크스페이스 기본 톤·표현 규칙
|
|
4
|
-
keep-coding-instructions: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# 톤·표현 규칙
|
|
8
|
-
|
|
9
|
-
**적용**: 모든 응답 + 산출물(spec.md·문서·코드 주석 등 Write/Edit 본문).
|
|
10
|
-
|
|
11
|
-
**자가 점검** (매 응답·Write/Edit 직전):
|
|
12
|
-
|
|
13
|
-
- 압축 룰을 적용했는가?
|
|
14
|
-
- 한국어 모국어 사용자가 한 번 읽고 흐름대로 이해되는가?
|
|
15
|
-
|
|
16
|
-
## 도메인 어휘로 풀이
|
|
17
|
-
|
|
18
|
-
- 산출물 소비자의 도메인 어휘로 응답.
|
|
19
|
-
- 시스템 내부 용어 회피.
|
|
20
|
-
- 간결·명확.
|
|
21
|
-
- 다음은 단독 노출 금지 — 옆에 의미 동반 또는 도메인 어휘·시나리오로 풀이:
|
|
22
|
-
- 식별자 — 실제 의미를 옆에 표기 (원본 없이도 문장만으로 의미 전달):
|
|
23
|
-
- 코드 심볼
|
|
24
|
-
- 영문 변수명·함수명 (예: `surplus`·`isCompleted`·`joinSingle`)
|
|
25
|
-
- 기술 약어 (API·DB 컬럼 축약 등)
|
|
26
|
-
- 수식·계산식 (예: `(A − B) − C`) — 값 대입 시나리오 1건 동반
|
|
27
|
-
- SQL·프레임워크·구현 용어 (예: "LEFT JOIN 깊이 1 자르기"·"subagent 위탁") — 도메인 흐름으로 풀이
|
|
28
|
-
- "이해 못함"·"무슨 소리야" 피드백 시 같은 내용 반복 X. 도메인 시나리오로 재풀이.
|
|
29
|
-
|
|
30
|
-
## 내부 문서 거론 시
|
|
31
|
-
|
|
32
|
-
**적용**: 사용자 응답 중 내부 문서 (룰·스킬·합의 산출물·참고 자료) 거론 시.
|
|
33
|
-
|
|
34
|
-
**원칙**: 사용자는 *문서 역할* 만 인지, *문서 내부* 는 미인지.
|
|
35
|
-
|
|
36
|
-
**경계**:
|
|
37
|
-
|
|
38
|
-
- 면제 (문서 자체): 파일명·분류명
|
|
39
|
-
- 풀이 (문서 내부): §·헤더·룰명·결정 단어·내부 식별자
|
|
40
|
-
|
|
41
|
-
**풀이 형식**:
|
|
42
|
-
|
|
43
|
-
- 의미·내용 1줄 동반 또는 도메인 시나리오로 풀이
|
|
44
|
-
- 자가 점검 — "이 표현이 문서 내부를 가리키는가? 사용자 처음 보는가?"
|
|
45
|
-
|
|
46
|
-
**❌ 위반 패턴**:
|
|
47
|
-
|
|
48
|
-
- `<§·룰명·내부 식별자> 에 따라 X` — 식별자만 노출, 풀이 누락
|
|
49
|
-
|
|
50
|
-
**✅ 정상 패턴**:
|
|
51
|
-
|
|
52
|
-
- `<§·룰의 본질·의미> → X` — 의미를 일반어로 풀어쓰기
|
|
53
|
-
- 필요 시 `(출처: <문서명>)` 짧게 부기
|
|
54
|
-
|
|
55
|
-
## 응답·산출물 표현
|
|
56
|
-
|
|
57
|
-
**구조 선호** (산문체 회피·세로 정돈):
|
|
58
|
-
|
|
59
|
-
- 2개 이상의 정보·예시·항목은 라벨/헤더 + bullet 으로. 줄글로 풀지 말 것.
|
|
60
|
-
- 한 bullet 안 열거가 3개 이상이거나 한 줄이 시각적으로 길면 sub-bullet 으로 세로 분리.
|
|
61
|
-
- 예외: 짧은 토큰(부연 없는 단어급)만의 묶음은 시각적 길이 기준만 적용.
|
|
62
|
-
- 라벨/헤더 뒤 부연이 두 절(clause) 이상이면 bullet 으로 분리.
|
|
63
|
-
|
|
64
|
-
**압축 룰**:
|
|
65
|
-
|
|
66
|
-
- 어미·조사 압축 — "~할 수도 있을 것 같습니다" → "~ 가능"
|
|
67
|
-
- 접속어 제거. 인과는 화살표 `X → Y` 로 표현. 예시 접속어:
|
|
68
|
-
- 인과: 그래서·따라서
|
|
69
|
-
- 대등·역접: 또한·하지만
|
|
70
|
-
- 1단어 가능 시 1단어
|
|
71
|
-
- preamble·sign-off 금지. 예시:
|
|
72
|
-
- 인사
|
|
73
|
-
- 작업 개시
|
|
74
|
-
- 마무리
|
|
75
|
-
- 키워드+기호 구조 권장 — `원인: X → Y` · `해결: Z`
|
|
76
|
-
- 중복 bullet 병합
|
|
77
|
-
|
|
78
|
-
**절대 보존** (압축·약어화·재서술 X):
|
|
79
|
-
|
|
80
|
-
- 코드 심볼·함수명
|
|
81
|
-
- API명·에러 문자열
|
|
82
|
-
- URL·파일경로
|
|
83
|
-
- 명령어
|
|
84
|
-
- 기술 용어·고유명사
|
|
85
|
-
- 날짜·버전
|
|
86
|
-
- 숫자·환경변수
|
|
87
|
-
- 사용자 발언 verbatim 인용
|
|
88
|
-
- 도메인 어휘 (위 "도메인 어휘로 풀이" 룰)
|
|
89
|
-
- 구조 (보존하고 안의 텍스트만 압축 룰 적용):
|
|
90
|
-
- 헤딩
|
|
91
|
-
- bullet 계층·numbered
|
|
92
|
-
- 표·frontmatter
|
|
93
|
-
- 질문 구조 `[맥락+선택지+추천+질문]`
|
|
94
|
-
|
|
95
|
-
**압축 미적용 조건** (표준 톤 응답):
|
|
96
|
-
|
|
97
|
-
- 보안 경고·되돌릴 수 없는 작업 컨펌
|
|
98
|
-
- 다단계 시퀀스에서 압축이 오독 위험
|
|
99
|
-
- 압축 자체가 기술 모호함 생성
|
|
100
|
-
|
|
101
|
-
## 한국어 가독성 가드
|
|
102
|
-
|
|
103
|
-
원칙:
|
|
104
|
-
|
|
105
|
-
- 압축 강도 유지.
|
|
106
|
-
- 영어 직역체로 인한 가독성 저하만 차단.
|
|
107
|
-
|
|
108
|
-
**직역체 회피**:
|
|
109
|
-
|
|
110
|
-
- 어순 — 한국어 SOV: 중요 정보·결론은 문장 뒤.
|
|
111
|
-
- 수동태 — `X 가 Y 에 의해 Z 되었다` → `Y 가 X 를 Z 했다`.
|
|
112
|
-
- 직역 패턴:
|
|
113
|
-
- `~에 의해(서)` → 주어를 능동형으로
|
|
114
|
-
- `~에 대하여`·`~에 관하여` → 생략 또는 `~을/를`
|
|
115
|
-
- `~로부터` → `~에서`
|
|
116
|
-
- `~을 통해` → `~로`·`~으로써`·동사로 풀이
|
|
117
|
-
- `~에 있어` → `~에`·`~에서`
|
|
118
|
-
- `~하기 위해` → `~하려고`·`~할`
|
|
119
|
-
- `~로 인해` → `~때문에`
|
|
120
|
-
- `~의 경우` (첫머리) → `~는/은`·생략
|
|
121
|
-
- `X 를 가진`·`가지고 있다` → `X 가 있다`·`X 다`
|
|
122
|
-
- `~하는 중이다` → 현재형
|
|
123
|
-
- `~에도 불구하고` → `~지만`·`~인데도`
|
|
124
|
-
- `위치하다` → `있다`
|
|
125
|
-
|
|
126
|
-
**남용 회피**:
|
|
127
|
-
|
|
128
|
-
- 대명사 (그·그것·그녀·그들) — 명사 반복 또는 생략
|
|
129
|
-
- 복수 표지 `들` — 한국어는 단수형으로 다수 표현 가능
|
|
130
|
-
- `의` — 띄어쓰기 가능 시 생략
|
|
131
|
-
|
|
132
|
-
**허용**:
|
|
133
|
-
|
|
134
|
-
- 일상 한국어 단어 — 일상에 정착한 압축어(예: `비추`) 포함
|
|
135
|
-
- 명사구 종결 — 압축 일관성 유지
|
|
136
|
-
|
|
137
|
-
## ASCII 그림
|
|
138
|
-
|
|
139
|
-
적용 대상 — 모든 ASCII 그림:
|
|
140
|
-
|
|
141
|
-
- 다이어그램
|
|
142
|
-
- 구성도
|
|
143
|
-
- 와이어프레임 등
|
|
144
|
-
|
|
145
|
-
룰:
|
|
146
|
-
|
|
147
|
-
- 이모지(✏ ☐ ❌ ⭐ ♥ 등) 금지 — 렌더러별 1칸/2칸 변동 → 정렬 깨짐.
|
|
148
|
-
- 그 외 폭 안정 문자 허용:
|
|
149
|
-
- ASCII·한글
|
|
150
|
-
- 박스 라인 ┌─┐ │ └┘ ├┤
|
|
151
|
-
- 도형 ▲ ▼ ► ◄
|
|
152
|
-
- 화살표 ← → ↑ ↓
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# 창고 관리 요구 분석서
|
|
2
|
-
|
|
3
|
-
## 1. 개요
|
|
4
|
-
|
|
5
|
-
### 1.1 핵심 목적
|
|
6
|
-
|
|
7
|
-
창고 입출고 및 기준정보를 관리한다.
|
|
8
|
-
|
|
9
|
-
## 4. 화면
|
|
10
|
-
|
|
11
|
-
| § | 분류 | 화면 | 유형 | 장치 |
|
|
12
|
-
| --- | -------- | ------------- | ------ | ---- |
|
|
13
|
-
| 4.1 | 기준정보 | Item Register | 마스터 | PC |
|
|
14
|
-
|
|
15
|
-
### 4.1 Item Register (PC) [확정: 2026-05-13]
|
|
16
|
-
|
|
17
|
-
Actor: Warehouse Manager
|
|
18
|
-
|
|
19
|
-
기능 개요:
|
|
20
|
-
|
|
21
|
-
- Register and edit items.
|
|
22
|
-
|
|
23
|
-
와이어프레임:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
┌──────────────────────────┐
|
|
27
|
-
│ Code [ ] │
|
|
28
|
-
│ Name [ ] │
|
|
29
|
-
│ [Save] [Cancel] │
|
|
30
|
-
└──────────────────────────┘
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
항목:
|
|
34
|
-
|
|
35
|
-
**입력 폼**
|
|
36
|
-
|
|
37
|
-
| 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
|
|
38
|
-
| ---- | ------ | ---- | ---------------- | ---- |
|
|
39
|
-
| Code | 텍스트 | O | [모델.Item.code] | - |
|
|
40
|
-
| Name | 텍스트 | O | [모델.Item.name] | - |
|
|
41
|
-
|
|
42
|
-
동작:
|
|
43
|
-
|
|
44
|
-
- [Save]: Save the form.
|
|
45
|
-
- [Cancel]: Reset the form.
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# 창고 관리 요구 분석서
|
|
2
|
-
|
|
3
|
-
## 1. 개요
|
|
4
|
-
|
|
5
|
-
### 1.1 핵심 목적
|
|
6
|
-
|
|
7
|
-
창고 입출고 및 기준정보를 관리한다.
|
|
8
|
-
|
|
9
|
-
## 4. 화면
|
|
10
|
-
|
|
11
|
-
| § | 분류 | 화면 | 유형 | 장치 |
|
|
12
|
-
| --- | ---- | --------- | ---- | ---- |
|
|
13
|
-
| 4.1 | 메인 | Dashboard | 조회 | PC |
|
|
14
|
-
|
|
15
|
-
### 4.1 Dashboard (PC) [확정: 2026-05-13]
|
|
16
|
-
|
|
17
|
-
Actor: Warehouse Manager
|
|
18
|
-
|
|
19
|
-
기능 개요:
|
|
20
|
-
|
|
21
|
-
- Show warehouse summary.
|
|
22
|
-
|
|
23
|
-
와이어프레임:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
┌──────────────────────────┐
|
|
27
|
-
│ Total stock: ____ │
|
|
28
|
-
│ [Refresh] │
|
|
29
|
-
└──────────────────────────┘
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
항목:
|
|
33
|
-
|
|
34
|
-
**입력 폼**
|
|
35
|
-
|
|
36
|
-
| 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
|
|
37
|
-
| ----------- | ---- | ---- | ----------- | -------------------- |
|
|
38
|
-
| Total stock | 숫자 | X | - | 표시 전용 (readonly) |
|
|
39
|
-
|
|
40
|
-
동작:
|
|
41
|
-
|
|
42
|
-
- [Refresh]: Refresh data.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChangeDetectionStrategy,
|
|
3
|
-
Component,
|
|
4
|
-
ViewEncapsulation,
|
|
5
|
-
signal,
|
|
6
|
-
} from "@angular/core";
|
|
7
|
-
import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
|
|
8
|
-
|
|
9
|
-
@Component({
|
|
10
|
-
selector: "app-dashboard-view",
|
|
11
|
-
standalone: true,
|
|
12
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
13
|
-
encapsulation: ViewEncapsulation.None,
|
|
14
|
-
imports: [SdBaseContainer],
|
|
15
|
-
template: `
|
|
16
|
-
<sd-base-container
|
|
17
|
-
[(ready)]="ready"
|
|
18
|
-
[initialized]="initialized()"
|
|
19
|
-
[(busyCount)]="busyCount"
|
|
20
|
-
[viewType]="viewType()"
|
|
21
|
-
>
|
|
22
|
-
<ng-template #contentTpl>
|
|
23
|
-
<div class="p-default">Existing Dashboard - manually edited</div>
|
|
24
|
-
</ng-template>
|
|
25
|
-
</sd-base-container>
|
|
26
|
-
`,
|
|
27
|
-
})
|
|
28
|
-
export class DashboardView {
|
|
29
|
-
ready = signal(false);
|
|
30
|
-
initialized = signal(true);
|
|
31
|
-
busyCount = signal(0);
|
|
32
|
-
viewType = injectViewTypeSignal();
|
|
33
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# 창고 관리 요구 분석서
|
|
2
|
-
|
|
3
|
-
## 1. 개요
|
|
4
|
-
|
|
5
|
-
### 1.1 핵심 목적
|
|
6
|
-
|
|
7
|
-
창고 입출고 및 기준정보를 관리한다.
|
|
8
|
-
|
|
9
|
-
## 4. 화면
|
|
10
|
-
|
|
11
|
-
| § | 분류 | 화면 | 유형 | 장치 |
|
|
12
|
-
| --- | -------- | --------------- | ------ | ---- |
|
|
13
|
-
| 4.1 | 기준정보 | Location Master | 마스터 | PC |
|
|
14
|
-
|
|
15
|
-
### 4.1 Location Master (PC) [확정: 2026-05-13]
|
|
16
|
-
|
|
17
|
-
Actor: Warehouse Admin
|
|
18
|
-
|
|
19
|
-
기능 개요:
|
|
20
|
-
|
|
21
|
-
- 창고 로케이션 마스터를 관리한다 (등록·수정·삭제·복구·엑셀 입출력 포함 표준 마스터 화면).
|
|
22
|
-
|
|
23
|
-
와이어프레임:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
[등록] [선택 삭제] [선택 복구] [엑셀 업로드] [엑셀 다운로드]
|
|
27
|
-
| [ ] | ID | 코드 | 이름 |
|
|
28
|
-
| [ ] | [E 2] | L-02 | 2층 창고 |
|
|
29
|
-
| [ ] | [E 1] | L-01 | 1층 창고 |
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
범례: `[ ]` = 행 선택 체크박스, `[E N]` = 편집 버튼 (N = ID). 클릭 시 인라인 편집.
|
|
33
|
-
|
|
34
|
-
항목:
|
|
35
|
-
|
|
36
|
-
**시트 컬럼**
|
|
37
|
-
|
|
38
|
-
| 컬럼 | 종류 | 도메인 매핑 | 비고 |
|
|
39
|
-
| ---- | ------ | -------------------- | ---- |
|
|
40
|
-
| 코드 | 텍스트 | [모델.Location.code] | - |
|
|
41
|
-
| 이름 | 텍스트 | [모델.Location.name] | - |
|
|
42
|
-
|
|
43
|
-
동작:
|
|
44
|
-
|
|
45
|
-
- 표준 마스터 동작 (등록·선택 삭제·선택 복구·엑셀 업/다운로드·ID 편집 클릭 시 인라인 편집).
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChangeDetectionStrategy,
|
|
3
|
-
Component,
|
|
4
|
-
ViewEncapsulation,
|
|
5
|
-
signal,
|
|
6
|
-
} from "@angular/core";
|
|
7
|
-
import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
|
|
8
|
-
|
|
9
|
-
@Component({
|
|
10
|
-
selector: "app-dashboard-view",
|
|
11
|
-
standalone: true,
|
|
12
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
13
|
-
encapsulation: ViewEncapsulation.None,
|
|
14
|
-
imports: [SdBaseContainer],
|
|
15
|
-
template: `
|
|
16
|
-
<sd-base-container
|
|
17
|
-
[(ready)]="ready"
|
|
18
|
-
[initialized]="initialized()"
|
|
19
|
-
[(busyCount)]="busyCount"
|
|
20
|
-
[viewType]="viewType()"
|
|
21
|
-
>
|
|
22
|
-
<ng-template #contentTpl>
|
|
23
|
-
<div class="p-default">대시보드</div>
|
|
24
|
-
</ng-template>
|
|
25
|
-
</sd-base-container>
|
|
26
|
-
`,
|
|
27
|
-
})
|
|
28
|
-
export class DashboardView {
|
|
29
|
-
ready = signal(false);
|
|
30
|
-
initialized = signal(true);
|
|
31
|
-
busyCount = signal(0);
|
|
32
|
-
viewType = injectViewTypeSignal();
|
|
33
|
-
}
|
package/claude/skills/sd-demo/evals/fixtures/with-modal/.specs/260513120000_warehouse/spec.md
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# 창고 관리 요구 분석서
|
|
2
|
-
|
|
3
|
-
## 1. 개요
|
|
4
|
-
|
|
5
|
-
### 1.1 핵심 목적
|
|
6
|
-
|
|
7
|
-
창고 입출고 및 기준정보를 관리한다.
|
|
8
|
-
|
|
9
|
-
## 4. 화면
|
|
10
|
-
|
|
11
|
-
| § | 분류 | 화면 | 유형 | 장치 |
|
|
12
|
-
| --- | -------- | --------------- | -------- | ---- |
|
|
13
|
-
| 4.1 | 기준정보 | Item List | 조회 | PC |
|
|
14
|
-
| 4.2 | 기준정보 | Item Edit Modal | 트랜잭션 | PC |
|
|
15
|
-
|
|
16
|
-
### 4.1 Item List (PC) [확정: 2026-05-13]
|
|
17
|
-
|
|
18
|
-
Actor: Warehouse Manager
|
|
19
|
-
|
|
20
|
-
기능 개요:
|
|
21
|
-
|
|
22
|
-
- Browse items registered in the warehouse.
|
|
23
|
-
|
|
24
|
-
와이어프레임:
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
[Register]
|
|
28
|
-
| Code | Name | Edit |
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
항목:
|
|
32
|
-
|
|
33
|
-
**시트 컬럼**
|
|
34
|
-
|
|
35
|
-
| 컬럼 | 종류 | 도메인 매핑 | 비고 |
|
|
36
|
-
| ---- | ------ | ---------------- | ---- |
|
|
37
|
-
| Code | 텍스트 | [모델.Item.code] | - |
|
|
38
|
-
| Name | 텍스트 | [모델.Item.name] | - |
|
|
39
|
-
|
|
40
|
-
동작:
|
|
41
|
-
|
|
42
|
-
- [Register]: → [화면.Item Edit Modal] 을 모달로 띄움.
|
|
43
|
-
- [Edit] (행 버튼): → [화면.Item Edit Modal] 을 모달로 띄움.
|
|
44
|
-
|
|
45
|
-
### 4.2 Item Edit Modal (PC) [확정: 2026-05-13]
|
|
46
|
-
|
|
47
|
-
Actor: Warehouse Manager
|
|
48
|
-
|
|
49
|
-
기능 개요:
|
|
50
|
-
|
|
51
|
-
- Create or edit an item via modal.
|
|
52
|
-
|
|
53
|
-
와이어프레임:
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
┌──────────────────────────┐
|
|
57
|
-
│ Code [ ] │
|
|
58
|
-
│ Name [ ] │
|
|
59
|
-
│ [Save] [Cancel] │
|
|
60
|
-
└──────────────────────────┘
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
항목:
|
|
64
|
-
|
|
65
|
-
**입력 폼**
|
|
66
|
-
|
|
67
|
-
| 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
|
|
68
|
-
| ---- | ------ | ---- | ---------------- | ---- |
|
|
69
|
-
| Code | 텍스트 | O | [모델.Item.code] | - |
|
|
70
|
-
| Name | 텍스트 | O | [모델.Item.name] | - |
|
|
71
|
-
|
|
72
|
-
동작:
|
|
73
|
-
|
|
74
|
-
- [Save]: Save and close the modal.
|
|
75
|
-
- [Cancel]: Close without saving.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChangeDetectionStrategy,
|
|
3
|
-
Component,
|
|
4
|
-
ViewEncapsulation,
|
|
5
|
-
signal,
|
|
6
|
-
} from "@angular/core";
|
|
7
|
-
import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
|
|
8
|
-
|
|
9
|
-
@Component({
|
|
10
|
-
selector: "app-dashboard-view",
|
|
11
|
-
standalone: true,
|
|
12
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
13
|
-
encapsulation: ViewEncapsulation.None,
|
|
14
|
-
imports: [SdBaseContainer],
|
|
15
|
-
template: `
|
|
16
|
-
<sd-base-container
|
|
17
|
-
[(ready)]="ready"
|
|
18
|
-
[initialized]="initialized()"
|
|
19
|
-
[(busyCount)]="busyCount"
|
|
20
|
-
[viewType]="viewType()"
|
|
21
|
-
>
|
|
22
|
-
<ng-template #contentTpl>
|
|
23
|
-
<div class="p-default">대시보드</div>
|
|
24
|
-
</ng-template>
|
|
25
|
-
</sd-base-container>
|
|
26
|
-
`,
|
|
27
|
-
})
|
|
28
|
-
export class DashboardView {
|
|
29
|
-
ready = signal(false);
|
|
30
|
-
initialized = signal(true);
|
|
31
|
-
busyCount = signal(0);
|
|
32
|
-
viewType = injectViewTypeSignal();
|
|
33
|
-
}
|
package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# 창고 관리 요구 분석서
|
|
2
|
-
|
|
3
|
-
## 1. 개요
|
|
4
|
-
|
|
5
|
-
### 1.1 핵심 목적
|
|
6
|
-
|
|
7
|
-
창고 입출고 및 기준정보를 관리한다.
|
|
8
|
-
|
|
9
|
-
## 4. 화면
|
|
10
|
-
|
|
11
|
-
| § | 분류 | 화면 | 유형 | 장치 |
|
|
12
|
-
| --- | -------- | ------------- | ------ | ---- |
|
|
13
|
-
| 4.1 | 기준정보 | Item Register | 마스터 | PC |
|
|
14
|
-
|
|
15
|
-
### 4.1 Item Register (PC) [확정: 2026-05-13]
|
|
16
|
-
|
|
17
|
-
Actor: Warehouse Manager
|
|
18
|
-
|
|
19
|
-
기능 개요:
|
|
20
|
-
|
|
21
|
-
- Register and edit items.
|
|
22
|
-
|
|
23
|
-
와이어프레임:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
┌──────────────────────────┐
|
|
27
|
-
│ Code [ ] │
|
|
28
|
-
│ Name [ ] │
|
|
29
|
-
│ [Save] [Cancel] │
|
|
30
|
-
└──────────────────────────┘
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
항목:
|
|
34
|
-
|
|
35
|
-
**입력 폼**
|
|
36
|
-
|
|
37
|
-
| 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
|
|
38
|
-
| ---- | ------ | ---- | ---------------- | ---- |
|
|
39
|
-
| Code | 텍스트 | O | [모델.Item.code] | - |
|
|
40
|
-
| Name | 텍스트 | O | [모델.Item.name] | - |
|
|
41
|
-
|
|
42
|
-
동작:
|
|
43
|
-
|
|
44
|
-
- [Save]: Save the form.
|
|
45
|
-
- [Cancel]: Reset the form.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChangeDetectionStrategy,
|
|
3
|
-
Component,
|
|
4
|
-
ViewEncapsulation,
|
|
5
|
-
signal,
|
|
6
|
-
} from "@angular/core";
|
|
7
|
-
import { SdBaseContainer, injectViewTypeSignal } from "@simplysm/angular";
|
|
8
|
-
|
|
9
|
-
@Component({
|
|
10
|
-
selector: "app-dashboard-view",
|
|
11
|
-
standalone: true,
|
|
12
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
13
|
-
encapsulation: ViewEncapsulation.None,
|
|
14
|
-
imports: [SdBaseContainer],
|
|
15
|
-
template: `
|
|
16
|
-
<sd-base-container
|
|
17
|
-
[(ready)]="ready"
|
|
18
|
-
[initialized]="initialized()"
|
|
19
|
-
[(busyCount)]="busyCount"
|
|
20
|
-
[viewType]="viewType()"
|
|
21
|
-
>
|
|
22
|
-
<ng-template #contentTpl>
|
|
23
|
-
<div class="p-default">대시보드</div>
|
|
24
|
-
</ng-template>
|
|
25
|
-
</sd-base-container>
|
|
26
|
-
`,
|
|
27
|
-
})
|
|
28
|
-
export class DashboardView {
|
|
29
|
-
ready = signal(false);
|
|
30
|
-
initialized = signal(true);
|
|
31
|
-
busyCount = signal(0);
|
|
32
|
-
viewType = injectViewTypeSignal();
|
|
33
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { toCamelCase } from "../src/index.js";
|
|
3
|
-
|
|
4
|
-
describe("toCamelCase", () => {
|
|
5
|
-
it("converts kebab-case to camelCase", () => {
|
|
6
|
-
expect(toCamelCase("foo-bar")).toBe("fooBar");
|
|
7
|
-
});
|
|
8
|
-
it("converts snake_case to camelCase", () => {
|
|
9
|
-
expect(toCamelCase("foo_bar_baz")).toBe("fooBarBaz");
|
|
10
|
-
});
|
|
11
|
-
});
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { toCamelCase } from "../src/index.js";
|
|
3
|
-
|
|
4
|
-
describe("toCamelCase", () => {
|
|
5
|
-
it("converts kebab-case to camelCase", () => {
|
|
6
|
-
expect(toCamelCase("foo-bar")).toBe("fooBar");
|
|
7
|
-
});
|
|
8
|
-
it("converts snake_case to camelCase", () => {
|
|
9
|
-
expect(toCamelCase("foo_bar_baz")).toBe("fooBarBaz");
|
|
10
|
-
});
|
|
11
|
-
});
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { toCamelCase } from "../src/index.js";
|
|
3
|
-
|
|
4
|
-
describe("toCamelCase", () => {
|
|
5
|
-
it("converts kebab-case to camelCase", () => {
|
|
6
|
-
expect(toCamelCase("foo-bar")).toBe("fooBar");
|
|
7
|
-
});
|
|
8
|
-
it("converts snake_case to camelCase", () => {
|
|
9
|
-
expect(toCamelCase("foo_bar_baz")).toBe("fooBarBaz");
|
|
10
|
-
});
|
|
11
|
-
});
|