@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.
- package/.documentation/business-analyse.html +1503 -1058
- package/dist/index.js +92 -55
- package/dist/index.js.map +1 -1
- package/package.json +10 -7
- package/templates/agents/ba-reader.md +250 -0
- package/templates/agents/ba-writer.md +210 -0
- package/templates/agents/docs-context-reader.md +51 -33
- package/templates/skills/_shared.md +2 -0
- package/templates/skills/business-analyse/SKILL.md +120 -108
- package/templates/skills/business-analyse/_shared.md +136 -146
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +478 -0
- package/templates/skills/business-analyse/questionnaire/01-context.md +3 -15
- package/templates/skills/business-analyse/questionnaire/03-scope.md +7 -7
- package/templates/skills/business-analyse/questionnaire/08-performance.md +7 -21
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +0 -13
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +0 -13
- package/templates/skills/business-analyse/questionnaire/12-migration.md +1 -1
- package/templates/skills/business-analyse/questionnaire.md +72 -76
- package/templates/skills/business-analyse/react/components.md +317 -154
- package/templates/skills/business-analyse/react/i18n-template.md +167 -106
- package/templates/skills/business-analyse/react/schema.md +474 -107
- package/templates/skills/business-analyse/schemas/feature-schema.json +860 -0
- package/templates/skills/business-analyse/steps/step-00-init.md +395 -285
- package/templates/skills/business-analyse/steps/step-01-analyse.md +523 -0
- package/templates/skills/business-analyse/steps/step-02-specify.md +899 -0
- package/templates/skills/business-analyse/steps/step-03-validate.md +1009 -0
- package/templates/skills/business-analyse/steps/step-04-handoff.md +1802 -0
- package/templates/skills/business-analyse/templates/tpl-handoff.md +49 -64
- package/templates/skills/business-analyse/steps/step-01-discover.md +0 -737
- package/templates/skills/business-analyse/steps/step-02-analyse.md +0 -299
- package/templates/skills/business-analyse/steps/step-03-specify.md +0 -472
- package/templates/skills/business-analyse/steps/step-04-validate.md +0 -335
- package/templates/skills/business-analyse/steps/step-05-handoff.md +0 -741
- package/templates/skills/business-analyse/steps/step-06-doc-html.md +0 -320
- package/templates/skills/business-analyse/templates/00-context.md +0 -105
- package/templates/skills/business-analyse/templates/tpl-brd.md +0 -97
- package/templates/skills/business-analyse/templates/tpl-discovery.md +0 -78
- 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`
|