jdd-sprint-kit 0.3.1

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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +253 -0
  3. package/bin/cli.js +48 -0
  4. package/compat/baseline.json +6 -0
  5. package/package.json +40 -0
  6. package/src/commands/compat-check.js +178 -0
  7. package/src/commands/init.js +267 -0
  8. package/src/commands/update.js +132 -0
  9. package/src/lib/adapters/codex.js +68 -0
  10. package/src/lib/copy.js +131 -0
  11. package/src/lib/detect.js +81 -0
  12. package/src/lib/fingerprint.js +152 -0
  13. package/src/lib/manifest.js +51 -0
  14. package/src/lib/merge.js +109 -0
  15. package/src/lib/prompts.js +196 -0
  16. package/templates/.claude/agents/auto-sprint.md +882 -0
  17. package/templates/.claude/agents/brownfield-scanner.md +259 -0
  18. package/templates/.claude/agents/deliverable-generator.md +429 -0
  19. package/templates/.claude/agents/judge-business.md +91 -0
  20. package/templates/.claude/agents/judge-quality.md +82 -0
  21. package/templates/.claude/agents/judge-security.md +80 -0
  22. package/templates/.claude/agents/scope-gate.md +219 -0
  23. package/templates/.claude/agents/worker.md +82 -0
  24. package/templates/.claude/commands/circuit-breaker.md +106 -0
  25. package/templates/.claude/commands/parallel.md +110 -0
  26. package/templates/.claude/commands/preview.md +85 -0
  27. package/templates/.claude/commands/specs.md +206 -0
  28. package/templates/.claude/commands/sprint.md +552 -0
  29. package/templates/.claude/commands/summarize-prd.md +290 -0
  30. package/templates/.claude/commands/validate.md +143 -0
  31. package/templates/.claude/hooks/desktop-notify.sh +9 -0
  32. package/templates/.claude/hooks/protect-readonly-paths.sh +42 -0
  33. package/templates/.claude/hooks/sprint-pre-compact.sh +42 -0
  34. package/templates/.claude/hooks/sprint-session-recovery.sh +33 -0
  35. package/templates/.claude/rules/bmad-mcp-search.md +97 -0
  36. package/templates/.claude/rules/bmad-sprint-guide.md +176 -0
  37. package/templates/.claude/rules/bmad-sprint-protocol.md +178 -0
  38. package/templates/.claude/settings.json +50 -0
  39. package/templates/.mcp.json.example +16 -0
  40. package/templates/_bmad/docs/architecture-to-epics-checklist.md +59 -0
  41. package/templates/_bmad/docs/blueprint-format-guide.md +387 -0
  42. package/templates/_bmad/docs/brownfield-context-format.md +167 -0
  43. package/templates/_bmad/docs/prd-format-guide.md +538 -0
  44. package/templates/_bmad/docs/sprint-input-format.md +496 -0
  45. package/templates/preview-template/.redocly.yaml +10 -0
  46. package/templates/preview-template/api/.gitkeep +0 -0
  47. package/templates/preview-template/index.html +12 -0
  48. package/templates/preview-template/package-lock.json +5547 -0
  49. package/templates/preview-template/package.json +33 -0
  50. package/templates/preview-template/public/mockServiceWorker.js +307 -0
  51. package/templates/preview-template/src/App.tsx +9 -0
  52. package/templates/preview-template/src/api/client.ts +32 -0
  53. package/templates/preview-template/src/components/.gitkeep +0 -0
  54. package/templates/preview-template/src/components/DevPanel.tsx +76 -0
  55. package/templates/preview-template/src/main.tsx +26 -0
  56. package/templates/preview-template/src/mocks/browser.ts +4 -0
  57. package/templates/preview-template/src/mocks/handlers.ts +3 -0
  58. package/templates/preview-template/src/pages/.gitkeep +0 -0
  59. package/templates/preview-template/src/vite-env.d.ts +1 -0
  60. package/templates/preview-template/tsconfig.json +21 -0
  61. package/templates/preview-template/vite.config.ts +6 -0
@@ -0,0 +1,387 @@
1
+ # Blueprint Writing Guidelines
2
+
3
+ Format definition for a document that conveys a product's **"why" and "how it works"** to the target audience in a self-contained manner.
4
+
5
+ > **Reference documents:**
6
+ > - PRD format guide: `_bmad/docs/prd-format-guide.md`
7
+ > - Sprint Kit Blueprint (instance): `docs/blueprint.md`
8
+ > - JDD philosophy: `docs/judgment-driven-development.md`
9
+
10
+ ---
11
+
12
+ ## 1. Self-Containment Principle
13
+
14
+ If the Blueprint's target audience **does not read code**, operational details must be included in the Blueprint.
15
+
16
+ - "See code for details" or "See agent file" is allowed only when the target audience can read code
17
+ - The Blueprint is the **only comprehensive document** for the target audience
18
+ - Even if tool, agent, or workflow descriptions "overlap" with agent definition files, they must be included since this is the **only accessible form** for the target audience
19
+
20
+ **Verification criterion**: Can the target audience recreate this product/service with AI using only this document?
21
+
22
+ ---
23
+
24
+ ## 2. YAML Frontmatter
25
+
26
+ Every Blueprint starts with a YAML frontmatter.
27
+
28
+ ```yaml
29
+ ---
30
+ synced_to: "{commit-hash}" # Last commit where non-Blueprint source file changes were reflected
31
+ audience: "{target audience}" # e.g., "non-developer product expert", "entire team", "external investors"
32
+ product: "{product name}"
33
+ version: "{document version}"
34
+ ---
35
+ ```
36
+
37
+ ### Required Fields
38
+
39
+ | Field | Purpose |
40
+ |-------|---------|
41
+ | `audience` | Target audience definition. Determines self-containment level and terminology depth |
42
+ | `product` | Product/service name covered by the Blueprint |
43
+
44
+ ### Optional Fields
45
+
46
+ | Field | Purpose |
47
+ |-------|---------|
48
+ | `synced_to` | Source file sync tracking (last reflected commit of non-Blueprint files) |
49
+ | `version` | Document version |
50
+
51
+ ---
52
+
53
+ ## 3. Vision Statement
54
+
55
+ Place a **vision statement** in a blockquote immediately below the frontmatter.
56
+
57
+ - Describe what the product aspires to be in 3-5 sentences
58
+ - Target audience must grasp "what this product is" from the first paragraph
59
+ - **Core principle**: State the product's core principle as one sentence at the end of the vision statement
60
+
61
+ ```markdown
62
+ > {product} aspires to be a {tool/service/platform} that enables {who} to {what}.
63
+ > ...
64
+ >
65
+ > Core principle: **{one-sentence core principle}**
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 4. 8-Section Structure
71
+
72
+ ### Overview
73
+
74
+ | # | Section | One-Line Purpose |
75
+ |---|---------|-----------------|
76
+ | 1 | **Problem** | Why this product exists |
77
+ | 2 | **Thesis** | Core principle + design judgments + preconditions |
78
+ | 3 | **User Model** | Who uses it and what role they play |
79
+ | 4 | **Value Chain** | System components + pipeline + routes + cost |
80
+ | 5 | **Judgment & Feedback** | How judgments are made + feedback mechanisms |
81
+ | 6 | **Constraints & Trade-offs** | What it doesn't do + conscious trade-offs |
82
+ | 7 | **Risk Model** | Assumptions + what breaks + detection signals |
83
+ | 8 | **Current State** | Current status + unvalidated hypotheses + known gaps |
84
+
85
+ ### Appendix (optional)
86
+
87
+ | Appendix | Purpose |
88
+ |----------|---------|
89
+ | A. Setup & Operations | Setup, configuration, operations guide |
90
+ | B. File Structure | Directory tree + per-file roles |
91
+ | C. Glossary | Product-specific term definitions |
92
+
93
+ ---
94
+
95
+ ## 5. Per-Section Writing Rules
96
+
97
+ ### S1 Problem
98
+
99
+ **Purpose**: Define the problem this product solves.
100
+
101
+ **Required elements**:
102
+ - Current state of the problem (who struggles in what situation)
103
+ - Why existing solutions are insufficient
104
+ - Why this problem matters
105
+
106
+ **Quality criteria**:
107
+ - Non-experts should understand the severity of the problem
108
+ - Describe the problem only, without mentioning the solution
109
+
110
+ **Anti-patterns**:
111
+ - No: Describe the solution first and reverse-engineer the problem
112
+ - No: Use only industry jargon, making it incomprehensible to the target audience
113
+
114
+ ---
115
+
116
+ ### S2 Thesis
117
+
118
+ **Purpose**: State the core principle and design judgments for the problem.
119
+
120
+ **Required structure**:
121
+
122
+ ```
123
+ 2. Thesis
124
+ 2.1 Core Principle — one sentence. Same as "core principle" in the vision statement
125
+ 2.2 Design Judgments — specific judgments to realize the core principle
126
+ 2.3 Preconditions — what must be true for the core principle to hold
127
+ 2.4 When the Principle Fails — scenarios where the core principle breaks down
128
+ ```
129
+
130
+ **S2.1 Core Principle**:
131
+ - One sentence
132
+ - Restatement of the principle already declared in the vision statement
133
+
134
+ **S2.2 Design Judgments**:
135
+ - Number and format are flexible (3-10 recommended)
136
+ - Each judgment follows this structure:
137
+ - **Name** (English, short declarative statement)
138
+ - **One-line summary** (blockquote)
139
+ - **Explanation**: Why this judgment + examples
140
+ - **Product implementation**: How this judgment manifests in the product
141
+
142
+ **S2.3 Preconditions**:
143
+ - Things that must be true for the core principle to hold
144
+ - e.g., "AI generation quality must be at a reviewable level"
145
+
146
+ **S2.4 When the Principle Fails**:
147
+ - Scenarios where the core principle fails
148
+ - What happens when it fails
149
+
150
+ **Quality criteria**:
151
+ - Each design judgment in S2.2 must be referenced as rationale in S4 (Value Chain), S5 (Judgment), S6 (Constraints)
152
+ - The causal chain "principle → judgment → implementation" must be clear
153
+
154
+ **Anti-patterns**:
155
+ - No: Number design judgments as "Principle 1, Principle 2" (judgments are not principles)
156
+ - No: List declarations without rationale
157
+ - No: Omit preconditions and failure scenarios
158
+
159
+ ---
160
+
161
+ ### S3 User Model
162
+
163
+ **Purpose**: Who uses this product and what role they play.
164
+
165
+ **Required elements**:
166
+ - Target user definition (affirmative: what expertise they have)
167
+ - What users do (specific role/behavior list)
168
+ - What the system does (what users don't do)
169
+
170
+ **Quality criteria**:
171
+ - Define users by expertise, not by negation ("not a ~")
172
+ - Clear boundary between user role and system role
173
+
174
+ **Anti-patterns**:
175
+ - No: Define by negation ("non-developer", "non-expert")
176
+ - No: Ambiguous boundary between user and system roles
177
+
178
+ ---
179
+
180
+ ### S4 Value Chain
181
+
182
+ **Purpose**: How the product delivers value. Explain system components, process, routes, and cost.
183
+
184
+ **Required structure**:
185
+
186
+ ```
187
+ 4. Value Chain
188
+ 4.1 System Components — tools, agents, external integrations, etc.
189
+ 4.2 Pipeline — full workflow details
190
+ 4.3 Route Selection — variations by input state/user type
191
+ 4.4 Cost Structure — cost formula or ROI analysis
192
+ ```
193
+
194
+ **S4.1 System Components**:
195
+ - Tools/services/agents/external integrations table
196
+ - One-line role description for each component
197
+
198
+ **S4.2 Pipeline**:
199
+ - **Follow-Along pattern recommended**: Describe "what the user sees (external)" and "system behavior (internal)" in parallel at each step
200
+ - Each step includes:
201
+ - User perspective: what the user does / receives
202
+ - System internals: input → processing → output
203
+ - Artifacts: generated outputs
204
+ - On failure: error situations and responses
205
+ - **Rationale design judgment**: why this step exists (references S2.2)
206
+ - Depth appropriate to target audience
207
+ - Delivery app: summary level like "order → matching → delivery → rating"
208
+ - Dev tool: detailed per-phase walkthrough
209
+
210
+ **S4.3 Route Selection**:
211
+ - Branching by input state/user type
212
+ - Specify convergence points for all routes
213
+ - Whether cross-route transitions (crossover) are possible
214
+
215
+ **S4.4 Cost Structure**:
216
+ - Cost formula or ROI comparison
217
+ - Time/cost comparison with real-world workflow (if applicable)
218
+
219
+ **Quality criteria**:
220
+ - Each step in S4.2 must cite a rationale design judgment
221
+ - Target audience must be able to follow the entire process end-to-end
222
+
223
+ **Anti-patterns**:
224
+ - No: List components without explaining the flow
225
+ - No: Omit failure paths in the pipeline
226
+ - No: "See code for details" (violates self-containment principle)
227
+
228
+ ---
229
+
230
+ ### S5 Judgment & Feedback
231
+
232
+ **Purpose**: How users judge and how feedback is incorporated.
233
+
234
+ **Required elements**:
235
+ - Judgment model (JPs, star ratings, quizzes, reviews, etc. — whatever fits the product)
236
+ - Details at each judgment point (what they see, what they judge, how they respond)
237
+ - Feedback incorporation mechanism (how feedback flows back into the system)
238
+ - Reverse loop (when later stages discover errors in earlier stages)
239
+
240
+ **Quality criteria**:
241
+ - Judgment points are implementations of S2.2 design judgments (cite explicitly)
242
+ - Feedback incorporation paths are specific (what scope is modified/regenerated)
243
+
244
+ **Anti-patterns**:
245
+ - No: "We incorporate user feedback" level of abstract description
246
+ - No: Omit feedback cost/scope
247
+
248
+ ---
249
+
250
+ ### S6 Constraints & Trade-offs
251
+
252
+ **Purpose**: What this product consciously does not do and its trade-offs.
253
+
254
+ **Required elements**:
255
+ - Boundaries: what this product does not do
256
+ - Trade-offs: consciously chosen directions and their costs
257
+ - Left open: what has not been decided yet and why
258
+
259
+ **Quality criteria**:
260
+ - Each trade-off connects to an S2.2 design judgment
261
+ - "What it doesn't do" must be clear enough to prevent scope confusion
262
+
263
+ **Anti-patterns**:
264
+ - No: No constraints, "can do everything"
265
+ - No: Hide the cost of trade-offs
266
+
267
+ ---
268
+
269
+ ### S7 Risk Model
270
+
271
+ **Purpose**: Define core assumptions, what happens if they break, and detection signals.
272
+
273
+ **Required structure**:
274
+
275
+ | Assumption | If Broken | Detection Signal |
276
+ |-----------|-----------|-----------------|
277
+ | {what must be true} | {impact when broken} | {how to detect it} |
278
+
279
+ **Quality criteria**:
280
+ - Connect to S2.3 preconditions
281
+ - Detection signals must be specific and measurable
282
+
283
+ **Anti-patterns**:
284
+ - No: List risks without detection methods
285
+ - No: "No risks"
286
+
287
+ ---
288
+
289
+ ### S8 Current State
290
+
291
+ **Purpose**: Honestly describe the product's current state.
292
+
293
+ **Required elements**:
294
+ - Current version/state
295
+ - Unvalidated hypotheses (not yet validated through real usage)
296
+ - Known gaps (differences between design and implementation)
297
+
298
+ **Quality criteria**:
299
+ - Consistent with CHANGELOG or release notes
300
+ - Unvalidated hypotheses connect to S7 assumptions
301
+
302
+ **Anti-patterns**:
303
+ - No: Hide incomplete state and describe as "complete product"
304
+ - No: Describe unimplemented features as if implemented
305
+
306
+ ---
307
+
308
+ ## 6. Appendix Guide
309
+
310
+ Appendices hold reference information without disrupting the main text flow.
311
+
312
+ **Principles**:
313
+ - Appendices also follow the self-containment principle. Do not reference agent files or code
314
+ - Target audience must understand all terms and structures within the Appendix
315
+
316
+ **Common Appendices**:
317
+
318
+ | Appendix | Purpose | Inclusion Criteria |
319
+ |----------|---------|-------------------|
320
+ | Setup & Operations | Setup, configuration, operations guide | When target audience directly installs/operates |
321
+ | File Structure | Directory tree + per-file roles | When file structure understanding is needed |
322
+ | Glossary | Product-specific term definitions | When 10+ product-specific terms exist |
323
+
324
+ ---
325
+
326
+ ## 7. Writing Rules
327
+
328
+ ### Language
329
+
330
+ - Match the target audience's language (Korean products in Korean, international products in English)
331
+ - Use technical terms at the target audience's level. Define unavoidable terms in the glossary (Appendix C)
332
+
333
+ ### Information Density
334
+
335
+ - Every sentence must carry information weight
336
+ - Remove filler words, repetition, decorative prose
337
+ - Use tables when more efficient than prose
338
+
339
+ ### Reference Rules
340
+
341
+ - Intra-Blueprint section references: `S{number}` format (e.g., "see S2.2 Design Judgments")
342
+ - External document references: check self-containment principle first. Reference only if target audience can access
343
+ - Design judgment references: use English judgment names when citing rationale in S4, S5, S6
344
+
345
+ ### Length Guide
346
+
347
+ | Product Complexity | Expected Length | S4 Proportion |
348
+ |-------------------|----------------|---------------|
349
+ | Simple (single feature) | 200-400 lines | 30% |
350
+ | Medium (multi-feature service) | 400-800 lines | 40% |
351
+ | Complex (platform/toolkit) | 800-1200 lines | 45% |
352
+
353
+ ---
354
+
355
+ ## 8. Checklist (Self-Review)
356
+
357
+ Verify the following after Blueprint completion:
358
+
359
+ ### Structure
360
+
361
+ - [ ] YAML frontmatter has `audience` field
362
+ - [ ] Vision statement exists immediately below frontmatter
363
+ - [ ] All 8 sections exist (S1-S8)
364
+ - [ ] Appendix included if needed
365
+
366
+ ### Self-Containment
367
+
368
+ - [ ] Zero occurrences of "see code" or "see agent file"
369
+ - [ ] Target audience can understand the product from this document alone
370
+ - [ ] All terms are defined within the document or in the glossary
371
+
372
+ ### Causal Chain
373
+
374
+ - [ ] S2.1 (principle) → S2.2 (judgments) → referenced as rationale in S4/S5/S6
375
+ - [ ] S2.3 (preconditions) → connected in S7 (Risk Model)
376
+ - [ ] Each step in S4.2 cites a rationale design judgment
377
+
378
+ ### Information Preservation (when rewriting existing documents)
379
+
380
+ - [ ] All information from the existing document is mapped to the new structure
381
+ - [ ] Verified zero loss items via mapping table
382
+
383
+ ### Consistency
384
+
385
+ - [ ] Vision statement core principle = S2.1 core principle (same sentence)
386
+ - [ ] S8 Current State is consistent with CHANGELOG
387
+ - [ ] External reference documents (JDD, etc.) have role division, not overlap
@@ -0,0 +1,167 @@
1
+ # Brownfield Context 파일 포맷 가이드
2
+
3
+ ## YAML Frontmatter 구조
4
+
5
+ ```yaml
6
+ ---
7
+ feature: {feature_name}
8
+ layers:
9
+ - name: L1
10
+ source_step: create-product-brief/step-01-init
11
+ created_at: 2026-01-15
12
+ search_keywords:
13
+ - keyword1
14
+ - keyword2
15
+ sources:
16
+ - type: mcp
17
+ name: svc-map
18
+ - type: mcp
19
+ name: figma
20
+ discovered:
21
+ domain_concepts: 5
22
+ user_flows: 3
23
+ screen_ids: ['screen-123', 'screen-456']
24
+ notes: "Optional notes about search limitations"
25
+
26
+ - name: L2
27
+ sub_phase: complete # 'preliminary' | 'complete'
28
+ source_step: prd/step-02-discovery (L2a) + prd/step-08-scoping (L2b)
29
+ created_at: 2026-01-16
30
+ search_keywords:
31
+ # L2a (preliminary) - Input Documents 키워드
32
+ - api_keyword1
33
+ # L2b (refinement) - Scoping/FR 키워드
34
+ - fr_keyword1
35
+ sources:
36
+ - type: mcp
37
+ name: backend-docs
38
+ - type: mcp
39
+ name: client-docs
40
+ discovered:
41
+ existing_apis: 8
42
+ existing_components: 3
43
+ domain_rules: 4
44
+ notes: "L2a: step-02, L2b: step-08"
45
+
46
+ - name: L3
47
+ source_step: create-architecture/step-02-context
48
+ created_at: 2026-01-17
49
+ search_keywords:
50
+ - ServiceName
51
+ - ComponentName
52
+ sources:
53
+ - type: mcp
54
+ name: backend-docs
55
+ - type: mcp
56
+ name: client-docs
57
+ discovered:
58
+ service_integrations: 6
59
+ code_patterns: 5
60
+ data_adjacencies: 3
61
+
62
+ - name: L4
63
+ source_step: specs-generation
64
+ created_at: 2026-01-18
65
+ search_keywords:
66
+ - exact/file/path.java
67
+ - FunctionName
68
+ sources:
69
+ - type: mcp
70
+ name: backend-docs
71
+ - type: mcp
72
+ name: client-docs
73
+ discovered:
74
+ file_paths: 12
75
+ function_signatures: 8
76
+ ---
77
+ ```
78
+
79
+ ## 레이어별 본문 구조
80
+
81
+ ### L1: Domain Concept Layer
82
+ ```markdown
83
+ ## L1: Domain Concept Layer
84
+
85
+ ### Customer Journey Position
86
+ - Flow: {flow_name}
87
+ - Screen IDs: {screen_id_list}
88
+
89
+ ### Domain Concepts Found
90
+ | Concept | Source | Reference |
91
+ |---------|--------|-----------|
92
+ | 튜터 | svc-map | screen-123 |
93
+
94
+ ### Existing User Flows
95
+ {flow descriptions}
96
+ ```
97
+
98
+ ### L2: Behavior Layer
99
+ ```markdown
100
+ ## L2: Behavior Layer
101
+
102
+ ### Existing APIs
103
+ | API | Method | Relevance | Source |
104
+ |-----|--------|-----------|--------|
105
+ | /api/v2/schedule | POST | 매칭 대상 | backend-docs |
106
+
107
+ ### Existing UI Components
108
+ | Component | Path | Relevance | Source |
109
+ |-----------|------|-----------|--------|
110
+ | LessonCard | features/lesson/ | 평가 진입점 | client-docs |
111
+
112
+ ### Domain Rules Discovered
113
+ {business rules}
114
+ ```
115
+
116
+ ### L3: Component Layer
117
+ ```markdown
118
+ ## L3: Component Layer
119
+
120
+ ### Service Integration Points
121
+ | Service | Existing? | Integration | Source |
122
+ |---------|-----------|-------------|--------|
123
+ | PodoScheduleServiceImplV2 | Yes | DI inject ExclusionFilter | backend-docs |
124
+
125
+ ### Existing Code Patterns to Follow
126
+ | Pattern | Example Location | Source |
127
+ |---------|-----------------|--------|
128
+ | DslRepository | TutorDslRepository.java | backend-docs |
129
+
130
+ ### Data Model Adjacencies
131
+ {adjacent tables and relationships}
132
+ ```
133
+
134
+ ### L4: Code Layer
135
+ ```markdown
136
+ ## L4: Code Layer
137
+
138
+ ### File Paths
139
+ | File | Modification Type | Owner Task |
140
+ |------|-------------------|------------|
141
+ | src/main/.../PodoScheduleServiceImplV2.java | Extend | task-2.6 |
142
+
143
+ ### Function Signatures
144
+ | Function | File | Change Required |
145
+ |----------|------|-----------------|
146
+ | matchTutor() | PodoScheduleServiceImplV2.java | Add exclusion filter param |
147
+ ```
148
+
149
+ ## Source Types
150
+
151
+ `sources` 배열의 각 항목은 `type`과 `name`으로 구성된다:
152
+
153
+ | type | 설명 | name 예시 |
154
+ |------|------|----------|
155
+ | `mcp` | MCP 서버에서 수집한 데이터 | `svc-map`, `backend-docs`, `client-docs`, `figma` |
156
+ | `document-project` | BMad document-project 워크플로우 산출물 | `project-overview.md`, `api-contracts.md`, `data-models.md` |
157
+ | `local-codebase` | 로컬 코드베이스 직접 스캔 결과 | `src/`, `lib/`, `app/` |
158
+
159
+ - 하나의 레이어에 여러 타입의 소스가 혼합될 수 있다
160
+ - 동일 정보가 여러 소스에서 발견되면 양쪽 모두 기록하고 우선순위를 명시한다
161
+
162
+ ## 키 원칙
163
+
164
+ 1. **점진적 구체화**: L1(어디) → L2(무엇을) → L3(어떻게) → L4(정확히 어디에)
165
+ 2. **중복 방지**: 각 레이어의 search_keywords를 확인하여 이전 레이어에서 이미 검색한 키워드 제외
166
+ 3. **추적 가능성**: source_step으로 어느 워크플로우 단계에서 생성되었는지 추적
167
+ 4. **발견 수량 기록**: discovered 필드로 각 레이어의 검색 효과를 정량화