@atlashub/smartstack-cli 1.33.0 → 1.35.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 +60 -38
- 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 +8 -0
- 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/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/steps/step-init.md +268 -20
- package/templates/skills/gitflow/templates/config.json +7 -0
- package/templates/skills/ralph-loop/SKILL.md +3 -0
- /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
|
@@ -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
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: step-00-init
|
|
3
3
|
description: Initialize Business Analysis - Parse flags, create structure, setup state
|
|
4
|
-
model: haiku
|
|
5
4
|
next_step: steps/step-01-discover.md
|
|
6
5
|
---
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
## YOUR TASK:
|
|
8
|
+
|
|
9
9
|
Parse command-line flags, create feature directory structure, and initialize state variables for the Business Analysis workflow.
|
|
10
|
-
</objective>
|
|
11
10
|
|
|
12
11
|
<defaults>
|
|
13
12
|
```yaml
|
|
@@ -18,7 +17,7 @@ context: business # BA is RESTRICTED to business context
|
|
|
18
17
|
```
|
|
19
18
|
</defaults>
|
|
20
19
|
|
|
21
|
-
## EXECUTION SEQUENCE
|
|
20
|
+
## EXECUTION SEQUENCE:
|
|
22
21
|
|
|
23
22
|
### 1. Parse Flags and Input
|
|
24
23
|
|
|
@@ -57,9 +56,10 @@ After removing flags, remaining text becomes `{feature_description}`
|
|
|
57
56
|
|
|
58
57
|
If `{resume_task}` is set:
|
|
59
58
|
1. Search for matching feature in `.business-analyse/`
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
Use Glob tool to search for matching feature:
|
|
60
|
+
- Pattern: `.business-analyse/**/features/*{resume_task}*`
|
|
61
|
+
- If match found: read 00-context.md from that directory
|
|
62
|
+
- If no match: list available features for user selection
|
|
63
63
|
2. If found: Read `00-context.md` to restore state variables
|
|
64
64
|
3. Find last completed step (look for "Status: Complete" in progress table)
|
|
65
65
|
4. Load next incomplete step
|
|
@@ -72,6 +72,30 @@ If NOT found:
|
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
|
+
### 2b. Verify MCP Availability
|
|
76
|
+
|
|
77
|
+
**Check SmartStack MCP (non-blocking):**
|
|
78
|
+
|
|
79
|
+
Call `mcp__smartstack__validate_conventions` with minimal parameters to verify connectivity.
|
|
80
|
+
|
|
81
|
+
| MCP Status | Behavior |
|
|
82
|
+
|------------|----------|
|
|
83
|
+
| Available | Full mode - use MCP tools in all steps |
|
|
84
|
+
| Unavailable | Degraded mode - warn user, skip MCP calls, use manual exploration |
|
|
85
|
+
|
|
86
|
+
Store: `{mcp_available}` = true/false
|
|
87
|
+
|
|
88
|
+
**Display if unavailable:**
|
|
89
|
+
```
|
|
90
|
+
Warning: SmartStack MCP unavailable. Running in degraded mode.
|
|
91
|
+
Run `smartstack check-mcp` to diagnose.
|
|
92
|
+
BA will continue without MCP validation.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Add to state variables:** `{mcp_available}` persisted in 00-context.md
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
75
99
|
### 3. Interactive Mode (if -i flag)
|
|
76
100
|
|
|
77
101
|
If `{interactive_mode}` = true:
|
|
@@ -151,6 +175,36 @@ Store in:
|
|
|
151
175
|
|
|
152
176
|
---
|
|
153
177
|
|
|
178
|
+
### 5b. Select Communication Language
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"questions": [
|
|
183
|
+
{
|
|
184
|
+
"question": "Dans quelle langue souhaitez-vous communiquer ?",
|
|
185
|
+
"header": "Langue",
|
|
186
|
+
"options": [
|
|
187
|
+
{"label": "Français (Recommandé)", "description": "Toutes les interactions et documents en français"},
|
|
188
|
+
{"label": "English", "description": "All interactions and documents in English"},
|
|
189
|
+
{"label": "Italiano", "description": "Tutte le interazioni e i documenti in italiano"},
|
|
190
|
+
{"label": "Deutsch", "description": "Alle Interaktionen und Dokumente auf Deutsch"}
|
|
191
|
+
],
|
|
192
|
+
"multiSelect": false
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Map selection to `{language}`:
|
|
199
|
+
- "Français" → `fr`
|
|
200
|
+
- "English" → `en`
|
|
201
|
+
- "Italiano" → `it`
|
|
202
|
+
- "Deutsch" → `de`
|
|
203
|
+
|
|
204
|
+
**Default:** `fr` (si non spécifié)
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
154
208
|
### 6. Generate Feature ID
|
|
155
209
|
|
|
156
210
|
```bash
|
|
@@ -233,8 +287,26 @@ Create initial context file with state variables:
|
|
|
233
287
|
| application_name | {{application_name}} |
|
|
234
288
|
| module_name | {{module_name}} |
|
|
235
289
|
| context | business |
|
|
290
|
+
| language | {{language}} |
|
|
291
|
+
| mcp_available | {{mcp_available}} |
|
|
236
292
|
| permission_base | business.{{application_name}}.{{module_name}} |
|
|
237
293
|
|
|
294
|
+
## Discovery Metadata (updated by step-01)
|
|
295
|
+
|
|
296
|
+
| Variable | Value |
|
|
297
|
+
|----------|-------|
|
|
298
|
+
| feature_type | (TBD in step-01) |
|
|
299
|
+
| mcp_available | {{mcp_available}} |
|
|
300
|
+
| categories_loaded | (TBD in step-01) |
|
|
301
|
+
|
|
302
|
+
## Risk Register (updated by step-01)
|
|
303
|
+
|
|
304
|
+
(TBD in step-01)
|
|
305
|
+
|
|
306
|
+
## Codebase Context Summary (updated by step-01)
|
|
307
|
+
|
|
308
|
+
(TBD in step-01)
|
|
309
|
+
|
|
238
310
|
## Acceptance Criteria
|
|
239
311
|
|
|
240
312
|
To be defined in step-01-discover.
|
|
@@ -257,6 +329,7 @@ Update `.business-analyse/config.json`:
|
|
|
257
329
|
"project": "{ProjectName}",
|
|
258
330
|
"lastFeatureId": {NEW_ID},
|
|
259
331
|
"context": "business",
|
|
332
|
+
"language": "{language}",
|
|
260
333
|
"standards": ["BABOK-v3", "IEEE-830"],
|
|
261
334
|
"contact": "support@atlshub.ch"
|
|
262
335
|
}
|
|
@@ -267,14 +340,16 @@ Update `.business-analyse/config.json`:
|
|
|
267
340
|
### 10. Display Summary and Load Next Step
|
|
268
341
|
|
|
269
342
|
**Display:**
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
343
|
+
|
|
344
|
+
| Field | Value |
|
|
345
|
+
|-------|-------|
|
|
346
|
+
| Step | INIT |
|
|
347
|
+
| Feature | {{feature_id}} |
|
|
348
|
+
| Application | business/{{application_name}} |
|
|
349
|
+
| Module | {{module_name}} |
|
|
350
|
+
| Output | {{output_dir}} |
|
|
351
|
+
| Mode | {{auto_mode ? "Autonomous" : "Interactive"}} |
|
|
352
|
+
| Next | step-01-discover (ULTRATHINK elicitation) |
|
|
278
353
|
|
|
279
354
|
**Load next step:**
|
|
280
355
|
```
|
|
@@ -283,7 +358,7 @@ Read and execute: steps/step-01-discover.md
|
|
|
283
358
|
|
|
284
359
|
---
|
|
285
360
|
|
|
286
|
-
## OUTPUT
|
|
361
|
+
## OUTPUT FORMAT:
|
|
287
362
|
|
|
288
363
|
This step produces:
|
|
289
364
|
- `.business-analyse/config.json` (updated)
|
|
@@ -291,3 +366,22 @@ This step produces:
|
|
|
291
366
|
- `{output_dir}/tracking/` directories (created)
|
|
292
367
|
|
|
293
368
|
State variables persisted for next steps.
|
|
369
|
+
|
|
370
|
+
## ERROR HANDLING:
|
|
371
|
+
|
|
372
|
+
**If resume feature not found:**
|
|
373
|
+
1. List available features in `.business-analyse/`
|
|
374
|
+
2. Ask user to select or start new analysis
|
|
375
|
+
|
|
376
|
+
**If config.json missing or corrupted:**
|
|
377
|
+
1. Create fresh config.json with defaults
|
|
378
|
+
2. Set lastFeatureId to 0
|
|
379
|
+
3. Warn user: "Config reset to defaults"
|
|
380
|
+
|
|
381
|
+
**If directory creation fails:**
|
|
382
|
+
1. Check write permissions
|
|
383
|
+
2. Suggest running with elevated privileges
|
|
384
|
+
|
|
385
|
+
## NEXT STEP:
|
|
386
|
+
|
|
387
|
+
After completion, proceed to `steps/step-01-discover.md`
|