@atlashub/smartstack-cli 1.37.0 → 2.1.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 (123) hide show
  1. package/.documentation/agents.html +147 -40
  2. package/.documentation/apex.html +1 -1
  3. package/.documentation/business-analyse.html +3 -3
  4. package/.documentation/cli-commands.html +2 -2
  5. package/.documentation/commands.html +14 -14
  6. package/.documentation/efcore.html +14 -14
  7. package/.documentation/gitflow.html +12 -12
  8. package/.documentation/hooks.html +41 -3
  9. package/.documentation/index.html +1 -1
  10. package/.documentation/init.html +2 -2
  11. package/.documentation/installation.html +11 -11
  12. package/.documentation/js/app.js +1 -1
  13. package/.documentation/ralph-loop.html +1 -1
  14. package/.documentation/test-web.html +4 -4
  15. package/config/mcp-defaults.json +62 -0
  16. package/dist/index.js +58 -5
  17. package/dist/index.js.map +1 -1
  18. package/dist/mcp-entry.mjs +70010 -0
  19. package/dist/mcp-entry.mjs.map +1 -0
  20. package/package.json +14 -5
  21. package/templates/agents/gitflow/start.md +5 -4
  22. package/templates/agents/mcp-healthcheck.md +15 -13
  23. package/templates/mcp-scaffolding/component.tsx.hbs +298 -0
  24. package/templates/mcp-scaffolding/controller.cs.hbs +184 -0
  25. package/templates/mcp-scaffolding/entity-extension.cs.hbs +231 -0
  26. package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -0
  27. package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -0
  28. package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +134 -0
  29. package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -0
  30. package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -0
  31. package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +413 -0
  32. package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -0
  33. package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -0
  34. package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -0
  35. package/templates/mcp-scaffolding/tests/service.test.cs.hbs +390 -0
  36. package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -0
  37. package/templates/ralph/README.md +3 -3
  38. package/templates/ralph/ralph.config.yaml +2 -2
  39. package/templates/skills/admin/SKILL.md +42 -0
  40. package/templates/skills/business-analyse/_shared.md +79 -15
  41. package/templates/skills/business-analyse/questionnaire/01-context.md +4 -4
  42. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +3 -3
  43. package/templates/skills/business-analyse/questionnaire/03-scope.md +4 -4
  44. package/templates/skills/business-analyse/questionnaire/04-data.md +7 -7
  45. package/templates/skills/business-analyse/questionnaire/05-integrations.md +1 -1
  46. package/templates/skills/business-analyse/questionnaire/06-security.md +3 -3
  47. package/templates/skills/business-analyse/questionnaire/07-ui.md +1 -1
  48. package/templates/skills/business-analyse/questionnaire/08-performance.md +3 -3
  49. package/templates/skills/business-analyse/questionnaire/09-constraints.md +4 -4
  50. package/templates/skills/business-analyse/questionnaire/10-documentation.md +2 -2
  51. package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +2 -2
  52. package/templates/skills/business-analyse/questionnaire/12-migration.md +1 -1
  53. package/templates/skills/business-analyse/questionnaire/13-cross-module.md +2 -2
  54. package/templates/skills/business-analyse/steps/step-01-discover.md +50 -25
  55. package/templates/skills/business-analyse/steps/step-03-specify.md +63 -0
  56. package/templates/skills/business-analyse/steps/step-04-validate.md +23 -1
  57. package/templates/skills/business-analyse/steps/step-05-handoff.md +248 -66
  58. package/templates/skills/business-analyse/templates/tpl-handoff.md +99 -23
  59. package/templates/skills/cc-agent/SKILL.md +129 -0
  60. package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -0
  61. package/templates/skills/cc-agent/references/permission-modes.md +102 -0
  62. package/templates/skills/cc-agent/references/tools-reference.md +144 -0
  63. package/templates/skills/cc-agent/steps/step-00-init.md +134 -0
  64. package/templates/skills/cc-agent/steps/step-01-design.md +186 -0
  65. package/templates/skills/cc-agent/steps/step-02-generate.md +204 -0
  66. package/templates/skills/cc-agent/steps/step-03-validate.md +130 -0
  67. package/templates/skills/cc-agent/templates/agent-categorized.md +67 -0
  68. package/templates/skills/cc-agent/templates/agent-standalone.md +56 -0
  69. package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -0
  70. package/templates/skills/cc-audit/SKILL.md +108 -0
  71. package/templates/skills/cc-audit/references/agent-checklist.md +91 -0
  72. package/templates/skills/cc-audit/references/hook-checklist.md +110 -0
  73. package/templates/skills/cc-audit/references/skill-checklist.md +70 -0
  74. package/templates/skills/cc-audit/steps/step-00-init.md +98 -0
  75. package/templates/skills/cc-audit/steps/step-01-scan.md +142 -0
  76. package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -0
  77. package/templates/skills/cc-audit/steps/step-03-report.md +142 -0
  78. package/templates/skills/cc-skill/SKILL.md +134 -0
  79. package/templates/skills/cc-skill/references/best-practices.md +167 -0
  80. package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -0
  81. package/templates/skills/cc-skill/references/skill-patterns.md +199 -0
  82. package/templates/skills/cc-skill/steps/step-00-init.md +119 -0
  83. package/templates/skills/cc-skill/steps/step-01-design.md +199 -0
  84. package/templates/skills/cc-skill/steps/step-02-generate.md +145 -0
  85. package/templates/skills/cc-skill/steps/step-03-steps.md +151 -0
  86. package/templates/skills/cc-skill/steps/step-04-validate.md +124 -0
  87. package/templates/skills/cc-skill/templates/skill-forked.md +85 -0
  88. package/templates/skills/cc-skill/templates/skill-progressive.md +102 -0
  89. package/templates/skills/cc-skill/templates/skill-simple.md +75 -0
  90. package/templates/skills/cc-skill/templates/step-template.md +82 -0
  91. package/templates/skills/check-version/SKILL.md +6 -0
  92. package/templates/skills/controller/templates.md +82 -0
  93. package/templates/skills/debug/SKILL.md +4 -0
  94. package/templates/skills/documentation/SKILL.md +1 -0
  95. package/templates/skills/efcore/SKILL.md +5 -0
  96. package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -0
  97. package/templates/skills/efcore/steps/db/step-deploy.md +26 -5
  98. package/templates/skills/efcore/steps/migration/step-03-validate.md +19 -0
  99. package/templates/skills/efcore/steps/shared/step-00-init.md +21 -7
  100. package/templates/skills/explore/SKILL.md +28 -32
  101. package/templates/skills/feature-full/SKILL.md +1 -0
  102. package/templates/skills/gitflow/SKILL.md +8 -0
  103. package/templates/skills/gitflow/steps/step-start.md +45 -10
  104. package/templates/skills/mcp/SKILL.md +38 -18
  105. package/templates/skills/quick-search/SKILL.md +8 -1
  106. package/templates/skills/ralph-loop/SKILL.md +1 -1
  107. package/templates/skills/ralph-loop/steps/step-00-init.md +8 -68
  108. package/templates/skills/ralph-loop/steps/step-04-check.md +1 -1
  109. package/templates/skills/refactor/SKILL.md +1 -0
  110. package/templates/skills/review-code/SKILL.md +11 -3
  111. package/templates/skills/review-code/references/owasp-api-top10.md +243 -0
  112. package/templates/skills/review-code/references/security-checklist.md +86 -1
  113. package/templates/skills/review-code/references/smartstack-conventions.md +166 -0
  114. package/templates/skills/ui-components/SKILL.md +31 -438
  115. package/templates/skills/ui-components/accessibility.md +170 -0
  116. package/templates/skills/ui-components/patterns/data-table.md +39 -0
  117. package/templates/skills/ui-components/patterns/entity-card.md +77 -0
  118. package/templates/skills/ui-components/patterns/grid-layout.md +91 -0
  119. package/templates/skills/ui-components/patterns/kanban.md +43 -0
  120. package/templates/skills/ui-components/style-guide.md +86 -0
  121. package/templates/skills/utils/SKILL.md +1 -0
  122. package/templates/skills/validate/SKILL.md +1 -0
  123. package/templates/skills/workflow/SKILL.md +27 -0
@@ -12,7 +12,7 @@
12
12
  | Q3.1 | List ESSENTIAL features (Must-Have) | List |
13
13
  | Q3.2 | List DESIRED features (Should-Have) | List |
14
14
  | Q3.3 | List OPTIONAL features (Could-Have) | List |
15
- | Q3.4 | What is EXPLICITLY excluded? | List of exclusions |
15
+ | Q3.4 | Any known constraints limiting v1 scope? | List of constraints |
16
16
 
17
17
  ## 3.2 Business Process
18
18
 
@@ -32,7 +32,7 @@
32
32
  | Must | Without this feature, the module has no value |
33
33
  | Should | Brings significant value but can wait for v2 |
34
34
  | Could | Nice-to-have, can be implemented if time available |
35
- | Won't | Explicitly excluded from scope |
35
+ | Won't | Deferred will be considered for future versions |
36
36
 
37
37
  ## Elicitation Guide
38
38
 
@@ -43,7 +43,7 @@
43
43
  | Q3.1 (Must-Have) | > 10 items listed | "Si vous ne pouviez en garder que 3 pour la v1, lesquels ? Les autres sont peut-être Should-Have." |
44
44
  | Q3.1 (Must-Have) | Mélange CRUD + complexe | "Le CRUD de base (liste, création, modification, suppression) est-il un Must, ou certaines actions sont Could ?" |
45
45
  | Q3.2 (Should-Have) | Vide | "Y a-t-il des fonctionnalités utiles mais qui peuvent attendre une v2 ? Export, filtres avancés, notifications ?" |
46
- | Q3.4 (exclusions) | Vide | "Que ne voulez-vous surtout PAS dans ce module ? Intégrations, reporting, mobile, historique ?" |
46
+ | Q3.4 (limites) | Vide | "Y a-t-il des contraintes connues qui pourraient limiter le périmètre ? (budget, délai, dépendance)" |
47
47
  | Q3.5 (main flow) | < 3 étapes | "Détaillez : l'utilisateur arrive sur l'écran → que voit-il ? → que clique-t-il ? → que se passe-t-il ?" |
48
48
  | Q3.7 (alt flows) | "Il n'y en a pas" | "Que se passe-t-il si l'utilisateur annule ? S'il n'a pas la permission ? Si les données sont invalides ?" |
49
49
  | Q3.8 (errors) | Liste vide | "Que se passe-t-il si le réseau coupe ? Si un champ obligatoire manque ? Si un doublon existe ?" |
@@ -53,6 +53,6 @@
53
53
  | Signal | Anti-pattern | Action |
54
54
  |--------|-------------|--------|
55
55
  | Tout est Must-Have | **Scope non priorisé** | Appliquer le test : "Sans cette fonctionnalité, le module a-t-il ZÉRO valeur ?" |
56
- | Q3.4 vide (rien d'exclu) | **Scope illimité** | "Si tout est inclus, le risque est de ne jamais livrer. Qu'est-ce qui est hors périmètre v1 ?" |
56
+ | Q3.4 pas de limite identifiée | **Scope à valider** | Le scope sera naturellement borné par les Must-Have/Should-Have. Vérifier que les Must-Have sont réalistes. |
57
57
  | Flow linéaire sans alternative | **Happy path uniquement** | "Que se passe-t-il au step X si la condition Y n'est pas remplie ?" |
58
58
  | Mélange fonctionnel/technique | **Solution dans le scope** | Séparer : "gérer les commandes" (fonctionnel) vs "utiliser Redis" (technique) |
@@ -25,9 +25,9 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Mapping
28
+ ## Technical Mapping
29
29
 
30
- | Business Concept | SmartStack |
30
+ | Business Concept | Platform |
31
31
  |-----------------|------------|
32
32
  | Main entity | Domain Entity |
33
33
  | Required attribute | `[Required]` |
@@ -35,7 +35,7 @@
35
35
  | 1:N relationship | Navigation property |
36
36
  | Sensitive data | Encryption + audit |
37
37
 
38
- > **⚠️ RBAC EXCLUSION: The following concepts are handled by SmartStack's RBAC system
38
+ > **⚠️ RBAC EXCLUSION: The following concepts are handled by the platform's RBAC system
39
39
  > and MUST NOT be modeled as entity attributes or separate entities:**
40
40
  >
41
41
  > | Concept | ❌ Wrong (entity attribute) | ✅ Correct (RBAC) |
@@ -54,7 +54,7 @@
54
54
  | Question | If answer is vague/insufficient | Probe |
55
55
  |----------|-------------------------------|-------|
56
56
  | Q4.1 (entities) | Single entity listed | "Cette entité a-t-elle des sous-éléments ? (lignes de commande, pièces jointes, historique)" |
57
- | Q4.1 (entities) | Mentions "User" as entity | "L'utilisateur est géré par SmartStack (Identity). Décrivez plutôt l'entité MÉTIER (Client, Employee, Contact...)" |
57
+ | Q4.1 (entities) | Mentions "User" as entity | "L'utilisateur est géré par la plateforme (Identity). Décrivez plutôt l'entité MÉTIER (Client, Employee, Contact...)" |
58
58
  | Q4.2 (attributes) | Liste de champs techniques (ID, CreatedDate) | "Les champs techniques (Id, TenantId, audit) sont auto-gérés. Quels sont les attributs MÉTIER ?" |
59
59
  | Q4.3 (relationships) | "1:N" without detail | "Un {Parent} peut avoir combien de {Children} max ? Un {Child} peut-il exister sans {Parent} ?" |
60
60
  | Q4.4 (volume) | "Beaucoup" | "Ordre de grandeur : dizaines, centaines, milliers, millions ? Croissance par mois ?" |
@@ -65,14 +65,14 @@
65
65
 
66
66
  | Signal | Anti-pattern | Action |
67
67
  |--------|-------------|--------|
68
- | Entity "User" avec attributs métier | **Confusion User/Identity** | SmartStack gère les Users via Identity. L'entité métier = Client, Employee, Contact |
68
+ | Entity "User" avec attributs métier | **Confusion User/Identity** | La plateforme gère les Users via Identity. L'entité métier = Client, Employee, Contact |
69
69
  | Attributs Id, TenantId, CreatedBy listés | **Champs techniques comme métier** | Ces champs sont auto-générés par `AuditableEntity`. Ne pas les lister. |
70
70
  | Pas de soft delete mentionné | **Suppression non clarifiée** | "Les données supprimées sont-elles effacées définitivement ou archivées ?" → `SoftDeletableEntity` |
71
71
  | Aucune contrainte d'unicité | **Unicité non vérifiée** | "Deux entités peuvent-elles avoir le même nom/code/email ?" |
72
72
 
73
- ### SmartStack Entity Patterns
73
+ ### Entity Patterns
74
74
 
75
- | Besoin métier | Base class SmartStack | Inclut automatiquement |
75
+ | Besoin métier | Base class plateforme | Inclut automatiquement |
76
76
  |---------------|----------------------|----------------------|
77
77
  | Entité simple | `Entity` | Id, TenantId |
78
78
  | Avec audit | `AuditableEntity` | + CreatedBy, CreatedDate, ModifiedBy, ModifiedDate |
@@ -25,7 +25,7 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Patterns
28
+ ## Integration Patterns
29
29
 
30
30
  | Integration Type | Pattern | When to use |
31
31
  |-----------------|---------|-------------|
@@ -25,7 +25,7 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Permission
28
+ ## Platform Permission
29
29
 
30
30
  **Format:** `business.{application}.{module}.{action}`
31
31
 
@@ -39,7 +39,7 @@
39
39
  | Import | `.import` |
40
40
  | Admin | `.admin` |
41
41
 
42
- > **⚠️ RBAC ARCHITECTURE: SmartStack gère les rôles et permissions via son système RBAC intégré (HasData).**
42
+ > **⚠️ RBAC ARCHITECTURE: La plateforme gère les rôles et permissions via son système RBAC intégré (HasData).**
43
43
  >
44
44
  > - Les rôles identifiés en Q6.1-Q6.4 sont des **ensembles de permissions**, pas des données métier
45
45
  > - L'accès est contrôlé par des permissions attribuées aux rôles, pas par des propriétés d'entité
@@ -63,6 +63,6 @@
63
63
  | Signal | Anti-pattern | Action |
64
64
  |--------|-------------|--------|
65
65
  | "Admin = accès total sans restriction" | **Super-admin sans granularité** | Même l'admin devrait avoir des permissions explicites, pas un bypass global |
66
- | Aucune mention de multi-tenant | **Isolation oubliée** | SmartStack est multi-tenant : chaque requête est filtrée par TenantId automatiquement |
66
+ | Aucune mention de multi-tenant | **Isolation oubliée** | La plateforme est multi-tenant : chaque requête est filtrée par TenantId automatiquement |
67
67
  | Pas d'audit trail | **Traçabilité absente** | `AuditableEntity` fournit CreatedBy/ModifiedBy. Suffisant ou besoin d'un audit log détaillé ? |
68
68
  | Permissions uniquement CRUD | **Actions métier non couvertes** | Y a-t-il des actions spécifiques ? (valider, approuver, archiver, publier) → permissions custom |
@@ -25,7 +25,7 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Components
28
+ ## UI Components
29
29
 
30
30
  | Need | Component | Détail |
31
31
  |------|-----------|--------|
@@ -25,7 +25,7 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Thresholds
28
+ ## Platform Thresholds
29
29
 
30
30
  | Metric | Acceptable Threshold |
31
31
  |--------|---------------------|
@@ -43,7 +43,7 @@
43
43
  | Q8.1 (response time) | "Rapide" | "< 1 seconde ? < 200ms ? Différence acceptable entre liste et détail ?" |
44
44
  | Q8.2 (concurrent users) | "Pas beaucoup" | "Combien d'utilisateurs se connectent en même temps le matin ? Aux heures de pointe ?" |
45
45
  | Q8.3 (peaks) | "Non" | "Pas de clôture mensuelle ? Pas de période de saisie massive ? Pas d'import batch ?" |
46
- | Q8.4 (SLA) | "100% dispo" | "100% n'existe pas. 99.9% = ~8h d'indisponibilité/an. 99.5% est le standard SmartStack." |
46
+ | Q8.4 (SLA) | "100% dispo" | "100% n'existe pas. 99.9% = ~8h d'indisponibilité/an. 99.5% est le standard de la plateforme." |
47
47
  | Q8.6 (tests) | "Tests normaux" | "Tests unitaires ? Intégration ? E2E ? Tests de charge ? Tests de sécurité (OWASP) ?" |
48
48
  | Q8.8 (acceptance) | Vide | "Quels critères pour que le PO valide la livraison ? Performance, fonctionnel, UX ?" |
49
49
 
@@ -51,6 +51,6 @@
51
51
 
52
52
  | Signal | Anti-pattern | Action |
53
53
  |--------|-------------|--------|
54
- | SLA irréaliste (100%, < 10ms) | **Exigences impossibles** | Rappeler les seuils SmartStack et le coût de chaque 9 supplémentaire |
54
+ | SLA irréaliste (100%, < 10ms) | **Exigences impossibles** | Rappeler les seuils de la plateforme et le coût de chaque 9 supplémentaire |
55
55
  | Aucune mention de volume de données | **Scalabilité non planifiée** | "Avec 1M de lignes dans 2 ans, la recherche sera-t-elle toujours performante ?" |
56
56
  | Pas de tests mentionnés | **Qualité non vérifiable** | Au minimum : tests unitaires services + tests intégration API |
@@ -25,7 +25,7 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Constraints
28
+ ## Platform Constraints
29
29
 
30
30
  | Constraint | Impact | Non-négociable |
31
31
  |-----------|--------|----------------|
@@ -43,7 +43,7 @@
43
43
 
44
44
  | Question | If answer is vague/insufficient | Probe |
45
45
  |----------|-------------------------------|-------|
46
- | Q9.1 (tech stack) | Propose une technologie hors SmartStack | "SmartStack impose .NET 8 + React 19. Cette contrainte est-elle compatible avec votre besoin ?" |
46
+ | Q9.1 (tech stack) | Propose une technologie hors plateforme | "La plateforme impose .NET 8 + React 19. Cette contrainte est-elle compatible avec votre besoin ?" |
47
47
  | Q9.2 (infrastructure) | "Cloud" sans précision | "Azure, AWS, on-premise ? Contraintes de localisation des données (pays) ?" |
48
48
  | Q9.5 (budget) | "Pas de budget défini" | "Y a-t-il un nombre de jours maximum ? Une enveloppe à ne pas dépasser ?" |
49
49
  | Q9.6 (deadline) | "Le plus vite possible" | "Y a-t-il une date métier impérative ? (réglementaire, événement, fin de contrat)" |
@@ -53,6 +53,6 @@
53
53
 
54
54
  | Signal | Anti-pattern | Action |
55
55
  |--------|-------------|--------|
56
- | Technologie imposée hors stack | **Incompatibilité SmartStack** | Clarifier : est-ce une intégration (OK) ou un remplacement de composant (risqué) ? |
56
+ | Technologie imposée hors stack | **Incompatibilité plateforme** | Clarifier : est-ce une intégration (OK) ou un remplacement de composant (risqué) ? |
57
57
  | Pas de deadline | **Priorité floue** | "Sans deadline, comment prioriser par rapport aux autres demandes ?" |
58
- | "Pas de contrainte" | **Contraintes implicites oubliées** | Multi-tenant, RGPD, audit, i18n sont des contraintes SmartStack obligatoires |
58
+ | "Pas de contrainte" | **Contraintes implicites oubliées** | Multi-tenant, RGPD, audit, i18n sont des contraintes de la plateforme obligatoires |
@@ -25,11 +25,11 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Documentation
28
+ ## Documentation
29
29
 
30
30
  | Type | Generated by | Format |
31
31
  |------|-------------|--------|
32
- | FRD Documentation | `/business-analyse:6-doc-html` | React page intégrée dans SmartStack web |
32
+ | FRD Documentation | `/business-analyse:6-doc-html` | React page intégrée dans l'application web |
33
33
  | Swagger API | Automatic (Swashbuckle) | OpenAPI 3.0 |
34
34
  | User guide | Manual or AI | Markdown / PDF |
35
35
  | Release notes | `/gitflow:11-finish` | Changelog automatique |
@@ -25,9 +25,9 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Lifecycle Patterns
28
+ ## Lifecycle Patterns
29
29
 
30
- | Need | SmartStack Pattern | Impact |
30
+ | Need | Platform Pattern | Impact |
31
31
  |------|-------------------|--------|
32
32
  | Soft delete | `SoftDeletableEntity` | IsDeleted, DeletedBy, DeletedDate auto-managed |
33
33
  | Audit trail | `AuditableEntity` | CreatedBy/Date, ModifiedBy/Date auto-managed |
@@ -25,7 +25,7 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Migration Patterns
28
+ ## Migration Patterns
29
29
 
30
30
  | Need | Pattern | Tool |
31
31
  |------|---------|------|
@@ -25,7 +25,7 @@
25
25
 
26
26
  ---
27
27
 
28
- ## SmartStack Cross-Module Patterns
28
+ ## Cross-Module Patterns
29
29
 
30
30
  | Need | Pattern | Example |
31
31
  |------|---------|---------|
@@ -56,7 +56,7 @@
56
56
  | Module totalement isolé | **Silo de données** | Rare qu'un module métier n'ait aucune connexion. Vérifier avec le codebase context. |
57
57
  | Duplication d'entité existante | **Entité dupliquée** | Si `Client` existe déjà, ne pas créer `Customer`. Référencer l'existant. |
58
58
  | Modification d'entité d'un autre module | **Couplage fort** | Utiliser des événements (MediatR) plutôt que des modifications directes. |
59
- | Aucune mention de navigation | **Module orphelin dans l'UI** | Le module doit apparaître dans le menu SmartStack (NavRoute). |
59
+ | Aucune mention de navigation | **Module orphelin dans l'UI** | Le module doit apparaître dans le menu de l'application (NavRoute). |
60
60
 
61
61
  ### Using Pre-Research Context
62
62
 
@@ -40,6 +40,11 @@ Read `{output_dir}/digest-00.md` for compressed context from step-00.
40
40
  > doit être dans `{language}`. Les exemples ci-dessous sont en français — adapter si `{language}` ≠ `fr`.
41
41
  > Voir `_shared.md` → "Configuration Langue de Communication" pour les règles complètes.
42
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
+
43
48
  ---
44
49
 
45
50
  ### 2. Determine Feature Type
@@ -245,21 +250,21 @@ AskUserQuestion([
245
250
  { label: "Revenus", description: "Impact direct sur le chiffre d'affaires" },
246
251
  { label: "Qualitatif", description: "Satisfaction, conformité, image — non chiffrable" }
247
252
  ], multiSelect: true },
248
- { question: "Que se passe-t-il si ce module n'est PAS développé ?",
249
- header: "Sans module",
253
+ { question: "Quel est le déclencheur de ce besoin ?",
254
+ header: "Déclencheur",
250
255
  options: [
251
- { label: "Bloquant", description: "Impossible de continuer sans (réglementaire, technique)" },
252
- { label: "Dégradé", description: "On continue avec l'existant mais avec des inefficacités" },
253
- { label: "Risque", description: "Risque croissant (erreurs, perte de données, non-conformité)" },
254
- { label: "Confort", description: "Pas d'impact critique, amélioration de confort" }
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" }
255
260
  ], multiSelect: false },
256
- { question: "Priorité par rapport aux autres besoins ?",
257
- header: "Priorité",
261
+ { question: "Quel est le délai souhaité de mise en production ?",
262
+ header: "Délai",
258
263
  options: [
259
- { label: "Critique", description: "Doit être livré en premier, bloque d'autres projets" },
260
- { label: "Haute", description: "Important mais pas bloquant" },
261
- { label: "Moyenne", description: "Souhaité mais peut attendre" },
262
- { label: "Basse", description: "Nice-to-have" }
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" }
263
268
  ], multiSelect: false }
264
269
  ])
265
270
  ```
@@ -301,7 +306,7 @@ AskUserQuestion([
301
306
 
302
307
  **ULTRATHINK checkpoint:**
303
308
  - If only 1-2 user types → probe with Technique 5: "Et les auditeurs, le support, les processus automatisés ?"
304
- - If no "Admin" → SmartStack requires admin role, clarify
309
+ - If no "Admin" → The platform requires an admin role, clarify
305
310
  - If "Externe" → follow-up: portal, API, or shared access?
306
311
 
307
312
  **Batch 2 — Needs per role (Q2.5-Q2.8):**
@@ -361,20 +366,20 @@ AskUserQuestion([
361
366
  { label: "Historique/Audit", description: "Historique détaillé des modifications" },
362
367
  { label: "Intégrations", description: "Connexion avec d'autres modules/systèmes" }
363
368
  ], multiSelect: true },
364
- { question: "Qu'est-ce qui est EXCLU du périmètre ?",
365
- header: "Exclusions",
369
+ { question: "Y a-t-il des limites connues pour la v1 ?",
370
+ header: "Limites v1",
366
371
  options: [
367
- { label: "Mobile", description: "Pas d'accès mobile pour la v1" },
368
- { label: "Reporting avancé", description: "Pas de rapports complexes ou BI" },
369
- { label: "Multi-langue contenu", description: "UI i18n, mais pas le contenu métier" },
370
- { label: "Rien d'exclu", description: "Pas d'exclusion explicite" }
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" }
371
376
  ], multiSelect: true }
372
377
  ])
373
378
  ```
374
379
 
375
380
  **ULTRATHINK checkpoint:**
376
- - If "Rien d'exclu" → anti-pattern "Scope illimité" probe exclusions
377
- - If > 5 Must-Have"Sans cette fonctionnalité, le module a ZÉRO valeur ?"
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
378
383
 
379
384
  **Batch 2 — Process flow (Q3.5-Q3.8):**
380
385
 
@@ -426,14 +431,28 @@ Document each response with:
426
431
  #### 5.5 Reformulation Loop (AFTER EACH CATEGORY)
427
432
 
428
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:
429
443
 
430
- After completing a category's batches, display a concise summary and ask for validation:
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):
431
452
 
432
453
  ```
433
454
  AskUserQuestion([
434
- { question: "Voici ce que j'ai compris pour {category_name}:
435
- {bullet_point_summary}
436
- Est-ce correct ?",
455
+ { question: "Cette synthèse est-elle correcte ?",
437
456
  header: "Validation",
438
457
  options: [
439
458
  { label: "Correct", description: "La compréhension est fidèle, on continue" },
@@ -443,6 +462,12 @@ AskUserQuestion([
443
462
  ])
444
463
  ```
445
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
+
446
471
  - If **"Correct"** → proceed to next category
447
472
  - If **"Partiellement"** → ask: "Quelles corrections ou nuances souhaitez-vous apporter ?" (free text follow-up)
448
473
  - If **"Incorrect"** → re-ask the category with refined questions based on feedback
@@ -169,6 +169,69 @@ For each BR, create corresponding FR:
169
169
 
170
170
  ---
171
171
 
172
+ ### 6b. Specify Navigation Hierarchy & SeedData Requirements
173
+
174
+ > **CRITICAL:** Every new feature requires navigation entries and seed data to be functional.
175
+ > Without these, the module will be invisible and permissions will block all access (403).
176
+
177
+ **Navigation hierarchy for this feature:**
178
+
179
+ ```markdown
180
+ ### Navigation Hierarchy
181
+
182
+ | Level | Code | Label (EN) | Label (FR) | Route | Icon | New? |
183
+ |-------|------|-----------|-----------|-------|------|------|
184
+ | Context | business | Business | Métier | /business | Briefcase | Existing/New |
185
+ | Application | {application_name} | {App Label EN} | {App Label FR} | /business/{app} | {Icon} | Existing/New |
186
+ | Module | {module_name} | {Module Label EN} | {Module Label FR} | /business/{app}/{module} | {Icon} | **NEW** |
187
+ | Section (opt.) | {section} | {Section Label EN} | {Section Label FR} | /business/{app}/{module}/{section} | {Icon} | **NEW** |
188
+ ```
189
+
190
+ > **Rule:** Only create entries marked "New". Existing entries are reused from the database.
191
+ > Provide labels in 4 languages: FR, EN, IT, DE.
192
+
193
+ **Permission hierarchy for this module:**
194
+
195
+ ```markdown
196
+ ### Permission Hierarchy (HasData seeds)
197
+
198
+ | Permission Path | Level | Action | Description |
199
+ |----------------|-------|--------|-------------|
200
+ | `business.{app}.{module}.*` | Module | Wildcard | Full module access |
201
+ | `business.{app}.{module}.read` | Module | Read | View list and details |
202
+ | `business.{app}.{module}.create` | Module | Create | Create new entries |
203
+ | `business.{app}.{module}.update` | Module | Update | Modify existing |
204
+ | `business.{app}.{module}.delete` | Module | Delete | Remove entries |
205
+ | `business.{app}.{module}.export` | Module | Execute | Export data (if needed) |
206
+ ```
207
+
208
+ **Role-Permission assignments (default matrix):**
209
+
210
+ | Permission | {App} Admin | {App} Manager | {App} Contributor | {App} Viewer |
211
+ |------------|-------------|---------------|-------------------|--------------|
212
+ | `*.{module}.*` | X | - | - | - |
213
+ | `*.{module}.read` | - | X | X | X |
214
+ | `*.{module}.create` | - | X | X | - |
215
+ | `*.{module}.update` | - | X | X | - |
216
+ | `*.{module}.delete` | - | - | - | - |
217
+ | `*.{module}.export` | - | X | - | - |
218
+
219
+ > **Note:** Admin gets wildcard (includes all actions). SuperAdmin inherits via `*` wildcard.
220
+
221
+ **SeedData files to create/modify:**
222
+
223
+ > **5 mandatory files** for every new module (4 EF Core HasData + 1 Application code):
224
+
225
+ | # | File | Layer | Action | Content |
226
+ |---|------|-------|--------|---------|
227
+ | 1 | `NavigationModuleConfiguration.cs` | Infrastructure (HasData) | Add entry | Module in `nav_Modules` |
228
+ | 2 | `NavigationTranslationConfiguration.cs` | Infrastructure (HasData) | Add entries | 4 translations (fr, en, it, de) per nav entity |
229
+ | 3 | `PermissionConfiguration.cs` | Infrastructure (HasData) | Add entries | All permissions listed above |
230
+ | 4 | `Permissions.cs` | Application (code) | Add static class | Compile-time constants for `[RequirePermission]` |
231
+ | 5 | `RolePermissionConfiguration.cs` | Infrastructure (HasData) | Add entries | Role→Permission for {App} Admin, {App} Manager, {App} Contributor, {App} Viewer |
232
+
233
+ ---
234
+
172
235
  ### 7. Create UI Wireframes
173
236
 
174
237
  **Main screen wireframe:**
@@ -50,6 +50,9 @@ Read `{output_dir}/digest-03.md` for compressed context from previous step.
50
50
  - [ ] UI wireframes provided
51
51
  - [ ] Gherkin scenarios cover happy path + errors
52
52
  - [ ] i18n keys defined for messages
53
+ - [ ] Navigation hierarchy defined (Context/Application/Module/Section)
54
+ - [ ] SeedData requirements identified (navigation, permissions, roles, rolePermissions)
55
+ - [ ] Role-Permission assignment matrix specified (4 default roles)
53
56
 
54
57
  ---
55
58
 
@@ -88,6 +91,23 @@ INVALID: {app}.{module}.{action}
88
91
  - PascalCase for entity names
89
92
  - Matches module naming convention
90
93
 
94
+ **Folder structure conventions:**
95
+ - Domain entities in `Domain/Business/{Application}/{Module}/` (not flat `Entities/`)
96
+ - Application DTOs in `Application/Business/{Application}/{Module}/DTOs/` (not `Features/`)
97
+ - Infrastructure configs in `Configurations/{Module}/` (subfolder per module)
98
+ - Infrastructure services in `Services/{Module}/` (subfolder per module)
99
+ - Infrastructure seeds in `Seeding/Data/{Module}/` (subfolder per module)
100
+ - Controllers in `Controllers/Business/{Application}/` (grouped by context)
101
+ - Table naming: `{prefix}_{EntityPlural}` in correct schema (`core` or `extensions`)
102
+
103
+ **SeedData completeness:**
104
+ - [ ] Navigation hierarchy specified (new Context/Application/Module/Section entries)
105
+ - [ ] Translations specified for all 4 languages (fr, en, it, de)
106
+ - [ ] Permission paths follow format `business.{app}.{module}.{action}`
107
+ - [ ] Wildcard permission included (`business.{app}.{module}.*`)
108
+ - [ ] Role-Permission matrix covers 4 default roles (Admin, Manager, Contributor, Viewer)
109
+ - [ ] SeedData files listed in FRD section 6b
110
+
91
111
  ---
92
112
 
93
113
  ### 5. Documentation Freshness Check
@@ -207,7 +227,9 @@ INVALID: {app}.{module}.{action}
207
227
  "conventions": {
208
228
  "permissions": "OK",
209
229
  "navRoute": "OK",
210
- "naming": "OK"
230
+ "naming": "OK",
231
+ "folderStructure": "OK",
232
+ "seedData": "OK"
211
233
  },
212
234
  "risks": [
213
235
  {