@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.
- package/.documentation/agents.html +147 -40
- package/.documentation/apex.html +1 -1
- package/.documentation/business-analyse.html +3 -3
- package/.documentation/cli-commands.html +2 -2
- package/.documentation/commands.html +14 -14
- package/.documentation/efcore.html +14 -14
- package/.documentation/gitflow.html +12 -12
- package/.documentation/hooks.html +41 -3
- package/.documentation/index.html +1 -1
- package/.documentation/init.html +2 -2
- package/.documentation/installation.html +11 -11
- package/.documentation/js/app.js +1 -1
- package/.documentation/ralph-loop.html +1 -1
- package/.documentation/test-web.html +4 -4
- package/config/mcp-defaults.json +62 -0
- package/dist/index.js +58 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +70010 -0
- package/dist/mcp-entry.mjs.map +1 -0
- package/package.json +14 -5
- package/templates/agents/gitflow/start.md +5 -4
- package/templates/agents/mcp-healthcheck.md +15 -13
- package/templates/mcp-scaffolding/component.tsx.hbs +298 -0
- package/templates/mcp-scaffolding/controller.cs.hbs +184 -0
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +231 -0
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -0
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -0
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +134 -0
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -0
- package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -0
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +413 -0
- package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -0
- package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -0
- package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -0
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +390 -0
- package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -0
- package/templates/ralph/README.md +3 -3
- package/templates/ralph/ralph.config.yaml +2 -2
- package/templates/skills/admin/SKILL.md +42 -0
- package/templates/skills/business-analyse/_shared.md +79 -15
- package/templates/skills/business-analyse/questionnaire/01-context.md +4 -4
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +3 -3
- package/templates/skills/business-analyse/questionnaire/03-scope.md +4 -4
- package/templates/skills/business-analyse/questionnaire/04-data.md +7 -7
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +1 -1
- package/templates/skills/business-analyse/questionnaire/06-security.md +3 -3
- package/templates/skills/business-analyse/questionnaire/07-ui.md +1 -1
- package/templates/skills/business-analyse/questionnaire/08-performance.md +3 -3
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +4 -4
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +2 -2
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +2 -2
- package/templates/skills/business-analyse/questionnaire/12-migration.md +1 -1
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +2 -2
- package/templates/skills/business-analyse/steps/step-01-discover.md +50 -25
- package/templates/skills/business-analyse/steps/step-03-specify.md +63 -0
- package/templates/skills/business-analyse/steps/step-04-validate.md +23 -1
- package/templates/skills/business-analyse/steps/step-05-handoff.md +248 -66
- package/templates/skills/business-analyse/templates/tpl-handoff.md +99 -23
- package/templates/skills/cc-agent/SKILL.md +129 -0
- package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -0
- package/templates/skills/cc-agent/references/permission-modes.md +102 -0
- package/templates/skills/cc-agent/references/tools-reference.md +144 -0
- package/templates/skills/cc-agent/steps/step-00-init.md +134 -0
- package/templates/skills/cc-agent/steps/step-01-design.md +186 -0
- package/templates/skills/cc-agent/steps/step-02-generate.md +204 -0
- package/templates/skills/cc-agent/steps/step-03-validate.md +130 -0
- package/templates/skills/cc-agent/templates/agent-categorized.md +67 -0
- package/templates/skills/cc-agent/templates/agent-standalone.md +56 -0
- package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -0
- package/templates/skills/cc-audit/SKILL.md +108 -0
- package/templates/skills/cc-audit/references/agent-checklist.md +91 -0
- package/templates/skills/cc-audit/references/hook-checklist.md +110 -0
- package/templates/skills/cc-audit/references/skill-checklist.md +70 -0
- package/templates/skills/cc-audit/steps/step-00-init.md +98 -0
- package/templates/skills/cc-audit/steps/step-01-scan.md +142 -0
- package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -0
- package/templates/skills/cc-audit/steps/step-03-report.md +142 -0
- package/templates/skills/cc-skill/SKILL.md +134 -0
- package/templates/skills/cc-skill/references/best-practices.md +167 -0
- package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -0
- package/templates/skills/cc-skill/references/skill-patterns.md +199 -0
- package/templates/skills/cc-skill/steps/step-00-init.md +119 -0
- package/templates/skills/cc-skill/steps/step-01-design.md +199 -0
- package/templates/skills/cc-skill/steps/step-02-generate.md +145 -0
- package/templates/skills/cc-skill/steps/step-03-steps.md +151 -0
- package/templates/skills/cc-skill/steps/step-04-validate.md +124 -0
- package/templates/skills/cc-skill/templates/skill-forked.md +85 -0
- package/templates/skills/cc-skill/templates/skill-progressive.md +102 -0
- package/templates/skills/cc-skill/templates/skill-simple.md +75 -0
- package/templates/skills/cc-skill/templates/step-template.md +82 -0
- package/templates/skills/check-version/SKILL.md +6 -0
- package/templates/skills/controller/templates.md +82 -0
- package/templates/skills/debug/SKILL.md +4 -0
- package/templates/skills/documentation/SKILL.md +1 -0
- package/templates/skills/efcore/SKILL.md +5 -0
- package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -0
- package/templates/skills/efcore/steps/db/step-deploy.md +26 -5
- package/templates/skills/efcore/steps/migration/step-03-validate.md +19 -0
- package/templates/skills/efcore/steps/shared/step-00-init.md +21 -7
- package/templates/skills/explore/SKILL.md +28 -32
- package/templates/skills/feature-full/SKILL.md +1 -0
- package/templates/skills/gitflow/SKILL.md +8 -0
- package/templates/skills/gitflow/steps/step-start.md +45 -10
- package/templates/skills/mcp/SKILL.md +38 -18
- package/templates/skills/quick-search/SKILL.md +8 -1
- package/templates/skills/ralph-loop/SKILL.md +1 -1
- package/templates/skills/ralph-loop/steps/step-00-init.md +8 -68
- package/templates/skills/ralph-loop/steps/step-04-check.md +1 -1
- package/templates/skills/refactor/SKILL.md +1 -0
- package/templates/skills/review-code/SKILL.md +11 -3
- package/templates/skills/review-code/references/owasp-api-top10.md +243 -0
- package/templates/skills/review-code/references/security-checklist.md +86 -1
- package/templates/skills/review-code/references/smartstack-conventions.md +166 -0
- package/templates/skills/ui-components/SKILL.md +31 -438
- package/templates/skills/ui-components/accessibility.md +170 -0
- package/templates/skills/ui-components/patterns/data-table.md +39 -0
- package/templates/skills/ui-components/patterns/entity-card.md +77 -0
- package/templates/skills/ui-components/patterns/grid-layout.md +91 -0
- package/templates/skills/ui-components/patterns/kanban.md +43 -0
- package/templates/skills/ui-components/style-guide.md +86 -0
- package/templates/skills/utils/SKILL.md +1 -0
- package/templates/skills/validate/SKILL.md +1 -0
- 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 |
|
|
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 |
|
|
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 (
|
|
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
|
|
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
|
-
##
|
|
28
|
+
## Technical Mapping
|
|
29
29
|
|
|
30
|
-
| Business Concept |
|
|
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
|
|
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
|
|
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** |
|
|
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
|
-
###
|
|
73
|
+
### Entity Patterns
|
|
74
74
|
|
|
75
|
-
| Besoin métier | Base class
|
|
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
|
-
##
|
|
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:
|
|
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** |
|
|
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
|
-
##
|
|
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
|
|
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
|
|
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
|
-
##
|
|
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
|
|
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é
|
|
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
|
|
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
|
-
##
|
|
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
|
|
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
|
-
##
|
|
28
|
+
## Lifecycle Patterns
|
|
29
29
|
|
|
30
|
-
| Need |
|
|
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
|
-
##
|
|
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
|
|
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: "
|
|
249
|
-
header: "
|
|
253
|
+
{ question: "Quel est le déclencheur de ce besoin ?",
|
|
254
|
+
header: "Déclencheur",
|
|
250
255
|
options: [
|
|
251
|
-
{ label: "
|
|
252
|
-
{ label: "
|
|
253
|
-
{ label: "
|
|
254
|
-
{ label: "
|
|
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: "
|
|
257
|
-
header: "
|
|
261
|
+
{ question: "Quel est le délai souhaité de mise en production ?",
|
|
262
|
+
header: "Délai",
|
|
258
263
|
options: [
|
|
259
|
-
{ label: "
|
|
260
|
-
{ label: "
|
|
261
|
-
{ label: "
|
|
262
|
-
{ label: "
|
|
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" →
|
|
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: "
|
|
365
|
-
header: "
|
|
369
|
+
{ question: "Y a-t-il des limites connues pour la v1 ?",
|
|
370
|
+
header: "Limites v1",
|
|
366
371
|
options: [
|
|
367
|
-
{ label: "
|
|
368
|
-
{ label: "
|
|
369
|
-
{ label: "
|
|
370
|
-
{ label: "
|
|
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
|
|
377
|
-
- If
|
|
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
|
-
|
|
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: "
|
|
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
|
{
|