@atlashub/smartstack-cli 2.1.0 → 2.3.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 (38) hide show
  1. package/.documentation/business-analyse.html +1503 -1058
  2. package/dist/index.js +92 -55
  3. package/dist/index.js.map +1 -1
  4. package/package.json +10 -7
  5. package/templates/agents/ba-reader.md +250 -0
  6. package/templates/agents/ba-writer.md +210 -0
  7. package/templates/agents/docs-context-reader.md +51 -33
  8. package/templates/skills/_shared.md +2 -0
  9. package/templates/skills/business-analyse/SKILL.md +120 -108
  10. package/templates/skills/business-analyse/_shared.md +136 -146
  11. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +478 -0
  12. package/templates/skills/business-analyse/questionnaire/01-context.md +3 -15
  13. package/templates/skills/business-analyse/questionnaire/03-scope.md +7 -7
  14. package/templates/skills/business-analyse/questionnaire/08-performance.md +7 -21
  15. package/templates/skills/business-analyse/questionnaire/09-constraints.md +0 -13
  16. package/templates/skills/business-analyse/questionnaire/10-documentation.md +0 -13
  17. package/templates/skills/business-analyse/questionnaire/12-migration.md +1 -1
  18. package/templates/skills/business-analyse/questionnaire.md +72 -76
  19. package/templates/skills/business-analyse/react/components.md +317 -154
  20. package/templates/skills/business-analyse/react/i18n-template.md +167 -106
  21. package/templates/skills/business-analyse/react/schema.md +474 -107
  22. package/templates/skills/business-analyse/schemas/feature-schema.json +860 -0
  23. package/templates/skills/business-analyse/steps/step-00-init.md +395 -285
  24. package/templates/skills/business-analyse/steps/step-01-analyse.md +523 -0
  25. package/templates/skills/business-analyse/steps/step-02-specify.md +899 -0
  26. package/templates/skills/business-analyse/steps/step-03-validate.md +1009 -0
  27. package/templates/skills/business-analyse/steps/step-04-handoff.md +1802 -0
  28. package/templates/skills/business-analyse/templates/tpl-handoff.md +49 -64
  29. package/templates/skills/business-analyse/steps/step-01-discover.md +0 -737
  30. package/templates/skills/business-analyse/steps/step-02-analyse.md +0 -299
  31. package/templates/skills/business-analyse/steps/step-03-specify.md +0 -472
  32. package/templates/skills/business-analyse/steps/step-04-validate.md +0 -335
  33. package/templates/skills/business-analyse/steps/step-05-handoff.md +0 -741
  34. package/templates/skills/business-analyse/steps/step-06-doc-html.md +0 -320
  35. package/templates/skills/business-analyse/templates/00-context.md +0 -105
  36. package/templates/skills/business-analyse/templates/tpl-brd.md +0 -97
  37. package/templates/skills/business-analyse/templates/tpl-discovery.md +0 -78
  38. package/templates/skills/business-analyse/tracking/change-template.md +0 -30
@@ -1,737 +0,0 @@
1
- ---
2
- name: step-01-discover
3
- description: Discovery phase - Elicitation with ULTRATHINK (load questionnaire progressively)
4
- next_step: steps/step-02-analyse.md
5
- ---
6
-
7
- ## YOUR TASK:
8
-
9
- Conduct comprehensive requirements elicitation using ULTRATHINK mode.
10
- Load questionnaire categories progressively based on feature type.
11
-
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
19
-
20
- ## EXECUTION SEQUENCE:
21
-
22
- ### 1. Read Current State
23
-
24
- Read `{output_dir}/00-context.md` to restore:
25
- - `{feature_id}`
26
- - `{feature_description}`
27
- - `{application_name}`
28
- - `{module_name}`
29
- - `{auto_mode}`
30
- - `{economy_mode}`
31
- - `{language}` (défaut: `fr`)
32
-
33
- Update progress: `01-discover` -> "In Progress"
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
-
43
- > **⚠️ BRANDING :** Ne JAMAIS utiliser le mot "SmartStack" dans les communications utilisateur
44
- > (questions, résumés, reformulations, synthèses). Utiliser "la plateforme", "l'application",
45
- > ou "le système" à la place. SmartStack est le nom interne du framework — le projet client
46
- > a son propre nom. Les références techniques internes (paths, MCP calls) restent inchangées.
47
-
48
- ---
49
-
50
- ### 2. Determine Feature Type
51
-
52
- Analyze `{feature_description}` to categorize:
53
-
54
- | Type | Indicators | Load Categories |
55
- |------|------------|-----------------|
56
- | **Data-centric** | "management", "CRUD", "entity", "data" | 01, 02, 03, 04, 06 |
57
- | **Integration** | "API", "sync", "import", "export", "external" | 01, 02, 03, 05, 06 |
58
- | **UI-centric** | "screen", "form", "dashboard", "interface" | 01, 02, 03, 06, 07 |
59
- | **Workflow** | "process", "validation", "workflow", "steps" | 01, 02, 03, 06, 09 |
60
- | **Reporting** | "report", "export", "statistics", "KPI" | 01, 02, 03, 04, 08 |
61
- | **Full module** | "module", "complete", "feature" | ALL categories |
62
-
63
- Store: `{feature_type}`
64
-
65
- ---
66
-
67
- ### 3. Explore Codebase FIRST (Pre-Research)
68
-
69
- > **RULE: Explore BEFORE asking questions. Informed questions > generic questions.**
70
-
71
- **Purpose:** Understand what already exists to ask targeted questions, not generic ones.
72
-
73
- **Phase 3a: MCP SmartStack (si disponible)**
74
-
75
- > Appeler les outils MCP SmartStack pour obtenir le contexte architectural.
76
- > Si le MCP n'est pas disponible, passer directement à la phase 3b.
77
-
78
- ```
79
- MCP Call 1: analyze_extension_points
80
- → Découvrir les modules, entités et points d'extension existants
81
- → Résultat : liste des modules, entités, services disponibles
82
-
83
- MCP Call 2: api_docs (pour l'application cible)
84
- → Consulter la documentation API existante de {application_name}
85
- → Résultat : endpoints existants, DTOs, permissions
86
-
87
- MCP Call 3: validate_conventions (vérification préliminaire)
88
- → Vérifier que le nom {module_name} respecte les conventions
89
- → Résultat : validation ou suggestion de correction
90
- ```
91
-
92
- **Phase 3b: Exploration codebase (agents parallèles)**
93
-
94
- ```
95
- Agent 1: Modules existants dans l'application
96
- "Search for existing modules in src/SmartStack.Domain/Entities/Business/{application_name}/
97
- and src/SmartStack.Application/Features/{application_name}/.
98
- List entities, their attributes, and relationships."
99
-
100
- Agent 2: Intégrations et services liés
101
- "Search for existing APIs, services, and integrations in
102
- src/SmartStack.Application/Features/ that {module_name} might connect with.
103
- List SignalR hubs, background jobs, external API clients."
104
-
105
- Agent 3: Patterns UI (si UI-centric ou Full module)
106
- "Search for existing pages in web/smartstack-web/src/pages/business/{application_name}/
107
- List page structures, components used, and navigation patterns."
108
- ```
109
-
110
- If `{economy_mode}` = true:
111
- - MCP tools remain available (use for validation)
112
- - Skip subagent exploration (phase 3b agents)
113
- - Use direct Glob/Grep tools for codebase exploration
114
- - Read 3-5 most relevant files directly
115
-
116
- **Store findings as `{codebase_context}`:**
117
-
118
- ```markdown
119
- ## Codebase Context
120
-
121
- ### MCP SmartStack (si appelé)
122
- - Extension points: {list from analyze_extension_points}
123
- - API existante: {summary from api_docs}
124
- - Convention check: {result from validate_conventions}
125
-
126
- ### Exploration codebase
127
- - Entités existantes dans {application_name}: {list}
128
- - Modules liés: {list}
129
- - Patterns existants: {entity base classes, CQRS structure}
130
- - Connexions potentielles: {shared entities, APIs, events}
131
- ```
132
-
133
- **Use `{codebase_context}` to:**
134
- - Adapter les options des questions (proposer les entités existantes comme relations)
135
- - Sauter les questions déjà répondues par le codebase
136
- - Détecter les conflits avec les modules existants tôt
137
- - Proposer les patterns d'intégration disponibles (notifications, workflow, IA)
138
-
139
- ---
140
-
141
- ### 4. Load Questionnaire Categories (Progressive)
142
-
143
- **IMPORTANT: Load ONLY relevant categories to minimize context!**
144
-
145
- #### Always load (core):
146
- ```
147
- Read: questionnaire/01-context.md # ~50 lines
148
- Read: questionnaire/02-stakeholders.md # ~70 lines
149
- Read: questionnaire/03-scope.md # ~60 lines
150
- Read: questionnaire/06-security.md # ~70 lines
151
- ```
152
-
153
- #### Conditional loading based on feature_type:
154
- ```
155
- IF {feature_type} = "Data-centric" OR "Full module":
156
- Read: questionnaire/04-data.md # ~80 lines
157
- Read: questionnaire/11-data-lifecycle.md # ~50 lines
158
-
159
- IF {feature_type} = "Integration" OR "Full module":
160
- Read: questionnaire/05-integrations.md # ~60 lines
161
-
162
- IF {feature_type} = "UI-centric" OR "Full module":
163
- Read: questionnaire/07-ui.md # ~60 lines
164
-
165
- IF {feature_type} = "Reporting" OR performance-critical:
166
- Read: questionnaire/08-performance.md # ~55 lines
167
-
168
- IF {feature_type} = "Workflow" OR constraints exist:
169
- Read: questionnaire/09-constraints.md # ~55 lines
170
-
171
- IF documentation required:
172
- Read: questionnaire/10-documentation.md # ~55 lines
173
-
174
- ALWAYS for new modules (not enhancements):
175
- Read: questionnaire/12-migration.md # ~50 lines
176
- Read: questionnaire/13-cross-module.md # ~50 lines
177
- ```
178
-
179
- ---
180
-
181
- ### 5. Conduct Elicitation (INTERACTIVE)
182
-
183
- > **RULE: Use `AskUserQuestion` for EVERY question batch. NEVER list questions as text.**
184
- > See `_shared.md` → "Interactive Elicitation Protocol" for the full protocol.
185
-
186
- **Flow per category:**
187
- 1. Ask batch of max 4 questions via `AskUserQuestion` with predefined options
188
- 2. Process answers → apply ULTRATHINK + Elicitation Techniques
189
- 3. If answers are vague/insufficient → follow-up `AskUserQuestion` with targeted probes
190
- 4. Summarize understanding to user before moving to next category
191
- 5. Repeat for next category
192
-
193
- ---
194
-
195
- #### 5.1 Category 1: Business Context (ALWAYS)
196
-
197
- **Batch 1 — Fundamental Need (Q1.1-Q1.4):**
198
-
199
- ```
200
- AskUserQuestion([
201
- { question: "Quel problème métier ce module doit-il résoudre ?",
202
- header: "Problème",
203
- options: [
204
- { label: "Processus manuel", description: "Automatiser un processus existant fait manuellement" },
205
- { label: "Données dispersées", description: "Centraliser des données dans plusieurs outils/fichiers" },
206
- { label: "Manque visibilité", description: "Obtenir des indicateurs et du suivi inexistants" },
207
- { label: "Conformité", description: "Répondre à une obligation réglementaire ou sécurité" }
208
- ], multiSelect: false },
209
- { question: "Comment ce processus est-il géré aujourd'hui (AS-IS) ?",
210
- header: "AS-IS",
211
- options: [
212
- { label: "Excel/fichiers", description: "Géré via Excel, fichiers partagés ou emails" },
213
- { label: "Autre logiciel", description: "Un outil existant qui ne convient plus" },
214
- { label: "100% manuel", description: "Processus entièrement papier ou oral" },
215
- { label: "Partiellement auto", description: "Partiellement automatisé mais avec des lacunes" }
216
- ], multiSelect: false },
217
- { question: "Quelle est la situation cible (TO-BE) ?",
218
- header: "TO-BE",
219
- options: [
220
- { label: "CRUD complet", description: "Gestion complète (lister, créer, modifier, supprimer)" },
221
- { label: "Workflow", description: "Processus avec étapes, validations, transitions" },
222
- { label: "Dashboard + KPIs", description: "Tableau de bord avec indicateurs de suivi" },
223
- { label: "Intégration", description: "Connexion avec un système externe existant" }
224
- ], multiSelect: true },
225
- { question: "Comment mesurerez-vous le succès (KPIs) ?",
226
- header: "KPIs",
227
- options: [
228
- { label: "Temps gagné", description: "Réduction du temps de traitement (ex: -50%)" },
229
- { label: "Erreurs réduites", description: "Diminution des erreurs de saisie ou d'oubli" },
230
- { label: "Adoption", description: "Nombre d'utilisateurs actifs / fréquence d'utilisation" },
231
- { label: "Pas défini", description: "Les KPIs restent à définir avec le métier" }
232
- ], multiSelect: true }
233
- ])
234
- ```
235
-
236
- **ULTRATHINK checkpoint after batch 1:**
237
- - If "Other" → apply Technique 3 (Concrete Scenario) via follow-up AskUserQuestion
238
- - If KPI = "Pas défini" → apply Technique 4 (Absence Test) via follow-up
239
- - If answer is solution-oriented → apply Technique 1 (Solution → Problem Reframing)
240
-
241
- **Batch 2 — Business Value (Q1.5-Q1.8):**
242
-
243
- ```
244
- AskUserQuestion([
245
- { question: "Quel ROI attendez-vous ? (temps, argent, efficacité)",
246
- header: "ROI",
247
- options: [
248
- { label: "Gain de temps", description: "Heures/jours économisés par semaine/mois" },
249
- { label: "Réduction coûts", description: "Économies directes (licences, ressources, erreurs)" },
250
- { label: "Revenus", description: "Impact direct sur le chiffre d'affaires" },
251
- { label: "Qualitatif", description: "Satisfaction, conformité, image — non chiffrable" }
252
- ], multiSelect: true },
253
- { question: "Quel est le déclencheur de ce besoin ?",
254
- header: "Déclencheur",
255
- options: [
256
- { label: "Urgence opérationnelle", description: "Processus bloqué ou inefficace au quotidien" },
257
- { label: "Obligation réglementaire", description: "Conformité imposée par une deadline externe" },
258
- { label: "Évolution planifiée", description: "Amélioration prévue dans la roadmap" },
259
- { label: "Opportunité", description: "Gain identifié, pas de contrainte immédiate" }
260
- ], multiSelect: false },
261
- { question: "Quel est le délai souhaité de mise en production ?",
262
- header: "Délai",
263
- options: [
264
- { label: "Urgent (< 1 mois)", description: "Besoin immédiat, bloquant des opérations" },
265
- { label: "Court terme (1-3 mois)", description: "Planifié pour le prochain cycle" },
266
- { label: "Moyen terme (3-6 mois)", description: "Important mais pas immédiat" },
267
- { label: "Flexible", description: "Pas de contrainte de délai définie" }
268
- ], multiSelect: false }
269
- ])
270
- ```
271
-
272
- ---
273
-
274
- #### 5.2 Category 2: Stakeholders (ALWAYS)
275
-
276
- **Batch 1 — Identification (Q2.1-Q2.4):**
277
-
278
- ```
279
- AskUserQuestion([
280
- { question: "Qui sont les utilisateurs directs de ce module ?",
281
- header: "Utilisateurs",
282
- options: [
283
- { label: "Opérationnel", description: "Utilisateurs quotidiens qui saisissent/consultent" },
284
- { label: "Manager", description: "Responsables qui valident, supervisent, consultent les KPIs" },
285
- { label: "Admin", description: "Administrateurs qui configurent et gèrent les accès" },
286
- { label: "Externe", description: "Clients, fournisseurs, partenaires" }
287
- ], multiSelect: true },
288
- { question: "Qui sont les bénéficiaires indirects ?",
289
- header: "Indirects",
290
- options: [
291
- { label: "Direction", description: "Reçoit des reportings ou KPIs" },
292
- { label: "Support", description: "Équipe support qui aide les utilisateurs" },
293
- { label: "Audit", description: "Auditeurs internes/externes (conformité)" },
294
- { label: "Aucun", description: "Pas de bénéficiaire indirect identifié" }
295
- ], multiSelect: true },
296
- { question: "Qui est le décideur final (sponsor) ?",
297
- header: "Sponsor",
298
- options: [
299
- { label: "Direction métier", description: "Directeur du département demandeur" },
300
- { label: "Chef de projet", description: "PM/PO qui pilote le développement" },
301
- { label: "DSI/CTO", description: "Direction technique" },
302
- { label: "Comité", description: "Décision collégiale (comité de pilotage)" }
303
- ], multiSelect: false }
304
- ])
305
- ```
306
-
307
- **ULTRATHINK checkpoint:**
308
- - If only 1-2 user types → probe with Technique 5: "Et les auditeurs, le support, les processus automatisés ?"
309
- - If no "Admin" → The platform requires an admin role, clarify
310
- - If "Externe" → follow-up: portal, API, or shared access?
311
-
312
- **Batch 2 — Needs per role (Q2.5-Q2.8):**
313
-
314
- For **EACH role** identified in batch 1, ask:
315
-
316
- ```
317
- AskUserQuestion([
318
- { question: "Pour {role}: quelles tâches principales ?",
319
- header: "{role}",
320
- options: [
321
- { label: "Consulter", description: "Visualiser, rechercher, filtrer les données" },
322
- { label: "Saisir/Modifier", description: "Créer et modifier des enregistrements" },
323
- { label: "Valider/Approuver", description: "Valider des actions, changer des statuts" },
324
- { label: "Exporter/Reporting", description: "Extraire des données, générer des rapports" }
325
- ], multiSelect: true },
326
- { question: "Fréquence d'utilisation pour {role} ?",
327
- header: "Fréquence",
328
- options: [
329
- { label: "Plusieurs fois/jour", description: "Outil de travail quotidien principal" },
330
- { label: "1 fois/jour", description: "Consultation ou saisie quotidienne ponctuelle" },
331
- { label: "Hebdomadaire", description: "Revues ou points hebdomadaires" },
332
- { label: "Mensuelle/rare", description: "Clôture, audit, utilisation exceptionnelle" }
333
- ], multiSelect: false },
334
- { question: "Principal point de douleur actuel de {role} ?",
335
- header: "Frustration",
336
- options: [
337
- { label: "Lenteur", description: "Le processus actuel prend trop de temps" },
338
- { label: "Erreurs", description: "Saisies en double, incohérences, oublis" },
339
- { label: "Manque info", description: "Pas de visibilité sur l'état ou les indicateurs" },
340
- { label: "Aucun outil", description: "Tout est fait manuellement sans outil" }
341
- ], multiSelect: true }
342
- ])
343
- ```
344
-
345
- ---
346
-
347
- #### 5.3 Category 3: Scope (ALWAYS)
348
-
349
- **Batch 1 — MoSCoW (Q3.1-Q3.4):**
350
-
351
- ```
352
- AskUserQuestion([
353
- { question: "Fonctionnalités ESSENTIELLES (Must-Have v1) ?",
354
- header: "Must-Have",
355
- options: [
356
- { label: "CRUD complet", description: "Liste + Création + Modification + Suppression" },
357
- { label: "Recherche/Filtres", description: "Recherche textuelle et filtres combinables" },
358
- { label: "Workflow/Validation", description: "Processus de validation avec statuts" },
359
- { label: "Import/Export", description: "Import de données existantes et/ou export" }
360
- ], multiSelect: true },
361
- { question: "Fonctionnalités SOUHAITÉES (Should-Have v2) ?",
362
- header: "Should-Have",
363
- options: [
364
- { label: "Dashboard/KPIs", description: "Tableau de bord avec indicateurs visuels" },
365
- { label: "Notifications", description: "Alertes email ou in-app sur événements" },
366
- { label: "Historique/Audit", description: "Historique détaillé des modifications" },
367
- { label: "Intégrations", description: "Connexion avec d'autres modules/systèmes" }
368
- ], multiSelect: true },
369
- { question: "Y a-t-il des limites connues pour la v1 ?",
370
- header: "Limites v1",
371
- options: [
372
- { label: "Pas de limite identifiée", description: "Le périmètre sera défini par les Must-Have et Should-Have" },
373
- { label: "Budget/temps limité", description: "Contrainte qui pourrait réduire le périmètre" },
374
- { label: "Dépendance externe", description: "Certaines fonctions dépendent d'un autre système pas encore prêt" },
375
- { label: "Complexité technique", description: "Certaines fonctions nécessitent une phase de R&D" }
376
- ], multiSelect: true }
377
- ])
378
- ```
379
-
380
- **ULTRATHINK checkpoint:**
381
- - If > 5 Must-Have → "Parmi ces fonctionnalités, lesquelles apportent le plus de valeur pour la v1 ?"
382
- - If "Pas de limite identifiée" → accept as valid, scope will be naturally bounded by Must-Have/Should-Have
383
-
384
- **Batch 2 — Process flow (Q3.5-Q3.8):**
385
-
386
- ```
387
- AskUserQuestion([
388
- { question: "Quel est le parcours principal de l'utilisateur ?",
389
- header: "Flow",
390
- options: [
391
- { label: "Liste → Détail → Action", description: "Consulte liste, ouvre élément, agit" },
392
- { label: "Formulaire → Validation", description: "Saisie, validation métier, confirmation" },
393
- { label: "Dashboard → Drill-down", description: "Vue d'ensemble puis exploration détails" },
394
- { label: "Workflow multi-étapes", description: "Processus séquentiel avec transitions" }
395
- ], multiSelect: false },
396
- { question: "Y a-t-il des points de décision dans le flux ?",
397
- header: "Décisions",
398
- options: [
399
- { label: "Approbation manager", description: "Un supérieur doit valider" },
400
- { label: "Condition données", description: "Le flux change selon un champ (montant, type)" },
401
- { label: "Choix utilisateur", description: "L'utilisateur choisit une branche" },
402
- { label: "Aucun", description: "Flux linéaire sans branchement" }
403
- ], multiSelect: true },
404
- { question: "Quels cas d'erreur faut-il gérer ?",
405
- header: "Erreurs",
406
- options: [
407
- { label: "Doublon", description: "Tentative de créer un enregistrement existant" },
408
- { label: "Données invalides", description: "Champs requis manquants, formats incorrects" },
409
- { label: "Permission refusée", description: "L'utilisateur n'a pas les droits" },
410
- { label: "Dépendance manquante", description: "Entité référencée supprimée/inexistante" }
411
- ], multiSelect: true }
412
- ])
413
- ```
414
-
415
- ---
416
-
417
- #### 5.4 Additional Categories (CONDITIONAL)
418
-
419
- For each loaded conditional category (04-10), follow the same interactive protocol:
420
-
421
- 1. **Read the questionnaire file** for the category
422
- 2. **Formulate `AskUserQuestion` batches** based on the questions and their Elicitation Guide
423
- 3. **Use predefined options** adapted to the category context
424
- 4. **Apply follow-ups** if answers are vague (see each file's Elicitation Guide)
425
- 5. **Check anti-patterns** listed in the questionnaire
426
-
427
- Document each response with:
428
- - Confidence level: **Confirmed** (clear answer) / **To validate** (vague, needs follow-up) / **Hypothesis** (inferred by BA)
429
- - Follow-up questions if quality is insufficient
430
-
431
- #### 5.5 Reformulation Loop (AFTER EACH CATEGORY)
432
-
433
- > **RULE: After each category, reformulate understanding and validate with user.**
434
- > **IMPORTANT: The `question` field of `AskUserQuestion` does NOT support markdown or line breaks.**
435
- > **NEVER put long summaries in the `question` field — it becomes an unreadable wall of text.**
436
-
437
- After completing a category's batches:
438
-
439
- **Step 1: Display the summary as regular text output** (supports markdown formatting):
440
-
441
- ```
442
- Output text directly to the user:
443
-
444
- ## Synthèse - {category_name}
445
-
446
- - **Point 1:** {résumé}
447
- - **Point 2:** {résumé}
448
- - **Point 3:** {résumé}
449
- ```
450
-
451
- **Step 2: Ask for validation with a SHORT question** (no summary in the question field):
452
-
453
- ```
454
- AskUserQuestion([
455
- { question: "Cette synthèse est-elle correcte ?",
456
- header: "Validation",
457
- options: [
458
- { label: "Correct", description: "La compréhension est fidèle, on continue" },
459
- { label: "Partiellement", description: "Il y a des nuances ou corrections à apporter" },
460
- { label: "Incorrect", description: "Mauvaise compréhension, il faut reprendre" }
461
- ], multiSelect: false }
462
- ])
463
- ```
464
-
465
- > **⚠️ FORMATTING RULE for `AskUserQuestion`:**
466
- > Le champ `question` ne supporte PAS le markdown ni les retours à la ligne.
467
- > Une question simple reste lisible meme longue. Mais ne JAMAIS mettre de contenu
468
- > structuré (listes à puces, résumés multi-points, tableaux) dans le champ `question`.
469
- > Pour du contenu structuré → afficher en **texte direct** AVANT l'appel (voir `_shared.md`).
470
-
471
- - If **"Correct"** → proceed to next category
472
- - If **"Partiellement"** → ask: "Quelles corrections ou nuances souhaitez-vous apporter ?" (free text follow-up)
473
- - If **"Incorrect"** → re-ask the category with refined questions based on feedback
474
-
475
- **This loop prevents misunderstandings from propagating through all subsequent phases.**
476
-
477
- ---
478
-
479
- #### 5.6 Risk Analysis
480
-
481
- > **RULE: Identifier les risques PENDANT la discovery, pas après.**
482
-
483
- ```
484
- AskUserQuestion([
485
- { question: "Quels risques métier identifiez-vous ?",
486
- header: "Risques",
487
- options: [
488
- { label: "Adoption", description: "Les utilisateurs pourraient ne pas utiliser le module" },
489
- { label: "Données", description: "Qualité ou migration des données existantes problématique" },
490
- { label: "Processus", description: "Le processus actuel est mal compris ou va changer" },
491
- { label: "Dépendance", description: "Dépend d'un autre module/système pas encore prêt" }
492
- ], multiSelect: true },
493
- { question: "Quels risques techniques anticipez-vous ?",
494
- header: "Tech",
495
- options: [
496
- { label: "Performance", description: "Volume de données ou charge utilisateur élevé" },
497
- { label: "Intégration", description: "Connexion avec un système externe complexe" },
498
- { label: "Sécurité", description: "Données sensibles, conformité, audit" },
499
- { label: "Aucun identifié", description: "Pas de risque technique particulier" }
500
- ], multiSelect: true },
501
- { question: "Quels risques organisationnels ?",
502
- header: "Orga",
503
- options: [
504
- { label: "Disponibilité", description: "Les parties prenantes ne seront pas disponibles pour valider" },
505
- { label: "Changement", description: "Les besoins risquent de changer en cours de développement" },
506
- { label: "Formation", description: "Les utilisateurs auront besoin de formation" },
507
- { label: "Aucun identifié", description: "Pas de risque organisationnel particulier" }
508
- ], multiSelect: true }
509
- ])
510
- ```
511
-
512
- Pour chaque risque identifié, classifier :
513
-
514
- | Probabilité | Impact | Priorité |
515
- |-------------|--------|----------|
516
- | Haute | Haut | **Critique** — mitigation obligatoire |
517
- | Haute | Bas | **Moyen** — surveiller |
518
- | Basse | Haut | **Moyen** — plan de contingence |
519
- | Basse | Bas | **Faible** — accepter |
520
-
521
- ---
522
-
523
- #### 5.7 Acceptance Criteria Co-construction
524
-
525
- > **RULE: Les critères d'acceptation sont CO-CONSTRUITS avec le client, pas inférés.**
526
-
527
- Pour chaque fonctionnalité Must-Have identifiée en Q3.1, proposer des critères et les valider :
528
-
529
- ```
530
- AskUserQuestion([
531
- { question: "Pour '{must_have_feature}', ces critères d'acceptation sont-ils corrects ?
532
- - AC-{N}: {criterion_proposed_by_BA}
533
- - AC-{N+1}: {criterion_proposed_by_BA}
534
- - AC-{N+2}: {criterion_proposed_by_BA}",
535
- header: "Acceptation",
536
- options: [
537
- { label: "Corrects", description: "Les critères sont bons tels quels" },
538
- { label: "À compléter", description: "Il manque des critères importants" },
539
- { label: "À modifier", description: "Certains critères ne sont pas bons" }
540
- ], multiSelect: false }
541
- ])
542
- ```
543
-
544
- - Si **"À compléter"** → demander quels critères ajouter (texte libre)
545
- - Si **"À modifier"** → demander quelles corrections apporter
546
- - Répéter pour chaque fonctionnalité Must-Have
547
-
548
- **Résultat :** Liste de critères **validés par le client**, pas supposés par le BA.
549
-
550
- ---
551
-
552
- ### 6. Synthesize Discovery
553
-
554
- Compile all findings into structured format:
555
-
556
- ```markdown
557
- # Discovery - {feature_id} {feature_description}
558
-
559
- > **Module:** business/{application_name}/{module_name}
560
- > **Version:** 1.0
561
- > **Date:** {timestamp}
562
- > **Author:** Business Analyst (Claude)
563
-
564
- ## 1. Business Context
565
-
566
- ### 1.1 Need Description
567
- {Synthesized from Q1.1-Q1.4}
568
-
569
- ### 1.2 Current Problem
570
- {From Q1.2}
571
-
572
- ### 1.3 Expected Value
573
- {From Q1.5-Q1.7, quantified if possible}
574
-
575
- ## 2. Stakeholders
576
-
577
- | Role | Function | Involvement | Decision Level |
578
- |------|----------|-------------|-----------------|
579
- {Table from Q2.x responses}
580
-
581
- ## 3. Scope
582
-
583
- ### 3.1 In Scope (Must-Have)
584
- {From Q3.1}
585
-
586
- ### 3.2 Should-Have
587
- {From Q3.2}
588
-
589
- ### 3.3 Out of Scope
590
- {From Q3.4 - EXPLICIT exclusions}
591
-
592
- ## 4. Open Questions
593
-
594
- | # | Question | Answer | Status |
595
- |---|----------|--------|--------|
596
- {Any unresolved questions}
597
-
598
- ## 5. Identified Constraints
599
-
600
- | Type | Constraint | Impact |
601
- |------|------------|--------|
602
- {From loaded constraint categories}
603
-
604
- ## 6. Codebase Context
605
-
606
- ### 6.1 Existing Modules
607
- {From step 3 pre-research}
608
-
609
- ### 6.2 Cross-Module Impact
610
- {From questionnaire/13-cross-module.md if loaded}
611
-
612
- ### 6.3 Migration Considerations
613
- {From questionnaire/12-migration.md if loaded}
614
-
615
- ## 7. Data Lifecycle
616
- {From questionnaire/11-data-lifecycle.md if loaded}
617
-
618
- ## 8. Identified Risks
619
-
620
- | Type | Risk | Probability | Impact | Priority | Mitigation |
621
- |------|--------|-------------|--------|----------|------------|
622
- {Table from section 5.6}
623
-
624
- ## 9. Critères d'Acceptation (Co-construits)
625
-
626
- > Validés avec le client — voir section 5.7
627
-
628
- - [ ] AC-001: {criterion 1} ✅ Validé
629
- - [ ] AC-002: {criterion 2} ✅ Validé
630
- ...
631
- ```
632
-
633
- ---
634
-
635
- ### 6b. Generate Context Digest
636
-
637
- **Write digest to:** `{output_dir}/digest-01.md`
638
-
639
- ```markdown
640
- # Digest: Step 01 - Discovery
641
-
642
- ## Changes
643
- - {output_dir}/1-discovery.md: Discovery document created
644
-
645
- ## Decisions
646
- - Feature type: {feature_type}
647
- - Categories loaded: {list of loaded categories}
648
- - Elicitation approach: {interactive with N batches}
649
-
650
- ## Findings
651
- - Codebase context: {summary of pre-research findings}
652
- - Risk count: {count from section 5.6}
653
- - Open questions: {count}
654
-
655
- ## State Updates
656
- | Variable | New Value |
657
- |----------|-----------|
658
- | feature_type | {feature_type} |
659
- | categories_loaded | {list} |
660
- | questions_answered | {count} |
661
- | open_questions | {count} |
662
- | acceptance_criteria_count | {count} |
663
-
664
- ## For Next Step
665
- - {count} business rules implicit in discovery responses
666
- - {count} entities mentioned by stakeholders
667
- - Key constraints: {top 3 constraints}
668
- - Risk register: {count} risks identified ({count} critical)
669
- ```
670
-
671
- ---
672
-
673
- ### 7. Save Output
674
-
675
-
676
- Write to: `{output_dir}/1-discovery.md`
677
-
678
- Update `00-context.md`:
679
- - Progress: `01-discover` -> "Complete"
680
- - Add acceptance criteria to state
681
-
682
- ---
683
-
684
- ### 8. Display Summary and Load Next Step
685
-
686
- **Display:**
687
-
688
- | Field | Value |
689
- |-------|-------|
690
- | Step | DISCOVERY |
691
- | Feature | {feature_id} |
692
- | Status | Complete |
693
- | Categories loaded | {list of loaded categories} |
694
- | Questions answered | {count} |
695
- | Open questions | {count} |
696
- | Output | {output_dir}/1-discovery.md |
697
- | Next | step-02-analyse (BRD formalization) |
698
-
699
- **If NOT auto_mode:**
700
- Ask: "Proceed with business rules analysis?"
701
-
702
- **Load next step:**
703
- ```
704
- Read and execute: steps/step-02-analyse.md
705
- ```
706
-
707
- ---
708
-
709
- ## OUTPUT FORMAT:
710
-
711
- This step produces:
712
- - `{output_dir}/1-discovery.md` (created)
713
- - `{output_dir}/00-context.md` (updated with AC)
714
-
715
- Questionnaire categories loaded: **~150-200 lines max** (70% reduction)
716
-
717
- ## ERROR HANDLING:
718
-
719
- **If user abandons questionnaire mid-way:**
720
- 1. Save partial discovery with answers collected so far
721
- 2. Mark open categories as "Incomplete"
722
- 3. Update 00-context.md with partial progress
723
- 4. Allow resume with `/business-analyse -r {feature_id}`
724
-
725
- **If MCP exploration fails (phase 3a):**
726
- 1. Log warning: "MCP unavailable, using manual exploration"
727
- 2. Continue with phase 3b (codebase agents) or Glob/Grep
728
- 3. Note in discovery: "MCP context unavailable"
729
-
730
- **If codebase exploration returns empty:**
731
- 1. Assume greenfield module
732
- 2. Skip cross-reference questions
733
- 3. Note: "No existing patterns found"
734
-
735
- ## NEXT STEP:
736
-
737
- After completion, proceed to `steps/step-02-analyse.md`