@atlashub/smartstack-cli 3.9.0 → 3.12.0

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 (48) hide show
  1. package/dist/index.js +2544 -2461
  2. package/dist/index.js.map +1 -1
  3. package/dist/mcp-entry.mjs +479 -6185
  4. package/dist/mcp-entry.mjs.map +1 -1
  5. package/package.json +1 -1
  6. package/templates/agents/ba-writer.md +178 -0
  7. package/templates/agents/db-reader.md +149 -0
  8. package/templates/skills/application/references/application-roles-template.md +227 -0
  9. package/templates/skills/application/references/provider-template.md +30 -6
  10. package/templates/skills/application/steps/step-03-roles.md +45 -7
  11. package/templates/skills/application/steps/step-03b-provider.md +13 -6
  12. package/templates/skills/business-analyse/SKILL.md +56 -4
  13. package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +477 -0
  14. package/templates/skills/business-analyse/references/cache-warming-strategy.md +578 -0
  15. package/templates/skills/business-analyse/references/cadrage-vibe-coding.md +9 -19
  16. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +12 -2
  17. package/templates/skills/business-analyse/references/deploy-data-build.md +36 -25
  18. package/templates/skills/business-analyse/references/detection-strategies.md +424 -0
  19. package/templates/skills/business-analyse/references/html-data-mapping.md +4 -0
  20. package/templates/skills/business-analyse/references/prd-generation.md +258 -0
  21. package/templates/skills/business-analyse/references/robustness-checks.md +538 -0
  22. package/templates/skills/business-analyse/references/validate-incremental-html.md +47 -4
  23. package/templates/skills/business-analyse/references/validation-checklist.md +281 -0
  24. package/templates/skills/business-analyse/schemas/sections/specification-schema.json +33 -1
  25. package/templates/skills/business-analyse/steps/step-00-init.md +70 -75
  26. package/templates/skills/business-analyse/steps/step-01-cadrage.md +8 -22
  27. package/templates/skills/business-analyse/steps/step-03a-data.md +20 -410
  28. package/templates/skills/business-analyse/steps/step-03a1-setup.md +356 -0
  29. package/templates/skills/business-analyse/steps/step-03a2-analysis.md +143 -0
  30. package/templates/skills/business-analyse/steps/step-03b-ui.md +3 -0
  31. package/templates/skills/business-analyse/steps/step-03c-compile.md +72 -3
  32. package/templates/skills/business-analyse/steps/step-03d-validate.md +36 -3
  33. package/templates/skills/business-analyse/steps/step-04-consolidation.md +21 -440
  34. package/templates/skills/business-analyse/steps/step-04a-collect.md +304 -0
  35. package/templates/skills/business-analyse/steps/step-04b-analyze.md +239 -0
  36. package/templates/skills/business-analyse/steps/step-04c-decide.md +186 -0
  37. package/templates/skills/business-analyse/steps/step-05a-handoff.md +44 -0
  38. package/templates/skills/business-analyse/steps/step-05b-deploy.md +42 -2
  39. package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +518 -0
  40. package/templates/skills/controller/steps/step-03-generate.md +184 -24
  41. package/templates/skills/controller/templates.md +11 -2
  42. package/templates/skills/debug/SKILL.md +156 -53
  43. package/templates/skills/debug/references/team-protocol.md +232 -0
  44. package/templates/skills/ralph-loop/references/category-rules.md +46 -0
  45. package/templates/skills/ralph-loop/references/compact-loop.md +32 -2
  46. package/templates/skills/ralph-loop/references/core-seed-data.md +233 -21
  47. package/templates/skills/ralph-loop/steps/step-00-init.md +64 -1
  48. package/templates/skills/ralph-loop/steps/step-04-check.md +27 -2
@@ -1,432 +1,42 @@
1
1
  ---
2
2
  name: step-03a-data
3
- description: Per-module specification - sections, entities, business rules, questionnaires (data & logic phase)
3
+ description: Per-module data specification - REDIRECTS to step-03a1 (refactored into 2 sub-steps)
4
4
  model: opus
5
- next_step: steps/step-03b-ui.md
5
+ next_step: steps/step-03a1-setup.md
6
6
  ---
7
7
 
8
- > **Context files:** `_shared.md` | `_elicitation.md` | `_architecture.md` | `_module-loop.md`
8
+ > **NOTICE:** This step has been refactored into 2 sub-steps for better context management.
9
9
 
10
- # Step 3a: Specification - Data & Logic
10
+ # Step 3a: Specification - Data & Logic (Entry Point)
11
11
 
12
- ## MANDATORY EXECUTION RULES
12
+ This step has been divided into 2 focused sub-steps:
13
13
 
14
- - ALWAYS use ULTRATHINK mode
15
- - This step is EXECUTED ONCE PER MODULE in topological dependency order
16
- - ALWAYS check workflow state to determine current module
17
- - ALWAYS reference completed modules when specifying current one
18
- - **MANDATORY:** Generate and validate an ASCII/SVG mockup for EVERY section (not optional)
19
- - ALL questions via AskUserQuestion tool
20
- - ALL communication in `{language}`
21
- - NEVER skip per-module validation
22
- - **ID NAMING RULE (MANDATORY, NO EXCEPTION):**
23
- All IDs MUST include a module prefix to guarantee application-wide uniqueness.
24
- The prefix is derived from the module code initials (2-4 chars):
25
- UserManagement → UM | VehicleManagement → VM | PartsInventory → PI
26
- RepairManagement → RM | MaintenanceSchedule → MS | DataSync → DS
27
- Notifications → NT | Dashboard → DB | Orders → OR | Customers → CU
28
-
29
- Patterns:
30
- UC-{PREFIX}-{NNN} → UC-RM-001, UC-PI-003
31
- BR-{CAT}-{PREFIX}-{NNN} → BR-VAL-RM-001, BR-CALC-PI-002
32
- FR-{PREFIX}-{NNN} → FR-RM-001
33
- OBJ-{PREFIX}-{NNN} → OBJ-RM-001
34
- AC-{PREFIX}-{NNN} → AC-RM-001
35
- RISK-{PREFIX}-{NNN} → RISK-RM-001
36
-
37
- NEVER use bare IDs (UC-001, BR-VAL-001) in multi-module mode.
38
- - **SCHEMA CONFORMITY RULE:**
39
- ALL data MUST fit within the defined feature-schema.json structure.
40
- NEVER create custom top-level fields (KPIDefinitions, ChartConfigurations, etc.)
41
- Dashboard modules MUST use specification.dashboards[] (it exists in the schema).
42
- If truly needed, use specification.extensions: {} (additionalProperties: true).
43
-
44
- ## YOUR TASK
45
-
46
- Specify one module's data model and business logic: walk through sections, define entities, business rules, and validate with client before proceeding to UI specification.
14
+ 1. **step-03a1-setup.md** - Module setup, sections walkthrough, questionnaires, cross-refs
15
+ 2. **step-03a2-analysis.md** - Analysis section: objectives, entities, business rules, process flow
47
16
 
48
17
  ---
49
18
 
50
- ## EXECUTION SEQUENCE
51
-
52
- ### 1. Determine Current Module
53
-
54
- ```
55
- ba-reader.readApplicationContext({feature_id})
56
- → Read metadata.workflow: moduleOrder, currentModuleIndex, completedModules
57
- → currentModule = moduleOrder[currentModuleIndex]
58
- → Display: "═══ Module {currentModuleIndex + 1}/{moduleOrder.length}: {currentModule} ═══"
59
- ```
60
-
61
- IF module already specified (status = "specified" in master):
62
- Increment currentModuleIndex, re-check
63
- IF all modules specified → Load step-04-consolidation.md, STOP
64
-
65
- ### 2. Initialize Module Feature.json
66
-
67
- ```
68
- // Create or load module-level feature.json
69
- ba-writer.create({
70
- scope: "module",
71
- applicationRef: {feature_id},
72
- moduleCode: {currentModule.code},
73
- path: "docs/business/{app}/{module_code}/business-analyse/v1.0/feature.json"
74
- })
75
-
76
- // Inherit application roles from master
77
- ba-reader.readApplicationContext({feature_id})
78
- → Copy cadrage.applicationRoles → module.applicationContext.applicationRoles
79
- ```
80
-
81
- // Update module status in master: "pending" → "in-progress"
82
- ba-writer.updateModuleStatus({feature_id}, {currentModule.code}, "in-progress")
83
-
84
- ### 2-ter. Derive Module Discovery Section (MANDATORY)
85
-
86
- > **The module feature.json MUST have a `discovery` section.** In multi-module mode, derive it from the parent application's `cadrage`. In single-module mode, it should already exist from step-01.
87
-
88
- ```
89
- ba-reader.readApplicationContext({feature_id})
90
- → Read cadrage: problem, asIs, toBe, trigger, stakeholders, risks, acceptanceCriteria
91
-
92
- // Filter to this module's scope
93
- moduleScope = cadrage.coverageMatrix.filter(cm => cm.module === currentModule.code)
94
- moduleStakeholders = cadrage.stakeholders.filter(s => s.tasks relevant to this module)
95
- moduleRisks = cadrage.risks.filter(r => r related to this module)
96
-
97
- ba-writer.enrichSection({
98
- featureId: {module_feature_id},
99
- section: "discovery",
100
- data: {
101
- problem: cadrage.problem,
102
- asIs: cadrage.asIs,
103
- toBe: cadrage.toBe,
104
- trigger: cadrage.trigger,
105
- stakeholders: moduleStakeholders,
106
- scope: {
107
- mustHave: moduleScope.filter(s => s.category === "mustHave").map(s => s.item),
108
- shouldHave: moduleScope.filter(s => s.category === "shouldHave").map(s => s.item),
109
- couldHave: moduleScope.filter(s => s.category === "couldHave").map(s => s.item),
110
- outOfScope: []
111
- },
112
- risks: moduleRisks,
113
- acceptanceCriteria: cadrage.acceptanceCriteria.filter(ac => relevant to module),
114
- codebaseContext: cadrage.codebaseContext
115
- }
116
- })
117
- ```
118
-
119
- > **STRUCTURE CARD: discovery** — Same format as cadrage but module-scoped.
120
- > Fields: `problem`, `asIs`, `toBe`, `trigger`, `stakeholders[]`, `scope{}`, `risks[]`, `acceptanceCriteria[]`, `codebaseContext`, `openQuestions[]`
121
-
122
- ### 2-bis. Coverage Verification (MANDATORY)
123
-
124
- > **Before specifying any module, verify that the coverageMatrix from cadrage covers this module.**
125
-
126
- ```
127
- ba-reader.readApplicationContext({feature_id})
128
- → Read cadrage.coverageMatrix[]
129
- → Filter entries where module = {currentModule.code}
130
- → Group by category: mustHave, shouldHave, couldHave
131
- ```
132
-
133
- Display to client:
134
- ```
135
- Module {currentModule}: Coverage from original brief
136
-
137
- | # | Requirement | Category |
138
- |---|-------------|----------|
139
- | 1 | {item} | {category} |
140
- | ... | ... | ... |
141
-
142
- Total: {N} requirements mapped to this module
143
- - Must-have: {count}
144
- - Should-have: {count}
145
- - Could-have: {count}
146
- ```
147
-
148
- **VALIDATION:** If mustHave count = 0 AND module is in must priority:
149
- → WARNING: "Module {currentModule} is must-priority but has no must-have requirements in coverageMatrix. Verify cadrage coverage."
150
-
151
- **POST-SPECIFICATION CHECK (at end of module, before advancing):**
152
- For EACH mustHave item in coverageMatrix for this module:
153
- → Verify at least 1 UC exists that covers this requirement
154
- → If uncovered: BLOCK and ask client to either add a UC or reclassify the requirement
155
-
156
- ### 3. Section Walkthrough with Client
157
-
158
- > **This is the key interactive phase aligned with the 5-level SmartStack hierarchy.**
159
- > Level 3 = Module, Level 4 = Section, Level 5 = Resource
160
-
161
- #### 3a. Identify Module Sections
162
-
163
- For each module, propose standard sections based on module type:
164
-
165
- | Module Type | Typical Sections |
166
- |-------------|-----------------|
167
- | data-centric | list, detail, create, edit |
168
- | workflow | list, detail, create, edit, approve, history |
169
- | integration | list, detail, config, sync, logs |
170
- | reporting | dashboard, detail, export, schedule |
171
- | full-module | list, detail, create, edit, approve, history, reports, settings |
172
-
173
- Ask via AskUserQuestion:
174
-
175
- ```
176
- question: "Quelles sections le module {currentModule} doit-il avoir ?"
177
- header: "Sections"
178
- multiSelect: true
179
- options:
180
- - label: "Liste"
181
- description: "Page de liste avec filtres, tri et pagination"
182
- - label: "Détail"
183
- description: "Page de détail d'un enregistrement"
184
- - label: "Création/Édition"
185
- description: "Formulaire de création et de modification"
186
- - label: "Validation/Approbation"
187
- description: "Workflow de validation avec changement de statut"
188
- - label: "Dashboard"
189
- description: "Tableau de bord avec KPIs, graphiques (Recharts) et métriques clés"
190
- ```
191
-
192
- #### 3a-depth. Determine Specification Depth
193
-
194
- > **Based on module complexity and type, determine how deeply to specify sections and resources.**
195
- > **This avoids over-specifying simple modules and under-specifying complex ones.**
196
-
197
- Read from application master:
198
- ```
199
- ba-reader.readApplicationContext({feature_id})
200
- → module = modules.find(m => m.code === currentModule)
201
- → complexity = module.estimatedComplexity // simple | medium | complex
202
- → featureType = module.featureType // data-centric | workflow | integration | reporting | full-module
203
- ```
204
-
205
- **Depth decision matrix:**
206
-
207
- | Complexity | featureType | Depth | Behavior |
208
- |---|---|---|---|
209
- | simple | data-centric | **convention** | Auto-generate sections + resources from entities. Quick client validation. |
210
- | simple | reporting | **convention** | Standard dashboard template. Quick validation. |
211
- | simple | * | **convention** | Standard sections for featureType. Quick validation. |
212
- | medium | data-centric | **override** | Auto-generate then ask client which sections to customize. |
213
- | medium | workflow | **full** | State machine required → always full. |
214
- | medium | * | **override** | Auto-generate then ask client to customize. |
215
- | complex | * | **full** | Full specification: state machine, typed columns, conditional actions. |
216
- | * | workflow | **full** | Always full for workflow modules (state machine is mandatory). |
217
-
218
- Display to client:
219
- ```
220
- "Module {currentModule}: complexité {complexity}, type {featureType} → profondeur: {depth}"
221
- ```
19
+ ## Automatic Redirect
222
20
 
223
- **IF depth = convention:**
224
- - Execute 3a-infer (auto-inference) → generates sections + resources
225
- - Execute 3b (wireframes) for each section
226
- - Skip 3a-bis detailed walkthrough → present auto-generated spec for quick validation
227
- - Ask client: "La spécification auto-générée convient-elle, ou souhaitez-vous personnaliser certaines sections ?"
228
- - If client says OK → proceed to step 4 (questionnaires)
229
- - If client wants changes → switch to **override** for specified sections
21
+ **Loading:** `./step-03a1-setup.md`
230
22
 
231
- **IF depth = override:**
232
- - Execute 3a-infer (auto-inference)generates base sections + resources
233
- - Ask client: "Quelles sections souhaitez-vous personnaliser ?"
234
- - For selected sections → execute full 3a-bis + 3b + 3b-ter
235
- - For other sections → keep auto-generated spec
236
-
237
- **IF depth = full:**
238
- - Execute standard flow: 3a-bis → 3b → 3b-bis → 3b-ter → 3c → 3d (as currently defined below)
239
- - PLUS: 3a-state (state machine definition) for entities with status fields
240
-
241
- #### 3a-infer. Auto-Infer Resources from Entities (Convention/Override)
242
-
243
- > **For convention and override depths, auto-generate resource details from entity definitions.**
244
- > **The goal: produce a complete spec without manual input, that the client only validates.**
245
-
246
- **Prerequisites:** Entity attributes must be defined (from step 6) OR anticipated from decomposition.
247
-
248
- See [references/spec-auto-inference.md](../references/spec-auto-inference.md) for complete inference rules:
249
- - Entity attribute → SmartTable column mapping (9 type rules)
250
- - Entity attribute → SmartForm field mapping (8 type rules)
251
- - Auto-generated sections per featureType (5 types)
252
- - Section generation rules (list, create, detail, edit, dashboard)
253
- - Status/lifecycle enhancement rules
254
-
255
- Write auto-generated sections to `specification.sections[]` via ba-writer.enrichSection()
256
-
257
- ### 4. Conditional Questionnaires
258
-
259
- Based on module type, load questionnaires per-module:
260
-
261
- | Condition | Category | Questionnaire |
262
- |-----------|----------|---------------|
263
- | Always | 04 | `questionnaire/04-data.md` |
264
- | Has UI sections | 07 | `questionnaire/07-ui.md` |
265
- | Has lifecycle | 11 | `questionnaire/11-data-lifecycle.md` |
266
- | Has migration needs | 12 | `questionnaire/12-migration.md` |
267
- | References other modules | 13 | `questionnaire/13-cross-module.md` |
268
- | Documentation needed | 10 | `questionnaire/10-documentation.md` |
269
-
270
- Ask via AskUserQuestion, 1-2 batches per category.
271
-
272
- #### Store Documentation Requirements
273
-
274
- If questionnaire 10 was loaded, persist answers in feature.json:
275
-
276
- ```
277
- ba-writer.enrichSection({
278
- featureId: {feature_id},
279
- section: "documentation",
280
- data: {
281
- userDocRequired: {Q10.1 answer == "Yes"},
282
- techDocRequired: {Q10.2 answer == "Yes"},
283
- status: "pending"
284
- }
285
- })
286
- ```
287
-
288
- This data will be consumed by `/application` step-08 to auto-generate in-app documentation.
289
-
290
- ### 5. Cross-Module References
291
-
292
- > Reference completed modules to help define current one.
293
-
294
- ```
295
- completedModules = ba-reader.getCompletedModulesSummary({feature_id})
296
- → Returns max 100 lines summary: entity names, key BRs, permissions
297
-
298
- Display: "Modules déjà spécifiés : {completedModules.map(m => m.code).join(', ')}"
299
- ```
300
-
301
- For each completed module's entities, ask:
302
-
303
- ```
304
- question: "Le module {currentModule} référence-t-il des entités de {completedModule} ?"
305
- header: "Références"
306
- multiSelect: true
307
- options:
308
- - label: "{Entity1} (FK)"
309
- description: "Référence directe via clé étrangère"
310
- - label: "{Entity2} (Lookup)"
311
- description: "Table de référence / lookup"
312
- - label: "Aucune"
313
- description: "Pas de référence à {completedModule}"
314
- ```
315
-
316
- ### 6. Analysis Section
317
-
318
- #### 6a. Objectives
319
-
320
- Define measurable business objectives for this module:
321
-
322
- > **STRUCTURE CARD: analysis.objectives[]**
323
- > ```json
324
- > { "id": "OBJ-{PREFIX}-001", "objective": "Reduce order processing time", "metric": "Average time to fulfillment", "target": "< 4 hours" }
325
- > ```
326
-
327
- #### 6b. Entity Definition
328
-
329
- Define entities for this module (business attributes, not technical):
330
-
331
- > **STRUCTURE CARD: analysis.entities[]** — Field names are EXACT. Do NOT deviate.
332
- > ```json
333
- > {
334
- > "name": "PascalCase",
335
- > "description": "1-2 sentences describing the entity purpose",
336
- > "attributes": [
337
- > {
338
- > "name": "attributeName",
339
- > "description": "What this attribute represents",
340
- > "required": true,
341
- > "unique": false,
342
- > "validation": "Format: XXX-NNNNN, max 100 chars, etc."
343
- > }
344
- > ],
345
- > "relationships": [
346
- > { "target": "OtherEntity", "type": "1:1|1:N|N:1|N:M", "description": "description" }
347
- > ]
348
- > }
349
- > ```
350
- > **FORBIDDEN fields in attributes:** Do NOT use `type`, `values`, `rules`.
351
- > Use `description` to explain what the attribute is, `validation` for format/constraint rules, `unique` as boolean.
352
-
353
- #### 6c. Process Flow
354
-
355
- Define the main business process flow for this module (not lifecycle — that's in 8j):
356
-
357
- > **STRUCTURE CARD: analysis.processFlow**
358
- > ```json
359
- > {
360
- > "entryPoints": ["User navigates to module", "System event triggers action"],
361
- > "mainFlow": [
362
- > { "step": 1, "actor": "Manager", "action": "Opens the list", "system": "Displays filtered records" },
363
- > { "step": 2, "actor": "Manager", "action": "Creates a record", "system": "Validates BR-VAL-{PREFIX}-001" },
364
- > { "step": 3, "actor": "System", "action": "Saves record", "system": "Sends notification" }
365
- > ],
366
- > "decisionPoints": [
367
- > { "condition": "Is amount > threshold?", "ifTrue": "Route to approver", "ifFalse": "Auto-approve", "rule": "BR-WF-{PREFIX}-001" }
368
- > ],
369
- > "alternativeFlows": ["Bulk import via CSV", "Automatic sync from SFTP"]
370
- > }
371
- > ```
372
- > **FORBIDDEN:** Do NOT put lifecycle/state machine data here. Use `specification.lifeCycles[]` for that.
373
-
374
- #### 6d. Data Lifecycle
375
-
376
- Define data retention and lifecycle policies:
377
-
378
- > **STRUCTURE CARD: analysis.dataLifecycle**
379
- > ```json
380
- > {
381
- > "retentionPeriod": "7 years",
382
- > "archiveStrategy": "Move to cold storage after 2 years",
383
- > "gdprCompliance": "PII anonymized on request, data export available",
384
- > "states": [
385
- > { "name": "active", "transitions": ["archived", "deleted"] },
386
- > { "name": "archived", "transitions": ["active"] },
387
- > { "name": "deleted", "transitions": [] }
388
- > ]
389
- > }
390
- > ```
391
-
392
- ### 7. Business Rules Extraction
393
-
394
- Extract business rules specific to this module:
395
-
396
- > **STRUCTURE CARD: analysis.businessRules[]** — Field names are EXACT. Do NOT deviate.
397
- > ```json
398
- > {
399
- > "id": "BR-VAL-{PREFIX}-001",
400
- > "name": "Short rule name",
401
- > "category": "validation|calculation|workflow|security|data",
402
- > "statement": "IF {condition} THEN {consequence} ELSE {alternative}",
403
- > "priority": "must|should|could",
404
- > "conditions": ["Condition 1", "Condition 2"],
405
- > "examples": [{ "input": "Order total $5000, budget $2000", "expected": "Order rejected" }],
406
- > "testability": "Via unit test with mock data / integration test"
407
- > }
408
- > ```
409
- > **MANDATORY fields:** `id`, `name`, `category`, `statement`, `priority`
410
- > **FORBIDDEN fields:** Do NOT use `rule`, `condition` (singular), `action`. Use `name` + `statement` (IF/THEN/ELSE format) + `conditions` (array).
411
- > **ID PATTERN:** `BR-{CAT}-{PREFIX}-{NNN}` where CAT = VAL|CALC|WF|SEC|DATA, PREFIX = module initials (2-4 chars)
412
- > **category values:** lowercase only: `validation`, `calculation`, `workflow`, `security`, `data`
23
+ The data specification process will execute in sequence:
24
+ - step-03a1-setupstep-03a2-analysis step-03b-ui
413
25
 
414
26
  ---
415
27
 
416
- ## SELF-VERIFICATION (MANDATORY before loading step-03b-ui)
28
+ ## Why Refactored?
417
29
 
418
- Before proceeding to step-03b-ui.md, VERIFY:
30
+ **Before:** 468 lines in single file (exceeded 400-line recommendation)
419
31
 
420
- 1. **Module feature.json exists** at expected path (`docs/business/{app}/{module}/business-analyse/v{X.Y}/feature.json`)
421
- 2. **Module feature.json has analysis section** with `entities[]` (at least 1) and `businessRules[]` (at least 1)
422
- 3. **Module status in master** = "in-progress" (set by section 2 above)
423
- 4. **Master modules[].featureJsonPath** for this module ≠ null (set by ba-writer.create)
424
- 5. **Sections identified** with clear roles and entities assigned
32
+ **After:** 2 focused files (~320 + ~150 lines)
425
33
 
426
- **IF any check fails → FIX before proceeding.** Do NOT load step-03b-ui with incomplete data.
34
+ **Benefits:**
35
+ - Better context management
36
+ - Clearer separation: setup vs analysis
37
+ - Module preparation separated from entity/logic definition
38
+ - Reduced cognitive load per step
427
39
 
428
40
  ---
429
41
 
430
- ## NEXT STEP
431
-
432
- Load: `steps/step-03b-ui.md`
42
+ **Proceeding to step-03a1-setup.md...**