@simplysm/sd-claude 14.0.47 → 14.0.48
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-simplysm14/sd-claude/usage.md → README.md} +2 -2
- package/claude/rules/sd-claude-rules.md +25 -10
- package/claude/rules/sd-options.md +11 -6
- package/claude/sd-subagent-start.sh +6 -0
- package/claude/settings.json +1 -12
- package/claude/skills/sd-check/SKILL.md +18 -9
- package/claude/skills/sd-claude-docs/SKILL.md +30 -58
- package/claude/skills/sd-claude-docs/references/package-claudemd.md +12 -0
- package/claude/skills/sd-claude-docs/references/package-doc-gen.md +22 -12
- package/claude/skills/sd-commit/SKILL.md +1 -1
- package/claude/skills/sd-debug/SKILL.md +5 -3
- package/claude/skills/sd-deliverable/SKILL.md +1 -1
- package/claude/skills/sd-dev/SKILL.md +14 -9
- package/claude/skills/sd-doc-extract/SKILL.md +8 -10
- package/claude/skills/sd-doc-extract/_common.py +8 -1
- package/claude/skills/sd-doc-extract/_extract_docx.py +74 -34
- package/claude/skills/sd-doc-extract/_extract_pdf.py +12 -1
- package/claude/skills/sd-doc-extract/_extract_pptx.py +103 -23
- package/claude/skills/sd-doc-extract/_extract_xlsb.py +93 -4
- package/claude/skills/sd-doc-extract/_extract_xlsx.py +98 -36
- package/claude/skills/sd-doc-extract/extract.py +22 -3
- package/claude/skills/sd-inner-clarify/SKILL.md +78 -0
- package/claude/skills/sd-inner-debug/SKILL.md +1 -1
- package/claude/skills/sd-inner-review/SKILL.md +13 -0
- package/claude/skills/sd-issue/SKILL.md +1 -1
- package/claude/skills/sd-outlook/SKILL.md +1 -1
- package/claude/skills/sd-plan/SKILL.md +50 -17
- package/claude/skills/sd-prompt/SKILL.md +180 -178
- package/claude/skills/sd-prompt/references/eval-runner.md +5 -30
- package/claude/skills/sd-prompt/references/sd-eval-env-template.md +23 -0
- package/claude/skills/sd-refactor/SKILL.md +2 -2
- package/claude/skills/sd-tdd/SKILL.md +40 -10
- package/claude/skills/sd-use/SKILL.md +84 -80
- package/claude/skills/sd-wbs/SKILL.md +84 -27
- package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/assets.md +2 -3
- package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/hooks.md +7 -6
- package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/scripts.md +1 -9
- package/package.json +3 -2
- package/scripts/sync.mjs +4 -2
- package/claude/references/sd-simplysm14/angular/docs/bootstrap.md +0 -48
- package/claude/references/sd-simplysm14/angular/docs/directives.md +0 -236
- package/claude/references/sd-simplysm14/angular/docs/features.md +0 -379
- package/claude/references/sd-simplysm14/angular/docs/pipes.md +0 -32
- package/claude/references/sd-simplysm14/angular/docs/plugins.md +0 -37
- package/claude/references/sd-simplysm14/angular/docs/provider-types.md +0 -283
- package/claude/references/sd-simplysm14/angular/docs/providers.md +0 -379
- package/claude/references/sd-simplysm14/angular/docs/styling.md +0 -222
- package/claude/references/sd-simplysm14/angular/docs/type-utilities.md +0 -250
- package/claude/references/sd-simplysm14/angular/docs/ui-data.md +0 -275
- package/claude/references/sd-simplysm14/angular/docs/ui-form.md +0 -490
- package/claude/references/sd-simplysm14/angular/docs/ui-layout.md +0 -140
- package/claude/references/sd-simplysm14/angular/docs/ui-navigation.md +0 -273
- package/claude/references/sd-simplysm14/angular/docs/ui-overlay.md +0 -157
- package/claude/references/sd-simplysm14/angular/docs/ui-visual.md +0 -127
- package/claude/references/sd-simplysm14/angular/docs/utils.md +0 -295
- package/claude/references/sd-simplysm14/angular/usage.md +0 -489
- package/claude/references/sd-simplysm14/capacitor-plugin-auto-update/usage.md +0 -182
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/file-operations.md +0 -154
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/permissions.md +0 -84
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/storage-paths.md +0 -107
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/types.md +0 -83
- package/claude/references/sd-simplysm14/capacitor-plugin-file-system/usage.md +0 -133
- package/claude/references/sd-simplysm14/capacitor-plugin-intent/usage.md +0 -203
- package/claude/references/sd-simplysm14/capacitor-plugin-usb-storage/usage.md +0 -258
- package/claude/references/sd-simplysm14/core-browser/usage.md +0 -306
- package/claude/references/sd-simplysm14/core-common/docs/errors.md +0 -82
- package/claude/references/sd-simplysm14/core-common/docs/extensions.md +0 -167
- package/claude/references/sd-simplysm14/core-common/docs/features.md +0 -136
- package/claude/references/sd-simplysm14/core-common/docs/types.md +0 -245
- package/claude/references/sd-simplysm14/core-common/docs/utils.md +0 -591
- package/claude/references/sd-simplysm14/core-common/usage.md +0 -255
- package/claude/references/sd-simplysm14/core-node/docs/child-process.md +0 -182
- package/claude/references/sd-simplysm14/core-node/docs/features.md +0 -214
- package/claude/references/sd-simplysm14/core-node/docs/file-system.md +0 -509
- package/claude/references/sd-simplysm14/core-node/docs/file-watching.md +0 -139
- package/claude/references/sd-simplysm14/core-node/docs/logging.md +0 -180
- package/claude/references/sd-simplysm14/core-node/docs/path.md +0 -176
- package/claude/references/sd-simplysm14/core-node/docs/utilities-cpx.md +0 -194
- package/claude/references/sd-simplysm14/core-node/docs/utilities-fsx.md +0 -469
- package/claude/references/sd-simplysm14/core-node/docs/utilities-pathx.md +0 -151
- package/claude/references/sd-simplysm14/core-node/docs/worker-threads.md +0 -334
- package/claude/references/sd-simplysm14/core-node/docs/worker.md +0 -205
- package/claude/references/sd-simplysm14/core-node/usage.md +0 -259
- package/claude/references/sd-simplysm14/excel/docs/core-classes.md +0 -453
- package/claude/references/sd-simplysm14/excel/docs/types.md +0 -459
- package/claude/references/sd-simplysm14/excel/docs/utilities.md +0 -194
- package/claude/references/sd-simplysm14/excel/docs/wrapper.md +0 -73
- package/claude/references/sd-simplysm14/excel/usage.md +0 -134
- package/claude/references/sd-simplysm14/lint/usage.md +0 -130
- package/claude/references/sd-simplysm14/orm-common/docs/core.md +0 -188
- package/claude/references/sd-simplysm14/orm-common/docs/expression.md +0 -190
- package/claude/references/sd-simplysm14/orm-common/docs/models.md +0 -17
- package/claude/references/sd-simplysm14/orm-common/docs/query-builder.md +0 -97
- package/claude/references/sd-simplysm14/orm-common/docs/queryable-executable.md +0 -250
- package/claude/references/sd-simplysm14/orm-common/docs/schema-builders.md +0 -364
- package/claude/references/sd-simplysm14/orm-common/docs/types.md +0 -522
- package/claude/references/sd-simplysm14/orm-common/usage.md +0 -229
- package/claude/references/sd-simplysm14/orm-node/docs/connections.md +0 -137
- package/claude/references/sd-simplysm14/orm-node/docs/core.md +0 -131
- package/claude/references/sd-simplysm14/orm-node/docs/types.md +0 -173
- package/claude/references/sd-simplysm14/orm-node/usage.md +0 -143
- package/claude/references/sd-simplysm14/sd-cli/usage.md +0 -782
- package/claude/references/sd-simplysm14/service-client/docs/features.md +0 -217
- package/claude/references/sd-simplysm14/service-client/docs/main.md +0 -148
- package/claude/references/sd-simplysm14/service-client/docs/protocol.md +0 -53
- package/claude/references/sd-simplysm14/service-client/docs/transport.md +0 -131
- package/claude/references/sd-simplysm14/service-client/docs/types.md +0 -129
- package/claude/references/sd-simplysm14/service-client/usage.md +0 -202
- package/claude/references/sd-simplysm14/service-common/docs/app-structure.md +0 -175
- package/claude/references/sd-simplysm14/service-common/docs/events.md +0 -64
- package/claude/references/sd-simplysm14/service-common/docs/protocol.md +0 -331
- package/claude/references/sd-simplysm14/service-common/docs/service-types.md +0 -90
- package/claude/references/sd-simplysm14/service-common/docs/types.md +0 -19
- package/claude/references/sd-simplysm14/service-common/usage.md +0 -154
- package/claude/references/sd-simplysm14/service-server/docs/auth.md +0 -64
- package/claude/references/sd-simplysm14/service-server/docs/core.md +0 -174
- package/claude/references/sd-simplysm14/service-server/docs/legacy.md +0 -25
- package/claude/references/sd-simplysm14/service-server/docs/main.md +0 -88
- package/claude/references/sd-simplysm14/service-server/docs/protocol.md +0 -33
- package/claude/references/sd-simplysm14/service-server/docs/services.md +0 -94
- package/claude/references/sd-simplysm14/service-server/docs/transport-http.md +0 -93
- package/claude/references/sd-simplysm14/service-server/docs/transport-socket.md +0 -119
- package/claude/references/sd-simplysm14/service-server/docs/types.md +0 -36
- package/claude/references/sd-simplysm14/service-server/docs/utils.md +0 -22
- package/claude/references/sd-simplysm14/service-server/usage.md +0 -171
- package/claude/references/sd-simplysm14/storage/usage.md +0 -301
- package/claude/references/sd-simplysm14.md +0 -35
- package/claude/rules/sd-clarify.md +0 -23
- package/claude/sd-session-start.sh +0 -10
- /package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/cli.md +0 -0
|
@@ -1,178 +1,180 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sd-prompt
|
|
3
|
-
description: 스킬/프롬프트 파일의 작성·개선을 위한 EDD 스킬. "스킬 만들어줘", "룰 만들어줘", "프롬프트 만들어줘", "스킬 개선", "프롬프트 개선", "Eval 실행", "스킬 테스트" 등을 요청할 때 사용한다.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# sd-prompt: Eval-Driven Prompt Development
|
|
7
|
-
|
|
8
|
-
프롬프트 파일이란 룰(.claude/rules
|
|
9
|
-
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
1
|
+
---
|
|
2
|
+
name: sd-prompt
|
|
3
|
+
description: 스킬/프롬프트 파일의 작성·개선을 위한 EDD 스킬. "스킬 만들어줘", "룰 만들어줘", "프롬프트 만들어줘", "스킬 개선", "프롬프트 개선", "Eval 실행", "스킬 테스트" 등을 요청할 때 사용한다.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# sd-prompt: Eval-Driven Prompt Development
|
|
7
|
+
|
|
8
|
+
프롬프트 파일이란 룰(.claude/rules/\*.md), 시스템 프롬프트, 커스텀 지시 등 모든 .md 프롬프트를 포함한다.
|
|
9
|
+
|
|
10
|
+
## 작업 추적
|
|
11
|
+
|
|
12
|
+
Step 1~5는 장기 프로세스이다. 스킬 시작 시점에 각 Step을 `TaskCreate`로 등록한다. Step 진입 시 `TaskUpdate`로 `in_progress`, 완료 시 `completed`로 갱신한다. 개선 루프(Step 4)·Regression Guard(Step 5)로 이전 Step에 재진입할 때도 해당 Task를 다시 `in_progress`로 되돌려 상태를 반영한다.
|
|
13
|
+
|
|
14
|
+
## 산출물 파일 구조
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
룰인 경우:
|
|
18
|
+
.claude/rules/{name}.md ← 룰 프롬프트 (산출물)
|
|
19
|
+
.claude/evals/{name}.md ← 룰의 Eval 시나리오
|
|
20
|
+
|
|
21
|
+
나머지 경우 (스킬, 프롬프트 등):
|
|
22
|
+
대상 파일 옆에 {대상파일명}.eval.md 로 생성
|
|
23
|
+
예시:
|
|
24
|
+
.claude/skills/{name}/SKILL.md → .claude/skills/{name}/SKILL.eval.md
|
|
25
|
+
{경로}/{name}.md → {경로}/{name}.eval.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Step 1: 의도 정의 (Intent)
|
|
29
|
+
|
|
30
|
+
프롬프트 작성 전에 다음을 파악한다:
|
|
31
|
+
|
|
32
|
+
- **유형**: 스킬(특정 명령으로 트리거) vs 프롬프트(항상/조건부 적용)
|
|
33
|
+
- **트리거 조건**: 어떤 발화/상황에서 발동하는가 (스킬인 경우)
|
|
34
|
+
- **입력**: 무엇을 받는가
|
|
35
|
+
- **출력**: 무엇을 내놓는가
|
|
36
|
+
|
|
37
|
+
`/sd-inner-clarify` 스킬을 호출하여 명확화한다.
|
|
38
|
+
|
|
39
|
+
## Step 2: Eval 시나리오 정의
|
|
40
|
+
|
|
41
|
+
### Eval 유형
|
|
42
|
+
|
|
43
|
+
| Eval 유형 | 설명 | 판정 방식 |
|
|
44
|
+
| ----------------- | ----------------------------------------- | ------------------------- |
|
|
45
|
+
| **행동 Eval** | 이 입력에서 출력이 충족해야 할 체크리스트 | 객관적 항목 + LLM 판단 |
|
|
46
|
+
| **안티패턴 Eval** | 출력에 나타나면 안 되는 것들 | 행동/결과 확인 + LLM 판단 |
|
|
47
|
+
|
|
48
|
+
### 체크리스트 작성 원칙
|
|
49
|
+
|
|
50
|
+
Judge의 정확도는 체크리스트의 품질에 달려있다. 다음 원칙을 따른다:
|
|
51
|
+
|
|
52
|
+
- **CRITICAL**: 체크리스트의 모든 항목은 사용자의 명시적 요청 및 답변에서 도출되어야 한다.
|
|
53
|
+
- 객관적 기준으로 작성한다.
|
|
54
|
+
- 하나의 항목은 하나만 평가한다.
|
|
55
|
+
- Judge를 통해 도출할 수 있는 내용만 작성한다.
|
|
56
|
+
- **조건부 행동을 체크리스트에 넣지 않는다** — 입력·상태에 따라 발생할 수도, 안 할 수도 있는 행동은 체크 항목으로 부적합하다. 해당 입력에서 **반드시 발생하는 행동**만 넣는다.
|
|
57
|
+
|
|
58
|
+
#### Judge 관찰 가능 소스
|
|
59
|
+
|
|
60
|
+
Judge는 아래 **두 가지만** 볼 수 있다. 체크리스트의 모든 항목은 이 소스에서 PASS/FAIL을 판정할 수 있어야 한다.
|
|
61
|
+
|
|
62
|
+
| 소스 | 설명 | 판정 가능 예시 |
|
|
63
|
+
| ------------------ | -------------------------------------------------- | ------------------------------------------------------- |
|
|
64
|
+
| **workspace 파일** | 스킬 실행 후 workspace에 생성·수정된 파일 | 파일 존재 여부, 파일 내 특정 문자열·구조·섹션 포함 여부 |
|
|
65
|
+
| **텍스트 출력** | `run-output.json`에 기록된 assistant의 텍스트 출력 | 출력에 특정 문구 포함/미포함 여부, 출력 구조 |
|
|
66
|
+
|
|
67
|
+
**Judge가 볼 수 없는 것:** 도구 호출 여부/순서, 내부 추론, 파일을 "읽었는지" 여부. 이런 것은 체크 항목으로 넣지 않는다.
|
|
68
|
+
|
|
69
|
+
#### 자가검증
|
|
70
|
+
|
|
71
|
+
각 체크 항목을 작성한 후, "Judge가 workspace 파일 또는 텍스트 출력만 보고 이 항목의 PASS/FAIL을 판정할 수 있는가?"를 자문한다. "아니오"이면 재작성하거나 삭제한다.
|
|
72
|
+
|
|
73
|
+
### Eval 파일 형식
|
|
74
|
+
|
|
75
|
+
#### 입력 작성 원칙
|
|
76
|
+
|
|
77
|
+
- **스킬:** 반드시(MUST) 실제 호출 방식인 `/{skill-name}`(슬래시 커맨드)을 입력으로 사용한다.
|
|
78
|
+
- **프롬프트:** 프롬프트가 적용되어야 하는 상황의 자연어 발화를 입력으로 사용한다.
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
# Eval: {skill-or-prompt-name}
|
|
82
|
+
|
|
83
|
+
## 행동 Eval
|
|
84
|
+
|
|
85
|
+
### 시나리오 1: {이름}
|
|
86
|
+
|
|
87
|
+
- 입력: "/{skill-name} (스킬입력)" (스킬)
|
|
88
|
+
- 체크리스트:
|
|
89
|
+
- [ ] {객관적 판정 기준 1}
|
|
90
|
+
- [ ] {객관적 판정 기준 2}
|
|
91
|
+
|
|
92
|
+
### 시나리오 2: {이름}
|
|
93
|
+
|
|
94
|
+
- 입력: "{자연어 발화}" (프롬프트)
|
|
95
|
+
- 체크리스트:
|
|
96
|
+
- [ ] {객관적 판정 기준 1}
|
|
97
|
+
- [ ] {객관적 판정 기준 2}
|
|
98
|
+
|
|
99
|
+
## 안티패턴 Eval
|
|
100
|
+
|
|
101
|
+
- [ ] {하면 안 되는 행동 1}
|
|
102
|
+
- [ ] {하면 안 되는 행동 2}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Step 3: 프롬프트 작성
|
|
106
|
+
|
|
107
|
+
### 스킬인 경우: SKILL.md 구조
|
|
108
|
+
|
|
109
|
+
`.claude/skills/sd-prompt/references/skill-guide.md`를 읽고 구조 가이드에 따라 작성한다.
|
|
110
|
+
|
|
111
|
+
### 프롬프트인 경우: .md 구조
|
|
112
|
+
|
|
113
|
+
프론트매터가 필요하지 않으며, 자유양식으로 작성
|
|
114
|
+
|
|
115
|
+
### 품질 원칙
|
|
116
|
+
|
|
117
|
+
- **금지에는 대안을 함께 제시한다** — "`Buffer` 사용 금지"만으로는 불충분. "`Buffer` 금지 — `Uint8Array`를 사용한다"로 작성한다
|
|
118
|
+
- **강한 규칙에 키워드를 구분한다** — `반드시(MUST)`, `절대(NEVER)`, `항상(ALWAYS)`, `CRITICAL`, `IMPORTANT`. IMPORTANT/CRITICAL은 진짜 중요한 규칙에만 사용한다.
|
|
119
|
+
- **모호한 표현을 제거한다** — "적절하게", "필요시", "경우에 따라" 등은 LLM이 추측하게 만든다. 구체적인 조건과 행동으로 바꾸거나 AskUserQuestion을 활용한다.
|
|
120
|
+
- **간결하게 유지한다** — SKILL.md는 200줄 이하를 목표로 한다. 200줄이 넘을 경우 "Progressive Disclosure" 원칙에 따라 파일을 분리한다.
|
|
121
|
+
|
|
122
|
+
## Step 4: Eval 실행 & 판정
|
|
123
|
+
|
|
124
|
+
### 실행 절차
|
|
125
|
+
|
|
126
|
+
`.claude/skills/sd-prompt/references/eval-runner.md`를 읽고 절차에 따라 Eval을 실행한다.
|
|
127
|
+
|
|
128
|
+
### 개선 루프
|
|
129
|
+
|
|
130
|
+
FAIL이 1개라도 있으면 다음 단계로 진행할 수 없다. 이유를 불문하고 수정 없이 다음 단계로 넘어가는 것은 금지한다.
|
|
131
|
+
Judge 보고서의 개선 제안에 대해:
|
|
132
|
+
|
|
133
|
+
1. @.claude/rules/sd-options.md 를 읽고 사용자에게 질문한다.
|
|
134
|
+
- FAIL 판정이유 및 해당하는 부분의 실제 출력을 포함해야한다.
|
|
135
|
+
2. 승인된 제안에 따라 작성 원칙에 맞추어 수정한다.
|
|
136
|
+
3. 수정 후 workspace를 재구성하여 Eval을 재실행한다. (Eval만 수정된 경우, eval을 복사하고, Judge만 재수행)
|
|
137
|
+
|
|
138
|
+
## Step 5: 프롬프트 리팩터링 (Refactor)
|
|
139
|
+
|
|
140
|
+
전체 Eval PASS 후, 개선 루프에서 누적된 패치를 정리하여 정돈된 프롬프트를 만든다.
|
|
141
|
+
|
|
142
|
+
### Prompt Smell 탐지
|
|
143
|
+
|
|
144
|
+
각 Smell은 아래 **탐지 규칙**에 해당할 때만 리포트한다. **예외 조건**에 해당하면 Smell로 치지 않는다. 리포트 시 **원문 라인 인용**(`파일경로:라인`)을 반드시 포함한다 — 근거를 댈 수 없으면 리포트 금지.
|
|
145
|
+
|
|
146
|
+
#### 중복 지시
|
|
147
|
+
- 탐지: 동일 지시(동사+목적어 수준)가 2곳 이상에 등장
|
|
148
|
+
- 예외: 양쪽 모두 `CRITICAL`/`MUST`/`절대`/`반드시` 등 강조 키워드가 붙어 있고, 서로 다른 Step·섹션 경계에서 **의도적 강조**로 읽히는 경우
|
|
149
|
+
- 연산: 통합
|
|
150
|
+
|
|
151
|
+
#### 잔재 지시
|
|
152
|
+
- 탐지: 현재 흐름에서 더 이상 참조·호출되지 않는 지시
|
|
153
|
+
- 예외: 후속 Step이나 다른 참조 문서에서 전제로 인용되는 지시
|
|
154
|
+
- 연산: 삭제
|
|
155
|
+
|
|
156
|
+
#### 장황한 표현
|
|
157
|
+
- 탐지: 의미 단위가 중복 수식·군더더기로 채워진 문장 (예: "처음부터 끝까지 빠짐없이 전부 다")
|
|
158
|
+
- 예외: 법·규칙 문언처럼 정확한 범위·경계를 명시해야 하는 지시
|
|
159
|
+
- 연산: 의미 유지하며 압축
|
|
160
|
+
|
|
161
|
+
#### 용어 불일치
|
|
162
|
+
- 탐지: 같은 개념이 2개 이상의 단어로 지칭됨
|
|
163
|
+
- 예외: 최초 정의에서 동의어를 명시 병기한 뒤 일관 사용하는 경우
|
|
164
|
+
- 연산: 통일 (주 용어 선정 후 전면 치환)
|
|
165
|
+
|
|
166
|
+
#### 상충 지시
|
|
167
|
+
- 탐지: 두 지시가 동일 조건에서 서로 다른 행동을 요구
|
|
168
|
+
- 예외: 상위·하위 관계나 우선순위가 명시되어 충돌이 해소된 경우
|
|
169
|
+
- 연산: 우선순위 결정 후 통합 또는 삭제
|
|
170
|
+
|
|
171
|
+
#### 구조 산만
|
|
172
|
+
- 탐지: 동일 주제의 지시가 3곳 이상에 흩어져 있음
|
|
173
|
+
- 예외: 각 Step·섹션에서 **국소적으로만** 필요한 지시여서 공통 추출이 오히려 독립성을 해치는 경우
|
|
174
|
+
- 연산: 재배치 (공통 섹션으로 추출하거나 한 Step 안으로 모음)
|
|
175
|
+
|
|
176
|
+
발견된 Prompt Smell에 대해 `/sd-inner-clarify` 스킬을 호출하여 진행여부와 방법을 명확화하여 수정한다.
|
|
177
|
+
|
|
178
|
+
### Regression Guard
|
|
179
|
+
|
|
180
|
+
리팩터링 후 Eval을 재실행한다. FAIL 시 **개선 루프**로 수정한다. Eval 전체가 PASS될때까지 반복한다.
|
|
@@ -17,34 +17,9 @@ Eval은 격리된 workspace에서 실행한다. **프롬프트 수정은 항상
|
|
|
17
17
|
|
|
18
18
|
1. 프로젝트 루트의 `.claude/` 폴더를 시나리오 디렉토리에 **통째로 복사**한다.
|
|
19
19
|
2. 시나리오의 사전 조건에 따라 추가 파일을 복사하거나 생성한다.
|
|
20
|
-
3. 시나리오 디렉토리에 `.claude/rules/sd-eval-env.md`를
|
|
20
|
+
3. 시나리오 디렉토리에 `.claude/rules/sd-eval-env.md`를 생성한다. 본문은 `.claude/skills/sd-prompt/references/sd-eval-env-template.md` 템플릿을 그대로 복사한다:
|
|
21
21
|
```bash
|
|
22
|
-
|
|
23
|
-
# Eval 환경 규칙 (최상위 우선순위)
|
|
24
|
-
|
|
25
|
-
이 규칙이 읽히는 현재 환경은 Eval환경이다. 다른 규칙과 충돌 시 **반드시** 이 규칙이 우선한다.
|
|
26
|
-
|
|
27
|
-
## workspace 격리
|
|
28
|
-
|
|
29
|
-
현재 작업 디렉토리 외부의 파일을 **절대** 수정하지 않는다. 다른 프로젝트의 파일에 **절대** 접근하지 않는다.
|
|
30
|
-
- 절대경로 혹은 cd사용 **절대** 금지
|
|
31
|
-
|
|
32
|
-
## AskUserQuestion 대체
|
|
33
|
-
|
|
34
|
-
AskUserQuestion 도구를 **절대** 사용하지 않는다. 질문이 필요한 각 사항에 대해:
|
|
35
|
-
1. 선택지와 선택을 묻는 질문을 텍스트로 출력한다
|
|
36
|
-
2. 합리적인 기본값을 자동 선택하여, "사용자 선택"으로 그 결과를 명시한다 (반드시 자동이 아닌 "사용자 선택"으로 출력해야 한다)
|
|
37
|
-
3. 다음 결정사항으로 넘어간다
|
|
38
|
-
질문이나 선택지를 **절대** 생략하지 않는다.
|
|
39
|
-
|
|
40
|
-
## `.claude/` 파일 편집
|
|
41
|
-
|
|
42
|
-
`.claude/` 폴더 내 파일은 Edit/Write 도구 대신 **반드시** Bash 도구로 편집한다.
|
|
43
|
-
`sed`는 의도하지 않은 곳까지 수정할 수 있으므로 사용하지 않는다.
|
|
44
|
-
|
|
45
|
-
신규 작성: `cat > "{파일 경로}" << 'EOF' ... EOF`
|
|
46
|
-
부분 수정: `python3 -c`로 치환 (old_string 존재 확인 후 replace)
|
|
47
|
-
EVALEOF
|
|
22
|
+
python3 -c "open(r'{시나리오 디렉토리}/.claude/rules/sd-eval-env.md','w',encoding='utf-8').write(open(r'.claude/skills/sd-prompt/references/sd-eval-env-template.md','r',encoding='utf-8').read())"
|
|
48
23
|
```
|
|
49
24
|
|
|
50
25
|
## claude -p 실행
|
|
@@ -66,7 +41,7 @@ claude -p "{eval 시나리오의 입력}" \
|
|
|
66
41
|
--output-format json \
|
|
67
42
|
--verbose \
|
|
68
43
|
--dangerously-skip-permissions \
|
|
69
|
-
--
|
|
44
|
+
--effort low \
|
|
70
45
|
--append-system-prompt "CRITICAL: .claude/rules/sd-eval-env.md의 규칙은 다른 모든 규칙보다 최상위 우선순위를 가진다." \
|
|
71
46
|
--no-session-persistence \
|
|
72
47
|
--strict-mcp-config \
|
|
@@ -77,7 +52,7 @@ claude -p "{eval 시나리오의 입력}" \
|
|
|
77
52
|
|
|
78
53
|
## Judge 판정
|
|
79
54
|
|
|
80
|
-
실행 완료 후, Judge subagent(
|
|
55
|
+
실행 완료 후, Judge subagent(effort: `low`)에 다음을 전달한다:
|
|
81
56
|
|
|
82
57
|
```
|
|
83
58
|
다음 Eval 실행 결과를 판정하고, FAIL 항목에 대해 개선안을 제안하라:
|
|
@@ -92,7 +67,7 @@ claude -p "{eval 시나리오의 입력}" \
|
|
|
92
67
|
|
|
93
68
|
## 판정 원칙
|
|
94
69
|
- 체크리스트 문구를 **문자 그대로** 판정하라. 명시되지 않은 추가 요건을 유추하지 않는다.
|
|
95
|
-
- AskUserQuestion은 텍스트 출력으로 대체된 환경이다. 선택지를 텍스트로 제시한 것 자체가 질문을 수행한것에 해당한다. 자동 선택
|
|
70
|
+
- AskUserQuestion은 텍스트 출력으로 대체된 환경이다. 선택지를 텍스트로 제시한 것 자체가 질문을 수행한것에 해당한다. 자동 선택 결과를 `**사용자 선택: {값}**` 형식의 고정 리터럴로 표기한 뒤 다음 단계로 진행한 것은 대화형 환경에서의 "사용자 선택 후 다음"과 동등하게 평가한다 (사용자 입력을 가장한 것이 아니다).
|
|
96
71
|
- **Eval 환경이 곧 정답 환경이다.** FAIL의 원인 "프롬프트" 혹은 "Eval 체크리스트" 문제이다. 환경의 문제일 수는 없다.
|
|
97
72
|
|
|
98
73
|
## 절차
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Eval 환경 규칙 (최상위 우선순위)
|
|
2
|
+
|
|
3
|
+
이 규칙이 읽히는 현재 환경은 Eval환경이다. 다른 규칙과 충돌 시 **반드시** 이 규칙이 우선한다.
|
|
4
|
+
|
|
5
|
+
## workspace 격리
|
|
6
|
+
|
|
7
|
+
현재 작업 디렉토리 외부의 파일을 **절대** 수정하지 않는다. 다른 프로젝트의 파일에 **절대** 접근하지 않는다.
|
|
8
|
+
- 절대경로 혹은 cd사용 **절대** 금지
|
|
9
|
+
|
|
10
|
+
## AskUserQuestion 대체
|
|
11
|
+
|
|
12
|
+
AskUserQuestion 도구를 **절대** 사용하지 않는다. 질문이 필요한 각 사항에 대해:
|
|
13
|
+
1. 선택지와 선택을 묻는 질문을 텍스트로 출력한다
|
|
14
|
+
2. 합리적인 기본값을 자동 선택한 뒤, `**사용자 선택: {값}**` 형식의 **고정 리터럴 표기**로 출력한다. 이는 실제 사용자 입력을 가장하는 것이 아니라, 대화형 환경에서 "사용자가 해당 값을 골라 다음으로 진행"한 상태와 동등함을 나타내는 Eval 전용 약속 표기이다
|
|
15
|
+
3. 다음 결정사항으로 넘어간다
|
|
16
|
+
질문이나 선택지를 **절대** 생략하지 않는다.
|
|
17
|
+
|
|
18
|
+
## `.claude/` 파일 편집
|
|
19
|
+
|
|
20
|
+
`.claude/` 폴더 내 파일은 Edit/Write 도구 대신 **반드시** Bash 도구로 편집한다.
|
|
21
|
+
`sed`는 의도하지 않은 곳까지 수정할 수 있으므로 사용하지 않는다.
|
|
22
|
+
|
|
23
|
+
신규 작성/부분 수정 모두: Bash 내에서 `python -c`로 `open(..., 'w').write(...)` 사용
|
|
@@ -16,7 +16,7 @@ sd-refactor는 "구조 개선 방향 제안"(패키지/아키텍처 수준)에
|
|
|
16
16
|
- **린터/타입체커 영역**: 타입 누락, `any` 사용, 미사용 변수, 코드 스타일
|
|
17
17
|
- **거짓 양성**: 프레임워크가 요구하는 패턴, 프로젝트 컨벤션에 의한 의도적 구조
|
|
18
18
|
|
|
19
|
-
이슈가 의도된 설계인지 불확실하거나, 제안이 기존 기능의 동작 변경을 수반하는 경우
|
|
19
|
+
이슈가 의도된 설계인지 불확실하거나, 제안이 기존 기능의 동작 변경을 수반하는 경우 `/sd-inner-clarify` 스킬을 호출하여 명확화한다. 사용자 확인 없이 기능 변경을 리포트에 포함하지 않는다.
|
|
20
20
|
|
|
21
21
|
## Step 1: 대상 결정
|
|
22
22
|
|
|
@@ -95,7 +95,7 @@ Step 3에서 탐지된 이슈를 사용자에게 제시하기 전에 거짓 양
|
|
|
95
95
|
각 이슈에 대해:
|
|
96
96
|
1. **코드 재대조**: 해당 위치의 코드를 Read 도구로 **반드시 다시 읽고**, 이슈가 실제로 존재하는지 확인한다. 거짓 양성으로 판단된 이슈는 제거한다.
|
|
97
97
|
2. **중복 이슈 병합**: 동일 근본 원인에서 파생된 이슈를 하나로 병합한다.
|
|
98
|
-
3. **명확화 판단**: 코드 주석·변수명 등에 의도적 설계를 시사하는 표현("의도적", "팀 규칙", "컨벤션" 등)이 있는 경우, 해당 이슈를 제외하기 전에 반드시
|
|
98
|
+
3. **명확화 판단**: 코드 주석·변수명 등에 의도적 설계를 시사하는 표현("의도적", "팀 규칙", "컨벤션" 등)이 있는 경우, 해당 이슈를 제외하기 전에 반드시 `/sd-inner-clarify` 스킬을 호출하여 분류를 수행한다. 코드 주석만으로는 VERIFIED가 아니며, CLAUDE.md나 공식 문서에 근거가 없으면 INFERRED Medium 이하로 분류한다.
|
|
99
99
|
|
|
100
100
|
검증을 통과한 이슈만 Step 5로 진행한다.
|
|
101
101
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sd-tdd
|
|
3
3
|
description: 구현계획(plan) 기반으로 TDD 개발하는 스킬. "TDD 개발", "테스트 주도 개발", "plan 기반 구현" 등을 요청할 때 사용한다.
|
|
4
|
+
effort: low
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# sd-tdd: TDD 개발
|
|
@@ -102,22 +103,41 @@ Feature 문서의 `## 참조 자료` 섹션 및 그 하위섹션을 반드시
|
|
|
102
103
|
|
|
103
104
|
- wbs.md의 참조 자료 섹션도 모두 읽는다. 참조 자료의 구체적 정보(업무 규칙, 데이터 형식, 기술 제약 등)를 구현에 반영한다.
|
|
104
105
|
|
|
105
|
-
### 1-2.
|
|
106
|
+
### 1-2. 기준 코드 탐색·확인
|
|
106
107
|
|
|
107
|
-
|
|
108
|
+
**CRITICAL: 코드가 source of truth이다.** 문서가 아닌 실제 코드를 기준으로 파악한다.
|
|
109
|
+
**CRITICAL: 탐색 없이 코드 작성으로 넘어가는 것은 위반이다.**
|
|
108
110
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
#### (a) Feature 문서의 `## 기준 코드` 섹션 활용
|
|
112
|
+
|
|
113
|
+
- `## 기준 코드` 섹션이 있으면, 인용된 **모든 파일을 Read 도구로 직접 읽는다**. 요약만 보고 넘어가지 않는다.
|
|
114
|
+
- 인용 라인 주변 컨텍스트(±20줄 권장)를 함께 읽어 패턴의 전체 형태를 파악한다.
|
|
115
|
+
|
|
116
|
+
#### (b) 섹션이 없거나 부실할 때 — 직접 탐색
|
|
117
|
+
|
|
118
|
+
sd-plan Step 4 절차를 그대로 수행한다:
|
|
119
|
+
|
|
120
|
+
- 코드베이스에서 이 Feature와 가장 유사한 기존 기능을 찾는다.
|
|
121
|
+
- 탐색 대상: 관련 엔티티/모델, 기존 API 엔드포인트 및 패턴, 사용 중인 프레임워크·아키텍처, 기존 시스템 연동 방식, 성능/보안 제약, 관련 테스트 구조, 관련 의존성과 설정.
|
|
122
|
+
- 발견한 항목을 `파일경로:라인번호` 인용과 함께 작업 메모로 정리한다. 인용 없는 항목은 신뢰하지 않는다.
|
|
123
|
+
|
|
124
|
+
#### (c) 패턴 메모 정리
|
|
125
|
+
|
|
126
|
+
다음 관점에서 이번 Feature 구현 시 따를 패턴을 명시적으로 적어둔다:
|
|
127
|
+
|
|
128
|
+
- 네이밍 규칙 (파일·클래스·함수·변수)
|
|
129
|
+
- 디렉토리 구조 / 파일 배치
|
|
130
|
+
- 에러 처리·검증 방식
|
|
131
|
+
- 의존성 주입·import 패턴
|
|
132
|
+
- 테스트 구조·헬퍼 사용 패턴
|
|
133
|
+
- **UI 구조·레이아웃 / 컴포넌트 구성·생김새** (HTML 골격, CSS 클래스 네이밍, 컨트롤 배치, 반응형/스타일 토큰 사용 패턴 등)
|
|
134
|
+
|
|
135
|
+
이 메모는 Step 2 구현 시 매번 참조한다.
|
|
116
136
|
|
|
117
137
|
### 1-3. 문서 정합성 확인
|
|
118
138
|
|
|
119
139
|
요구명세의 각 Scenario에서 참조하는 기능·메서드를 구현계획과 대조한다.
|
|
120
|
-
|
|
140
|
+
`/sd-inner-clarify` 스킬을 호출하여 누락된 기능등 불명확한 부분을 명확화한다.
|
|
121
141
|
|
|
122
142
|
## Step 2: Double Loop TDD
|
|
123
143
|
|
|
@@ -131,6 +151,16 @@ Feature 문서의 `## 참조 자료` 섹션 및 그 하위섹션을 반드시
|
|
|
131
151
|
|
|
132
152
|
**CRITICAL: 프로젝트에 이미 존재하는 기존 테스트부터 점검하고 선수정한다.**
|
|
133
153
|
|
|
154
|
+
#### 점검·선수정 절차
|
|
155
|
+
|
|
156
|
+
1. 이번 Scenario의 대상 모듈/함수를 import하는 기존 테스트 파일을 검색한다.
|
|
157
|
+
2. 각 테스트를 3분류로 판정한다:
|
|
158
|
+
- **스펙 충돌**: 이번 Feature의 요구명세와 다른 동작을 기대 → 스펙에 맞게 선수정
|
|
159
|
+
- **실제 버그**: 기존 구현의 버그를 미검증 → 이번 Feature 범위 내면 수정, 범위 밖이면 사용자에게 보고 후 판단
|
|
160
|
+
- **무관**: 이번 Scenario와 무관한 동작 검증 → 건드리지 않음
|
|
161
|
+
3. 판단이 모호하면 `/sd-inner-clarify`로 명확화한다.
|
|
162
|
+
4. 선수정이 끝난 뒤 새 Acceptance Test 작성으로 진행한다.
|
|
163
|
+
|
|
134
164
|
Gherkin Scenario의 Given/When/Then을 프로젝트 테스트 프레임워크의 Acceptance Test로 변환한다.
|
|
135
165
|
|
|
136
166
|
- Scenario 하나를 하나의 test 함수로 변환하되, Scenario 내 여러 When/Then이 있으면 하나의 test 함수 안에서 순차 검증한다(통합 수준).
|