@atlashub/smartstack-cli 1.34.0 → 1.36.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 (75) hide show
  1. package/.documentation/installation.html +56 -31
  2. package/dist/index.js +1098 -582
  3. package/dist/index.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/agents/docs-context-reader.md +125 -0
  6. package/templates/agents/docs-sync-checker.md +122 -0
  7. package/templates/hooks/docs-drift-check.md +97 -0
  8. package/templates/skills/_resources/context-digest-template.md +53 -0
  9. package/templates/skills/_resources/doc-context-cache.md +62 -0
  10. package/templates/skills/_resources/docs-manifest-schema.md +157 -0
  11. package/templates/skills/_resources/mcp-validate-documentation-spec.md +183 -0
  12. package/templates/skills/_shared.md +15 -7
  13. package/templates/skills/apex/SKILL.md +6 -0
  14. package/templates/skills/apex/steps/step-00-init.md +9 -0
  15. package/templates/skills/apex/steps/step-01-analyze.md +36 -0
  16. package/templates/skills/apex/steps/step-02-plan.md +38 -0
  17. package/templates/skills/apex/steps/step-03-execute.md +39 -0
  18. package/templates/skills/apex/steps/step-04-validate.md +31 -1
  19. package/templates/skills/apex/steps/step-04b-doc-sync.md +162 -0
  20. package/templates/skills/apex/steps/step-05-examine.md +7 -0
  21. package/templates/skills/apex/templates/04b-doc-sync.md +31 -0
  22. package/templates/skills/apex/templates/context-digest.md +35 -0
  23. package/templates/skills/application/steps/step-04-backend.md +17 -17
  24. package/templates/skills/application/steps/step-05-frontend.md +4 -1
  25. package/templates/skills/application/templates-backend.md +8 -8
  26. package/templates/skills/application/templates-frontend.md +8 -8
  27. package/templates/skills/business-analyse/SKILL.md +18 -5
  28. package/templates/skills/business-analyse/_shared.md +306 -4
  29. package/templates/skills/business-analyse/questionnaire/01-context.md +21 -6
  30. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +34 -0
  31. package/templates/skills/business-analyse/questionnaire/03-scope.md +23 -0
  32. package/templates/skills/business-analyse/questionnaire/04-data.md +44 -0
  33. package/templates/skills/business-analyse/questionnaire/05-integrations.md +29 -7
  34. package/templates/skills/business-analyse/questionnaire/06-security.md +28 -0
  35. package/templates/skills/business-analyse/questionnaire/07-ui.md +32 -7
  36. package/templates/skills/business-analyse/questionnaire/08-performance.md +21 -0
  37. package/templates/skills/business-analyse/questionnaire/09-constraints.md +29 -6
  38. package/templates/skills/business-analyse/questionnaire/10-documentation.md +27 -6
  39. package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -0
  40. package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -0
  41. package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -0
  42. package/templates/skills/business-analyse/steps/step-00-init.md +110 -16
  43. package/templates/skills/business-analyse/steps/step-01-discover.md +530 -85
  44. package/templates/skills/business-analyse/steps/step-02-analyse.md +81 -25
  45. package/templates/skills/business-analyse/steps/step-03-specify.md +116 -24
  46. package/templates/skills/business-analyse/steps/step-04-validate.md +107 -33
  47. package/templates/skills/business-analyse/steps/step-05-handoff.md +256 -33
  48. package/templates/skills/business-analyse/steps/step-06-doc-html.md +84 -25
  49. package/templates/skills/business-analyse/templates/{frd-handoff.md → tpl-handoff.md} +18 -4
  50. package/templates/skills/business-analyse/templates-frd.md +19 -5
  51. package/templates/skills/business-analyse/tracking/change-template.md +30 -0
  52. package/templates/skills/documentation/SKILL.md +68 -31
  53. package/templates/skills/documentation/data-schema.md +198 -0
  54. package/templates/skills/documentation/templates.md +30 -1
  55. package/templates/skills/gitflow/_shared.md +188 -53
  56. package/templates/skills/gitflow/phases/abort.md +28 -16
  57. package/templates/skills/gitflow/phases/cleanup.md +13 -9
  58. package/templates/skills/gitflow/phases/status.md +16 -17
  59. package/templates/skills/gitflow/steps/step-commit.md +11 -5
  60. package/templates/skills/gitflow/steps/step-finish.md +43 -33
  61. package/templates/skills/gitflow/steps/step-init.md +134 -2
  62. package/templates/skills/gitflow/steps/step-merge.md +24 -10
  63. package/templates/skills/gitflow/steps/step-pr.md +42 -28
  64. package/templates/skills/gitflow/steps/step-start.md +19 -13
  65. package/templates/skills/gitflow/templates/config.json +14 -4
  66. package/templates/skills/ralph-loop/SKILL.md +58 -9
  67. package/templates/skills/ralph-loop/steps/step-00-init.md +170 -30
  68. package/templates/skills/ralph-loop/steps/step-01-task.md +243 -40
  69. package/templates/skills/ralph-loop/steps/step-02-execute.md +142 -24
  70. package/templates/skills/ralph-loop/steps/step-03-commit.md +140 -36
  71. package/templates/skills/ralph-loop/steps/step-04-check.md +128 -44
  72. package/templates/skills/ralph-loop/steps/step-05-report.md +175 -88
  73. /package/templates/skills/business-analyse/templates/{frd-brd.md → tpl-brd.md} +0 -0
  74. /package/templates/skills/business-analyse/templates/{frd-discovery.md → tpl-discovery.md} +0 -0
  75. /package/templates/skills/business-analyse/templates/{frd-spec.md → tpl-frd.md} +0 -0
@@ -1,27 +1,23 @@
1
1
  ---
2
2
  name: step-01-discover
3
3
  description: Discovery phase - Elicitation with ULTRATHINK (load questionnaire progressively)
4
- model: opus
5
- prev_step: steps/step-00-init.md
6
4
  next_step: steps/step-02-analyse.md
7
5
  ---
8
6
 
9
- <objective>
7
+ ## YOUR TASK:
8
+
10
9
  Conduct comprehensive requirements elicitation using ULTRATHINK mode.
11
10
  Load questionnaire categories progressively based on feature type.
12
- </objective>
13
11
 
14
- <ultrathink>
15
- ULTRATHINK MODE ACTIVE - Critical thinking required:
16
- - Consider ALL edge cases before formulating questions
17
- - Challenge EVERY stakeholder assumption
18
- - Anticipate UNEXPRESSED needs
19
- - Validate completeness before proceeding
20
- - DO NOT accept vague answers
21
- - DO NOT skip question categories
22
- </ultrathink>
12
+ > **ULTRATHINK MODE:**
13
+ > - Consider ALL edge cases before formulating questions
14
+ > - Challenge EVERY stakeholder assumption
15
+ > - Anticipate UNEXPRESSED needs
16
+ > - Validate completeness before proceeding
17
+ > - DO NOT accept vague answers
18
+ > - DO NOT skip question categories
23
19
 
24
- ## EXECUTION SEQUENCE
20
+ ## EXECUTION SEQUENCE:
25
21
 
26
22
  ### 1. Read Current State
27
23
 
@@ -32,9 +28,18 @@ Read `{output_dir}/00-context.md` to restore:
32
28
  - `{module_name}`
33
29
  - `{auto_mode}`
34
30
  - `{economy_mode}`
31
+ - `{language}` (défaut: `fr`)
35
32
 
36
33
  Update progress: `01-discover` -> "In Progress"
37
34
 
35
+ **Read digest from previous step:**
36
+ Read `{output_dir}/digest-00.md` for compressed context from step-00.
37
+ **DO NOT read full output files** unless in resume mode (`-r`).
38
+
39
+ > **LANGUE :** Toute communication via `AskUserQuestion` (questions, options, reformulations, relances)
40
+ > doit être dans `{language}`. Les exemples ci-dessous sont en français — adapter si `{language}` ≠ `fr`.
41
+ > Voir `_shared.md` → "Configuration Langue de Communication" pour les règles complètes.
42
+
38
43
  ---
39
44
 
40
45
  ### 2. Determine Feature Type
@@ -54,113 +59,468 @@ Store: `{feature_type}`
54
59
 
55
60
  ---
56
61
 
57
- ### 3. Load Questionnaire Categories (Progressive)
62
+ ### 3. Explore Codebase FIRST (Pre-Research)
63
+
64
+ > **RULE: Explore BEFORE asking questions. Informed questions > generic questions.**
65
+
66
+ **Purpose:** Understand what already exists to ask targeted questions, not generic ones.
67
+
68
+ **Phase 3a: MCP SmartStack (si disponible)**
69
+
70
+ > Appeler les outils MCP SmartStack pour obtenir le contexte architectural.
71
+ > Si le MCP n'est pas disponible, passer directement à la phase 3b.
72
+
73
+ ```
74
+ MCP Call 1: analyze_extension_points
75
+ → Découvrir les modules, entités et points d'extension existants
76
+ → Résultat : liste des modules, entités, services disponibles
77
+
78
+ MCP Call 2: api_docs (pour l'application cible)
79
+ → Consulter la documentation API existante de {application_name}
80
+ → Résultat : endpoints existants, DTOs, permissions
81
+
82
+ MCP Call 3: validate_conventions (vérification préliminaire)
83
+ → Vérifier que le nom {module_name} respecte les conventions
84
+ → Résultat : validation ou suggestion de correction
85
+ ```
86
+
87
+ **Phase 3b: Exploration codebase (agents parallèles)**
88
+
89
+ ```
90
+ Agent 1: Modules existants dans l'application
91
+ "Search for existing modules in src/SmartStack.Domain/Entities/Business/{application_name}/
92
+ and src/SmartStack.Application/Features/{application_name}/.
93
+ List entities, their attributes, and relationships."
94
+
95
+ Agent 2: Intégrations et services liés
96
+ "Search for existing APIs, services, and integrations in
97
+ src/SmartStack.Application/Features/ that {module_name} might connect with.
98
+ List SignalR hubs, background jobs, external API clients."
99
+
100
+ Agent 3: Patterns UI (si UI-centric ou Full module)
101
+ "Search for existing pages in web/smartstack-web/src/pages/business/{application_name}/
102
+ List page structures, components used, and navigation patterns."
103
+ ```
104
+
105
+ If `{economy_mode}` = true:
106
+ - MCP tools remain available (use for validation)
107
+ - Skip subagent exploration (phase 3b agents)
108
+ - Use direct Glob/Grep tools for codebase exploration
109
+ - Read 3-5 most relevant files directly
110
+
111
+ **Store findings as `{codebase_context}`:**
112
+
113
+ ```markdown
114
+ ## Codebase Context
115
+
116
+ ### MCP SmartStack (si appelé)
117
+ - Extension points: {list from analyze_extension_points}
118
+ - API existante: {summary from api_docs}
119
+ - Convention check: {result from validate_conventions}
120
+
121
+ ### Exploration codebase
122
+ - Entités existantes dans {application_name}: {list}
123
+ - Modules liés: {list}
124
+ - Patterns existants: {entity base classes, CQRS structure}
125
+ - Connexions potentielles: {shared entities, APIs, events}
126
+ ```
127
+
128
+ **Use `{codebase_context}` to:**
129
+ - Adapter les options des questions (proposer les entités existantes comme relations)
130
+ - Sauter les questions déjà répondues par le codebase
131
+ - Détecter les conflits avec les modules existants tôt
132
+ - Proposer les patterns d'intégration disponibles (notifications, workflow, IA)
133
+
134
+ ---
135
+
136
+ ### 4. Load Questionnaire Categories (Progressive)
58
137
 
59
138
  **IMPORTANT: Load ONLY relevant categories to minimize context!**
60
139
 
61
140
  #### Always load (core):
62
141
  ```
63
142
  Read: questionnaire/01-context.md # ~50 lines
64
- Read: questionnaire/02-stakeholders.md # ~40 lines
65
- Read: questionnaire/03-scope.md # ~35 lines
66
- Read: questionnaire/06-security.md # ~30 lines (minimal)
143
+ Read: questionnaire/02-stakeholders.md # ~70 lines
144
+ Read: questionnaire/03-scope.md # ~60 lines
145
+ Read: questionnaire/06-security.md # ~70 lines
67
146
  ```
68
147
 
69
148
  #### Conditional loading based on feature_type:
70
149
  ```
71
150
  IF {feature_type} = "Data-centric" OR "Full module":
72
- Read: questionnaire/04-data.md # ~45 lines
151
+ Read: questionnaire/04-data.md # ~80 lines
152
+ Read: questionnaire/11-data-lifecycle.md # ~50 lines
73
153
 
74
154
  IF {feature_type} = "Integration" OR "Full module":
75
- Read: questionnaire/05-integrations.md # ~30 lines
155
+ Read: questionnaire/05-integrations.md # ~60 lines
76
156
 
77
157
  IF {feature_type} = "UI-centric" OR "Full module":
78
- Read: questionnaire/07-ui.md # ~20 lines
158
+ Read: questionnaire/07-ui.md # ~60 lines
79
159
 
80
160
  IF {feature_type} = "Reporting" OR performance-critical:
81
- Read: questionnaire/08-performance.md # ~25 lines
161
+ Read: questionnaire/08-performance.md # ~55 lines
82
162
 
83
163
  IF {feature_type} = "Workflow" OR constraints exist:
84
- Read: questionnaire/09-constraints.md # ~25 lines
164
+ Read: questionnaire/09-constraints.md # ~55 lines
85
165
 
86
166
  IF documentation required:
87
- Read: questionnaire/10-documentation.md # ~20 lines
167
+ Read: questionnaire/10-documentation.md # ~55 lines
168
+
169
+ ALWAYS for new modules (not enhancements):
170
+ Read: questionnaire/12-migration.md # ~50 lines
171
+ Read: questionnaire/13-cross-module.md # ~50 lines
88
172
  ```
89
173
 
90
- **Maximum context per discovery: ~150-200 lines** (vs 283 lines before)
174
+ ---
175
+
176
+ ### 5. Conduct Elicitation (INTERACTIVE)
177
+
178
+ > **RULE: Use `AskUserQuestion` for EVERY question batch. NEVER list questions as text.**
179
+ > See `_shared.md` → "Interactive Elicitation Protocol" for the full protocol.
180
+
181
+ **Flow per category:**
182
+ 1. Ask batch of max 4 questions via `AskUserQuestion` with predefined options
183
+ 2. Process answers → apply ULTRATHINK + Elicitation Techniques
184
+ 3. If answers are vague/insufficient → follow-up `AskUserQuestion` with targeted probes
185
+ 4. Summarize understanding to user before moving to next category
186
+ 5. Repeat for next category
91
187
 
92
188
  ---
93
189
 
94
- ### 4. Conduct Elicitation
190
+ #### 5.1 Category 1: Business Context (ALWAYS)
95
191
 
96
- #### 4.1 Category 1: Business Context (ALWAYS)
192
+ **Batch 1 Fundamental Need (Q1.1-Q1.4):**
97
193
 
98
- Ask questions from `01-context.md`:
99
- - Q1.1: Business problem to solve?
100
- - Q1.2: Current situation (AS-IS)?
101
- - Q1.3: Target situation (TO-BE)?
102
- - Q1.4: Measurable KPIs?
103
- - Q1.5-Q1.8: Business value questions
194
+ ```
195
+ AskUserQuestion([
196
+ { question: "Quel problème métier ce module doit-il résoudre ?",
197
+ header: "Problème",
198
+ options: [
199
+ { label: "Processus manuel", description: "Automatiser un processus existant fait manuellement" },
200
+ { label: "Données dispersées", description: "Centraliser des données dans plusieurs outils/fichiers" },
201
+ { label: "Manque visibilité", description: "Obtenir des indicateurs et du suivi inexistants" },
202
+ { label: "Conformité", description: "Répondre à une obligation réglementaire ou sécurité" }
203
+ ], multiSelect: false },
204
+ { question: "Comment ce processus est-il géré aujourd'hui (AS-IS) ?",
205
+ header: "AS-IS",
206
+ options: [
207
+ { label: "Excel/fichiers", description: "Géré via Excel, fichiers partagés ou emails" },
208
+ { label: "Autre logiciel", description: "Un outil existant qui ne convient plus" },
209
+ { label: "100% manuel", description: "Processus entièrement papier ou oral" },
210
+ { label: "Partiellement auto", description: "Partiellement automatisé mais avec des lacunes" }
211
+ ], multiSelect: false },
212
+ { question: "Quelle est la situation cible (TO-BE) ?",
213
+ header: "TO-BE",
214
+ options: [
215
+ { label: "CRUD complet", description: "Gestion complète (lister, créer, modifier, supprimer)" },
216
+ { label: "Workflow", description: "Processus avec étapes, validations, transitions" },
217
+ { label: "Dashboard + KPIs", description: "Tableau de bord avec indicateurs de suivi" },
218
+ { label: "Intégration", description: "Connexion avec un système externe existant" }
219
+ ], multiSelect: true },
220
+ { question: "Comment mesurerez-vous le succès (KPIs) ?",
221
+ header: "KPIs",
222
+ options: [
223
+ { label: "Temps gagné", description: "Réduction du temps de traitement (ex: -50%)" },
224
+ { label: "Erreurs réduites", description: "Diminution des erreurs de saisie ou d'oubli" },
225
+ { label: "Adoption", description: "Nombre d'utilisateurs actifs / fréquence d'utilisation" },
226
+ { label: "Pas défini", description: "Les KPIs restent à définir avec le métier" }
227
+ ], multiSelect: true }
228
+ ])
229
+ ```
104
230
 
105
- **ULTRATHINK checkpoint:**
106
- - Is the problem clearly defined?
107
- - Are success criteria measurable?
108
- - What happens if NOT developed?
231
+ **ULTRATHINK checkpoint after batch 1:**
232
+ - If "Other" apply Technique 3 (Concrete Scenario) via follow-up AskUserQuestion
233
+ - If KPI = "Pas défini" → apply Technique 4 (Absence Test) via follow-up
234
+ - If answer is solution-oriented → apply Technique 1 (Solution → Problem Reframing)
235
+
236
+ **Batch 2 — Business Value (Q1.5-Q1.8):**
237
+
238
+ ```
239
+ AskUserQuestion([
240
+ { question: "Quel ROI attendez-vous ? (temps, argent, efficacité)",
241
+ header: "ROI",
242
+ options: [
243
+ { label: "Gain de temps", description: "Heures/jours économisés par semaine/mois" },
244
+ { label: "Réduction coûts", description: "Économies directes (licences, ressources, erreurs)" },
245
+ { label: "Revenus", description: "Impact direct sur le chiffre d'affaires" },
246
+ { label: "Qualitatif", description: "Satisfaction, conformité, image — non chiffrable" }
247
+ ], multiSelect: true },
248
+ { question: "Que se passe-t-il si ce module n'est PAS développé ?",
249
+ header: "Sans module",
250
+ options: [
251
+ { label: "Bloquant", description: "Impossible de continuer sans (réglementaire, technique)" },
252
+ { label: "Dégradé", description: "On continue avec l'existant mais avec des inefficacités" },
253
+ { label: "Risque", description: "Risque croissant (erreurs, perte de données, non-conformité)" },
254
+ { label: "Confort", description: "Pas d'impact critique, amélioration de confort" }
255
+ ], multiSelect: false },
256
+ { question: "Priorité par rapport aux autres besoins ?",
257
+ header: "Priorité",
258
+ options: [
259
+ { label: "Critique", description: "Doit être livré en premier, bloque d'autres projets" },
260
+ { label: "Haute", description: "Important mais pas bloquant" },
261
+ { label: "Moyenne", description: "Souhaité mais peut attendre" },
262
+ { label: "Basse", description: "Nice-to-have" }
263
+ ], multiSelect: false }
264
+ ])
265
+ ```
266
+
267
+ ---
268
+
269
+ #### 5.2 Category 2: Stakeholders (ALWAYS)
109
270
 
110
- #### 4.2 Category 2: Stakeholders (ALWAYS)
271
+ **Batch 1 Identification (Q2.1-Q2.4):**
111
272
 
112
- Ask questions from `02-stakeholders.md`:
113
- - Q2.1-Q2.4: Identification
114
- - Q2.5-Q2.8: Needs per role
273
+ ```
274
+ AskUserQuestion([
275
+ { question: "Qui sont les utilisateurs directs de ce module ?",
276
+ header: "Utilisateurs",
277
+ options: [
278
+ { label: "Opérationnel", description: "Utilisateurs quotidiens qui saisissent/consultent" },
279
+ { label: "Manager", description: "Responsables qui valident, supervisent, consultent les KPIs" },
280
+ { label: "Admin", description: "Administrateurs qui configurent et gèrent les accès" },
281
+ { label: "Externe", description: "Clients, fournisseurs, partenaires" }
282
+ ], multiSelect: true },
283
+ { question: "Qui sont les bénéficiaires indirects ?",
284
+ header: "Indirects",
285
+ options: [
286
+ { label: "Direction", description: "Reçoit des reportings ou KPIs" },
287
+ { label: "Support", description: "Équipe support qui aide les utilisateurs" },
288
+ { label: "Audit", description: "Auditeurs internes/externes (conformité)" },
289
+ { label: "Aucun", description: "Pas de bénéficiaire indirect identifié" }
290
+ ], multiSelect: true },
291
+ { question: "Qui est le décideur final (sponsor) ?",
292
+ header: "Sponsor",
293
+ options: [
294
+ { label: "Direction métier", description: "Directeur du département demandeur" },
295
+ { label: "Chef de projet", description: "PM/PO qui pilote le développement" },
296
+ { label: "DSI/CTO", description: "Direction technique" },
297
+ { label: "Comité", description: "Décision collégiale (comité de pilotage)" }
298
+ ], multiSelect: false }
299
+ ])
300
+ ```
115
301
 
116
302
  **ULTRATHINK checkpoint:**
117
- - All user types identified?
118
- - Pain points documented per role?
119
- - Decision maker confirmed?
303
+ - If only 1-2 user types → probe with Technique 5: "Et les auditeurs, le support, les processus automatisés ?"
304
+ - If no "Admin" SmartStack requires admin role, clarify
305
+ - If "Externe" → follow-up: portal, API, or shared access?
120
306
 
121
- #### 4.3 Category 3: Scope (ALWAYS)
307
+ **Batch 2 Needs per role (Q2.5-Q2.8):**
122
308
 
123
- Ask questions from `03-scope.md`:
124
- - Q3.1-Q3.4: MoSCoW prioritization
125
- - Q3.5-Q3.8: Process flows
309
+ For **EACH role** identified in batch 1, ask:
310
+
311
+ ```
312
+ AskUserQuestion([
313
+ { question: "Pour {role}: quelles tâches principales ?",
314
+ header: "{role}",
315
+ options: [
316
+ { label: "Consulter", description: "Visualiser, rechercher, filtrer les données" },
317
+ { label: "Saisir/Modifier", description: "Créer et modifier des enregistrements" },
318
+ { label: "Valider/Approuver", description: "Valider des actions, changer des statuts" },
319
+ { label: "Exporter/Reporting", description: "Extraire des données, générer des rapports" }
320
+ ], multiSelect: true },
321
+ { question: "Fréquence d'utilisation pour {role} ?",
322
+ header: "Fréquence",
323
+ options: [
324
+ { label: "Plusieurs fois/jour", description: "Outil de travail quotidien principal" },
325
+ { label: "1 fois/jour", description: "Consultation ou saisie quotidienne ponctuelle" },
326
+ { label: "Hebdomadaire", description: "Revues ou points hebdomadaires" },
327
+ { label: "Mensuelle/rare", description: "Clôture, audit, utilisation exceptionnelle" }
328
+ ], multiSelect: false },
329
+ { question: "Principal point de douleur actuel de {role} ?",
330
+ header: "Frustration",
331
+ options: [
332
+ { label: "Lenteur", description: "Le processus actuel prend trop de temps" },
333
+ { label: "Erreurs", description: "Saisies en double, incohérences, oublis" },
334
+ { label: "Manque info", description: "Pas de visibilité sur l'état ou les indicateurs" },
335
+ { label: "Aucun outil", description: "Tout est fait manuellement sans outil" }
336
+ ], multiSelect: true }
337
+ ])
338
+ ```
339
+
340
+ ---
341
+
342
+ #### 5.3 Category 3: Scope (ALWAYS)
343
+
344
+ **Batch 1 — MoSCoW (Q3.1-Q3.4):**
345
+
346
+ ```
347
+ AskUserQuestion([
348
+ { question: "Fonctionnalités ESSENTIELLES (Must-Have v1) ?",
349
+ header: "Must-Have",
350
+ options: [
351
+ { label: "CRUD complet", description: "Liste + Création + Modification + Suppression" },
352
+ { label: "Recherche/Filtres", description: "Recherche textuelle et filtres combinables" },
353
+ { label: "Workflow/Validation", description: "Processus de validation avec statuts" },
354
+ { label: "Import/Export", description: "Import de données existantes et/ou export" }
355
+ ], multiSelect: true },
356
+ { question: "Fonctionnalités SOUHAITÉES (Should-Have v2) ?",
357
+ header: "Should-Have",
358
+ options: [
359
+ { label: "Dashboard/KPIs", description: "Tableau de bord avec indicateurs visuels" },
360
+ { label: "Notifications", description: "Alertes email ou in-app sur événements" },
361
+ { label: "Historique/Audit", description: "Historique détaillé des modifications" },
362
+ { label: "Intégrations", description: "Connexion avec d'autres modules/systèmes" }
363
+ ], multiSelect: true },
364
+ { question: "Qu'est-ce qui est EXCLU du périmètre ?",
365
+ header: "Exclusions",
366
+ options: [
367
+ { label: "Mobile", description: "Pas d'accès mobile pour la v1" },
368
+ { label: "Reporting avancé", description: "Pas de rapports complexes ou BI" },
369
+ { label: "Multi-langue contenu", description: "UI i18n, mais pas le contenu métier" },
370
+ { label: "Rien d'exclu", description: "Pas d'exclusion explicite" }
371
+ ], multiSelect: true }
372
+ ])
373
+ ```
126
374
 
127
375
  **ULTRATHINK checkpoint:**
128
- - Must-Have vs Should-Have clear?
129
- - Exclusions explicit?
130
- - Main flow documented?
376
+ - If "Rien d'exclu" → anti-pattern "Scope illimité" → probe exclusions
377
+ - If > 5 Must-Have → "Sans cette fonctionnalité, le module a ZÉRO valeur ?"
378
+
379
+ **Batch 2 — Process flow (Q3.5-Q3.8):**
380
+
381
+ ```
382
+ AskUserQuestion([
383
+ { question: "Quel est le parcours principal de l'utilisateur ?",
384
+ header: "Flow",
385
+ options: [
386
+ { label: "Liste → Détail → Action", description: "Consulte liste, ouvre élément, agit" },
387
+ { label: "Formulaire → Validation", description: "Saisie, validation métier, confirmation" },
388
+ { label: "Dashboard → Drill-down", description: "Vue d'ensemble puis exploration détails" },
389
+ { label: "Workflow multi-étapes", description: "Processus séquentiel avec transitions" }
390
+ ], multiSelect: false },
391
+ { question: "Y a-t-il des points de décision dans le flux ?",
392
+ header: "Décisions",
393
+ options: [
394
+ { label: "Approbation manager", description: "Un supérieur doit valider" },
395
+ { label: "Condition données", description: "Le flux change selon un champ (montant, type)" },
396
+ { label: "Choix utilisateur", description: "L'utilisateur choisit une branche" },
397
+ { label: "Aucun", description: "Flux linéaire sans branchement" }
398
+ ], multiSelect: true },
399
+ { question: "Quels cas d'erreur faut-il gérer ?",
400
+ header: "Erreurs",
401
+ options: [
402
+ { label: "Doublon", description: "Tentative de créer un enregistrement existant" },
403
+ { label: "Données invalides", description: "Champs requis manquants, formats incorrects" },
404
+ { label: "Permission refusée", description: "L'utilisateur n'a pas les droits" },
405
+ { label: "Dépendance manquante", description: "Entité référencée supprimée/inexistante" }
406
+ ], multiSelect: true }
407
+ ])
408
+ ```
409
+
410
+ ---
411
+
412
+ #### 5.4 Additional Categories (CONDITIONAL)
413
+
414
+ For each loaded conditional category (04-10), follow the same interactive protocol:
415
+
416
+ 1. **Read the questionnaire file** for the category
417
+ 2. **Formulate `AskUserQuestion` batches** based on the questions and their Elicitation Guide
418
+ 3. **Use predefined options** adapted to the category context
419
+ 4. **Apply follow-ups** if answers are vague (see each file's Elicitation Guide)
420
+ 5. **Check anti-patterns** listed in the questionnaire
421
+
422
+ Document each response with:
423
+ - Confidence level: **Confirmed** (clear answer) / **To validate** (vague, needs follow-up) / **Hypothesis** (inferred by BA)
424
+ - Follow-up questions if quality is insufficient
425
+
426
+ #### 5.5 Reformulation Loop (AFTER EACH CATEGORY)
427
+
428
+ > **RULE: After each category, reformulate understanding and validate with user.**
131
429
 
132
- #### 4.4 Additional Categories (CONDITIONAL)
430
+ After completing a category's batches, display a concise summary and ask for validation:
133
431
 
134
- For each loaded category, conduct targeted elicitation.
135
- Document responses with:
136
- - Source (who answered)
137
- - Confidence level (Confirmed/To validate/Hypothesis)
138
- - Follow-up questions
432
+ ```
433
+ AskUserQuestion([
434
+ { question: "Voici ce que j'ai compris pour {category_name}:
435
+ {bullet_point_summary}
436
+ Est-ce correct ?",
437
+ header: "Validation",
438
+ options: [
439
+ { label: "Correct", description: "La compréhension est fidèle, on continue" },
440
+ { label: "Partiellement", description: "Il y a des nuances ou corrections à apporter" },
441
+ { label: "Incorrect", description: "Mauvaise compréhension, il faut reprendre" }
442
+ ], multiSelect: false }
443
+ ])
444
+ ```
445
+
446
+ - If **"Correct"** → proceed to next category
447
+ - If **"Partiellement"** → ask: "Quelles corrections ou nuances souhaitez-vous apporter ?" (free text follow-up)
448
+ - If **"Incorrect"** → re-ask the category with refined questions based on feedback
449
+
450
+ **This loop prevents misunderstandings from propagating through all subsequent phases.**
139
451
 
140
452
  ---
141
453
 
142
- ### 5. Explore Codebase (if economy_mode = false)
454
+ #### 5.6 Risk Analysis
143
455
 
144
- **Launch parallel exploration agents:**
456
+ > **RULE: Identifier les risques PENDANT la discovery, pas après.**
145
457
 
146
458
  ```
147
- Agent 1: Existing patterns
148
- "Search for similar modules in src/SmartStack.Domain/Entities/
149
- and src/SmartStack.Application/Features/ to understand patterns"
459
+ AskUserQuestion([
460
+ { question: "Quels risques métier identifiez-vous ?",
461
+ header: "Risques",
462
+ options: [
463
+ { label: "Adoption", description: "Les utilisateurs pourraient ne pas utiliser le module" },
464
+ { label: "Données", description: "Qualité ou migration des données existantes problématique" },
465
+ { label: "Processus", description: "Le processus actuel est mal compris ou va changer" },
466
+ { label: "Dépendance", description: "Dépend d'un autre module/système pas encore prêt" }
467
+ ], multiSelect: true },
468
+ { question: "Quels risques techniques anticipez-vous ?",
469
+ header: "Tech",
470
+ options: [
471
+ { label: "Performance", description: "Volume de données ou charge utilisateur élevé" },
472
+ { label: "Intégration", description: "Connexion avec un système externe complexe" },
473
+ { label: "Sécurité", description: "Données sensibles, conformité, audit" },
474
+ { label: "Aucun identifié", description: "Pas de risque technique particulier" }
475
+ ], multiSelect: true },
476
+ { question: "Quels risques organisationnels ?",
477
+ header: "Orga",
478
+ options: [
479
+ { label: "Disponibilité", description: "Les parties prenantes ne seront pas disponibles pour valider" },
480
+ { label: "Changement", description: "Les besoins risquent de changer en cours de développement" },
481
+ { label: "Formation", description: "Les utilisateurs auront besoin de formation" },
482
+ { label: "Aucun identifié", description: "Pas de risque organisationnel particulier" }
483
+ ], multiSelect: true }
484
+ ])
485
+ ```
486
+
487
+ Pour chaque risque identifié, classifier :
150
488
 
151
- Agent 2: Related integrations
152
- "Search for existing APIs and integrations that this module
153
- might need to connect with"
489
+ | Probabilité | Impact | Priorité |
490
+ |-------------|--------|----------|
491
+ | Haute | Haut | **Critique** — mitigation obligatoire |
492
+ | Haute | Bas | **Moyen** — surveiller |
493
+ | Basse | Haut | **Moyen** — plan de contingence |
494
+ | Basse | Bas | **Faible** — accepter |
154
495
 
155
- Agent 3: UI patterns (if UI-centric)
156
- "Search for similar pages in web/smartstack-web/src/pages/business/
157
- to understand React patterns"
496
+ ---
497
+
498
+ #### 5.7 Acceptance Criteria Co-construction
499
+
500
+ > **RULE: Les critères d'acceptation sont CO-CONSTRUITS avec le client, pas inférés.**
501
+
502
+ Pour chaque fonctionnalité Must-Have identifiée en Q3.1, proposer des critères et les valider :
503
+
504
+ ```
505
+ AskUserQuestion([
506
+ { question: "Pour '{must_have_feature}', ces critères d'acceptation sont-ils corrects ?
507
+ - AC-{N}: {criterion_proposed_by_BA}
508
+ - AC-{N+1}: {criterion_proposed_by_BA}
509
+ - AC-{N+2}: {criterion_proposed_by_BA}",
510
+ header: "Acceptation",
511
+ options: [
512
+ { label: "Corrects", description: "Les critères sont bons tels quels" },
513
+ { label: "À compléter", description: "Il manque des critères importants" },
514
+ { label: "À modifier", description: "Certains critères ne sont pas bons" }
515
+ ], multiSelect: false }
516
+ ])
158
517
  ```
159
518
 
160
- If `{economy_mode}` = true:
161
- - Use direct Glob/Grep tools only
162
- - Read 3-5 most relevant files
163
- - Skip subagents
519
+ - Si **"À compléter"** → demander quels critères ajouter (texte libre)
520
+ - Si **"À modifier"** demander quelles corrections apporter
521
+ - Répéter pour chaque fonctionnalité Must-Have
522
+
523
+ **Résultat :** Liste de critères **validés par le client**, pas supposés par le BA.
164
524
 
165
525
  ---
166
526
 
@@ -216,17 +576,78 @@ Compile all findings into structured format:
216
576
  |------|------------|--------|
217
577
  {From loaded constraint categories}
218
578
 
219
- ## 6. Acceptance Criteria (Inferred)
579
+ ## 6. Codebase Context
580
+
581
+ ### 6.1 Existing Modules
582
+ {From step 3 pre-research}
583
+
584
+ ### 6.2 Cross-Module Impact
585
+ {From questionnaire/13-cross-module.md if loaded}
586
+
587
+ ### 6.3 Migration Considerations
588
+ {From questionnaire/12-migration.md if loaded}
589
+
590
+ ## 7. Data Lifecycle
591
+ {From questionnaire/11-data-lifecycle.md if loaded}
592
+
593
+ ## 8. Identified Risks
594
+
595
+ | Type | Risk | Probability | Impact | Priority | Mitigation |
596
+ |------|--------|-------------|--------|----------|------------|
597
+ {Table from section 5.6}
220
598
 
221
- - [ ] AC-001: {criterion 1}
222
- - [ ] AC-002: {criterion 2}
599
+ ## 9. Critères d'Acceptation (Co-construits)
600
+
601
+ > Validés avec le client — voir section 5.7
602
+
603
+ - [ ] AC-001: {criterion 1} ✅ Validé
604
+ - [ ] AC-002: {criterion 2} ✅ Validé
223
605
  ...
224
606
  ```
225
607
 
226
608
  ---
227
609
 
610
+ ### 6b. Generate Context Digest
611
+
612
+ **Write digest to:** `{output_dir}/digest-01.md`
613
+
614
+ ```markdown
615
+ # Digest: Step 01 - Discovery
616
+
617
+ ## Changes
618
+ - {output_dir}/1-discovery.md: Discovery document created
619
+
620
+ ## Decisions
621
+ - Feature type: {feature_type}
622
+ - Categories loaded: {list of loaded categories}
623
+ - Elicitation approach: {interactive with N batches}
624
+
625
+ ## Findings
626
+ - Codebase context: {summary of pre-research findings}
627
+ - Risk count: {count from section 5.6}
628
+ - Open questions: {count}
629
+
630
+ ## State Updates
631
+ | Variable | New Value |
632
+ |----------|-----------|
633
+ | feature_type | {feature_type} |
634
+ | categories_loaded | {list} |
635
+ | questions_answered | {count} |
636
+ | open_questions | {count} |
637
+ | acceptance_criteria_count | {count} |
638
+
639
+ ## For Next Step
640
+ - {count} business rules implicit in discovery responses
641
+ - {count} entities mentioned by stakeholders
642
+ - Key constraints: {top 3 constraints}
643
+ - Risk register: {count} risks identified ({count} critical)
644
+ ```
645
+
646
+ ---
647
+
228
648
  ### 7. Save Output
229
649
 
650
+
230
651
  Write to: `{output_dir}/1-discovery.md`
231
652
 
232
653
  Update `00-context.md`:
@@ -238,15 +659,17 @@ Update `00-context.md`:
238
659
  ### 8. Display Summary and Load Next Step
239
660
 
240
661
  **Display:**
241
- ```
242
- DISCOVERY - {feature_id}
243
- ├── Status: Complete
244
- ├── Categories loaded: {list of loaded categories}
245
- ├── Questions answered: {count}
246
- ├── Open questions: {count}
247
- ├── Output: {output_dir}/1-discovery.md
248
- └── Next: step-02-analyse (BRD formalization)
249
- ```
662
+
663
+ | Field | Value |
664
+ |-------|-------|
665
+ | Step | DISCOVERY |
666
+ | Feature | {feature_id} |
667
+ | Status | Complete |
668
+ | Categories loaded | {list of loaded categories} |
669
+ | Questions answered | {count} |
670
+ | Open questions | {count} |
671
+ | Output | {output_dir}/1-discovery.md |
672
+ | Next | step-02-analyse (BRD formalization) |
250
673
 
251
674
  **If NOT auto_mode:**
252
675
  Ask: "Proceed with business rules analysis?"
@@ -258,10 +681,32 @@ Read and execute: steps/step-02-analyse.md
258
681
 
259
682
  ---
260
683
 
261
- ## OUTPUT
684
+ ## OUTPUT FORMAT:
262
685
 
263
686
  This step produces:
264
687
  - `{output_dir}/1-discovery.md` (created)
265
688
  - `{output_dir}/00-context.md` (updated with AC)
266
689
 
267
690
  Questionnaire categories loaded: **~150-200 lines max** (70% reduction)
691
+
692
+ ## ERROR HANDLING:
693
+
694
+ **If user abandons questionnaire mid-way:**
695
+ 1. Save partial discovery with answers collected so far
696
+ 2. Mark open categories as "Incomplete"
697
+ 3. Update 00-context.md with partial progress
698
+ 4. Allow resume with `/business-analyse -r {feature_id}`
699
+
700
+ **If MCP exploration fails (phase 3a):**
701
+ 1. Log warning: "MCP unavailable, using manual exploration"
702
+ 2. Continue with phase 3b (codebase agents) or Glob/Grep
703
+ 3. Note in discovery: "MCP context unavailable"
704
+
705
+ **If codebase exploration returns empty:**
706
+ 1. Assume greenfield module
707
+ 2. Skip cross-reference questions
708
+ 3. Note: "No existing patterns found"
709
+
710
+ ## NEXT STEP:
711
+
712
+ After completion, proceed to `steps/step-02-analyse.md`