@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.
Files changed (56) hide show
  1. package/.documentation/installation.html +60 -38
  2. package/dist/index.js +1098 -582
  3. package/dist/index.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/agents/docs-context-reader.md +125 -0
  6. package/templates/agents/docs-sync-checker.md +122 -0
  7. package/templates/hooks/docs-drift-check.md +97 -0
  8. package/templates/skills/_resources/context-digest-template.md +53 -0
  9. package/templates/skills/_resources/doc-context-cache.md +62 -0
  10. package/templates/skills/_resources/docs-manifest-schema.md +157 -0
  11. package/templates/skills/_resources/mcp-validate-documentation-spec.md +183 -0
  12. package/templates/skills/_shared.md +8 -0
  13. package/templates/skills/apex/SKILL.md +6 -0
  14. package/templates/skills/apex/steps/step-00-init.md +9 -0
  15. package/templates/skills/apex/steps/step-01-analyze.md +36 -0
  16. package/templates/skills/apex/steps/step-02-plan.md +38 -0
  17. package/templates/skills/apex/steps/step-03-execute.md +39 -0
  18. package/templates/skills/apex/steps/step-04-validate.md +31 -1
  19. package/templates/skills/apex/steps/step-04b-doc-sync.md +162 -0
  20. package/templates/skills/apex/steps/step-05-examine.md +7 -0
  21. package/templates/skills/apex/templates/04b-doc-sync.md +31 -0
  22. package/templates/skills/apex/templates/context-digest.md +35 -0
  23. package/templates/skills/business-analyse/SKILL.md +18 -5
  24. package/templates/skills/business-analyse/_shared.md +306 -4
  25. package/templates/skills/business-analyse/questionnaire/01-context.md +21 -6
  26. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +34 -0
  27. package/templates/skills/business-analyse/questionnaire/03-scope.md +23 -0
  28. package/templates/skills/business-analyse/questionnaire/04-data.md +44 -0
  29. package/templates/skills/business-analyse/questionnaire/05-integrations.md +29 -7
  30. package/templates/skills/business-analyse/questionnaire/06-security.md +28 -0
  31. package/templates/skills/business-analyse/questionnaire/07-ui.md +32 -7
  32. package/templates/skills/business-analyse/questionnaire/08-performance.md +21 -0
  33. package/templates/skills/business-analyse/questionnaire/09-constraints.md +29 -6
  34. package/templates/skills/business-analyse/questionnaire/10-documentation.md +27 -6
  35. package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -0
  36. package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -0
  37. package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -0
  38. package/templates/skills/business-analyse/steps/step-00-init.md +110 -16
  39. package/templates/skills/business-analyse/steps/step-01-discover.md +530 -85
  40. package/templates/skills/business-analyse/steps/step-02-analyse.md +81 -25
  41. package/templates/skills/business-analyse/steps/step-03-specify.md +116 -24
  42. package/templates/skills/business-analyse/steps/step-04-validate.md +107 -33
  43. package/templates/skills/business-analyse/steps/step-05-handoff.md +256 -33
  44. package/templates/skills/business-analyse/steps/step-06-doc-html.md +84 -25
  45. package/templates/skills/business-analyse/templates/{frd-handoff.md → tpl-handoff.md} +18 -4
  46. package/templates/skills/business-analyse/templates-frd.md +19 -5
  47. package/templates/skills/business-analyse/tracking/change-template.md +30 -0
  48. package/templates/skills/documentation/SKILL.md +68 -31
  49. package/templates/skills/documentation/data-schema.md +198 -0
  50. package/templates/skills/documentation/templates.md +30 -1
  51. package/templates/skills/gitflow/steps/step-init.md +268 -20
  52. package/templates/skills/gitflow/templates/config.json +7 -0
  53. package/templates/skills/ralph-loop/SKILL.md +3 -0
  54. /package/templates/skills/business-analyse/templates/{frd-brd.md → tpl-brd.md} +0 -0
  55. /package/templates/skills/business-analyse/templates/{frd-discovery.md → tpl-discovery.md} +0 -0
  56. /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 required |
33
- | .NET 8+ | Minimum version |
34
- | React 19+ | Frontend version |
35
- | SQL Server/PostgreSQL | Supported databases |
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
- <objective>
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
- ```bash
61
- find .business-analyse -type d -name "*{resume_task}*" 2>/dev/null | head -1
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
- INIT - {{feature_id}}
272
- ├── Application: business/{{application_name}}
273
- ├── Module: {{module_name}}
274
- ├── Output: {{output_dir}}
275
- ├── Mode: {{auto_mode ? "Autonomous" : "Interactive"}}
276
- └── Next: step-01-discover (ULTRATHINK elicitation)
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`