@atlashub/smartstack-cli 4.68.0 → 4.70.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlashub/smartstack-cli",
3
- "version": "4.68.0",
3
+ "version": "4.70.0",
4
4
  "description": "SmartStack Claude Code automation toolkit - GitFlow, EF Core migrations, prompts and more",
5
5
  "author": {
6
6
  "name": "SmartStack",
@@ -88,7 +88,7 @@
88
88
  | Question | Si la réponse est vague | Relance recommandée |
89
89
  |----------|------------------------|---------------------|
90
90
  | Q2.1 (utilisateurs) | Un seul type mentionné | "Pensez aux différents moments de la journée : qui saisit ? Qui consulte les rapports ? Qui gère les cas particuliers ?" |
91
- | Q2.1 (utilisateurs) | Utilisateurs hors entreprise mentionnés (clients, fournisseurs, partenaires) | "Ces utilisateurs externes accéderont-ils via un espace dédié (portail) ou la même interface que vos employés ?" |
91
+ | Q2.1 (utilisateurs) | Utilisateurs hors entreprise mentionnés (clients, fournisseurs, partenaires) | "Quelles données ces utilisateurs externes doivent-ils consulter ou créer ? Quelles restrictions par rapport aux internes ?" |
92
92
  | Q2.5 (tâches) | Tâches génériques | "Quand il arrive le matin et ouvre le système, quelle est sa première action ?" |
93
93
  | Q2.9 (restrictions) | Réponse ambiguë | "Un employé voit-il les données salariales ? Un manager voit-il uniquement son équipe ou toute l'entreprise ?" |
94
94
  | Q2.13 (indispensable) | Tout est indispensable | "Si vous ne pouviez garder que 3 fonctionnalités pour un premier lancement, lesquelles ?" |
@@ -104,7 +104,7 @@
104
104
  | Tout est vital (> 10 vitaux) | Classification non réfléchie | Appliquer le test de classification : "Si on enlevait X, le système aurait-il encore de la valeur ?" |
105
105
  | Aucune exclusion identifiée | Périmètre non borné | "Y a-t-il des aspects qui relèvent d'un autre projet ou d'une version future ?" |
106
106
  | Parcours linéaire sans alternative | Seul le cas idéal est décrit | "Que se passe-t-il à l'étape X si la condition Y n'est pas remplie ?" |
107
- | "Nos clients doivent pouvoir..." ou "Les fournisseurs voient..." | Utilisateurs externes accédant au système | Déclencher détection portail : classifier les profils en interne/externe. SmartStack gère le déploiement multi-tenant automatiquement. |
107
+ | "Nos clients doivent pouvoir..." ou "Les fournisseurs voient..." | Utilisateurs externes accédant au système | Classifier auto en 4b-bis. Approfondir les RÈGLES MÉTIER : quelles données, quelles actions, quelles restrictions ? |
108
108
 
109
109
  ---
110
110
 
@@ -316,33 +316,31 @@ EXTERNAL_SIGNALS = ["client", "customer", "fournisseur", "supplier", "partenaire
316
316
  "organisation cliente"]
317
317
  ```
318
318
 
319
+ > **SmartStack gère nativement les utilisateurs externes :**
320
+ > - **Person Extension Pattern** : User → Employee, Contact, Customer via `UserId` FK
321
+ > - **Organisation Extension** : Organisation → Client, Supplier via `OrganisationId` FK
322
+ > - **Multi-tenant** : portail et interne déployés sur des tenants séparés automatiquement
323
+
319
324
  SI un profil stakeholder match EXTERNAL_SIGNALS :
320
325
  → Stocker dans `{pre_analysis}`: `_portalDetected: true`
321
- Poser la question via AskUserQuestion :
326
+ **Auto-classifier** chaque stakeholder détecté : `audience: "internal" | "external" | "shared"`
327
+ → **Auto-déduire** `_portalMode` :
322
328
 
323
- ```
324
- question: "{language == 'fr'
325
- ? 'J\'ai détecté des utilisateurs externes ({profiles}). Votre application comportera-t-elle un portail client en plus de la partie interne ?'
326
- : 'I detected external users ({profiles}). Will your application include a client portal in addition to the internal part?'}"
327
- header: "Portail client"
328
- options:
329
- - label: "{language == 'fr' ? 'Oui, portail + interne' : 'Yes, portal + internal'}"
330
- description: "{language == 'fr' ? 'L\'application servira des utilisateurs internes ET externes via un portail dédié' : 'The app will serve internal AND external users via a dedicated portal'}"
331
- - label: "{language == 'fr' ? 'Non, interne uniquement' : 'No, internal only'}"
332
- description: "{language == 'fr' ? 'Seuls les employés internes utiliseront l\'application' : 'Only internal employees will use the application'}"
333
- - label: "{language == 'fr' ? 'Non, portail uniquement' : 'No, portal only'}"
334
- description: "{language == 'fr' ? 'L\'application est exclusivement destinée aux utilisateurs externes' : 'The application is exclusively for external users'}"
335
- ```
329
+ | Stakeholders détectés | `_portalMode` |
330
+ |----------------------|---------------|
331
+ | Internes + Externes | `"dual"` |
332
+ | Uniquement externes | `"portal-only"` |
333
+ | Uniquement internes | `"internal-only"` |
336
334
 
337
- | Réponse | Action |
338
- |---------|--------|
339
- | **Oui, portail + interne** | `_portalMode = "dual"` → Follow-up : classifier chaque stakeholder comme `audience: "internal" \| "external" \| "shared"` |
340
- | **Portail uniquement** | `_portalMode = "portal-only"` |
341
- | **Interne uniquement** | `_portalMode = "internal-only"` (défaut, pas d'action supplémentaire) |
335
+ **Informer le client** (statement, PAS de question) :
342
336
 
343
- > **Note SmartStack :** Le déploiement multi-tenant est géré automatiquement par SmartStack. La partie interne et la partie portail seront déployées sur des tenants séparés.
337
+ ```
338
+ "{language == 'fr'
339
+ ? 'J\'ai détecté des utilisateurs externes ({profiles}). SmartStack déploiera automatiquement un portail dédié ({_portalMode}) avec isolation multi-tenant. Les extensions Person/Organisation gèrent nativement la séparation des profils internes et externes.'
340
+ : 'I detected external users ({profiles}). SmartStack will automatically deploy a dedicated portal ({_portalMode}) with multi-tenant isolation. Person/Organisation extensions natively handle the separation of internal and external profiles.'}"
341
+ ```
344
342
 
345
- SI aucun profil ne match EXTERNAL_SIGNALS → `_portalMode = "internal-only"` (défaut silencieux, rien à demander).
343
+ SI aucun profil ne match EXTERNAL_SIGNALS → `_portalMode = "internal-only"` (défaut silencieux, rien à informer).
346
344
 
347
345
  #### 4c. Functional Scope (ALWAYS — from `questionnaire/02-stakeholders-scope.md`)
348
346