@atlashub/smartstack-cli 4.27.0 → 4.29.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 (29) hide show
  1. package/package.json +1 -1
  2. package/templates/skills/apex/references/core-seed-data.md +27 -4
  3. package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +29 -7
  4. package/templates/skills/apex/references/post-checks.md +324 -0
  5. package/templates/skills/apex/references/smartstack-frontend.md +23 -8
  6. package/templates/skills/apex/references/smartstack-layers.md +53 -6
  7. package/templates/skills/apex/steps/step-02-plan.md +9 -0
  8. package/templates/skills/apex/steps/step-03-execute.md +49 -3
  9. package/templates/skills/apex/steps/step-04-examine.md +4 -0
  10. package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +33 -0
  11. package/templates/skills/business-analyse/questionnaire/01-context.md +12 -12
  12. package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +45 -45
  13. package/templates/skills/business-analyse/questionnaire/03-data-ui.md +39 -39
  14. package/templates/skills/business-analyse/questionnaire/05-cross-module.md +32 -32
  15. package/templates/skills/business-analyse/questionnaire.md +11 -11
  16. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +17 -0
  17. package/templates/skills/business-analyse/references/spec-auto-inference.md +12 -7
  18. package/templates/skills/business-analyse/steps/step-00-init.md +2 -2
  19. package/templates/skills/business-analyse/steps/step-01-cadrage.md +3 -3
  20. package/templates/skills/business-analyse/steps/step-02-structure.md +22 -8
  21. package/templates/skills/business-analyse/steps/step-03-specify.md +22 -15
  22. package/templates/skills/controller/references/mcp-scaffold-workflow.md +20 -0
  23. package/templates/skills/derive-prd/references/handoff-file-templates.md +25 -1
  24. package/templates/skills/derive-prd/references/handoff-seeddata-generation.md +3 -1
  25. package/templates/skills/ralph-loop/references/category-completeness.md +125 -0
  26. package/templates/skills/ralph-loop/references/compact-loop.md +66 -10
  27. package/templates/skills/ralph-loop/references/module-transition.md +60 -0
  28. package/templates/skills/ralph-loop/steps/step-04-check.md +207 -12
  29. package/templates/skills/ralph-loop/steps/step-05-report.md +205 -14
@@ -108,6 +108,15 @@ Verify the plan respects dependencies:
108
108
  - Build gate between EVERY layer (must pass): Layer 0 → 1 → 2 → 3 → 4
109
109
  ```
110
110
 
111
+ ### 4b. Module Code Collision Guard (BLOCKING)
112
+
113
+ ```
114
+ IF appCode == moduleCode:
115
+ BLOCK — module_code identique à app_code cause des segments doublés (e.g. /hr/hr).
116
+ Suggestion : "{appCode}-core", "{appCode}-management"
117
+ ASK user pour un module_code différent.
118
+ ```
119
+
111
120
  ---
112
121
 
113
122
  ## 5. Estimated Commits
@@ -298,6 +298,39 @@ After controller generation, verify `[NavRoute]` attribute is present on every c
298
298
  - When calling `scaffold_extension(type: "controller")`, always pass `navRoute` in options
299
299
  - This is REQUIRED for `scaffold_routes` to auto-detect routes in Layer 3
300
300
 
301
+ ### Guard: NavRoute Uniqueness and Segment Count (MANDATORY)
302
+
303
+ **BEFORE proceeding past Layer 2**, verify for EACH controller:
304
+
305
+ 1. **Unique NavRoute:** No two controllers may share the same `[NavRoute("...")]` value. Duplicate NavRoutes cause routing conflicts → 404s on one of the controllers.
306
+
307
+ 2. **Segment count matches hierarchy:** Count the dots in the NavRoute value:
308
+ - 1 dot = 2 segments (module-level, e.g., `human-resources.employees`) — controller is at `Controllers/{App}/`
309
+ - 2 dots = 3 segments (section-level, e.g., `human-resources.employees.contracts`) — controller is at `Controllers/{App}/{Module}/` or in a section subfolder
310
+ - **If a controller is in a section subfolder** (e.g., `Controllers/{App}/Employees/ContractsController.cs`) **but has only 2 segments** → the API route will be wrong → 404. It MUST have 3 segments.
311
+ - 0 dots = INVALID → BLOCK
312
+
313
+ ```bash
314
+ # Quick validation
315
+ CTRL_FILES=$(find src/ -path "*/Controllers/*" -name "*Controller.cs" 2>/dev/null)
316
+ for f in $CTRL_FILES; do
317
+ NAVROUTE=$(grep -oP '\[NavRoute\("\K[^"]+' "$f")
318
+ if [ -n "$NAVROUTE" ]; then
319
+ DOTS=$(echo "$NAVROUTE" | tr -cd '.' | wc -c)
320
+ if [ "$DOTS" -eq 0 ]; then
321
+ echo "BLOCKING: NavRoute '$NAVROUTE' has only 1 segment (need minimum 2): $f"
322
+ exit 1
323
+ fi
324
+ # Check if controller is in a section subfolder but NavRoute has only 2 segments
325
+ DEPTH=$(echo "$f" | grep -oP 'Controllers/[^/]+/[^/]+/' | wc -l)
326
+ if [ "$DEPTH" -gt 0 ] && [ "$DOTS" -eq 1 ]; then
327
+ echo "WARNING: Controller in section subfolder but NavRoute has only 2 segments: $f"
328
+ echo " NavRoute: $NAVROUTE — expected 3 segments (app.module.section)"
329
+ fi
330
+ fi
331
+ done
332
+ ```
333
+
301
334
  ```bash
302
335
  # Quick check: all controllers must have [NavRoute] (not just [Route])
303
336
  CTRL_FILES=$(find src/ -path "*/Controllers/*" -name "*Controller.cs" 2>/dev/null)
@@ -386,11 +419,20 @@ TaskUpdate(taskId: progress_tracker_id,
386
419
 
387
420
  For each module:
388
421
  - API client: MCP scaffold_api_client
389
- - Routes: MCP scaffold_routes (outputFormat: 'applicationRoutes') → generates lazy imports + Suspense
422
+ - Routes TWO mandatory steps:
423
+ 1. Generate registry: MCP scaffold_routes (source: 'controllers', outputFormat: 'applicationRoutes', dryRun: false)
424
+ → Creates navRoutes.generated.ts (required by POST-CHECK C2)
425
+ 2. Wire to App.tsx (see below)
390
426
  - Wire Routes to App.tsx: After scaffold_routes, routes must be wired into App.tsx:
391
427
  → Read App.tsx and detect the routing pattern
392
428
  → Pattern A (`applicationRoutes: ApplicationRouteExtensions`): add routes to `applicationRoutes['{application_kebab}'][]` with RELATIVE paths
393
429
  → Pattern B (JSX `<Route>`): nest routes inside `<Route path="/{application}" element={<AppLayout />}>` + duplicate in tenant block
430
+ → **CRITICAL — Module Segment Required:** Route paths MUST include the module segment.
431
+ For a 3-level hierarchy (app → module → sections), paths are `{module_kebab}/{section_kebab}`.
432
+ Example: `employee-management/employees` NOT just `employees`.
433
+ Without the module segment, routes resolve to `/{app}/{section}` instead of `/{app}/{module}/{section}`,
434
+ causing mismatch with backend navigation seed data → nav links produce 404s.
435
+ → **BEFORE wiring:** Verify route ordering — static routes (`create`, `dashboard`, `departments`) MUST come BEFORE dynamic routes (`:id`, `:id/edit`). Redirect routes (`Navigate`) MUST be LAST. See `references/smartstack-layers.md` "RULE — Frontend Route Ordering".
394
436
  → Do not add business routes to `clientRoutes[]` — it is only for non-app routes (`/about`, `/pricing`)
395
437
  → All business applications use `<AppLayout />` as layout wrapper
396
438
  → See `references/frontend-route-wiring-app-tsx.md` for full Pattern A/B detection and examples
@@ -445,7 +487,9 @@ For each module:
445
487
  5. Verify: `grep -q "{module_namespace}" src/**/i18n/config.ts` → must match
446
488
  - Permissions: Call MCP generate_permissions for the module permission root (2 segments: {app}.{module}),
447
489
  then also call MCP generate_permissions for each section (3 segments: {app}.{module}.{section}).
448
- - Section routes: Add section child routes to the module's children array.
490
+ - Section routes: Add section child routes to `applicationRoutes['{app_kebab}']`.
491
+ Route paths MUST include the module segment: `{module_kebab}/{section_kebab}` (e.g., `employee-management/employees`).
492
+ Do NOT use just `{section_kebab}` (e.g., `employees`) — this omits the module level and causes 404s.
449
493
  Wire PermissionGuard for section routes with section-level permissions.
450
494
  - MUST use src/pages/{App}/{Module}/ hierarchy (NOT flat)
451
495
 
@@ -480,8 +524,9 @@ IF NOT economy_mode AND entities.length > 1:
480
524
  prompt='Execute Layer 3 frontend for {EntityName}:
481
525
  **MANDATORY: Read references/smartstack-frontend.md FIRST**
482
526
  - API client: MCP scaffold_api_client
483
- - Routes: MCP scaffold_routes (outputFormat: "applicationRoutes")
527
+ - Routes: MCP scaffold_routes (outputFormat: "applicationRoutes", dryRun: false) → MUST generate navRoutes.generated.ts
484
528
  - Wire Routes to App.tsx (BLOCKING): detect Pattern A/B, wire accordingly
529
+ → CRITICAL: Route paths MUST include module segment: {module_kebab}/{section_kebab} (e.g., employee-management/employees, NOT just employees)
485
530
  → See references/frontend-route-wiring-app-tsx.md for full patterns
486
531
  → Verify: mcp__smartstack__validate_frontend_routes (scope: "routes")
487
532
  - Pages: /ui-components skill (ALL 4 types: List, Detail, Create, Edit)
@@ -502,6 +547,7 @@ ELSE:
502
547
  1. MCP scaffold_api_client
503
548
  2. MCP scaffold_routes (outputFormat: 'applicationRoutes')
504
549
  3. Wire routes to App.tsx (Pattern A/B — see references/frontend-route-wiring-app-tsx.md)
550
+ CRITICAL: paths MUST include module segment: {module_kebab}/{section_kebab} (e.g., employee-management/employees)
505
551
  4. **INVOKE Skill("ui-components")** — pass entity context:
506
552
  - Entity: {EntityName}, Module: {ModuleName}, App: {AppName}
507
553
  - Page types: List, Detail, Create, Edit (+ Dashboard if applicable)
@@ -65,6 +65,9 @@ Verify:
65
65
  - Routes nested inside correct Layout wrapper
66
66
  - Route paths match controller patterns
67
67
  - No orphan routes
68
+ - Route paths include module segment (e.g., 'employee-management/employees', NOT just 'employees')
69
+ → Compare frontend route paths in App.tsx against backend NavigationSeedData routes
70
+ → If backend defines route /app/module/section, frontend must use module/section (relative)
68
71
  ```
69
72
 
70
73
  ### 3b. Frontend Page Completeness
@@ -196,6 +199,7 @@ AC2: {criterion} → PASS / FAIL (evidence: {file:line or test})
196
199
  | I18n registration | Namespaces registered in i18n config (POST-CHECK C39) | PASS / N/A |
197
200
  | Validators DI | FluentValidation registered in DI (POST-CHECK C40) | PASS / N/A |
198
201
  | Route/NavRoute conflict | No [Route] alongside [NavRoute] on controllers (POST-CHECK C43) | PASS / N/A |
202
+ | Route module segment | Frontend routes include module segment matching seed data (POST-CHECK C52) | PASS / N/A |
199
203
  | Role-permission matrix | Admin=wildcard, Manager=CRU, Contributor=CR, Viewer=R (POST-CHECK C44) | PASS / N/A |
200
204
  | PermissionAction enum | No Enum.Parse, only typed enum values 0-10 (POST-CHECK C45) | PASS / N/A |
201
205
  | Navigation translations | 4 langs per level, section/resource translations present (POST-CHECK C46) | PASS / N/A |
@@ -69,6 +69,39 @@ const applicationRoutes: ApplicationRouteExtensions = {
69
69
 
70
70
  Routes are automatically injected into BOTH standard (`/{application}/...`) and tenant-prefixed (`/t/:slug/{application}/...`) route trees by `mergeRoutes()`. No manual duplication needed.
71
71
 
72
+ #### RULE — Route Ordering in applicationRoutes
73
+
74
+ > **CRITICAL:** Routes within each application key MUST follow static-before-dynamic order.
75
+ > React Router matches top-to-bottom — a `:id` route placed before a `dashboard` route
76
+ > will match `dashboard` as an `id` parameter → 404.
77
+
78
+ ```tsx
79
+ const applicationRoutes: ApplicationRouteExtensions = {
80
+ 'human-resources': [
81
+ // ✅ CORRECT ORDER — static before dynamic
82
+ { path: 'employees', element: <EmployeesPage /> },
83
+ { path: 'employees/create', element: <CreateEmployeePage /> },
84
+ { path: 'employees/dashboard', element: <EmployeeDashboardPage /> },
85
+ { path: 'employees/:id', element: <EmployeeDetailPage /> },
86
+ { path: 'employees/:id/edit', element: <EditEmployeePage /> },
87
+
88
+ // Redirect routes ALWAYS LAST
89
+ { path: '', element: <Navigate to="employees" replace /> },
90
+ ],
91
+ };
92
+ ```
93
+
94
+ ```tsx
95
+ // ❌ FORBIDDEN — :id before static routes
96
+ 'human-resources': [
97
+ { path: 'employees/:id', element: <EmployeeDetailPage /> }, // ← WRONG: catches 'dashboard'
98
+ { path: 'employees/dashboard', element: <DashboardPage /> }, // ← NEVER REACHED
99
+ ]
100
+ ```
101
+
102
+ See `smartstack-layers.md` "RULE — Frontend Route Ordering" for the full ordering specification.
103
+ POST-CHECK C49 detects and BLOCKS this anti-pattern.
104
+
72
105
  #### Custom Applications (Pattern A)
73
106
 
74
107
  Custom application keys (any key **not** in the built-in list: `administration`, `support`, `user`, `api`) are fully supported in `applicationRoutes`. `mergeRoutes()` automatically:
@@ -1,38 +1,38 @@
1
- # Categorie 1 : Contexte metier
1
+ # Catégorie 1 : Contexte métier
2
2
 
3
- > **Usage :** Questions fondamentales pour comprendre le besoin metier
3
+ > **Usage :** Questions fondamentales pour comprendre le besoin métier
4
4
  > **Quand charger :** TOUJOURS (noyau)
5
- > **Objectif :** Comprendre le processus metier, les frictions, et la vision cible
5
+ > **Objectif :** Comprendre le processus métier, les frictions, et la vision cible
6
6
 
7
7
  ---
8
8
 
9
- ## 1.1 Le processus metier
9
+ ## 1.1 Le processus métier
10
10
 
11
- | # | Question | Type de reponse |
11
+ | # | Question | Type de réponse |
12
12
  |---|----------|-----------------|
13
- | Q1.1 | Decrivez en quelques phrases le processus metier que cette application doit gerer. Qu'est-ce qui se passe, qui intervient, et quel est le resultat attendu ? | Texte libre |
13
+ | Q1.1 | Décrivez en quelques phrases le processus métier que cette application doit gérer. Qu'est-ce qui se passe, qui intervient, et quel est le résultat attendu ? | Texte libre |
14
14
 
15
15
  ---
16
16
 
17
17
  ## 1.2 Les points de friction
18
18
 
19
- | # | Question | Type de reponse |
19
+ | # | Question | Type de réponse |
20
20
  |---|----------|-----------------|
21
- | Q1.4 | Quels sont les points de friction actuels ? Qu'est-ce qui bloque, ralentit, ou genere des erreurs dans ce processus ? | Description des frictions |
21
+ | Q1.4 | Quels sont les points de friction actuels ? Qu'est-ce qui bloque, ralentit, ou génère des erreurs dans ce processus ? | Description des frictions |
22
22
 
23
23
  ---
24
24
 
25
- ## 1.3 La vision souhaitee
25
+ ## 1.3 La vision souhaitée
26
26
 
27
- | # | Question | Type de reponse |
27
+ | # | Question | Type de réponse |
28
28
  |---|----------|-----------------|
29
- | Q1.8 | Qu'est-ce qui doit changer ? Si le probleme etait resolu demain, que feriez-vous differemment dans votre journee de travail ? | Description du changement concret |
29
+ | Q1.8 | Qu'est-ce qui doit changer ? Si le problème était résolu demain, que feriez-vous différemment dans votre journée de travail ? | Description du changement concret |
30
30
 
31
31
  ---
32
32
 
33
33
  ## Mapping vers le cadrage
34
34
 
35
- | Reponse | Alimente |
35
+ | Réponse | Alimente |
36
36
  |---------|----------|
37
37
  | Q1.1 | `cadrage.problem` |
38
38
  | Q1.4 | `cadrage.asIs` |
@@ -1,56 +1,56 @@
1
- # Categorie 2 : Parties prenantes et perimetre
1
+ # Catégorie 2 : Parties prenantes et périmètre
2
2
 
3
- > **Usage :** Identifier les profils utilisateurs, leurs droits, et delimiter le perimetre fonctionnel
3
+ > **Usage :** Identifier les profils utilisateurs, leurs droits, et délimiter le périmètre fonctionnel
4
4
  > **Quand charger :** TOUJOURS (noyau)
5
- > **Objectif :** Comprendre QUI utilise le systeme, avec quels DROITS, et QUOI il doit faire
5
+ > **Objectif :** Comprendre QUI utilise le système, avec quels DROITS, et QUOI il doit faire
6
6
 
7
7
  ---
8
8
 
9
9
  ## 2.1 Identification des utilisateurs
10
10
 
11
- > **But :** Identifier les types de profils/roles qui interagiront avec le systeme.
11
+ > **But :** Identifier les types de profils/rôles qui interagiront avec le système.
12
12
 
13
- | # | Question | Type de reponse |
13
+ | # | Question | Type de réponse |
14
14
  |---|----------|-----------------|
15
- | Q2.1 | Qui sont les types de profils qui utiliseront ce systeme ? Decrivez leurs roles et ce qu'ils font. | Liste de profils utilisateurs |
15
+ | Q2.1 | Qui sont les types de profils qui utiliseront ce système ? Décrivez leurs rôles et ce qu'ils font. | Liste de profils utilisateurs |
16
16
 
17
17
  ---
18
18
 
19
- ## 2.2 Taches par profil
19
+ ## 2.2 Tâches par profil
20
20
 
21
- > **But :** Comprendre concretement ce que chaque type d'utilisateur fait.
21
+ > **But :** Comprendre concrètement ce que chaque type d'utilisateur fait.
22
22
 
23
- | # | Question | Type de reponse |
23
+ | # | Question | Type de réponse |
24
24
  |---|----------|-----------------|
25
- | Q2.5 | Pour chaque type d'utilisateur : quelles sont les 3 a 5 taches principales qu'il doit accomplir avec ce systeme ? | Taches par profil utilisateur |
25
+ | Q2.5 | Pour chaque type d'utilisateur : quelles sont les 3 à 5 tâches principales qu'il doit accomplir avec ce système ? | Tâches par profil utilisateur |
26
26
 
27
27
  ---
28
28
 
29
- ## 2.3 Les niveaux d'acces
29
+ ## 2.3 Les niveaux d'accès
30
30
 
31
- > **But :** Definir qui peut voir quoi et faire quoi.
31
+ > **But :** Définir qui peut voir quoi et faire quoi.
32
32
 
33
- | # | Question | Type de reponse |
33
+ | # | Question | Type de réponse |
34
34
  |---|----------|-----------------|
35
- | Q2.9 | Tous les utilisateurs doivent-ils voir les memes informations ? Si non, qui voit quoi ? | Regles de visibilite des donnees |
36
- | Q2.10 | Qui a le droit de modifier ou supprimer des informations ? Tout le monde ou seulement certaines personnes ? | Regles de modification |
37
- | Q2.11 | Y a-t-il des actions sensibles qui necessitent une validation par un superieur ? | Liste des actions a valider |
35
+ | Q2.9 | Tous les utilisateurs doivent-ils voir les mêmes informations ? Si non, qui voit quoi ? | Règles de visibilité des données |
36
+ | Q2.10 | Qui a le droit de modifier ou supprimer des informations ? Tout le monde ou seulement certaines personnes ? | Règles de modification |
37
+ | Q2.11 | Y a-t-il des actions sensibles qui nécessitent une validation par un supérieur ? | Liste des actions à valider |
38
38
 
39
39
  ---
40
40
 
41
- ## 2.4 Perimetre fonctionnel
41
+ ## 2.4 Périmètre fonctionnel
42
42
 
43
- > **But :** Lister tout ce que le systeme doit faire et ne pas faire, avec des priorites claires.
43
+ > **But :** Lister tout ce que le système doit faire et ne pas faire, avec des priorités claires.
44
44
 
45
- | # | Question | Type de reponse |
45
+ | # | Question | Type de réponse |
46
46
  |---|----------|-----------------|
47
- | Q2.12 | Listez toutes les fonctionnalites que vous souhaitez dans ce systeme. Ne vous censurez pas. | Liste libre de fonctionnalites |
48
- | Q2.13 | Parmi cette liste, quelles sont les fonctionnalites INDISPENSABLES ? Celles sans lesquelles le systeme n'a aucun interet ? | Liste de fonctionnalites vitales |
49
- | Q2.15 | Y a-t-il des choses que le systeme ne doit explicitement PAS faire ? Des limites claires a poser ? | Liste d'exclusions |
47
+ | Q2.12 | Listez toutes les fonctionnalités que vous souhaitez dans ce système. Ne vous censurez pas. | Liste libre de fonctionnalités |
48
+ | Q2.13 | Parmi cette liste, quelles sont les fonctionnalités INDISPENSABLES ? Celles sans lesquelles le système n'a aucun intérêt ? | Liste de fonctionnalités vitales |
49
+ | Q2.15 | Y a-t-il des choses que le système ne doit explicitement PAS faire ? Des limites claires à poser ? | Liste d'exclusions |
50
50
 
51
- **Test de priorite :**
52
- > Pour chaque fonctionnalite classee comme indispensable, poser la question :
53
- > "Si on enlevait cette fonctionnalite, le systeme aurait-il encore de la valeur ?"
51
+ **Test de priorité :**
52
+ > Pour chaque fonctionnalité classée comme indispensable, poser la question :
53
+ > "Si on enlevait cette fonctionnalité, le système aurait-il encore de la valeur ?"
54
54
 
55
55
  ---
56
56
 
@@ -58,42 +58,42 @@
58
58
 
59
59
  > **But :** Comprendre le flux de travail principal de bout en bout.
60
60
 
61
- | # | Question | Type de reponse |
61
+ | # | Question | Type de réponse |
62
62
  |---|----------|-----------------|
63
- | Q2.16 | Decrivez le parcours typique d'un utilisateur du debut a la fin : il ouvre le systeme, que fait-il en premier ? | Liste d'etapes ordonnees |
64
- | Q2.17 | A quels moments l'utilisateur doit-il prendre une decision ? Quelles sont les options possibles ? | Points de decision et options |
65
- | Q2.18 | Que se passe-t-il quand quelque chose ne se deroule pas comme prevu ? Quels sont les cas particuliers ? | Scenarios alternatifs |
63
+ | Q2.16 | Décrivez le parcours typique d'un utilisateur du début à la fin : il ouvre le système, que fait-il en premier ? | Liste d'étapes ordonnées |
64
+ | Q2.17 | À quels moments l'utilisateur doit-il prendre une décision ? Quelles sont les options possibles ? | Points de décision et options |
65
+ | Q2.18 | Que se passe-t-il quand quelque chose ne se déroule pas comme prévu ? Quels sont les cas particuliers ? | Scénarios alternatifs |
66
66
 
67
67
  ---
68
68
 
69
- ## Guide d'elicitation approfondi
69
+ ## Guide d'élicitation approfondi
70
70
 
71
71
  ### Techniques de relance
72
72
 
73
- | Question | Si la reponse est vague | Relance recommandee |
73
+ | Question | Si la réponse est vague | Relance recommandée |
74
74
  |----------|------------------------|---------------------|
75
- | Q2.1 (utilisateurs) | Un seul type mentionne | "Pensez aux differents moments de la journee : qui saisit ? Qui consulte les rapports ? Qui gere les cas particuliers ?" |
76
- | Q2.5 (taches) | Taches generiques | "Quand il arrive le matin et ouvre le systeme, quelle est sa premiere action ?" |
77
- | Q2.9 (visibilite) | Reponse ambigue | "Un employe du service A peut-il voir les donnees du service B ? Un stagiaire voit-il la meme chose qu'un directeur ?" |
78
- | Q2.13 (indispensable) | Tout est indispensable | "Si vous ne pouviez garder que 3 fonctionnalites pour un premier lancement, lesquelles ?" |
79
- | Q2.15 (exclusions) | "Je ne vois pas" | "Certains utilisateurs pourraient-ils s'attendre a des fonctionnalites que vous ne souhaitez PAS inclure ?" |
80
- | Q2.16 (parcours) | Moins de 3 etapes | "Detaillons : l'utilisateur arrive sur l'ecran d'accueil. Que voit-il ? Ou clique-t-il ?" |
75
+ | Q2.1 (utilisateurs) | Un seul type mentionné | "Pensez aux différents moments de la journée : qui saisit ? Qui consulte les rapports ? Qui gère les cas particuliers ?" |
76
+ | Q2.5 (tâches) | Tâches génériques | "Quand il arrive le matin et ouvre le système, quelle est sa première action ?" |
77
+ | Q2.9 (visibilité) | Réponse ambiguë | "Un employé du service A peut-il voir les données du service B ? Un stagiaire voit-il la même chose qu'un directeur ?" |
78
+ | Q2.13 (indispensable) | Tout est indispensable | "Si vous ne pouviez garder que 3 fonctionnalités pour un premier lancement, lesquelles ?" |
79
+ | Q2.15 (exclusions) | "Je ne vois pas" | "Certains utilisateurs pourraient-ils s'attendre à des fonctionnalités que vous ne souhaitez PAS inclure ?" |
80
+ | Q2.16 (parcours) | Moins de 3 étapes | "Détaillons : l'utilisateur arrive sur l'écran d'accueil. Que voit-il ? clique-t-il ?" |
81
81
 
82
- ### Signaux d'alerte a detecter
82
+ ### Signaux d'alerte à détecter
83
83
 
84
- | Signal du client | Probleme sous-jacent | Action de l'analyste |
84
+ | Signal du client | Problème sous-jacent | Action de l'analyste |
85
85
  |------------------|---------------------|----------------------|
86
- | "Tous les utilisateurs font la meme chose" | Roles non differencies | "Qui peut supprimer ? Qui ne fait que consulter ? Qui valide ?" |
87
- | "Tout le monde doit tout voir" | Securite non reflechie | "Meme les stagiaires ? Les prestataires externes ? Les donnees salariales ?" |
88
- | Tout est indispensable (> 10 vitaux) | Priorites non definies | Appliquer le test de priorite |
89
- | Aucune exclusion identifiee | Perimetre non borne | "Y a-t-il des aspects qui relevent d'un autre projet ou d'une version future ?" |
90
- | Parcours lineaire sans alternative | Seul le cas ideal est decrit | "Que se passe-t-il a l'etape X si la condition Y n'est pas remplie ?" |
86
+ | "Tous les utilisateurs font la même chose" | Rôles non différenciés | "Qui peut supprimer ? Qui ne fait que consulter ? Qui valide ?" |
87
+ | "Tout le monde doit tout voir" | Sécurité non réfléchie | "Même les stagiaires ? Les prestataires externes ? Les données salariales ?" |
88
+ | Tout est indispensable (> 10 vitaux) | Priorités non définies | Appliquer le test de priorité |
89
+ | Aucune exclusion identifiée | Périmètre non borné | "Y a-t-il des aspects qui relèvent d'un autre projet ou d'une version future ?" |
90
+ | Parcours linéaire sans alternative | Seul le cas idéal est décrit | "Que se passe-t-il à l'étape X si la condition Y n'est pas remplie ?" |
91
91
 
92
92
  ---
93
93
 
94
94
  ## Mapping vers le cadrage
95
95
 
96
- | Reponse | Alimente |
96
+ | Réponse | Alimente |
97
97
  |---------|----------|
98
98
  | Q2.1, Q2.5 | `cadrage.stakeholders[]` |
99
99
  | Q2.9-Q2.11 | `cadrage.applicationRoles[]` |
@@ -1,8 +1,8 @@
1
- # Categorie 3 : Donnees et interface
1
+ # Catégorie 3 : Données et interface
2
2
 
3
- > **Usage :** Definir les entites, les regles de donnees et l'experience utilisateur
4
- > **Quand charger :** Par module, lors de la specification (step-03)
5
- > **Objectif :** Comprendre les donnees manipulees et comment elles sont presentees
3
+ > **Usage :** Définir les entités, les règles de données et l'expérience utilisateur
4
+ > **Quand charger :** Par module, lors de la spécification (step-03)
5
+ > **Objectif :** Comprendre les données manipulées et comment elles sont présentées
6
6
 
7
7
  ---
8
8
 
@@ -10,69 +10,69 @@
10
10
 
11
11
  | # | Question | Type de reponse |
12
12
  |---|----------|-----------------|
13
- | Q3.1 | Quelles sont les entites principales gerees par ce module ? | Liste d'entites |
14
- | Q3.2 | Pour chaque entite : quels sont les attributs importants ? | Par entite |
15
- | Q3.3 | Quelles relations existent entre les entites ? (appartient a, contient, reference) | Schema relationnel |
16
- | Q3.5 | Pour chaque entite : le Code doit-il etre auto-genere ou saisi par l'utilisateur ? | Par entite |
17
- | Q3.6 | Si auto-genere : quelle strategie ? (sequentiel, timestamp, annee, UUID court) | Par entite |
13
+ | Q3.1 | Quelles sont les entités principales gérées par ce module ? | Liste d'entités |
14
+ | Q3.2 | Pour chaque entité : quels sont les attributs importants ? | Par entité |
15
+ | Q3.3 | Quelles relations existent entre les entités ? (appartient à, contient, référence) | Schéma relationnel |
16
+ | Q3.5 | Pour chaque entité : le Code doit-il être auto-généré ou saisi par l'utilisateur ? | Par entité |
17
+ | Q3.6 | Si auto-généré : quelle stratégie ? (séquentiel, timestamp, année, UUID court) | Par entité |
18
18
 
19
- ## 3.2 Regles de donnees
19
+ ## 3.2 Règles de données
20
20
 
21
- | # | Question | Type de reponse |
21
+ | # | Question | Type de réponse |
22
22
  |---|----------|-----------------|
23
- | Q3.7 | Quelles validations sur les donnees ? (champs obligatoires, formats, plages de valeurs) | Liste de regles |
24
- | Q3.8 | Y a-t-il des regles inter-champs ? (date fin > date debut, montant selon statut) | Liste de contraintes |
25
- | Q3.9 | Donnees sensibles a proteger ? (donnees personnelles, financieres, medicales) | Liste + niveau |
23
+ | Q3.7 | Quelles validations sur les données ? (champs obligatoires, formats, plages de valeurs) | Liste de règles |
24
+ | Q3.8 | Y a-t-il des règles inter-champs ? (date fin > date début, montant selon statut) | Liste de contraintes |
25
+ | Q3.9 | Données sensibles à protéger ? (données personnelles, financières, médicales) | Liste + niveau |
26
26
 
27
27
  ---
28
28
 
29
- ## 3.3 Interface et ecrans
29
+ ## 3.3 Interface et écrans
30
30
 
31
- | # | Question | Type de reponse |
31
+ | # | Question | Type de réponse |
32
32
  |---|----------|-----------------|
33
- | Q3.10 | Peripheriques cibles ? (desktop, mobile, tablette) | Liste |
34
- | Q3.11 | Ecrans principaux necessaires pour ce module ? | Liste d'ecrans |
35
- | Q3.12 | Informations cles par ecran ? Quelles colonnes dans la liste, quels champs dans le formulaire ? | Par ecran |
36
- | Q3.13 | Actions possibles par ecran ? (creer, editer, supprimer, valider, exporter, changer statut) | Par ecran |
33
+ | Q3.10 | Périphériques cibles ? (desktop, mobile, tablette) | Liste |
34
+ | Q3.11 | Écrans principaux nécessaires pour ce module ? | Liste d'écrans |
35
+ | Q3.12 | Informations clés par écran ? Quelles colonnes dans la liste, quels champs dans le formulaire ? | Par écran |
36
+ | Q3.13 | Actions possibles par écran ? (créer, éditer, supprimer, valider, exporter, changer statut) | Par écran |
37
37
 
38
38
  ## 3.4 Tableaux de bord
39
39
 
40
- | # | Question | Type de reponse |
40
+ | # | Question | Type de réponse |
41
41
  |---|----------|-----------------|
42
42
  | Q3.14 | Des tableaux de bord ou indicateurs sont-ils requis pour ce module ? | Oui/Non + description |
43
- | Q3.15 | KPIs a afficher ? (nom, metrique, format, seuils d'alerte) | Par dashboard |
44
- | Q3.16 | Types de graphiques souhaites ? (barres, lignes, camembert, cartes KPI) | Par KPI |
43
+ | Q3.15 | KPIs à afficher ? (nom, métrique, format, seuils d'alerte) | Par dashboard |
44
+ | Q3.16 | Types de graphiques souhaités ? (barres, lignes, camembert, cartes KPI) | Par KPI |
45
45
 
46
46
  ---
47
47
 
48
- ## Guide d'elicitation approfondi
48
+ ## Guide d'élicitation approfondi
49
49
 
50
50
  ### Techniques de relance
51
51
 
52
- | Question | Si la reponse est vague | Relance recommandee |
52
+ | Question | Si la réponse est vague | Relance recommandée |
53
53
  |----------|------------------------|---------------------|
54
- | Q3.1 (entites) | Une seule entite | "Cette entite a-t-elle des sous-elements ? (lignes de detail, pieces jointes, historique)" |
55
- | Q3.1 (entites) | Mention de "User" | "L'utilisateur est gere par la plateforme. Decrivez l'entite METIER (Client, Employee, Contact...)" |
56
- | Q3.2 (attributs) | Champs techniques (ID, CreatedDate) | "Les champs techniques sont auto-geres. Quels sont les attributs METIER ?" |
57
- | Q3.3 (relations) | "1:N" sans detail | "Un {Parent} peut avoir combien de {Children} max ? Un {Child} peut-il exister sans {Parent} ?" |
58
- | Q3.11 (ecrans) | "Un ecran de liste" | "Avec pages dediees pour creation et edition ? Detail en page avec onglets ?" |
59
- | Q3.13 (actions) | "CRUD classique" | "Actions metier specifiques ? (valider, dupliquer, archiver, changer statut, assigner)" |
54
+ | Q3.1 (entités) | Une seule entité | "Cette entité a-t-elle des sous-éléments ? (lignes de détail, pièces jointes, historique)" |
55
+ | Q3.1 (entités) | Mention de "User" | "L'utilisateur est géré par la plateforme. Décrivez l'entité MÉTIER (Client, Employee, Contact...)" |
56
+ | Q3.2 (attributs) | Champs techniques (ID, CreatedDate) | "Les champs techniques sont auto-gérés. Quels sont les attributs MÉTIER ?" |
57
+ | Q3.3 (relations) | "1:N" sans détail | "Un {Parent} peut avoir combien de {Children} max ? Un {Child} peut-il exister sans {Parent} ?" |
58
+ | Q3.11 (écrans) | "Un écran de liste" | "Avec pages dédiées pour création et édition ? Détail en page avec onglets ?" |
59
+ | Q3.13 (actions) | "CRUD classique" | "Actions métier spécifiques ? (valider, dupliquer, archiver, changer statut, assigner)" |
60
60
  | Q3.14 (dashboards) | "Juste des chiffres" | "Les tendances ne seraient-elles pas plus lisibles en graphique ?" |
61
61
 
62
- ### Anti-patterns a detecter
62
+ ### Anti-patterns à détecter
63
63
 
64
64
  | Signal | Anti-pattern | Action |
65
65
  |--------|-------------|--------|
66
- | Entite "User" avec attributs metier | Confusion User/Identity | La plateforme gere les Users via Identity |
67
- | Attributs Id, TenantId, CreatedBy | Champs techniques comme metier | Ces champs sont auto-generes par AuditableEntity |
66
+ | Entité "User" avec attributs métier | Confusion User/Identity | La plateforme gère les Users via Identity |
67
+ | Attributs Id, TenantId, CreatedBy | Champs techniques comme métier | Ces champs sont auto-générés par AuditableEntity |
68
68
  | "Un seul gros formulaire avec tout" | Formulaire monolithique | Proposer des onglets ou wizard par section logique |
69
- | Actions sans confirmation | Actions destructives non protegees | "La suppression necessite-t-elle une confirmation ?" |
69
+ | Actions sans confirmation | Actions destructives non protégées | "La suppression nécessite-t-elle une confirmation ?" |
70
70
 
71
71
  ---
72
72
 
73
73
  ## RBAC Exclusion
74
74
 
75
- > Les concepts suivants sont geres par le systeme RBAC de la plateforme et NE DOIVENT PAS etre modelises comme attributs d'entite :
75
+ > Les concepts suivants sont gérés par le système RBAC de la plateforme et NE DOIVENT PAS être modélisés comme attributs d'entité :
76
76
 
77
77
  | Concept | Wrong (attribut) | Correct (RBAC) |
78
78
  |---------|-----------------|----------------|
@@ -84,9 +84,9 @@
84
84
 
85
85
  ## Mapping vers le feature
86
86
 
87
- | Reponse | Alimente |
87
+ | Réponse | Alimente |
88
88
  |---------|----------|
89
- | Q3.1-Q3.3, Q3.5-Q3.6 | `entities.json` (entites, attributs, relations, codePattern) |
90
- | Q3.7-Q3.9 | `rules.json` (regles metier de validation et securite) |
89
+ | Q3.1-Q3.3, Q3.5-Q3.6 | `entities.json` (entités, attributs, relations, codePattern) |
90
+ | Q3.7-Q3.9 | `rules.json` (règles métier de validation et sécurité) |
91
91
  | Q3.10-Q3.13 | `screens.json` (sections, resources, colonnes, actions) |
92
92
  | Q3.14-Q3.16 | `screens.json` (sections dashboard, KPI resources) |
@@ -1,28 +1,28 @@
1
- # Categorie 5 : Impact cross-module
1
+ # Catégorie 5 : Impact cross-module
2
2
 
3
- > **Usage :** Analyser l'impact sur les modules existants et les dependances partagees
4
- > **Quand charger :** TOUJOURS pour les nouveaux modules (pas les ameliorations)
5
- > **Objectif :** Detecter les interactions, les entites partagees et les impacts d'integration
3
+ > **Usage :** Analyser l'impact sur les modules existants et les dépendances partagées
4
+ > **Quand charger :** TOUJOURS pour les nouveaux modules (pas les améliorations)
5
+ > **Objectif :** Détecter les interactions, les entités partagées et les impacts d'intégration
6
6
 
7
7
  ---
8
8
 
9
- ## 5.1 Dependances avec les modules existants
9
+ ## 5.1 Dépendances avec les modules existants
10
10
 
11
- | # | Question | Type de reponse |
11
+ | # | Question | Type de réponse |
12
12
  |---|----------|-----------------|
13
13
  | Q5.1 | Avec quels modules existants ce nouveau module interagit-il ? | Liste de modules |
14
- | Q5.2 | Quelles donnees sont partagees entre modules ? (entites, tables de reference) | Par module |
15
- | Q5.3 | Y a-t-il des entites existantes que ce module va referencer ? (relations FK) | Liste de references |
16
- | Q5.4 | Ce module produira-t-il des evenements que d'autres modules consomment ? | Liste d'evenements |
14
+ | Q5.2 | Quelles données sont partagées entre modules ? (entités, tables de référence) | Par module |
15
+ | Q5.3 | Y a-t-il des entités existantes que ce module va référencer ? (relations FK) | Liste de références |
16
+ | Q5.4 | Ce module produira-t-il des événements que d'autres modules consomment ? | Liste d'événements |
17
17
 
18
- ## 5.2 Evaluation d'impact
18
+ ## 5.2 Évaluation d'impact
19
19
 
20
- | # | Question | Type de reponse |
20
+ | # | Question | Type de réponse |
21
21
  |---|----------|-----------------|
22
- | Q5.5 | Les modules existants doivent-ils etre modifies pour supporter ce nouveau module ? | Liste de changements |
23
- | Q5.6 | Y a-t-il des composants UI ou des changements de navigation partages ? | Liste |
24
- | Q5.7 | Ce module affectera-t-il les permissions ou roles existants ? Quel impact sur l'integration ? | Oui/Non + detail |
25
- | Q5.8 | Y a-t-il des entites partagees modifiees par plusieurs modules ? Quel impact sur l'integration ? | Evaluation de l'impact |
22
+ | Q5.5 | Les modules existants doivent-ils être modifiés pour supporter ce nouveau module ? | Liste de changements |
23
+ | Q5.6 | Y a-t-il des composants UI ou des changements de navigation partagés ? | Liste |
24
+ | Q5.7 | Ce module affectera-t-il les permissions ou rôles existants ? Quel impact sur l'intégration ? | Oui/Non + détail |
25
+ | Q5.8 | Y a-t-il des entités partagées modifiées par plusieurs modules ? Quel impact sur l'intégration ? | Évaluation de l'impact |
26
26
 
27
27
  ---
28
28
 
@@ -30,40 +30,40 @@
30
30
 
31
31
  | Besoin | Pattern | Exemple |
32
32
  |--------|---------|---------|
33
- | Reference une entite | Navigation property + FK | `Order.ClientId -> Client` |
34
- | Donnees de reference partagees | Entite partagee dans Domain | `Status`, `Category` |
35
- | Notification evenementielle | MediatR notification | `OrderCreatedNotification` |
36
- | Requete cross-module | DTO en lecture seule | `IClientQueryService` |
33
+ | Référence une entité | Navigation property + FK | `Order.ClientId -> Client` |
34
+ | Données de référence partagées | Entité partagée dans Domain | `Status`, `Category` |
35
+ | Notification événementielle | MediatR notification | `OrderCreatedNotification` |
36
+ | Requête cross-module | DTO en lecture seule | `IClientQueryService` |
37
37
  | Lien de navigation | NavRoute entry | `business/{app}/{module}` |
38
- | Permission partagee | Hierarchie de permissions | `{app}.*` covers all modules |
38
+ | Permission partagée | Hiérarchie de permissions | `{app}.*` covers all modules |
39
39
 
40
40
  ---
41
41
 
42
- ## Guide d'elicitation
42
+ ## Guide d'élicitation
43
43
 
44
44
  ### Techniques de relance
45
45
 
46
- | Question | Si la reponse est vague | Relance recommandee |
46
+ | Question | Si la réponse est vague | Relance recommandée |
47
47
  |----------|------------------------|---------------------|
48
- | Q5.1 (interactions) | "Aucun" | "Ce module est totalement isole ? Pas de lien avec des clients, produits, utilisateurs d'autres modules ?" |
49
- | Q5.2 (donnees partagees) | "Je ne sais pas" | Utiliser le `{codebase_context}` : "J'ai trouve les entites {list}. Ce module a-t-il besoin de les referencer ?" |
50
- | Q5.3 (FK references) | Vague | "Une {entity} de ce module appartient-elle a un {existing_entity} ?" |
51
- | Q5.4 (evenements) | "Non" | "Quand un {entity} est cree/modifie/supprime, faut-il notifier un autre module ?" |
52
- | Q5.8 (impact) | "Pas d'impact" | "Deux modules modifient-ils la meme entite ? Quel est l'impact sur l'integration ?" |
48
+ | Q5.1 (interactions) | "Aucun" | "Ce module est totalement isolé ? Pas de lien avec des clients, produits, utilisateurs d'autres modules ?" |
49
+ | Q5.2 (données partagées) | "Je ne sais pas" | Utiliser le `{codebase_context}` : "J'ai trouvé les entités {list}. Ce module a-t-il besoin de les référencer ?" |
50
+ | Q5.3 (FK références) | Vague | "Une {entity} de ce module appartient-elle à un {existing_entity} ?" |
51
+ | Q5.4 (événements) | "Non" | "Quand un {entity} est créé/modifié/supprimé, faut-il notifier un autre module ?" |
52
+ | Q5.8 (impact) | "Pas d'impact" | "Deux modules modifient-ils la même entité ? Quel est l'impact sur l'intégration ?" |
53
53
 
54
- ### Anti-patterns a detecter
54
+ ### Anti-patterns à détecter
55
55
 
56
56
  | Signal | Anti-pattern | Action |
57
57
  |--------|-------------|--------|
58
- | Module totalement isole | Silo de donnees | Rare qu'un module metier n'ait aucune connexion. Verifier avec le codebase context. |
59
- | Duplication d'entite existante | Entite dupliquee | Si `Client` existe deja, ne pas creer `Customer`. Referencer l'existant. |
60
- | Modification d'entite d'un autre module | Couplage fort | Utiliser des evenements (MediatR) plutot que des modifications directes. |
58
+ | Module totalement isolé | Silo de données | Rare qu'un module métier n'ait aucune connexion. Vérifier avec le codebase context. |
59
+ | Duplication d'entité existante | Entité dupliquée | Si `Client` existe déjà, ne pas créer `Customer`. Référencer l'existant. |
60
+ | Modification d'entité d'un autre module | Couplage fort | Utiliser des événements (MediatR) plutôt que des modifications directes. |
61
61
 
62
62
  ---
63
63
 
64
64
  ## Mapping vers la consolidation
65
65
 
66
- | Reponse | Alimente |
66
+ | Réponse | Alimente |
67
67
  |---------|----------|
68
68
  | Q5.1-Q5.4 | `consolidation.crossModuleInteractions[]`, `consolidation.sharedEntities[]` |
69
69
  | Q5.5-Q5.8 | `consolidation.impactAssessment[]`, `consolidation.permissionCoherence` |