@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
|
@@ -44,6 +44,13 @@ def extract_recursive(file_path: Path, out_dir: Path):
|
|
|
44
44
|
"context": img.get("context", ""),
|
|
45
45
|
})
|
|
46
46
|
|
|
47
|
+
# Save pre-named slide images (PPTX screenshots)
|
|
48
|
+
saved_slides = []
|
|
49
|
+
for s in result.get("slide_images", []):
|
|
50
|
+
slide_path = out_dir / s["filename"]
|
|
51
|
+
slide_path.write_bytes(s["data"])
|
|
52
|
+
saved_slides.append({"filename": s["filename"], "size": len(s["data"])})
|
|
53
|
+
|
|
47
54
|
# Save embedded/attached files and recurse
|
|
48
55
|
prefix = "attachment" if result.get("metadata", {}).get("email_headers") else "embedded"
|
|
49
56
|
saved_embedded = []
|
|
@@ -68,12 +75,13 @@ def extract_recursive(file_path: Path, out_dir: Path):
|
|
|
68
75
|
saved_embedded.append(entry)
|
|
69
76
|
|
|
70
77
|
# Generate {stem}.md index in parent of out_dir
|
|
71
|
-
_generate_index_md(out_dir, file_path, result, saved_images, saved_embedded)
|
|
78
|
+
_generate_index_md(out_dir, file_path, result, saved_images, saved_embedded, saved_slides)
|
|
72
79
|
|
|
73
80
|
|
|
74
81
|
|
|
75
82
|
def _generate_index_md(out_dir: Path, file_path: Path, result: dict,
|
|
76
|
-
saved_images: list, saved_embedded: list
|
|
83
|
+
saved_images: list, saved_embedded: list,
|
|
84
|
+
saved_slides: list | None = None):
|
|
77
85
|
"""Generate {stem}.md in parent of out_dir, summarizing extraction results.
|
|
78
86
|
|
|
79
87
|
Images and embedded files are placed inline via [IMG:N]/[EMB:N] placeholders
|
|
@@ -120,7 +128,8 @@ def _generate_index_md(out_dir: Path, file_path: Path, result: dict,
|
|
|
120
128
|
referenced_imgs.add(idx)
|
|
121
129
|
if 1 <= idx <= len(saved_images):
|
|
122
130
|
img = saved_images[idx - 1]
|
|
123
|
-
|
|
131
|
+
alt = img.get('context', '') or img['filename']
|
|
132
|
+
return f""
|
|
124
133
|
return m.group(0)
|
|
125
134
|
|
|
126
135
|
def replace_emb(m):
|
|
@@ -136,8 +145,18 @@ def _generate_index_md(out_dir: Path, file_path: Path, result: dict,
|
|
|
136
145
|
return f"> embedded: [{name}]({rel_prefix}/{name})"
|
|
137
146
|
return m.group(0)
|
|
138
147
|
|
|
148
|
+
slides_list = saved_slides or []
|
|
149
|
+
|
|
150
|
+
def replace_slide(m):
|
|
151
|
+
idx = int(m.group(1))
|
|
152
|
+
if 1 <= idx <= len(slides_list):
|
|
153
|
+
fname = slides_list[idx - 1]["filename"]
|
|
154
|
+
return f""
|
|
155
|
+
return m.group(0)
|
|
156
|
+
|
|
139
157
|
text = re.sub(r'\[IMG:(\d+)\]', replace_img, text)
|
|
140
158
|
text = re.sub(r'\[EMB:(\d+)\]', replace_emb, text)
|
|
159
|
+
text = re.sub(r'\[SLIDE:(\d+)\]', replace_slide, text)
|
|
141
160
|
|
|
142
161
|
if len(text) > 10000:
|
|
143
162
|
body_path = out_dir / "body.txt"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sd-inner-clarify
|
|
3
|
+
description: (내부 전용) 명확성 분류·근거 탐색·재분류·명확화 질문 프로세스. sd-plan, sd-wbs, sd-tdd, sd-refactor, sd-prompt, sd-inner-debug 등에서 호출된다. 직접 호출하지 않는다.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# sd-inner-clarify: 명확화 프로세스
|
|
7
|
+
|
|
8
|
+
정보의 명확성 판단 및 불명확한 정보를 명확화 하고자 할 때 적용한다.
|
|
9
|
+
파악한 정보를 확실성 수준별로 분류하고, 불명확한 항목은 사용자에게 질문하여 해소한다.
|
|
10
|
+
|
|
11
|
+
## Step 1: 명확성 분류 (1차)
|
|
12
|
+
|
|
13
|
+
정보의 명확성을 다음 기준으로 분류한다.
|
|
14
|
+
|
|
15
|
+
- **VERIFIED**: 사용자가 직접 말했거나 문서/코드에 명시된 것
|
|
16
|
+
- **INFERRED**
|
|
17
|
+
- **High**: 타겟 코드베이스에서 동일 패턴을 확인했거나 공식 문서에 근거가 있는 추론
|
|
18
|
+
- **Medium**: 일반적 도메인 관행이나 유사 사례에 기반한 추론. 마이그레이션 원본, 이전 버전, 외부 프로젝트의 패턴은 "유사 사례"에 해당
|
|
19
|
+
- **Low**: 약한 유추나 제한적 근거에 기반한 추론
|
|
20
|
+
- **ASSUMED**: 추측에 해당
|
|
21
|
+
|
|
22
|
+
## Step 2: 근거 탐색 (질문 전 필수)
|
|
23
|
+
|
|
24
|
+
**CRITICAL: Medium/Low/ASSUMED로 분류된 모든 항목은 사용자에게 질문하기 전에 반드시 근거를 탐색한다.**
|
|
25
|
+
|
|
26
|
+
근거는 **현재 컨텍스트 안에 이미 존재할 가능성이 가장 높다**. 질문하기 전에 두 단계로 확인한다.
|
|
27
|
+
|
|
28
|
+
### 2-1. 컨텍스트 회수 (먼저 시도)
|
|
29
|
+
|
|
30
|
+
지금까지 누적된 맥락 전체에서 근거를 찾는다. 새 tool 호출 전에 수행한다.
|
|
31
|
+
|
|
32
|
+
- **사용자 메시지** — 현재/이전 턴의 지시, 인용, 예시, 제약
|
|
33
|
+
- **호출자에게서 받은 인자** — 이 스킬을 부른 상위 스킬(sd-plan/sd-wbs 등)이 전달한 정보
|
|
34
|
+
- **이미 읽은 tool 결과** — 직전 Read/Grep/Glob/WebFetch 출력, 첨부된 문서 내용
|
|
35
|
+
- **세션 내 이미 생성된 산출물** — spec, plan, 직전 단계 보고 등
|
|
36
|
+
|
|
37
|
+
### 2-2. 타겟 탐색 (회수로 부족할 때)
|
|
38
|
+
|
|
39
|
+
컨텍스트에 없으면 탐색한다. 항목의 성격에 맞는 소스를 고른다(순서 고정 아님).
|
|
40
|
+
|
|
41
|
+
- **타겟 코드베이스** — Grep/Read/Glob으로 동일/유사 패턴
|
|
42
|
+
- **참조 문서** — `.claude/references/**`, CLAUDE.md 등 프로젝트 문서
|
|
43
|
+
- **사용자가 제공한 원본 자료** — 첨부 문서·파일·경로를 끝까지 확인 (키워드 검색만으로 종결 금지)
|
|
44
|
+
- **공식 문서** — 외부 라이브러리/프레임워크 (필요 시)
|
|
45
|
+
|
|
46
|
+
### 실패 시그널 (Step 3 진입 전 자가 검증)
|
|
47
|
+
|
|
48
|
+
각 Medium/Low/ASSUMED 항목마다 다음 중 하나를 **한 줄로** 댈 수 있어야 한다.
|
|
49
|
+
|
|
50
|
+
- 찾음: `{파일/문서}:{라인/페이지/섹션}` + 인용·요약
|
|
51
|
+
- 못 찾음: 어디를 봤는지(회수한 맥락 + 탐색한 소스) 명시
|
|
52
|
+
|
|
53
|
+
둘 다 못 대면 탐색이 부족한 것이다. 다시 수행한다. "어차피 모를 것"이라는 판단으로 건너뛰는 것은 **금지(NEVER)**.
|
|
54
|
+
|
|
55
|
+
## Step 3: 재분류
|
|
56
|
+
|
|
57
|
+
탐색 결과를 바탕으로 각 항목을 재분류한다.
|
|
58
|
+
|
|
59
|
+
- 탐색으로 근거 확인됨 → **VERIFIED** 또는 **INFERRED High**로 승격 → 질문 제외
|
|
60
|
+
- 탐색했으나 근거 없음 → 기존 분류 유지 → 질문 대상
|
|
61
|
+
|
|
62
|
+
## Step 4: 재분류 보고 (필수)
|
|
63
|
+
|
|
64
|
+
재분류 결과를 **표 형태로 사용자에게 출력**한다. Step 5 질문 전에 반드시 수행한다.
|
|
65
|
+
|
|
66
|
+
| 항목 | 1차 분류 | 탐색 위치 | 근거(인용/요약) | 재분류 |
|
|
67
|
+
|------|---------|----------|----------------|--------|
|
|
68
|
+
| (정보 항목) | ASSUMED | 원본.docx p.3 / foo.ts:42 | "..." 또는 요약 | VERIFIED |
|
|
69
|
+
|
|
70
|
+
- **탐색 위치**는 파일경로:라인번호, 문서명:페이지/섹션 등 구체적으로 명시한다.
|
|
71
|
+
- **근거 없음**으로 남은 항목은 "탐색했으나 근거 없음"을 명시한다.
|
|
72
|
+
- 보고 직후, 질문 대상이 남아 있으면 Step 5로 진행한다.
|
|
73
|
+
|
|
74
|
+
## Step 5: 명확화 질문
|
|
75
|
+
|
|
76
|
+
재분류 후에도 **INFERRED Medium/Low** 또는 **ASSUMED**로 남은 항목은 **MUST** `.claude/rules/sd-options.md`의 지침에 따라 사용자에게 질문한다.
|
|
77
|
+
|
|
78
|
+
- VERIFIED와 INFERRED High는 명확한 것으로 본다.
|
|
@@ -33,6 +33,19 @@ description: (내부 전용) 코드 리뷰 분석 로직. sd-review, sd-dev 등
|
|
|
33
33
|
|
|
34
34
|
아래 관점별 체크리스트로 이슈를 식별한다.
|
|
35
35
|
|
|
36
|
+
#### 요구사항 대비 (SPEC) — 요구사항 원천이 제공된 경우에만
|
|
37
|
+
|
|
38
|
+
요구사항 원천이 있으면 이를 기준으로 코드와 대조한다. 원천은 형식을 가리지 않는다:
|
|
39
|
+
|
|
40
|
+
검증 항목:
|
|
41
|
+
|
|
42
|
+
- 요구사항 미구현: 원천에 명시된 동작·규칙이 실제 코드에 반영되지 않음
|
|
43
|
+
- 요구사항 위반: 원천의 규칙·결정과 다르게 구현
|
|
44
|
+
- 경계 초과(스코프 크립): 원천에 "제외"/"다루지 않음"으로 명시된 항목이 구현됨
|
|
45
|
+
- 진행 상태 불일치(체크박스·상태표가 있는 경우): 문서상 완료인데 산출물 없음 또는 그 반대
|
|
46
|
+
|
|
47
|
+
근거 태그: `[근거: 사용자 요청 "..."]`, `[근거: 이메일 {제목}]`, `[근거: wbs Feature X.Y 경계]`, `[근거: Feature X.Y Scenario "..."]`, `[근거: 설계 결정 D2]` 등 출처 형식에 맞춰 명시
|
|
48
|
+
|
|
36
49
|
#### 로직 버그 (LOGIC)
|
|
37
50
|
|
|
38
51
|
실행은 되지만 결과가 틀린 이슈:
|
|
@@ -63,7 +63,7 @@ Question 도출 기법 — Feature 성격에 맞게 **하나 이상** 선택하
|
|
|
63
63
|
|
|
64
64
|
### 2-3. 명확화
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
`/sd-inner-clarify` 스킬을 호출하여 범위, Question, 기타 불명확한 부분을 명확화한다.
|
|
67
67
|
답변에 따라 Rule/Example/Question을 갱신하며, 모든 Question이 해소될 때까지 **MUST** 반복한다. (추가 Question 발생 가능)
|
|
68
68
|
- **나쁜 예:** "예약 기능 포함이 결정됨 → 예약 세부규칙(대기열 정책, 미대출 시 자동취소 기간)도 확정" — 기능 포함 여부와 세부 수치/규칙은 별개다. 세부사항은 별도로 분류·질문한다.
|
|
69
69
|
|
|
@@ -85,37 +85,67 @@ Feature: {번호} {이름}
|
|
|
85
85
|
Given / When / Then
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
## Step 4:
|
|
88
|
+
## Step 4: 기준 코드 탐색
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
**CRITICAL: 코드가 source of truth이다.** 구현계획 작성 전에 반드시 이 단계를 완료한다.
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
### 4-1. 유사 기능 탐색
|
|
93
93
|
|
|
94
|
+
코드베이스에서 이 Feature와 **가장 유사한 기존 기능**을 찾는다. 유사 기능이란 동일한 도메인, 비슷한 CRUD 패턴, 유사한 UI 흐름 등을 공유하는 기능이다.
|
|
95
|
+
|
|
96
|
+
탐색 대상:
|
|
94
97
|
- 관련 엔티티/모델 구조
|
|
95
98
|
- 기존 API 엔드포인트 및 패턴
|
|
96
|
-
-
|
|
99
|
+
- UI 컴포넌트 구조, **레이아웃·생김새 (HTML 골격, CSS 클래스 네이밍, 컨트롤 배치, 스타일 토큰)**, 라우팅
|
|
97
100
|
- 기존 시스템 연동 방식
|
|
98
|
-
- 성능/보안 제약
|
|
99
101
|
- 관련 테스트 구조
|
|
100
102
|
- 관련 의존성과 설정
|
|
101
103
|
|
|
104
|
+
### 4-2. 패턴 문서화
|
|
105
|
+
|
|
106
|
+
탐색 결과를 **기준 코드** 섹션으로 정리한다. **CRITICAL: 모든 항목에 `파일경로:라인번호`를 인용한다.** 인용 없는 항목은 작성하지 않는다.
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
### 기준 코드
|
|
110
|
+
(이 Feature 구현 시 따라야 할 기존 코드 패턴)
|
|
111
|
+
|
|
112
|
+
#### 유사 기능: {기능명}
|
|
113
|
+
- 엔티티: `src/models/xxx.ts:15` — {구조 요약}
|
|
114
|
+
- API: `src/services/xxx-service.ts:42` — {패턴 요약}
|
|
115
|
+
- UI: `src/views/xxx.component.ts:10` — {구조 요약}
|
|
116
|
+
- 테스트: `tests/xxx.spec.ts:5` — {패턴 요약}
|
|
117
|
+
|
|
118
|
+
#### 프로젝트 컨벤션
|
|
119
|
+
- 네이밍 (파일·클래스·함수·변수): {관찰된 패턴} [근거: `파일경로:라인번호`]
|
|
120
|
+
- 디렉토리 구조 / 파일 배치: {관찰된 패턴} [근거: `파일경로:라인번호`]
|
|
121
|
+
- 에러 처리: {관찰된 패턴} [근거: `파일경로:라인번호`]
|
|
122
|
+
- 검증: {관찰된 패턴} [근거: `파일경로:라인번호`]
|
|
123
|
+
- 의존성 주입·import 패턴: {관찰된 패턴} [근거: `파일경로:라인번호`]
|
|
124
|
+
- 테스트 구조·헬퍼 사용: {관찰된 패턴} [근거: `파일경로:라인번호`]
|
|
125
|
+
- UI 구조·레이아웃·컴포넌트 생김새 (HTML 골격, CSS 클래스 네이밍, 컨트롤 배치, 스타일 토큰): {관찰된 패턴} [근거: `파일경로:라인번호`]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
유사 기능을 찾을 수 없으면, 그 사실을 명시하고 프로젝트의 일반적 컨벤션(네이밍, 디렉토리 구조 등)만 기록한다.
|
|
129
|
+
|
|
130
|
+
## Step 5: 구현계획
|
|
131
|
+
|
|
102
132
|
### Tech Design Doc
|
|
103
133
|
|
|
104
|
-
|
|
134
|
+
**CRITICAL: 기준 코드(Step 4)의 패턴을 따른다.** 기준 코드와 다른 패턴을 사용하려면 반드시 대안 검토에서 기존 패턴과 비교하고 사용자 확인을 받는다.
|
|
105
135
|
|
|
106
|
-
각 항목에 `[근거: ...]` 태그로 출처를 명시한다.
|
|
136
|
+
각 항목에 `[근거: ...]` 태그로 출처를 명시한다. 코드 인용 시 `파일경로:라인번호`를 포함한다.
|
|
107
137
|
|
|
108
138
|
```markdown
|
|
109
139
|
### 배경
|
|
110
|
-
(이 Feature를 구현하는 기술적 맥락.
|
|
140
|
+
(이 Feature를 구현하는 기술적 맥락. 기준 코드의 관련 구조 인용)
|
|
111
141
|
### 목표
|
|
112
142
|
- 기술적 목표 [근거: Rule "..."]
|
|
113
143
|
### 비목표
|
|
114
144
|
- 의도적 제외 항목 [근거: wbs 경계 "..."]
|
|
115
145
|
### 설계
|
|
116
|
-
- API, 엔티티, 검증 규칙, UI 구조 등 [근거: Rule "..." 처리를
|
|
146
|
+
- API, 엔티티, 검증 규칙, UI 구조 등 [근거: Rule "..." 처리를 위해, 기준 코드 `파일경로:라인번호` 패턴 준수]
|
|
117
147
|
### 대안 검토
|
|
118
|
-
(고려했으나 선택하지 않은 접근 방식과 그
|
|
148
|
+
(고려했으나 선택하지 않은 접근 방식과 그 이유. 기존 패턴과 다른 방식을 제안할 경우 필수)
|
|
119
149
|
```
|
|
120
150
|
|
|
121
151
|
### Vertical Slicing
|
|
@@ -126,17 +156,17 @@ Gherkin Scenarios를 구현 단위(Slice)로 분할한다.
|
|
|
126
156
|
- Slice 간 의존 관계로 순서 결정
|
|
127
157
|
|
|
128
158
|
```markdown
|
|
129
|
-
#### Slice 1: (제목)
|
|
159
|
+
#### [ ] Slice 1: (제목)
|
|
130
160
|
- **구현 내용:** (요약)
|
|
131
161
|
- **Scenarios:** ...
|
|
132
162
|
|
|
133
|
-
#### Slice 2: (제목)
|
|
163
|
+
#### [ ] Slice 2: (제목)
|
|
134
164
|
- **의존:** Slice 1
|
|
135
165
|
- **구현 내용:** (요약)
|
|
136
166
|
- **Scenarios:** ...
|
|
137
167
|
```
|
|
138
168
|
|
|
139
|
-
## Step
|
|
169
|
+
## Step 6: Feature 문서 생성
|
|
140
170
|
|
|
141
171
|
- **위치:** wbs 문서가 있는 디렉토리
|
|
142
172
|
- **파일명:** `{Feature번호}-{Feature이름 영문번역}.md` (kebab-case, 특수문자 제거)
|
|
@@ -148,6 +178,9 @@ Gherkin Scenarios를 구현 단위(Slice)로 분할한다.
|
|
|
148
178
|
- WBS: [{wbs 파일명}]({wbs 문서 상대경로})
|
|
149
179
|
{수집한 구체적 정보}
|
|
150
180
|
|
|
181
|
+
## 기준 코드
|
|
182
|
+
{Step 4에서 작성한 기준 코드 섹션}
|
|
183
|
+
|
|
151
184
|
### 설계 결정
|
|
152
185
|
| # | 결정사항 | 선택 | 근거 |
|
|
153
186
|
|
|
@@ -158,7 +191,7 @@ Gherkin Scenarios를 구현 단위(Slice)로 분할한다.
|
|
|
158
191
|
{Tech Design + Slicing}
|
|
159
192
|
```
|
|
160
193
|
|
|
161
|
-
## Step
|
|
194
|
+
## Step 7: 정보 유실 방지 검증
|
|
162
195
|
|
|
163
196
|
문서 작성 후, 대화에서 수집한 모든 구체적 정보가 문서에 기록되었는지 검증한다.
|
|
164
197
|
|
|
@@ -166,14 +199,14 @@ Gherkin Scenarios를 구현 단위(Slice)로 분할한다.
|
|
|
166
199
|
- 언급된 참조 파일/문서 경로가 확인 목적과 함께 기록되었는가?
|
|
167
200
|
- 누락 발견 시 문서에 반영한 뒤 저장한다.
|
|
168
201
|
|
|
169
|
-
## Step
|
|
202
|
+
## Step 8: 역방향 피드백
|
|
170
203
|
|
|
171
204
|
wbs 문서에 변경/발견 사항을 반드시 반영한다. 누락/불일치 수정을 생략하지 않는다.
|
|
172
205
|
- 범위 축소/확대, 경계 재조정, 설계 결정 요약, Feature 간 범위 이관 등
|
|
173
206
|
문서 간 정합성을 유지하고 변경 사유를 명확히 작성한다.
|
|
174
207
|
역방향 피드백의 목적은, 새로운 세션에서 다른 작업을 수행할때 이 세션의 결정사항을 잊지 않고 이어서 하기 위함이다.
|
|
175
208
|
|
|
176
|
-
## Step
|
|
209
|
+
## Step 9: 다음 단계 안내
|
|
177
210
|
|
|
178
211
|
Feature 설계 완료 후, 개발을 위한 다음 단계를 안내한다.
|
|
179
212
|
|