@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.
Files changed (130) hide show
  1. package/{claude/references/sd-simplysm14/sd-claude/usage.md → README.md} +2 -2
  2. package/claude/rules/sd-claude-rules.md +25 -10
  3. package/claude/rules/sd-options.md +11 -6
  4. package/claude/sd-subagent-start.sh +6 -0
  5. package/claude/settings.json +1 -12
  6. package/claude/skills/sd-check/SKILL.md +18 -9
  7. package/claude/skills/sd-claude-docs/SKILL.md +30 -58
  8. package/claude/skills/sd-claude-docs/references/package-claudemd.md +12 -0
  9. package/claude/skills/sd-claude-docs/references/package-doc-gen.md +22 -12
  10. package/claude/skills/sd-commit/SKILL.md +1 -1
  11. package/claude/skills/sd-debug/SKILL.md +5 -3
  12. package/claude/skills/sd-deliverable/SKILL.md +1 -1
  13. package/claude/skills/sd-dev/SKILL.md +14 -9
  14. package/claude/skills/sd-doc-extract/SKILL.md +8 -10
  15. package/claude/skills/sd-doc-extract/_common.py +8 -1
  16. package/claude/skills/sd-doc-extract/_extract_docx.py +74 -34
  17. package/claude/skills/sd-doc-extract/_extract_pdf.py +12 -1
  18. package/claude/skills/sd-doc-extract/_extract_pptx.py +103 -23
  19. package/claude/skills/sd-doc-extract/_extract_xlsb.py +93 -4
  20. package/claude/skills/sd-doc-extract/_extract_xlsx.py +98 -36
  21. package/claude/skills/sd-doc-extract/extract.py +22 -3
  22. package/claude/skills/sd-inner-clarify/SKILL.md +78 -0
  23. package/claude/skills/sd-inner-debug/SKILL.md +1 -1
  24. package/claude/skills/sd-inner-review/SKILL.md +13 -0
  25. package/claude/skills/sd-issue/SKILL.md +1 -1
  26. package/claude/skills/sd-outlook/SKILL.md +1 -1
  27. package/claude/skills/sd-plan/SKILL.md +50 -17
  28. package/claude/skills/sd-prompt/SKILL.md +180 -178
  29. package/claude/skills/sd-prompt/references/eval-runner.md +5 -30
  30. package/claude/skills/sd-prompt/references/sd-eval-env-template.md +23 -0
  31. package/claude/skills/sd-refactor/SKILL.md +2 -2
  32. package/claude/skills/sd-tdd/SKILL.md +40 -10
  33. package/claude/skills/sd-use/SKILL.md +84 -80
  34. package/claude/skills/sd-wbs/SKILL.md +84 -27
  35. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/assets.md +2 -3
  36. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/hooks.md +7 -6
  37. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/scripts.md +1 -9
  38. package/package.json +3 -2
  39. package/scripts/sync.mjs +4 -2
  40. package/claude/references/sd-simplysm14/angular/docs/bootstrap.md +0 -48
  41. package/claude/references/sd-simplysm14/angular/docs/directives.md +0 -236
  42. package/claude/references/sd-simplysm14/angular/docs/features.md +0 -379
  43. package/claude/references/sd-simplysm14/angular/docs/pipes.md +0 -32
  44. package/claude/references/sd-simplysm14/angular/docs/plugins.md +0 -37
  45. package/claude/references/sd-simplysm14/angular/docs/provider-types.md +0 -283
  46. package/claude/references/sd-simplysm14/angular/docs/providers.md +0 -379
  47. package/claude/references/sd-simplysm14/angular/docs/styling.md +0 -222
  48. package/claude/references/sd-simplysm14/angular/docs/type-utilities.md +0 -250
  49. package/claude/references/sd-simplysm14/angular/docs/ui-data.md +0 -275
  50. package/claude/references/sd-simplysm14/angular/docs/ui-form.md +0 -490
  51. package/claude/references/sd-simplysm14/angular/docs/ui-layout.md +0 -140
  52. package/claude/references/sd-simplysm14/angular/docs/ui-navigation.md +0 -273
  53. package/claude/references/sd-simplysm14/angular/docs/ui-overlay.md +0 -157
  54. package/claude/references/sd-simplysm14/angular/docs/ui-visual.md +0 -127
  55. package/claude/references/sd-simplysm14/angular/docs/utils.md +0 -295
  56. package/claude/references/sd-simplysm14/angular/usage.md +0 -489
  57. package/claude/references/sd-simplysm14/capacitor-plugin-auto-update/usage.md +0 -182
  58. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/file-operations.md +0 -154
  59. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/permissions.md +0 -84
  60. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/storage-paths.md +0 -107
  61. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/types.md +0 -83
  62. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/usage.md +0 -133
  63. package/claude/references/sd-simplysm14/capacitor-plugin-intent/usage.md +0 -203
  64. package/claude/references/sd-simplysm14/capacitor-plugin-usb-storage/usage.md +0 -258
  65. package/claude/references/sd-simplysm14/core-browser/usage.md +0 -306
  66. package/claude/references/sd-simplysm14/core-common/docs/errors.md +0 -82
  67. package/claude/references/sd-simplysm14/core-common/docs/extensions.md +0 -167
  68. package/claude/references/sd-simplysm14/core-common/docs/features.md +0 -136
  69. package/claude/references/sd-simplysm14/core-common/docs/types.md +0 -245
  70. package/claude/references/sd-simplysm14/core-common/docs/utils.md +0 -591
  71. package/claude/references/sd-simplysm14/core-common/usage.md +0 -255
  72. package/claude/references/sd-simplysm14/core-node/docs/child-process.md +0 -182
  73. package/claude/references/sd-simplysm14/core-node/docs/features.md +0 -214
  74. package/claude/references/sd-simplysm14/core-node/docs/file-system.md +0 -509
  75. package/claude/references/sd-simplysm14/core-node/docs/file-watching.md +0 -139
  76. package/claude/references/sd-simplysm14/core-node/docs/logging.md +0 -180
  77. package/claude/references/sd-simplysm14/core-node/docs/path.md +0 -176
  78. package/claude/references/sd-simplysm14/core-node/docs/utilities-cpx.md +0 -194
  79. package/claude/references/sd-simplysm14/core-node/docs/utilities-fsx.md +0 -469
  80. package/claude/references/sd-simplysm14/core-node/docs/utilities-pathx.md +0 -151
  81. package/claude/references/sd-simplysm14/core-node/docs/worker-threads.md +0 -334
  82. package/claude/references/sd-simplysm14/core-node/docs/worker.md +0 -205
  83. package/claude/references/sd-simplysm14/core-node/usage.md +0 -259
  84. package/claude/references/sd-simplysm14/excel/docs/core-classes.md +0 -453
  85. package/claude/references/sd-simplysm14/excel/docs/types.md +0 -459
  86. package/claude/references/sd-simplysm14/excel/docs/utilities.md +0 -194
  87. package/claude/references/sd-simplysm14/excel/docs/wrapper.md +0 -73
  88. package/claude/references/sd-simplysm14/excel/usage.md +0 -134
  89. package/claude/references/sd-simplysm14/lint/usage.md +0 -130
  90. package/claude/references/sd-simplysm14/orm-common/docs/core.md +0 -188
  91. package/claude/references/sd-simplysm14/orm-common/docs/expression.md +0 -190
  92. package/claude/references/sd-simplysm14/orm-common/docs/models.md +0 -17
  93. package/claude/references/sd-simplysm14/orm-common/docs/query-builder.md +0 -97
  94. package/claude/references/sd-simplysm14/orm-common/docs/queryable-executable.md +0 -250
  95. package/claude/references/sd-simplysm14/orm-common/docs/schema-builders.md +0 -364
  96. package/claude/references/sd-simplysm14/orm-common/docs/types.md +0 -522
  97. package/claude/references/sd-simplysm14/orm-common/usage.md +0 -229
  98. package/claude/references/sd-simplysm14/orm-node/docs/connections.md +0 -137
  99. package/claude/references/sd-simplysm14/orm-node/docs/core.md +0 -131
  100. package/claude/references/sd-simplysm14/orm-node/docs/types.md +0 -173
  101. package/claude/references/sd-simplysm14/orm-node/usage.md +0 -143
  102. package/claude/references/sd-simplysm14/sd-cli/usage.md +0 -782
  103. package/claude/references/sd-simplysm14/service-client/docs/features.md +0 -217
  104. package/claude/references/sd-simplysm14/service-client/docs/main.md +0 -148
  105. package/claude/references/sd-simplysm14/service-client/docs/protocol.md +0 -53
  106. package/claude/references/sd-simplysm14/service-client/docs/transport.md +0 -131
  107. package/claude/references/sd-simplysm14/service-client/docs/types.md +0 -129
  108. package/claude/references/sd-simplysm14/service-client/usage.md +0 -202
  109. package/claude/references/sd-simplysm14/service-common/docs/app-structure.md +0 -175
  110. package/claude/references/sd-simplysm14/service-common/docs/events.md +0 -64
  111. package/claude/references/sd-simplysm14/service-common/docs/protocol.md +0 -331
  112. package/claude/references/sd-simplysm14/service-common/docs/service-types.md +0 -90
  113. package/claude/references/sd-simplysm14/service-common/docs/types.md +0 -19
  114. package/claude/references/sd-simplysm14/service-common/usage.md +0 -154
  115. package/claude/references/sd-simplysm14/service-server/docs/auth.md +0 -64
  116. package/claude/references/sd-simplysm14/service-server/docs/core.md +0 -174
  117. package/claude/references/sd-simplysm14/service-server/docs/legacy.md +0 -25
  118. package/claude/references/sd-simplysm14/service-server/docs/main.md +0 -88
  119. package/claude/references/sd-simplysm14/service-server/docs/protocol.md +0 -33
  120. package/claude/references/sd-simplysm14/service-server/docs/services.md +0 -94
  121. package/claude/references/sd-simplysm14/service-server/docs/transport-http.md +0 -93
  122. package/claude/references/sd-simplysm14/service-server/docs/transport-socket.md +0 -119
  123. package/claude/references/sd-simplysm14/service-server/docs/types.md +0 -36
  124. package/claude/references/sd-simplysm14/service-server/docs/utils.md +0 -22
  125. package/claude/references/sd-simplysm14/service-server/usage.md +0 -171
  126. package/claude/references/sd-simplysm14/storage/usage.md +0 -301
  127. package/claude/references/sd-simplysm14.md +0 -35
  128. package/claude/rules/sd-clarify.md +0 -23
  129. package/claude/sd-session-start.sh +0 -10
  130. /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
- return f"![{img['filename']}]({rel_prefix}/{img['filename']})"
131
+ alt = img.get('context', '') or img['filename']
132
+ return f"![{alt}]({rel_prefix}/{img['filename']})"
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"![{fname}]({rel_prefix}/{fname})"
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는 명확한 것으로 본다.
@@ -62,7 +62,7 @@ description: (내부 전용) 근본 원인 분석(ACH) 로직. sd-debug, sd-chec
62
62
  - **위치** — 에러 발생 파일:라인 또는 관련 기능/화면
63
63
  - **재현 절차** — 문제가 발생하는 구체적 조작 순서
64
64
 
65
- @.claude/rules/sd-clarify.md 지침에 따라 명확화한다.
65
+ `/sd-inner-clarify` 스킬을 호출하여 명확화한다.
66
66
 
67
67
  ## Step 2: 근본 원인 추적 (ACH)
68
68
 
@@ -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
  실행은 되지만 결과가 틀린 이슈:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: sd-issue
3
3
  description: simplysm 라이브러리에 대한 GitHub 이슈를 생성하는 스킬. "이슈 생성", "이슈 등록", "버그 리포트" 등을 요청할 때 사용한다.
4
- model: claude-haiku-4-5
4
+ model: haiku
5
5
  ---
6
6
 
7
7
  # sd-issue: simplysm 이슈 생성
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: sd-outlook
3
3
  description: Microsoft Graph API를 통해 Outlook 메일을 검색·다운로드하는 스킬. "메일 조회", "메일 검색", "특정 업체 메일 수집", "outlook" 등을 요청할 때 사용한다.
4
- model: claude-haiku-4-5
4
+ model: haiku
5
5
  ---
6
6
 
7
7
  # sd-outlook: Outlook 메일 검색/다운로드
@@ -63,7 +63,7 @@ Question 도출 기법 — Feature 성격에 맞게 **하나 이상** 선택하
63
63
 
64
64
  ### 2-3. 명확화
65
65
 
66
- @.claude/rules/sd-clarify.md 지침에 따라 범위, Question, 기타 불명확한 부분을 명확화한다.
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
- **CRITICAL: 코드가 source of truth이다.** 문서가 아닌 실제 코드를 기준으로 파악한다.
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 5: Feature 문서 생성
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 6: 정보 유실 방지 검증
194
+ ## Step 7: 정보 유실 방지 검증
162
195
 
163
196
  문서 작성 후, 대화에서 수집한 모든 구체적 정보가 문서에 기록되었는지 검증한다.
164
197
 
@@ -166,14 +199,14 @@ Gherkin Scenarios를 구현 단위(Slice)로 분할한다.
166
199
  - 언급된 참조 파일/문서 경로가 확인 목적과 함께 기록되었는가?
167
200
  - 누락 발견 시 문서에 반영한 뒤 저장한다.
168
201
 
169
- ## Step 7: 역방향 피드백
202
+ ## Step 8: 역방향 피드백
170
203
 
171
204
  wbs 문서에 변경/발견 사항을 반드시 반영한다. 누락/불일치 수정을 생략하지 않는다.
172
205
  - 범위 축소/확대, 경계 재조정, 설계 결정 요약, Feature 간 범위 이관 등
173
206
  문서 간 정합성을 유지하고 변경 사유를 명확히 작성한다.
174
207
  역방향 피드백의 목적은, 새로운 세션에서 다른 작업을 수행할때 이 세션의 결정사항을 잊지 않고 이어서 하기 위함이다.
175
208
 
176
- ## Step 8: 다음 단계 안내
209
+ ## Step 9: 다음 단계 안내
177
210
 
178
211
  Feature 설계 완료 후, 개발을 위한 다음 단계를 안내한다.
179
212