@atlashub/smartstack-cli 1.34.0 → 1.36.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/installation.html +56 -31
- package/dist/index.js +1098 -582
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/docs-context-reader.md +125 -0
- package/templates/agents/docs-sync-checker.md +122 -0
- package/templates/hooks/docs-drift-check.md +97 -0
- package/templates/skills/_resources/context-digest-template.md +53 -0
- package/templates/skills/_resources/doc-context-cache.md +62 -0
- package/templates/skills/_resources/docs-manifest-schema.md +157 -0
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +183 -0
- package/templates/skills/_shared.md +15 -7
- package/templates/skills/apex/SKILL.md +6 -0
- package/templates/skills/apex/steps/step-00-init.md +9 -0
- package/templates/skills/apex/steps/step-01-analyze.md +36 -0
- package/templates/skills/apex/steps/step-02-plan.md +38 -0
- package/templates/skills/apex/steps/step-03-execute.md +39 -0
- package/templates/skills/apex/steps/step-04-validate.md +31 -1
- package/templates/skills/apex/steps/step-04b-doc-sync.md +162 -0
- package/templates/skills/apex/steps/step-05-examine.md +7 -0
- package/templates/skills/apex/templates/04b-doc-sync.md +31 -0
- package/templates/skills/apex/templates/context-digest.md +35 -0
- package/templates/skills/application/steps/step-04-backend.md +17 -17
- package/templates/skills/application/steps/step-05-frontend.md +4 -1
- package/templates/skills/application/templates-backend.md +8 -8
- package/templates/skills/application/templates-frontend.md +8 -8
- package/templates/skills/business-analyse/SKILL.md +18 -5
- package/templates/skills/business-analyse/_shared.md +306 -4
- package/templates/skills/business-analyse/questionnaire/01-context.md +21 -6
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +34 -0
- package/templates/skills/business-analyse/questionnaire/03-scope.md +23 -0
- package/templates/skills/business-analyse/questionnaire/04-data.md +44 -0
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +29 -7
- package/templates/skills/business-analyse/questionnaire/06-security.md +28 -0
- package/templates/skills/business-analyse/questionnaire/07-ui.md +32 -7
- package/templates/skills/business-analyse/questionnaire/08-performance.md +21 -0
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +29 -6
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +27 -6
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -0
- package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -0
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -0
- package/templates/skills/business-analyse/steps/step-00-init.md +110 -16
- package/templates/skills/business-analyse/steps/step-01-discover.md +530 -85
- package/templates/skills/business-analyse/steps/step-02-analyse.md +81 -25
- package/templates/skills/business-analyse/steps/step-03-specify.md +116 -24
- package/templates/skills/business-analyse/steps/step-04-validate.md +107 -33
- package/templates/skills/business-analyse/steps/step-05-handoff.md +256 -33
- package/templates/skills/business-analyse/steps/step-06-doc-html.md +84 -25
- package/templates/skills/business-analyse/templates/{frd-handoff.md → tpl-handoff.md} +18 -4
- package/templates/skills/business-analyse/templates-frd.md +19 -5
- package/templates/skills/business-analyse/tracking/change-template.md +30 -0
- package/templates/skills/documentation/SKILL.md +68 -31
- package/templates/skills/documentation/data-schema.md +198 -0
- package/templates/skills/documentation/templates.md +30 -1
- package/templates/skills/gitflow/_shared.md +188 -53
- package/templates/skills/gitflow/phases/abort.md +28 -16
- package/templates/skills/gitflow/phases/cleanup.md +13 -9
- package/templates/skills/gitflow/phases/status.md +16 -17
- package/templates/skills/gitflow/steps/step-commit.md +11 -5
- package/templates/skills/gitflow/steps/step-finish.md +43 -33
- package/templates/skills/gitflow/steps/step-init.md +134 -2
- package/templates/skills/gitflow/steps/step-merge.md +24 -10
- package/templates/skills/gitflow/steps/step-pr.md +42 -28
- package/templates/skills/gitflow/steps/step-start.md +19 -13
- package/templates/skills/gitflow/templates/config.json +14 -4
- package/templates/skills/ralph-loop/SKILL.md +58 -9
- package/templates/skills/ralph-loop/steps/step-00-init.md +170 -30
- package/templates/skills/ralph-loop/steps/step-01-task.md +243 -40
- package/templates/skills/ralph-loop/steps/step-02-execute.md +142 -24
- package/templates/skills/ralph-loop/steps/step-03-commit.md +140 -36
- package/templates/skills/ralph-loop/steps/step-04-check.md +128 -44
- package/templates/skills/ralph-loop/steps/step-05-report.md +175 -88
- /package/templates/skills/business-analyse/templates/{frd-brd.md → tpl-brd.md} +0 -0
- /package/templates/skills/business-analyse/templates/{frd-discovery.md → tpl-discovery.md} +0 -0
- /package/templates/skills/business-analyse/templates/{frd-spec.md → tpl-frd.md} +0 -0
|
@@ -25,9 +25,24 @@
|
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
|
-
##
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
## Elicitation Guide
|
|
29
|
+
|
|
30
|
+
### Follow-ups by Question
|
|
31
|
+
|
|
32
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
33
|
+
|----------|-------------------------------|-------|
|
|
34
|
+
| Q1.1 (problem) | User describes a solution, not a problem | "Oublions la solution un instant — quel problème rencontrez-vous concrètement aujourd'hui ?" |
|
|
35
|
+
| Q1.2 (AS-IS) | No concrete workflow described | "Décrivez-moi une journée type : vous arrivez, vous ouvrez l'outil — que faites-vous en premier ?" |
|
|
36
|
+
| Q1.3 (TO-BE) | Vague ("ça ira mieux") | "Concrètement, quel geste ou tâche sera différent ? Combien de clics/minutes en moins ?" |
|
|
37
|
+
| Q1.4 (KPIs) | No measurable metric | "Comment saurez-vous dans 3 mois que cette fonctionnalité a réussi ? Quel chiffre regarderez-vous ?" |
|
|
38
|
+
| Q1.5 (ROI) | "I don't know" | "Combien de temps passez-vous sur ce processus aujourd'hui par semaine ? À combien de personnes ?" |
|
|
39
|
+
| Q1.7 (if NOT built) | Minimized impact | "Si on ne fait rien pendant 6 mois, qu'est-ce qui empire ? Quel est le coût de l'inaction ?" |
|
|
40
|
+
|
|
41
|
+
### Anti-patterns to Detect
|
|
42
|
+
|
|
43
|
+
| Signal | Anti-pattern | Action |
|
|
44
|
+
|--------|-------------|--------|
|
|
45
|
+
| "Il faudrait un bouton/écran/champ..." | **Solution disguised as need** | Apply Solution → Problem Reframing |
|
|
46
|
+
| "C'est évident", "tout le monde sait" | **Implicit assumption** | "Pouvez-vous le formuler explicitement pour que je puisse le documenter ?" |
|
|
47
|
+
| KPIs are feelings ("ça sera mieux") | **Non-measurable success** | "Quel chiffre regarderez-vous pour savoir si c'est réussi ?" |
|
|
48
|
+
| Q1.7 = "rien de grave" | **Faible justification business** | Challenge: si ce n'est pas grave, pourquoi le développer ? |
|
|
@@ -27,9 +27,43 @@
|
|
|
27
27
|
|
|
28
28
|
## Role -> Permission Mapping
|
|
29
29
|
|
|
30
|
+
> **⚠️ RBAC RULE: Roles are SmartStack permissions, NOT entity attributes.**
|
|
31
|
+
>
|
|
32
|
+
> When stakeholders mention "roles" (admin, manager, user...), these MUST be mapped
|
|
33
|
+
> to SmartStack's RBAC permission system (`business.{app}.{module}.{action}`).
|
|
34
|
+
>
|
|
35
|
+
> **NEVER** model a role as:
|
|
36
|
+
> - A property/column on a User entity (e.g. `User.Role`, `User.RoleType`)
|
|
37
|
+
> - An enum or string attribute on any business entity
|
|
38
|
+
> - A separate `Role` entity with a FK on User
|
|
39
|
+
>
|
|
40
|
+
> **ALWAYS** map roles to permission sets in the matrix below:
|
|
41
|
+
|
|
30
42
|
| Discovered Role | SmartStack Permission |
|
|
31
43
|
|-----------------|----------------------|
|
|
32
44
|
| Admin | `*.admin` |
|
|
33
45
|
| Manager | `*.read,create,update` |
|
|
34
46
|
| User | `*.read,create` |
|
|
35
47
|
| ReadOnly | `*.read` |
|
|
48
|
+
|
|
49
|
+
> If the business need requires **custom roles beyond these 4**, document them
|
|
50
|
+
> as additional permission sets — not as data model concepts.
|
|
51
|
+
|
|
52
|
+
## Elicitation Guide
|
|
53
|
+
|
|
54
|
+
### Follow-ups by Question
|
|
55
|
+
|
|
56
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
57
|
+
|----------|-------------------------------|-------|
|
|
58
|
+
| Q2.1 (end users) | Only 1-2 roles listed | "Y a-t-il des auditeurs, des administrateurs système, du support, des processus automatisés ?" |
|
|
59
|
+
| Q2.5 (tasks per role) | Generic tasks ("manage data") | "Prenons le rôle {role} : en arrivant le matin, quelle est sa première action ? Et après ?" |
|
|
60
|
+
| Q2.6 (frequency) | "Régulièrement" | "Quotidien ? 10 fois/jour ou 1 fois ? Certains jours plus que d'autres ?" |
|
|
61
|
+
| Q2.8 (frustrations) | "Rien de particulier" | "Quel processus prend le plus de temps ? Qu'est-ce qui vous fait soupirer ?" |
|
|
62
|
+
|
|
63
|
+
### Anti-patterns to Detect
|
|
64
|
+
|
|
65
|
+
| Signal | Anti-pattern | Action |
|
|
66
|
+
|--------|-------------|--------|
|
|
67
|
+
| Un seul type d'utilisateur identifié | **Stakeholders manquants** | Proposer systématiquement : admin, utilisateur métier, lecteur, auditeur, support N1 |
|
|
68
|
+
| "Tous les utilisateurs font la même chose" | **Rôles non différenciés** | "Qui peut supprimer ? Qui ne fait que consulter ? Qui valide ?" |
|
|
69
|
+
| Mélange rôle organisationnel et accès | **Confusion rôle/permission** | Séparer : rôle métier (chef de projet) vs niveau d'accès (lecture/écriture) |
|
|
@@ -33,3 +33,26 @@
|
|
|
33
33
|
| Should | Brings significant value but can wait for v2 |
|
|
34
34
|
| Could | Nice-to-have, can be implemented if time available |
|
|
35
35
|
| Won't | Explicitly excluded from scope |
|
|
36
|
+
|
|
37
|
+
## Elicitation Guide
|
|
38
|
+
|
|
39
|
+
### Follow-ups by Question
|
|
40
|
+
|
|
41
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
42
|
+
|----------|-------------------------------|-------|
|
|
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
|
+
| 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
|
+
| 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 ?" |
|
|
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
|
+
| 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
|
+
| Q3.8 (errors) | Liste vide | "Que se passe-t-il si le réseau coupe ? Si un champ obligatoire manque ? Si un doublon existe ?" |
|
|
50
|
+
|
|
51
|
+
### Anti-patterns to Detect
|
|
52
|
+
|
|
53
|
+
| Signal | Anti-pattern | Action |
|
|
54
|
+
|--------|-------------|--------|
|
|
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 ?" |
|
|
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
|
+
| Mélange fonctionnel/technique | **Solution dans le scope** | Séparer : "gérer les commandes" (fonctionnel) vs "utiliser Redis" (technique) |
|
|
@@ -34,3 +34,47 @@
|
|
|
34
34
|
| Unique attribute | `HasIndex().IsUnique()` |
|
|
35
35
|
| 1:N relationship | Navigation property |
|
|
36
36
|
| Sensitive data | Encryption + audit |
|
|
37
|
+
|
|
38
|
+
> **⚠️ RBAC EXCLUSION: The following concepts are handled by SmartStack's RBAC system
|
|
39
|
+
> and MUST NOT be modeled as entity attributes or separate entities:**
|
|
40
|
+
>
|
|
41
|
+
> | Concept | ❌ Wrong (entity attribute) | ✅ Correct (RBAC) |
|
|
42
|
+
> |---------|---------------------------|-------------------|
|
|
43
|
+
> | User role | `User.Role` property | Permission set `business.{app}.{module}.*` |
|
|
44
|
+
> | Access level | `User.AccessLevel` enum | Permission matrix per role |
|
|
45
|
+
> | Is admin | `User.IsAdmin` boolean | `business.{app}.{module}.admin` permission |
|
|
46
|
+
> | Can edit | `User.CanEdit` boolean | `business.{app}.{module}.update` permission |
|
|
47
|
+
>
|
|
48
|
+
> When Q4.2 asks for "important attributes", **exclude** any role/permission/access concept.
|
|
49
|
+
|
|
50
|
+
## Elicitation Guide
|
|
51
|
+
|
|
52
|
+
### Follow-ups by Question
|
|
53
|
+
|
|
54
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
55
|
+
|----------|-------------------------------|-------|
|
|
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...)" |
|
|
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
|
+
| Q4.3 (relationships) | "1:N" without detail | "Un {Parent} peut avoir combien de {Children} max ? Un {Child} peut-il exister sans {Parent} ?" |
|
|
60
|
+
| Q4.4 (volume) | "Beaucoup" | "Ordre de grandeur : dizaines, centaines, milliers, millions ? Croissance par mois ?" |
|
|
61
|
+
| Q4.5 (validations) | Validations basiques seulement | "Y a-t-il des règles inter-champs ? (date fin > date début, montant selon statut)" |
|
|
62
|
+
| Q4.8 (sensitive) | "Non" | "Pas de données personnelles (nom, email, téléphone) ? Pas de données financières ?" |
|
|
63
|
+
|
|
64
|
+
### Anti-patterns to Detect
|
|
65
|
+
|
|
66
|
+
| Signal | Anti-pattern | Action |
|
|
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 |
|
|
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
|
+
| 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
|
+
| Aucune contrainte d'unicité | **Unicité non vérifiée** | "Deux entités peuvent-elles avoir le même nom/code/email ?" |
|
|
72
|
+
|
|
73
|
+
### SmartStack Entity Patterns
|
|
74
|
+
|
|
75
|
+
| Besoin métier | Base class SmartStack | Inclut automatiquement |
|
|
76
|
+
|---------------|----------------------|----------------------|
|
|
77
|
+
| Entité simple | `Entity` | Id, TenantId |
|
|
78
|
+
| Avec audit | `AuditableEntity` | + CreatedBy, CreatedDate, ModifiedBy, ModifiedDate |
|
|
79
|
+
| Avec suppression logique | `SoftDeletableEntity` | + IsDeleted, DeletedBy, DeletedDate |
|
|
80
|
+
| Avec hiérarchie | `HierarchicalEntity` | + ParentId, Level, Path |
|
|
@@ -27,10 +27,32 @@
|
|
|
27
27
|
|
|
28
28
|
## SmartStack Patterns
|
|
29
29
|
|
|
30
|
-
| Integration Type | Pattern |
|
|
31
|
-
|
|
32
|
-
| REST API | HttpClient + Polly |
|
|
33
|
-
| Message Queue | MassTransit |
|
|
34
|
-
| Webhook | Controller endpoint |
|
|
35
|
-
| Real-time | SignalR |
|
|
36
|
-
| Batch import | Background job |
|
|
30
|
+
| Integration Type | Pattern | When to use |
|
|
31
|
+
|-----------------|---------|-------------|
|
|
32
|
+
| REST API | HttpClient + Polly | Appel synchrone à un service externe avec retry/circuit-breaker |
|
|
33
|
+
| Message Queue | MassTransit | Communication asynchrone entre modules/services |
|
|
34
|
+
| Webhook | Controller endpoint | Réception d'événements depuis un système externe |
|
|
35
|
+
| Real-time | SignalR | Notifications temps réel vers le navigateur |
|
|
36
|
+
| Batch import | Background job (Hangfire) | Import/traitement de gros volumes en arrière-plan |
|
|
37
|
+
| File storage | Azure Blob / local | Upload/download de documents et pièces jointes |
|
|
38
|
+
|
|
39
|
+
## Elicitation Guide
|
|
40
|
+
|
|
41
|
+
### Follow-ups by Question
|
|
42
|
+
|
|
43
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
44
|
+
|----------|-------------------------------|-------|
|
|
45
|
+
| Q5.1 (internal) | "Aucun" | "Ce module doit-il notifier d'autres modules ? Lire des données d'un autre contexte ?" |
|
|
46
|
+
| Q5.2 (external) | "Aucun" | "Pas d'envoi d'emails ? Pas de connexion ERP, CRM, comptabilité ? Pas de SSO externe ?" |
|
|
47
|
+
| Q5.3 (APIs) | "Oui il y a une API" | "Avez-vous la documentation (Swagger/OpenAPI) ? Quel format (REST/SOAP/GraphQL) ? Auth (API key, OAuth) ?" |
|
|
48
|
+
| Q5.6 (frequency) | "Temps réel" | "Temps réel = chaque seconde (SignalR) ou à chaque modification (event-driven) ? Quelle latence acceptable ?" |
|
|
49
|
+
| Q5.7 (conflicts) | "Pas de conflits" | "Si le système externe envoie une donnée qui existe déjà, on écrase, on ignore ou on signale ?" |
|
|
50
|
+
| Q5.8 (fallback) | "Ça ne devrait pas arriver" | "Si le service est down 1h, que fait l'utilisateur ? File d'attente, mode dégradé, retry ?" |
|
|
51
|
+
|
|
52
|
+
### Anti-patterns to Detect
|
|
53
|
+
|
|
54
|
+
| Signal | Anti-pattern | Action |
|
|
55
|
+
|--------|-------------|--------|
|
|
56
|
+
| Intégration synchrone pour tout | **Couplage fort** | Si l'autre système peut être lent/down, proposer pattern asynchrone (MassTransit) |
|
|
57
|
+
| "On verra plus tard pour l'intégration" | **Intégration non planifiée** | Documenter minimum : système cible, direction du flux, format attendu |
|
|
58
|
+
| Pas de stratégie d'erreur | **Pas de résilience** | Toute intégration externe DOIT avoir un fallback (Polly retry + circuit breaker) |
|
|
@@ -38,3 +38,31 @@
|
|
|
38
38
|
| Export | `.export` |
|
|
39
39
|
| Import | `.import` |
|
|
40
40
|
| Admin | `.admin` |
|
|
41
|
+
|
|
42
|
+
> **⚠️ RBAC ARCHITECTURE: SmartStack gère les rôles et permissions via son système RBAC intégré (HasData).**
|
|
43
|
+
>
|
|
44
|
+
> - Les rôles identifiés en Q6.1-Q6.4 sont des **ensembles de permissions**, pas des données métier
|
|
45
|
+
> - L'accès est contrôlé par des permissions attribuées aux rôles, pas par des propriétés d'entité
|
|
46
|
+
> - Ne jamais proposer de créer une entité `Role`, `UserRole`, ou un attribut `User.Role`
|
|
47
|
+
> - Le mapping rôle → permissions se fait dans la **Permission Matrix** (step-03-specify)
|
|
48
|
+
|
|
49
|
+
## Elicitation Guide
|
|
50
|
+
|
|
51
|
+
### Follow-ups by Question
|
|
52
|
+
|
|
53
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
54
|
+
|----------|-------------------------------|-------|
|
|
55
|
+
| Q6.1-Q6.4 (access) | "Admin peut tout faire" | "Tout = aussi supprimer ? Aussi exporter des données sensibles ? Aussi modifier les données d'un autre tenant ?" |
|
|
56
|
+
| Q6.1-Q6.4 (access) | Un seul rôle défini | "Qui ne fait que consulter ? Qui peut modifier mais pas supprimer ? Qui valide les actions critiques ?" |
|
|
57
|
+
| Q6.4 (delete) | "Tout le monde peut supprimer" | "Suppression logique ou physique ? Confirmation requise ? Possibilité de restaurer ?" |
|
|
58
|
+
| Q6.7 (audit) | "Non" | "Pas besoin de savoir qui a modifié quoi et quand ? Pas de traçabilité réglementaire ?" |
|
|
59
|
+
| Q6.8 (compliance) | "Pas concerné" | "Données personnelles (RGPD) ? Données financières (SOX) ? Données de santé (HDS) ?" |
|
|
60
|
+
|
|
61
|
+
### Anti-patterns to Detect
|
|
62
|
+
|
|
63
|
+
| Signal | Anti-pattern | Action |
|
|
64
|
+
|--------|-------------|--------|
|
|
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 |
|
|
67
|
+
| Pas d'audit trail | **Traçabilité absente** | `AuditableEntity` fournit CreatedBy/ModifiedBy. Suffisant ou besoin d'un audit log détaillé ? |
|
|
68
|
+
| Permissions uniquement CRUD | **Actions métier non couvertes** | Y a-t-il des actions spécifiques ? (valider, approuver, archiver, publier) → permissions custom |
|
|
@@ -27,10 +27,35 @@
|
|
|
27
27
|
|
|
28
28
|
## SmartStack Components
|
|
29
29
|
|
|
30
|
-
| Need | Component |
|
|
31
|
-
|
|
32
|
-
| List with pagination | DataTable |
|
|
33
|
-
| Creation form | Form + Modal |
|
|
34
|
-
| Edit form | Form + Modal |
|
|
35
|
-
| Filters | FilterBar |
|
|
36
|
-
| Export | ExportButton |
|
|
30
|
+
| Need | Component | Détail |
|
|
31
|
+
|------|-----------|--------|
|
|
32
|
+
| List with pagination | DataTable | Tri, pagination, sélection, actions inline |
|
|
33
|
+
| Creation form | Form + Modal | Validation FluentValidation, i18n des erreurs |
|
|
34
|
+
| Edit form | Form + Modal | Pré-remplissage, dirty check, optimistic locking |
|
|
35
|
+
| Filters | FilterBar | Filtres combinables, persistance URL params |
|
|
36
|
+
| Export | ExportButton | CSV/Excel, respecte les filtres actifs |
|
|
37
|
+
| Cards/Grid | CardGrid | Affichage visuel alternatif au tableau |
|
|
38
|
+
| Detail view | DetailPanel | Side panel ou page dédiée |
|
|
39
|
+
| Status/Workflow | StatusBadge + Timeline | Affichage état + historique transitions |
|
|
40
|
+
| Tooltips/Infobulles | Tooltip | Info contextuelle sur champs/actions |
|
|
41
|
+
|
|
42
|
+
## Elicitation Guide
|
|
43
|
+
|
|
44
|
+
### Follow-ups by Question
|
|
45
|
+
|
|
46
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
47
|
+
|----------|-------------------------------|-------|
|
|
48
|
+
| Q7.1 (devices) | "Desktop uniquement" | "Aucun accès mobile ? Même pas en consultation ? Tablette en atelier/terrain ?" |
|
|
49
|
+
| Q7.5 (screens) | "Un écran de liste" | "Avec création/édition inline ou en modal ? Détail en side panel ou page séparée ?" |
|
|
50
|
+
| Q7.5 (screens) | Pas de mention dashboard | "L'utilisateur a-t-il besoin d'un tableau de bord avec des KPIs avant de plonger dans les données ?" |
|
|
51
|
+
| Q7.7 (key info) | "Toutes les colonnes" | "Sur mobile/petit écran, quelles 3-4 colonnes sont indispensables ? Le reste = détail secondaire" |
|
|
52
|
+
| Q7.8 (actions) | "CRUD classique" | "Actions métier spécifiques ? (valider, dupliquer, archiver, changer statut, assigner)" |
|
|
53
|
+
|
|
54
|
+
### Anti-patterns to Detect
|
|
55
|
+
|
|
56
|
+
| Signal | Anti-pattern | Action |
|
|
57
|
+
|--------|-------------|--------|
|
|
58
|
+
| "Un seul gros formulaire avec tout" | **Formulaire monolithique** | Proposer des étapes/wizard ou des onglets par section logique |
|
|
59
|
+
| Aucune mention de feedback utilisateur | **UX silencieuse** | "Quels messages de succès/erreur ? Toast, notification, redirect ?" |
|
|
60
|
+
| "Identique à [autre app]" | **Copier sans adapter** | "Quelles différences de contexte ? L'utilisateur fait-il le même parcours ?" |
|
|
61
|
+
| Actions sans confirmation | **Actions destructives non protégées** | "La suppression nécessite-t-elle une confirmation ? Un motif ? Une double validation ?" |
|
|
@@ -33,3 +33,24 @@
|
|
|
33
33
|
| Page load | < 2s |
|
|
34
34
|
| Concurrent users | Per license |
|
|
35
35
|
| Uptime | 99.5% |
|
|
36
|
+
|
|
37
|
+
## Elicitation Guide
|
|
38
|
+
|
|
39
|
+
### Follow-ups by Question
|
|
40
|
+
|
|
41
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
42
|
+
|----------|-------------------------------|-------|
|
|
43
|
+
| Q8.1 (response time) | "Rapide" | "< 1 seconde ? < 200ms ? Différence acceptable entre liste et détail ?" |
|
|
44
|
+
| Q8.2 (concurrent users) | "Pas beaucoup" | "Combien d'utilisateurs se connectent en même temps le matin ? Aux heures de pointe ?" |
|
|
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." |
|
|
47
|
+
| Q8.6 (tests) | "Tests normaux" | "Tests unitaires ? Intégration ? E2E ? Tests de charge ? Tests de sécurité (OWASP) ?" |
|
|
48
|
+
| Q8.8 (acceptance) | Vide | "Quels critères pour que le PO valide la livraison ? Performance, fonctionnel, UX ?" |
|
|
49
|
+
|
|
50
|
+
### Anti-patterns to Detect
|
|
51
|
+
|
|
52
|
+
| Signal | Anti-pattern | Action |
|
|
53
|
+
|--------|-------------|--------|
|
|
54
|
+
| SLA irréaliste (100%, < 10ms) | **Exigences impossibles** | Rappeler les seuils SmartStack et le coût de chaque 9 supplémentaire |
|
|
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
|
+
| Pas de tests mentionnés | **Qualité non vérifiable** | Au minimum : tests unitaires services + tests intégration API |
|
|
@@ -27,9 +27,32 @@
|
|
|
27
27
|
|
|
28
28
|
## SmartStack Constraints
|
|
29
29
|
|
|
30
|
-
| Constraint | Impact |
|
|
31
|
-
|
|
32
|
-
| Multi-tenant | TenantId
|
|
33
|
-
| .NET 8+ |
|
|
34
|
-
| React 19+ |
|
|
35
|
-
| SQL Server/PostgreSQL |
|
|
30
|
+
| Constraint | Impact | Non-négociable |
|
|
31
|
+
|-----------|--------|----------------|
|
|
32
|
+
| Multi-tenant | TenantId sur toutes les entités, isolation par tenant | Oui |
|
|
33
|
+
| .NET 8+ | Version minimum du backend | Oui |
|
|
34
|
+
| React 19+ | Version minimum du frontend | Oui |
|
|
35
|
+
| SQL Server/PostgreSQL | Bases de données supportées | Oui |
|
|
36
|
+
| CQRS | Commands/Queries séparées via MediatR | Oui |
|
|
37
|
+
| FluentValidation | Validation côté serveur | Oui |
|
|
38
|
+
| i18n (4 langues) | FR, EN, IT, DE obligatoires | Oui |
|
|
39
|
+
|
|
40
|
+
## Elicitation Guide
|
|
41
|
+
|
|
42
|
+
### Follow-ups by Question
|
|
43
|
+
|
|
44
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
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 ?" |
|
|
47
|
+
| Q9.2 (infrastructure) | "Cloud" sans précision | "Azure, AWS, on-premise ? Contraintes de localisation des données (pays) ?" |
|
|
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
|
+
| Q9.6 (deadline) | "Le plus vite possible" | "Y a-t-il une date métier impérative ? (réglementaire, événement, fin de contrat)" |
|
|
50
|
+
| Q9.8 (approval) | "Le chef valide" | "Validation technique (code review) + validation fonctionnelle (PO) + validation sécurité (OWASP) ?" |
|
|
51
|
+
|
|
52
|
+
### Anti-patterns to Detect
|
|
53
|
+
|
|
54
|
+
| Signal | Anti-pattern | Action |
|
|
55
|
+
|--------|-------------|--------|
|
|
56
|
+
| Technologie imposée hors stack | **Incompatibilité SmartStack** | Clarifier : est-ce une intégration (OK) ou un remplacement de composant (risqué) ? |
|
|
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 |
|
|
@@ -27,9 +27,30 @@
|
|
|
27
27
|
|
|
28
28
|
## SmartStack Documentation
|
|
29
29
|
|
|
30
|
-
| Type | Generated by |
|
|
31
|
-
|
|
32
|
-
| FRD Documentation | `/business-analyse:6-doc-html` |
|
|
33
|
-
| Swagger API | Automatic |
|
|
34
|
-
| User guide | Manual or AI |
|
|
35
|
-
| Release notes | `/gitflow:11-finish` |
|
|
30
|
+
| Type | Generated by | Format |
|
|
31
|
+
|------|-------------|--------|
|
|
32
|
+
| FRD Documentation | `/business-analyse:6-doc-html` | React page intégrée dans SmartStack web |
|
|
33
|
+
| Swagger API | Automatic (Swashbuckle) | OpenAPI 3.0 |
|
|
34
|
+
| User guide | Manual or AI | Markdown / PDF |
|
|
35
|
+
| Release notes | `/gitflow:11-finish` | Changelog automatique |
|
|
36
|
+
| ERD (schéma données) | `/documentation` skill | Mermaid diagram |
|
|
37
|
+
|
|
38
|
+
## Elicitation Guide
|
|
39
|
+
|
|
40
|
+
### Follow-ups by Question
|
|
41
|
+
|
|
42
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
43
|
+
|----------|-------------------------------|-------|
|
|
44
|
+
| Q10.1 (user doc) | "Oui" sans détail | "Guide pas-à-pas ? FAQ ? Vidéo tutoriel ? Tooltips in-app ? Quel public cible ?" |
|
|
45
|
+
| Q10.2 (tech doc) | "Non" | "Pas de documentation API ? Pas de schéma de données pour les développeurs futurs ?" |
|
|
46
|
+
| Q10.3 (training) | "Pas prévu" | "Comment les utilisateurs apprendront-ils ? Formation, doc, auto-apprentissage ?" |
|
|
47
|
+
| Q10.5 (support SLA) | "Support normal" | "Temps de réponse N1 attendu ? Heures ouvrées ou 24/7 ? Canal (email, ticket, chat) ?" |
|
|
48
|
+
| Q10.8 (monitoring) | "Non" | "Pas d'alerte si le service est down ? Pas de suivi des erreurs (Application Insights) ?" |
|
|
49
|
+
|
|
50
|
+
### Anti-patterns to Detect
|
|
51
|
+
|
|
52
|
+
| Signal | Anti-pattern | Action |
|
|
53
|
+
|--------|-------------|--------|
|
|
54
|
+
| "La doc se fera après" | **Documentation en dette** | Le FRD EST la doc. `/business-analyse:6-doc-html` la génère automatiquement. |
|
|
55
|
+
| Aucun monitoring prévu | **Angle mort opérationnel** | Au minimum : health check endpoint + Application Insights |
|
|
56
|
+
| Support = "le développeur" | **Pas de séparation N1/N2** | N1 = support fonctionnel (utilisateur), N2 = support technique (dev) |
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Category 11: Data Lifecycle
|
|
2
|
+
|
|
3
|
+
> **Usage:** Lifecycle, retention, archival and compliance for business data
|
|
4
|
+
> **When to load:** If feature is data-centric or full module
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 11.1 Data Retention
|
|
9
|
+
|
|
10
|
+
| # | Question | Answer Type |
|
|
11
|
+
|---|----------|-------------|
|
|
12
|
+
| Q11.1 | How long must data be kept active? | Duration |
|
|
13
|
+
| Q11.2 | Is there a legal retention period? (GDPR, fiscal, regulatory) | Duration + regulation |
|
|
14
|
+
| Q11.3 | What happens after the retention period? | Archive/Purge/Anonymize |
|
|
15
|
+
| Q11.4 | Who decides when data is archived or purged? | Role |
|
|
16
|
+
|
|
17
|
+
## 11.2 Data States
|
|
18
|
+
|
|
19
|
+
| # | Question | Answer Type |
|
|
20
|
+
|---|----------|-------------|
|
|
21
|
+
| Q11.5 | What states can a record go through? (draft, active, archived, deleted) | List of states |
|
|
22
|
+
| Q11.6 | Can a deleted record be restored? | Yes/No + conditions |
|
|
23
|
+
| Q11.7 | Should historical versions be kept? (versioning) | Yes/No + depth |
|
|
24
|
+
| Q11.8 | Is there a "freeze" or "lock" state? (immutable after validation) | Yes/No + trigger |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## SmartStack Lifecycle Patterns
|
|
29
|
+
|
|
30
|
+
| Need | SmartStack Pattern | Impact |
|
|
31
|
+
|------|-------------------|--------|
|
|
32
|
+
| Soft delete | `SoftDeletableEntity` | IsDeleted, DeletedBy, DeletedDate auto-managed |
|
|
33
|
+
| Audit trail | `AuditableEntity` | CreatedBy/Date, ModifiedBy/Date auto-managed |
|
|
34
|
+
| Versioning | Custom `EntityVersion` table | Manual implementation per entity |
|
|
35
|
+
| Archival | Status enum + background job | Scheduled job moves old records |
|
|
36
|
+
| GDPR purge | Anonymization service | Replace personal data with `[REDACTED]` |
|
|
37
|
+
| Immutable after state | Validation in Update command | `if (entity.Status == Locked) throw` |
|
|
38
|
+
|
|
39
|
+
## Elicitation Guide
|
|
40
|
+
|
|
41
|
+
### Follow-ups by Question
|
|
42
|
+
|
|
43
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
44
|
+
|----------|-------------------------------|-------|
|
|
45
|
+
| Q11.1 (retention) | "Toujours" | "Pas de limite légale ? Avec 1M de lignes dans 5 ans, les performances resteront-elles acceptables ?" |
|
|
46
|
+
| Q11.2 (legal) | "Je ne sais pas" | "Données personnelles = RGPD (effacement après demande). Données fiscales = 10 ans. Données RH = 5 ans après départ." |
|
|
47
|
+
| Q11.3 (after retention) | "On supprime" | "Suppression physique ou logique ? Anonymisation des données personnelles ? Export avant suppression ?" |
|
|
48
|
+
| Q11.5 (states) | "Actif ou supprimé" | "Pas de brouillon ? Pas de 'en attente de validation' ? Pas d'archivé consultable mais non modifiable ?" |
|
|
49
|
+
| Q11.6 (restore) | "Non" | "Si un utilisateur supprime par erreur, aucun recours ? Même pas l'admin ?" |
|
|
50
|
+
| Q11.8 (freeze) | "Non" | "Une fois une facture validée, peut-on encore la modifier ? Une commande livrée, peut-on changer son contenu ?" |
|
|
51
|
+
|
|
52
|
+
### Anti-patterns to Detect
|
|
53
|
+
|
|
54
|
+
| Signal | Anti-pattern | Action |
|
|
55
|
+
|--------|-------------|--------|
|
|
56
|
+
| "On garde tout pour toujours" | **Pas de stratégie de rétention** | Volume illimité = performance dégradée. Définir une politique d'archivage. |
|
|
57
|
+
| Suppression physique de données personnelles | **Non-conformité RGPD** | RGPD exige la possibilité d'effacer/anonymiser. `SoftDeletableEntity` + anonymisation. |
|
|
58
|
+
| Aucun état intermédiaire | **Lifecycle trop simple** | La plupart des entités métier passent par brouillon → actif → archivé minimum. |
|
|
59
|
+
| Données modifiables sans limite | **Pas d'immutabilité** | Certains documents (factures, contrats) doivent être figés après validation. |
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Category 12: Migration & Transition
|
|
2
|
+
|
|
3
|
+
> **Usage:** Plan transition from AS-IS to TO-BE, handle existing data
|
|
4
|
+
> **When to load:** ALWAYS for new modules (not enhancements)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 12.1 Existing Data
|
|
9
|
+
|
|
10
|
+
| # | Question | Answer Type |
|
|
11
|
+
|---|----------|-------------|
|
|
12
|
+
| Q12.1 | Is there existing data to migrate? | Yes/No + source |
|
|
13
|
+
| Q12.2 | What format is the existing data in? | Excel/CSV/DB/API/Manual |
|
|
14
|
+
| Q12.3 | What volume of data to migrate? | Estimation |
|
|
15
|
+
| Q12.4 | What data quality issues exist? (duplicates, missing fields, inconsistencies) | List |
|
|
16
|
+
|
|
17
|
+
## 12.2 Transition Plan
|
|
18
|
+
|
|
19
|
+
| # | Question | Answer Type |
|
|
20
|
+
|---|----------|-------------|
|
|
21
|
+
| Q12.5 | Is there a coexistence period? (old + new system in parallel) | Duration |
|
|
22
|
+
| Q12.6 | What is the cutover strategy? | Big-bang / Progressive / Parallel |
|
|
23
|
+
| Q12.7 | Who validates the migrated data? | Role |
|
|
24
|
+
| Q12.8 | What is the rollback plan if migration fails? | Strategy |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## SmartStack Migration Patterns
|
|
29
|
+
|
|
30
|
+
| Need | Pattern | Tool |
|
|
31
|
+
|------|---------|------|
|
|
32
|
+
| CSV/Excel import | Background job + FluentValidation | Hangfire + custom importer |
|
|
33
|
+
| Database migration | EF Core seed / SQL script | `dotnet ef` + seed data |
|
|
34
|
+
| API import | HttpClient batch | Background job + Polly |
|
|
35
|
+
| Data cleanup | Validation pipeline | FluentValidation + reporting |
|
|
36
|
+
| Progressive rollout | Feature flag | LaunchDarkly / custom config |
|
|
37
|
+
|
|
38
|
+
## Elicitation Guide
|
|
39
|
+
|
|
40
|
+
### Follow-ups by Question
|
|
41
|
+
|
|
42
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
43
|
+
|----------|-------------------------------|-------|
|
|
44
|
+
| Q12.1 (existing data) | "Oui" sans détail | "Dans quel outil ? Excel, ERP, autre DB ? Combien de fichiers/tables ? Qui y a accès ?" |
|
|
45
|
+
| Q12.2 (format) | "Excel" | "Un seul fichier ou plusieurs ? Avec des onglets ? Des macros ? Des formules ? Quelles colonnes ?" |
|
|
46
|
+
| Q12.4 (quality) | "C'est propre" | "Pas de doublons ? Pas de champs vides obligatoires ? Pas de formats incohérents (dates, montants) ?" |
|
|
47
|
+
| Q12.5 (coexistence) | "Non" | "Les utilisateurs passent directement au nouveau système ? Pas de période d'apprentissage en parallèle ?" |
|
|
48
|
+
| Q12.6 (cutover) | "On verra" | "Big-bang (bascule à date fixe) ou progressif (équipe par équipe) ? Si progressif, quels groupes en premier ?" |
|
|
49
|
+
| Q12.8 (rollback) | "Pas prévu" | "Si l'import échoue ou corrompt des données, comment revenir en arrière ? Backup avant migration ?" |
|
|
50
|
+
|
|
51
|
+
### Anti-patterns to Detect
|
|
52
|
+
|
|
53
|
+
| Signal | Anti-pattern | Action |
|
|
54
|
+
|--------|-------------|--------|
|
|
55
|
+
| "On saisira tout à la main" | **Migration non planifiée** | Si > 100 enregistrements, l'import automatisé est indispensable |
|
|
56
|
+
| Pas de validation post-migration | **Données non vérifiées** | Prévoir un rapport de migration : importés / rejetés / à corriger |
|
|
57
|
+
| Aucun rollback plan | **Risque de perte de données** | Toujours faire un backup avant migration + possibilité de rollback |
|
|
58
|
+
| "On migrera plus tard" | **Dette technique** | Si la migration est nécessaire, la planifier dès la v1 même si simplifiée |
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Category 13: Cross-Module Impact
|
|
2
|
+
|
|
3
|
+
> **Usage:** Analyze impact on existing modules and shared dependencies
|
|
4
|
+
> **When to load:** ALWAYS for new modules (not enhancements)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 13.1 Existing Module Dependencies
|
|
9
|
+
|
|
10
|
+
| # | Question | Answer Type |
|
|
11
|
+
|---|----------|-------------|
|
|
12
|
+
| Q13.1 | Which existing modules does this new module interact with? | List |
|
|
13
|
+
| Q13.2 | What data is shared between modules? (entities, lookup tables) | Per module |
|
|
14
|
+
| Q13.3 | Are there existing entities this module will reference? (FK relationships) | List |
|
|
15
|
+
| Q13.4 | Will this module produce events that other modules consume? | List of events |
|
|
16
|
+
|
|
17
|
+
## 13.2 Impact Assessment
|
|
18
|
+
|
|
19
|
+
| # | Question | Answer Type |
|
|
20
|
+
|---|----------|-------------|
|
|
21
|
+
| Q13.5 | Will existing modules need modifications to support this new module? | List of changes |
|
|
22
|
+
| Q13.6 | Are there shared UI components or navigation changes? | List |
|
|
23
|
+
| Q13.7 | Will this module affect existing permissions/roles? | Yes/No + detail |
|
|
24
|
+
| Q13.8 | Is there a risk of data model conflicts? (same entity modified by 2 modules) | Risk assessment |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## SmartStack Cross-Module Patterns
|
|
29
|
+
|
|
30
|
+
| Need | Pattern | Example |
|
|
31
|
+
|------|---------|---------|
|
|
32
|
+
| Reference another entity | Navigation property + FK | `Order.ClientId → Client` |
|
|
33
|
+
| Shared lookup data | Shared entity in Domain | `Status`, `Category` entities |
|
|
34
|
+
| Event notification | MediatR notification | `OrderCreatedNotification` |
|
|
35
|
+
| Cross-module query | Read-only DTO from other module | `IClientQueryService` |
|
|
36
|
+
| Navigation link | Menu entry in NavRoute | `business/{app}/{module}` |
|
|
37
|
+
| Shared permission | Permission hierarchy | `business.{app}.*` covers all modules |
|
|
38
|
+
|
|
39
|
+
## Elicitation Guide
|
|
40
|
+
|
|
41
|
+
### Follow-ups by Question
|
|
42
|
+
|
|
43
|
+
| Question | If answer is vague/insufficient | Probe |
|
|
44
|
+
|----------|-------------------------------|-------|
|
|
45
|
+
| Q13.1 (interactions) | "Aucun" | "Ce module est totalement isolé ? Pas de lien avec des clients, produits, utilisateurs d'autres modules ?" |
|
|
46
|
+
| Q13.2 (shared data) | "Je ne sais pas" | Use `{codebase_context}` from pre-research: "J'ai trouvé les entités {list} dans {app}. Ce module a-t-il besoin de les référencer ?" |
|
|
47
|
+
| Q13.3 (FK references) | Vague | "Une {entity} de ce module appartient-elle à un {existing_entity} ? (ex: OrderLine → Product)" |
|
|
48
|
+
| Q13.4 (events) | "Non" | "Quand un {entity} est créé/modifié/supprimé, faut-il notifier un autre module ? Mettre à jour un compteur ?" |
|
|
49
|
+
| Q13.5 (modifications) | "Non" | "Pas de nouvelle colonne dans le menu ? Pas de lien depuis une page existante vers ce nouveau module ?" |
|
|
50
|
+
| Q13.8 (conflicts) | "Pas de risque" | "Deux modules modifient-ils la même entité ? (ex: module A crée un Client, module B le modifie)" |
|
|
51
|
+
|
|
52
|
+
### Anti-patterns to Detect
|
|
53
|
+
|
|
54
|
+
| Signal | Anti-pattern | Action |
|
|
55
|
+
|--------|-------------|--------|
|
|
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
|
+
| Duplication d'entité existante | **Entité dupliquée** | Si `Client` existe déjà, ne pas créer `Customer`. Référencer l'existant. |
|
|
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). |
|
|
60
|
+
|
|
61
|
+
### Using Pre-Research Context
|
|
62
|
+
|
|
63
|
+
> **IMPORTANT:** This category benefits most from step 3 (Pre-Research).
|
|
64
|
+
>
|
|
65
|
+
> Use `{codebase_context}` to:
|
|
66
|
+
> - **List existing entities** and ask the user which ones this module references
|
|
67
|
+
> - **Show existing modules** and ask about interactions
|
|
68
|
+
> - **Detect potential duplicates** (entity names similar to what the user describes)
|
|
69
|
+
> - **Propose event patterns** based on existing MediatR notifications
|