@atlashub/smartstack-cli 3.18.0 → 3.20.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/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/gitflow/cleanup.md +5 -1
- package/templates/agents/gitflow/finish.md +2 -0
- package/templates/agents/gitflow/init-clone.md +13 -0
- package/templates/agents/gitflow/init-validate.md +14 -0
- package/templates/agents/gitflow/start.md +2 -2
- package/templates/agents/gitflow/status.md +6 -0
- package/templates/skills/business-analyse/SKILL.md +1 -1
- package/templates/skills/business-analyse/_shared.md +46 -20
- package/templates/skills/business-analyse/html/ba-interactive.html +57 -107
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +13 -0
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +1 -1
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +11 -20
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +1 -3
- package/templates/skills/business-analyse/html/src/template.html +31 -83
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +71 -3
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +11 -8
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +7 -5
- package/templates/skills/business-analyse/references/deploy-data-build.md +42 -14
- package/templates/skills/business-analyse/references/deploy-modes.md +1 -1
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -0
- package/templates/skills/business-analyse/references/robustness-checks.md +2 -1
- package/templates/skills/business-analyse/references/spec-auto-inference.md +70 -16
- package/templates/skills/business-analyse/references/ui-resource-cards.md +149 -0
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +220 -32
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +51 -29
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +122 -32
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +8 -0
- package/templates/skills/business-analyse/steps/step-03b-ui.md +68 -5
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +99 -2
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +35 -1
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +4 -1
- package/templates/skills/business-analyse/steps/step-06-review.md +2 -1
- package/templates/skills/business-analyse/templates/tpl-handoff.md +5 -4
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +4 -1
- package/templates/skills/business-analyse/templates-frd.md +5 -4
- package/templates/skills/gitflow/_shared.md +65 -17
- package/templates/skills/gitflow/phases/status.md +8 -3
- package/templates/skills/gitflow/references/start-local-config.md +6 -3
- package/templates/skills/gitflow/steps/step-start.md +5 -2
|
@@ -51,14 +51,8 @@
|
|
|
51
51
|
<!-- Phase 1 : Cadrage -->
|
|
52
52
|
<div class="nav-group">
|
|
53
53
|
<div class="nav-group-title">1. Cadrage</div>
|
|
54
|
-
<a class="nav-item active" onclick="showSection('cadrage-
|
|
55
|
-
<span class="nav-icon">●</span>
|
|
56
|
-
</a>
|
|
57
|
-
<a class="nav-item" onclick="showSection('cadrage-current')" data-section="cadrage-current" data-vibe-hide>
|
|
58
|
-
<span class="nav-icon">●</span> Situation actuelle
|
|
59
|
-
</a>
|
|
60
|
-
<a class="nav-item" onclick="showSection('cadrage-vision')" data-section="cadrage-vision" data-vibe-hide>
|
|
61
|
-
<span class="nav-icon">●</span> Situation souhaitee
|
|
54
|
+
<a class="nav-item active" onclick="showSection('cadrage-context')" data-section="cadrage-context">
|
|
55
|
+
<span class="nav-icon">●</span> Contexte
|
|
62
56
|
</a>
|
|
63
57
|
<a class="nav-item" onclick="showSection('cadrage-stakeholders')" data-section="cadrage-stakeholders">
|
|
64
58
|
<span class="nav-icon">●</span> Parties prenantes
|
|
@@ -125,84 +119,38 @@
|
|
|
125
119
|
============================================ -->
|
|
126
120
|
<main class="main" id="mainContent">
|
|
127
121
|
|
|
128
|
-
<!-- SECTION:
|
|
129
|
-
<div class="section" id="cadrage-
|
|
130
|
-
<h2 class="section-title">
|
|
131
|
-
<p class="section-subtitle">
|
|
132
|
-
|
|
133
|
-
<div
|
|
134
|
-
<div class="card
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
</div>
|
|
142
|
-
|
|
143
|
-
<div class="card" data-vibe-hide>
|
|
144
|
-
<div class="card-label">Depuis quand ce probleme existe-t-il ?</div>
|
|
145
|
-
<div class="editable" contenteditable="true" data-field="problem.history" data-placeholder="Depuis combien de temps ce probleme existe-t-il ? A-t-il empire recemment ?"></div>
|
|
146
|
-
</div>
|
|
147
|
-
|
|
148
|
-
<div class="card">
|
|
149
|
-
<div class="card-label">Evenement declencheur</div>
|
|
150
|
-
<div class="editable" contenteditable="true" data-field="problem.trigger" data-placeholder="Qu'est-ce qui a declenche cette demande maintenant ? Pourquoi pas il y a 6 mois ?"></div>
|
|
151
|
-
</div>
|
|
152
|
-
|
|
153
|
-
<div class="card" data-vibe-hide>
|
|
154
|
-
<div class="card-label">Consequences si le projet n'est pas realise</div>
|
|
155
|
-
<div class="editable" contenteditable="true" data-field="problem.consequences" data-placeholder="Que se passerait-il si ce projet n'etait PAS realise ? Quelles consequences a court et moyen terme ?"></div>
|
|
156
|
-
</div>
|
|
157
|
-
</div>
|
|
158
|
-
|
|
159
|
-
<!-- SECTION: Situation actuelle -->
|
|
160
|
-
<div class="section" id="cadrage-current" style="display:none;" data-vibe-hide>
|
|
161
|
-
<h2 class="section-title">Situation actuelle</h2>
|
|
162
|
-
<p class="section-subtitle">Comment les choses se passent aujourd'hui, concretement.</p>
|
|
163
|
-
|
|
164
|
-
<div class="card">
|
|
165
|
-
<div class="card-label">Outils et methodes utilises aujourd'hui</div>
|
|
166
|
-
<div class="editable" contenteditable="true" data-field="current.tools" data-placeholder="Comment gerez-vous ce sujet aujourd'hui ? Avec quels outils (tableur, email, papier, logiciel) ?"></div>
|
|
167
|
-
</div>
|
|
168
|
-
|
|
169
|
-
<div class="card">
|
|
170
|
-
<div class="card-label">Processus actuel, etape par etape</div>
|
|
171
|
-
<div id="processFlow" class="process-flow">
|
|
172
|
-
<!-- Populated dynamically -->
|
|
122
|
+
<!-- SECTION: Contexte (merged: problem + current + vision) -->
|
|
123
|
+
<div class="section" id="cadrage-context">
|
|
124
|
+
<h2 class="section-title">Contexte du projet</h2>
|
|
125
|
+
<p class="section-subtitle">Vue synthetique du besoin : probleme, situation actuelle et objectif vise.</p>
|
|
126
|
+
|
|
127
|
+
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.5rem;">
|
|
128
|
+
<div class="card" style="border-left:3px solid #f87171;">
|
|
129
|
+
<div class="card-label" style="color:#f87171;">Probleme identifie</div>
|
|
130
|
+
<div class="editable" contenteditable="true" data-field="context.problem" data-placeholder="Quel probleme ce projet doit-il resoudre ?"></div>
|
|
131
|
+
<div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
|
|
132
|
+
<strong>Declencheur :</strong>
|
|
133
|
+
<div class="editable" contenteditable="true" data-field="context.trigger" data-placeholder="Evenement declencheur" style="display:inline;"></div>
|
|
134
|
+
</div>
|
|
173
135
|
</div>
|
|
174
|
-
<button class="add-btn" onclick="addProcessStep()">+ Ajouter une etape au processus</button>
|
|
175
|
-
</div>
|
|
176
|
-
|
|
177
|
-
<div class="card">
|
|
178
|
-
<div class="card-label">Etapes les plus penibles ou les plus longues</div>
|
|
179
|
-
<div class="editable" contenteditable="true" data-field="current.painPoints" data-placeholder="Quelles sont les etapes les plus penibles ou les plus longues dans ce processus ?"></div>
|
|
180
|
-
</div>
|
|
181
|
-
|
|
182
|
-
<div class="card">
|
|
183
|
-
<div class="card-label">Erreurs ou problemes recurrents</div>
|
|
184
|
-
<div class="editable" contenteditable="true" data-field="current.errors" data-placeholder="Quelles erreurs ou problemes reviennent regulierement ? Donnez 2 a 3 exemples concrets."></div>
|
|
185
|
-
</div>
|
|
186
|
-
</div>
|
|
187
136
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
</div>
|
|
197
|
-
|
|
198
|
-
<div class="card">
|
|
199
|
-
<div class="card-label">Resultats attendus (mesurables)</div>
|
|
200
|
-
<div class="editable" contenteditable="true" data-field="vision.results" data-placeholder="Quels resultats concrets attendez-vous ? Citez 2 a 3 ameliorations mesurables."></div>
|
|
201
|
-
</div>
|
|
137
|
+
<div class="card" style="border-left:3px solid #facc15;">
|
|
138
|
+
<div class="card-label" style="color:#facc15;">Aujourd'hui</div>
|
|
139
|
+
<div class="editable" contenteditable="true" data-field="context.currentSituation" data-placeholder="Comment les choses fonctionnent actuellement ?"></div>
|
|
140
|
+
<div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
|
|
141
|
+
<strong>Points douleur :</strong>
|
|
142
|
+
<div class="editable" contenteditable="true" data-field="context.painPoints" data-placeholder="Problemes recurrents" style="display:inline;"></div>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
202
145
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
146
|
+
<div class="card" style="border-left:3px solid #4ade80;">
|
|
147
|
+
<div class="card-label" style="color:#4ade80;">Objectif</div>
|
|
148
|
+
<div class="editable" contenteditable="true" data-field="context.desiredSituation" data-placeholder="Que doit permettre le systeme cible ?"></div>
|
|
149
|
+
<div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
|
|
150
|
+
<strong>Criteres :</strong>
|
|
151
|
+
<div class="editable" contenteditable="true" data-field="context.acceptanceCriteria" data-placeholder="Criteres de succes" style="display:inline;"></div>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
206
154
|
</div>
|
|
207
155
|
</div>
|
|
208
156
|
|
|
@@ -468,11 +468,79 @@ Auto-added:
|
|
|
468
468
|
|
|
469
469
|
---
|
|
470
470
|
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## 10. Entity Classification Patterns
|
|
474
|
+
|
|
475
|
+
> **Usage:** Loaded by step-01-cadrage (section 4d-bis) to accelerate entity scoring.
|
|
476
|
+
> **Full reference:** `references/entity-architecture-decision.md` (scoring grid, decision tree, section patterns)
|
|
477
|
+
> These patterns provide quick pre-classification. Full scoring is still required to confirm.
|
|
478
|
+
|
|
479
|
+
### 10.1 Toujours Module Dedie (score typique >= 11)
|
|
480
|
+
|
|
481
|
+
| Entite | Domaines typiques | Pourquoi module dedie |
|
|
482
|
+
|--------|-------------------|-----------------------|
|
|
483
|
+
| Clients/Customers | CRM, Ventes, Facturation | Hub relationnel central, multi-acteur, lifecycle complet |
|
|
484
|
+
| Employes/Employees | RH, Temps, Paie | Acteur central, donnees sensibles, multi-workflows |
|
|
485
|
+
| Projets/Projects | Gestion, Temps, Facturation | Lifecycle complexe, multi-ressources, reporting |
|
|
486
|
+
| Commandes/Orders | Ventes, Logistique | Workflow d'approbation, etats multiples, sous-entites |
|
|
487
|
+
| Factures/Invoices | Finance, Ventes | Obligations legales, workflow complexe |
|
|
488
|
+
| Contrats/Contracts | Juridique, RH, Ventes | Lifecycle avec echeances, obligations, renouvellement |
|
|
489
|
+
| Produits/Products | Commerce, Inventaire | Catalogue avec variantes, tarification, stock |
|
|
490
|
+
|
|
491
|
+
**Section pattern for module dedie:**
|
|
492
|
+
- Section `list` (TOUJOURS) : grille + create en modale + clic vers detail
|
|
493
|
+
- Page detail avec onglets : Infos + onglets relationnels
|
|
494
|
+
- Sections additionnelles UNIQUEMENT si : dashboard, approve, import, rapport
|
|
495
|
+
|
|
496
|
+
### 10.2 Souvent Sous-entite du Parent (score typique 4-6)
|
|
497
|
+
|
|
498
|
+
| Entite | Module parent typique | Pourquoi sous-entite |
|
|
499
|
+
|--------|----------------------|-----------------------|
|
|
500
|
+
| Adresses | Clients, Employes | Composant du parent, pas d'autonomie fonctionnelle |
|
|
501
|
+
| Notes/Commentaires | Tout module | Sous-objet universel, lie au contexte parent |
|
|
502
|
+
| Pieces jointes/Documents | Tout module | Stockage lie au parent, pas de lifecycle propre |
|
|
503
|
+
| Lignes de commande | Commandes | Composant structurel, pas de sens seul |
|
|
504
|
+
| Tags/Labels | Tout module | Categorisation simple, configurable |
|
|
505
|
+
| Contacts (d'un client) | Clients | Personnes liees a l'entite parente |
|
|
506
|
+
|
|
507
|
+
**Presentation dans le parent:** Onglet dans la page detail du module parent
|
|
508
|
+
|
|
509
|
+
### 10.3 Toujours Config List (score typique 0-3)
|
|
510
|
+
|
|
511
|
+
| Entite | Pourquoi config list |
|
|
512
|
+
|--------|---------------------|
|
|
513
|
+
| Pays, Villes | Reference geographique stable, rarement modifiee |
|
|
514
|
+
| Devises | Reference systeme, standard ISO |
|
|
515
|
+
| Statuts (types enumeres) | Enum ou lookup, admin-only, < 20 valeurs |
|
|
516
|
+
| Unites de mesure | Reference technique stable |
|
|
517
|
+
| Codes postaux | Reference externe, pas de CRUD utilisateur |
|
|
518
|
+
| Types/Categories simples | Flat list sans hierarchie, configurable par admin |
|
|
519
|
+
| Codes d'imputation | Reference comptable, admin-managed, stable |
|
|
520
|
+
|
|
521
|
+
> **Override rule:** Peut etre promu si le client exprime un besoin de hierarchie (> 2 niveaux), de workflow, ou de permissions specifiques.
|
|
522
|
+
|
|
523
|
+
### 10.4 Decision Rapide par Domaine
|
|
524
|
+
|
|
525
|
+
> **Lors de l'approfondissement, si le domaine de l'application est identifie, utiliser ce tableau pour pre-classifier les entites referenciees.**
|
|
526
|
+
|
|
527
|
+
| Domaine de l'app | Entites typiquement CORE (module) | Entites typiquement SUPPORT (sous-entite/config) |
|
|
528
|
+
|-------------------|-----------------------------------|--------------------------------------------------|
|
|
529
|
+
| **Gestion du temps** | Employes, Projets, Activites, Absences | Codes d'imputation, Types d'absence, Departements |
|
|
530
|
+
| **CRM / Ventes** | Clients, Contacts, Opportunites, Devis | Secteurs, Sources, Etapes de vente |
|
|
531
|
+
| **E-commerce** | Produits, Commandes, Clients, Factures | Categories, Tailles, Couleurs, Devises |
|
|
532
|
+
| **RH** | Employes, Contrats, Conges, Evaluations | Postes, Departements, Types de contrat |
|
|
533
|
+
| **Gestion de projets** | Projets, Taches, Ressources, Jalons | Statuts, Priorites, Types de tache |
|
|
534
|
+
| **Finance** | Factures, Paiements, Budgets, Ecritures | Comptes, Journaux, Periodes |
|
|
535
|
+
| **Logistique** | Entrepots, Mouvements, Expeditions | Transporteurs, Unites, Zones |
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
471
539
|
## 9. Versioning & Updates
|
|
472
540
|
|
|
473
|
-
**Catalog Version:**
|
|
474
|
-
**Last Updated:**
|
|
475
|
-
**Next Review:**
|
|
541
|
+
**Catalog Version:** 2.0.0
|
|
542
|
+
**Last Updated:** 2026-02-11
|
|
543
|
+
**Next Review:** 2026-05-11
|
|
476
544
|
**Maintained By:** SmartStack Team
|
|
477
545
|
|
|
478
546
|
Changes will be tracked in `templates/patterns/suggestion-catalog-changelog.md`.
|
|
@@ -76,14 +76,17 @@ When the problem domain is identified, pre-load domain-specific needs:
|
|
|
76
76
|
|
|
77
77
|
For each detected module, anticipate sections (Level 4) and resources (Level 5) based on feature type:
|
|
78
78
|
|
|
79
|
-
| Feature type |
|
|
80
|
-
|
|
81
|
-
| data-centric | list
|
|
82
|
-
| workflow | list,
|
|
83
|
-
| reporting | dashboard
|
|
84
|
-
| integration | list
|
|
85
|
-
|
|
86
|
-
**
|
|
79
|
+
| Feature type | Sections (functional zones) | Resources (in list section) | Detail page tabs |
|
|
80
|
+
|-------------|---------------------------|---------------------------|------------------|
|
|
81
|
+
| data-centric | list | {entity}-grid, {entity}-filters, {entity}-form | Infos, {relations} |
|
|
82
|
+
| workflow | list, approve | {entity}-grid, {entity}-filters, {entity}-form, approval-queue | Infos, {relations}, Historique |
|
|
83
|
+
| reporting | dashboard | summary-chart, kpi-cards, export-panel | — |
|
|
84
|
+
| integration | list | sync-status-grid, config-form, log-viewer | Infos, Config, Logs |
|
|
85
|
+
|
|
86
|
+
> **RULE:** Sections = functional zones only (`list`, `dashboard`, `approve`, `import`, `rapport`, `planning`).
|
|
87
|
+
> `create`/`edit` = actions (modal/drawer) within the `list` page. `detail` = tabbed page reached by clicking a row in `list`.
|
|
88
|
+
|
|
89
|
+
**Always check:** Does the user's description imply additional functional sections? (e.g., "reports" → `dashboard`, "calendar view" → `planning`, "approval workflow" → `approve`)
|
|
87
90
|
|
|
88
91
|
## Output Format (Internal Only)
|
|
89
92
|
|
|
@@ -64,15 +64,17 @@
|
|
|
64
64
|
"module": "Users",
|
|
65
65
|
"ucRef": "UC-UM-001",
|
|
66
66
|
"notes": "Foundation module, must be implemented first",
|
|
67
|
-
"anticipatedSections": ["list", "
|
|
68
|
-
"anticipatedResources": ["user-grid", "user-
|
|
67
|
+
"anticipatedSections": ["list", "dashboard"],
|
|
68
|
+
"anticipatedResources": ["user-grid", "user-filters", "user-form"],
|
|
69
|
+
"detailTabs": ["Informations", "Roles", "Historique"]
|
|
69
70
|
}
|
|
70
71
|
```
|
|
71
72
|
**MANDATORY fields:** `item`, `category`, `module`
|
|
72
|
-
**OPTIONAL fields:** `ucRef`, `notes`, `anticipatedSections`, `anticipatedResources`
|
|
73
|
+
**OPTIONAL fields:** `ucRef`, `notes`, `anticipatedSections`, `anticipatedResources`, `detailTabs`
|
|
73
74
|
**category values:** `mustHave`, `shouldHave`, `couldHave`, `outOfScope`, `implicit` (camelCase)
|
|
74
|
-
**anticipatedSections:** Array of section codes (Level 4) —
|
|
75
|
-
**anticipatedResources:** Array of resource codes (Level 5) — e.g., `["user-grid", "user-
|
|
75
|
+
**anticipatedSections:** Array of section codes (Level 4) — functional zones ONLY: `["list", "dashboard", "approve", "import", "rapport", "planning"]`. NEVER `create`, `edit`, or `detail` (those are actions/pages within `list`).
|
|
76
|
+
**anticipatedResources:** Array of resource codes (Level 5) — e.g., `["user-grid", "user-filters", "user-form"]`
|
|
77
|
+
**detailTabs:** Array of tab names for the detail page (reached by clicking a row in `list`) — e.g., `["Informations", "Roles", "Historique"]`
|
|
76
78
|
**FORBIDDEN fields:** Do NOT use `id`, `feature`, `priority`. Use `item` + `category`.
|
|
77
79
|
|
|
78
80
|
## codebaseContext
|
|
@@ -14,27 +14,55 @@ const FEATURE_DATA = {
|
|
|
14
14
|
analysisMode: master.metadata.analysisMode || "interactive" // always "interactive" — analysis is always interactive
|
|
15
15
|
},
|
|
16
16
|
cadrage: {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
// CONTEXT SECTION — merged from problem/asIs/toBe (lean cadrage)
|
|
18
|
+
context: {
|
|
19
|
+
problem: master.cadrage.problem || "", // flat string from feature.json
|
|
20
|
+
trigger: master.cadrage.trigger || "", // flat string from feature.json
|
|
21
|
+
currentSituation: master.cadrage.asIs || "", // flat string from feature.json
|
|
22
|
+
desiredSituation: master.cadrage.toBe || "", // flat string from feature.json
|
|
23
|
+
painPoints: (master.cadrage.stakeholders || []).flatMap(s => s.painPoints || []),
|
|
24
|
+
acceptanceCriteria: (master.cadrage.acceptanceCriteria || []).map(c => c.criterion)
|
|
25
|
+
},
|
|
20
26
|
scope: {
|
|
21
27
|
// CONVERT feature.json keys to HTML keys:
|
|
22
28
|
// mustHave → vital, shouldHave → important, couldHave → optional, outOfScope → excluded
|
|
23
|
-
vital: master.globalScope.mustHave || []
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
vital: (master.cadrage.globalScope?.mustHave || master.cadrage.coverageMatrix?.filter(i => i.category === "mustHave") || [])
|
|
30
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" }),
|
|
31
|
+
important: (master.cadrage.globalScope?.shouldHave || master.cadrage.coverageMatrix?.filter(i => i.category === "shouldHave") || [])
|
|
32
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" }),
|
|
33
|
+
optional: (master.cadrage.globalScope?.couldHave || master.cadrage.coverageMatrix?.filter(i => i.category === "couldHave") || [])
|
|
34
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" }),
|
|
35
|
+
excluded: (master.cadrage.globalScope?.outOfScope || master.cadrage.coverageMatrix?.filter(i => i.category === "outOfScope") || [])
|
|
36
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" })
|
|
27
37
|
},
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
risks: (master.cadrage.risks || []).map(r => ({
|
|
39
|
+
description: r.description,
|
|
40
|
+
probability: r.probability,
|
|
41
|
+
impact: r.impact,
|
|
42
|
+
mitigation: r.mitigation
|
|
43
|
+
})),
|
|
44
|
+
stakeholders: (master.cadrage.stakeholders || []).map(s => ({
|
|
45
|
+
role: s.role,
|
|
46
|
+
function: s.function,
|
|
47
|
+
tasks: s.tasks || [],
|
|
48
|
+
frequency: s.frequency || "",
|
|
49
|
+
access: s.involvement || "",
|
|
50
|
+
frustrations: (s.painPoints || []).join("\n")
|
|
51
|
+
}))
|
|
31
52
|
},
|
|
32
53
|
modules: [
|
|
54
|
+
// FOR EACH module in master.modules[]:
|
|
33
55
|
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
56
|
+
code: module.code, // PascalCase key (e.g., "GestionTemps")
|
|
57
|
+
name: module.name || module.code, // Display name (e.g., "Gestion du temps") — MANDATORY
|
|
58
|
+
description: module.description || "",
|
|
59
|
+
featureType: module.featureType || "data-centric",
|
|
60
|
+
priority: module.priority || "must",
|
|
61
|
+
estimatedComplexity: module.estimatedComplexity || "medium",
|
|
62
|
+
entities: module.entities || [],
|
|
63
|
+
anticipatedSections: module.anticipatedSections || [],
|
|
64
|
+
dependencies: module.dependencies || [],
|
|
65
|
+
dependents: module.dependents || []
|
|
38
66
|
}
|
|
39
67
|
],
|
|
40
68
|
moduleSpecs: {
|
|
@@ -20,7 +20,7 @@ Simplified handoff with minimal scope:
|
|
|
20
20
|
- 3 core SeedData entries (omit some optional ones)
|
|
21
21
|
- Basic prd.json with simplified sections
|
|
22
22
|
- Lightweight progress.txt
|
|
23
|
-
- Display `/ralph-loop
|
|
23
|
+
- Display `/ralph-loop` command for later use
|
|
24
24
|
|
|
25
25
|
### Delta Mode (use_case = refactoring)
|
|
26
26
|
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Entity Architecture Decision Reference
|
|
2
|
+
|
|
3
|
+
> **Loaded by:** step-01-cadrage (section 4d-bis)
|
|
4
|
+
> **Purpose:** Provide a structured decision framework for entity placement in the C/A/M/S/R hierarchy
|
|
5
|
+
> **Mode:** ULTRATHINK — all scoring is internal reasoning, only the recommendation is shown to the client
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Entity Scoring Grid (5 criteria, 0-3 each)
|
|
10
|
+
|
|
11
|
+
For EACH referenced entity detected during approfondissement, score silently:
|
|
12
|
+
|
|
13
|
+
| Critere | 0 (Lookup) | 1 (Composant) | 2 (Module leger) | 3 (Module complet) |
|
|
14
|
+
|---------|-----------|---------------|-------------------|---------------------|
|
|
15
|
+
| **Cycle de vie** | Statique (rarement modifie, admin-only) | CRUD basique (creer, modifier, supprimer) | CRUD + etats/transitions simples | Lifecycle complet (etats multiples, transitions, approbations, archivage) |
|
|
16
|
+
| **Nombre d'acteurs** | Admin seul | 1 role utilisateur | 2-3 roles distincts | 4+ roles avec permissions differenciees |
|
|
17
|
+
| **Relations** | Lookup (0-1 FK entrantes) | Composant (1-3 FK) | Hub (3-5 FK entrantes/sortantes) | Pivot (5+ FK, central dans le graphe de donnees) |
|
|
18
|
+
| **Volume prevu** | < 50 entrees stables | 50-500 entrees | 500-5000 entrees | 5000+ ou croissance continue |
|
|
19
|
+
| **Autonomie fonctionnelle** | Pas de sens seul (ex: code postal) | Sens uniquement dans le contexte parent | Pourrait etre utilise seul | Domaine metier independant (ex: Clients, Projets) |
|
|
20
|
+
|
|
21
|
+
### Interpretation du score total (0-15)
|
|
22
|
+
|
|
23
|
+
| Score | Classification | Action |
|
|
24
|
+
|-------|---------------|--------|
|
|
25
|
+
| **0-3** | **Config list** (lookup table) | Table de reference administrable. Pas de module, pas de section. Gere dans la config admin. |
|
|
26
|
+
| **4-6** | **Gere dans l'app** (sous-entite) | L'entite est geree comme composant du module parent. Accessible via un onglet dans la page detail du parent. |
|
|
27
|
+
| **7-10** | **Module leger** | Module avec section `list` principale. Peu de sections fonctionnelles additionnelles. |
|
|
28
|
+
| **11-15** | **Module complet dedie** | Module avec section `list` + sections fonctionnelles riches (dashboard, rapports, workflows). |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Domain Coherence Decision Tree
|
|
33
|
+
|
|
34
|
+
> **CRITICAL:** Evaluer la coherence domaine AVANT le scoring. Une entite PERIPHERAL avec un score eleve reste un risque de scope creep.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
L'entite {E} est-elle CORE pour cette application ?
|
|
38
|
+
│
|
|
39
|
+
├── CORE (sans {E}, l'application perd son sens)
|
|
40
|
+
│ │ Exemples : Projets dans une app de gestion du temps,
|
|
41
|
+
│ │ Clients dans un CRM,
|
|
42
|
+
│ │ Employes dans une app RH
|
|
43
|
+
│ │
|
|
44
|
+
│ └── Score >= 7 ? → Module dedie (RECOMMANDE avec haute confiance)
|
|
45
|
+
│ └── Score 4-6 ? → Section/onglet dans le module principal
|
|
46
|
+
│ └── Score 0-3 ? → Config list (rare pour une entite CORE)
|
|
47
|
+
│
|
|
48
|
+
├── SUPPORT (utile, enrichit l'app, mais pas central)
|
|
49
|
+
│ │ Exemples : Departements dans une app de gestion du temps,
|
|
50
|
+
│ │ Fournisseurs dans un CRM orientee ventes,
|
|
51
|
+
│ │ Categories dans un module produits
|
|
52
|
+
│ │
|
|
53
|
+
│ ├── Deja gere ailleurs dans l'ecosysteme ? → Systeme externe (RECOMMANDE)
|
|
54
|
+
│ └── Pas encore gere ?
|
|
55
|
+
│ └── Score >= 7 ? → Module leger (confiance MOYENNE, alerter sur le scope)
|
|
56
|
+
│ └── Score 4-6 ? → Section/onglet du module qui en a le plus besoin
|
|
57
|
+
│ └── Score 0-3 ? → Config list (RECOMMANDE)
|
|
58
|
+
│
|
|
59
|
+
└── PERIPHERAL (tangentiel au domaine applicatif)
|
|
60
|
+
│ Exemples : Comptabilite dans une app de gestion du temps,
|
|
61
|
+
│ Logistique dans un CRM,
|
|
62
|
+
│ Facturation dans une app RH (sauf si paie)
|
|
63
|
+
│
|
|
64
|
+
└── TOUJOURS → Config list ou Systeme externe (RECOMMANDE)
|
|
65
|
+
Avertir : "Cette entite sort du perimetre applicatif.
|
|
66
|
+
Risque de scope creep si integree comme module."
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 3. Pre-classified Entity Patterns
|
|
72
|
+
|
|
73
|
+
> **Raccourcis de scoring** : ces patterns accelerent l'analyse en fournissant une classification par defaut.
|
|
74
|
+
> Le scoring complet reste necessaire pour confirmer ou overrider.
|
|
75
|
+
|
|
76
|
+
### 3a. Toujours Module Dedie (score typique >= 11)
|
|
77
|
+
|
|
78
|
+
| Entite | Domaines typiques | Pourquoi module dedie |
|
|
79
|
+
|--------|-------------------|-----------------------|
|
|
80
|
+
| Clients/Customers | CRM, Ventes, Facturation | Hub relationnel central, multi-acteur, lifecycle complet avec etats |
|
|
81
|
+
| Employes/Employees | RH, Temps, Paie | Acteur central avec donnees sensibles, multi-workflows (conges, evaluations) |
|
|
82
|
+
| Projets/Projects | Gestion, Temps, Facturation | Lifecycle complexe (ouvert → en cours → cloture), multi-ressources, reporting |
|
|
83
|
+
| Commandes/Orders | Ventes, Logistique | Workflow d'approbation, etats multiples, sous-entites (lignes) |
|
|
84
|
+
| Factures/Invoices | Finance, Ventes | Obligations legales, workflow complexe, etats fiscaux |
|
|
85
|
+
| Contrats/Contracts | Juridique, RH, Ventes | Lifecycle avec echeances, obligations, renouvellement automatique |
|
|
86
|
+
| Produits/Products | Commerce, Inventaire | Catalogue avec variantes, tarification, stock |
|
|
87
|
+
|
|
88
|
+
### 3b. Souvent Sous-entite du Parent (score typique 4-6)
|
|
89
|
+
|
|
90
|
+
| Entite | Module parent typique | Pourquoi sous-entite |
|
|
91
|
+
|--------|----------------------|-----------------------|
|
|
92
|
+
| Adresses | Clients, Employes | Composant du parent, pas de sens sans le parent |
|
|
93
|
+
| Notes/Commentaires | Tout module | Sous-objet universel, pas d'autonomie fonctionnelle |
|
|
94
|
+
| Pieces jointes/Documents | Tout module | Stockage lie au parent, pas de lifecycle propre |
|
|
95
|
+
| Lignes de commande | Commandes | Composant structurel de la commande |
|
|
96
|
+
| Tags/Labels | Tout module | Categorisation simple, admin-configurable |
|
|
97
|
+
| Contacts (d'un client) | Clients | Personnes liees a l'entite parente |
|
|
98
|
+
|
|
99
|
+
### 3c. Toujours Config List (score typique 0-3)
|
|
100
|
+
|
|
101
|
+
| Entite | Pourquoi config list |
|
|
102
|
+
|--------|---------------------|
|
|
103
|
+
| Pays, Villes | Reference geographique stable, rarement modifiee |
|
|
104
|
+
| Devises | Reference systeme, standard ISO |
|
|
105
|
+
| Statuts (types enumeres) | Enum ou lookup, admin-only, < 20 valeurs |
|
|
106
|
+
| Unites de mesure | Reference technique stable |
|
|
107
|
+
| Codes postaux | Reference externe, pas de CRUD utilisateur |
|
|
108
|
+
| Types/Categories simples | Flat list sans hierarchie, configurable par admin |
|
|
109
|
+
|
|
110
|
+
> **Override rule:** Une entite pre-classifiee "config list" peut etre promue en "module leger" si le client exprime un besoin de hierarchie (> 2 niveaux), de workflow, ou de permissions specifiques.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. Section Pattern for Modules
|
|
115
|
+
|
|
116
|
+
> **REGLE FONDAMENTALE : Les sections representent des zones fonctionnelles, PAS des operations CRUD.**
|
|
117
|
+
|
|
118
|
+
### Le pattern de navigation SmartStack
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
Module
|
|
122
|
+
├── Section: list
|
|
123
|
+
│ └── Page principale avec grille/table
|
|
124
|
+
│ └── Action "Creer" (ouvre formulaire en modale/drawer DANS cette page)
|
|
125
|
+
│ └── Clic sur une ligne → navigation vers la page detail
|
|
126
|
+
│ └── Resources : {entity}-grid, {entity}-filters, {entity}-form
|
|
127
|
+
│
|
|
128
|
+
├── (detail = page de detail avec onglets, accessible depuis list)
|
|
129
|
+
│ └── Onglet Info → informations principales (lecture + edition)
|
|
130
|
+
│ └── Onglet {relation} → sous-entites liees (ex: Lignes, Contacts, Documents)
|
|
131
|
+
│ └── Onglet Historique → journal d'activite
|
|
132
|
+
│ └── Resources : {entity}-detail, {entity}-tabs, {relation}-panel
|
|
133
|
+
│
|
|
134
|
+
├── Section: dashboard (SI KPIs/reporting necessaire)
|
|
135
|
+
│ └── Vue d'ensemble avec cartes KPI, graphiques, activite recente
|
|
136
|
+
│ └── Resources : {entity}-kpi-cards, {entity}-charts, {entity}-activity
|
|
137
|
+
│
|
|
138
|
+
├── Section: approve (SI workflow d'approbation)
|
|
139
|
+
│ └── File d'attente d'approbation, timeline de statut
|
|
140
|
+
│ └── Resources : approval-queue, status-timeline
|
|
141
|
+
│
|
|
142
|
+
├── Section: import (SI import en masse)
|
|
143
|
+
│ └── Upload fichier, mapping colonnes, preview, execution
|
|
144
|
+
│ └── Resources : import-upload, import-mapping, import-preview
|
|
145
|
+
│
|
|
146
|
+
└── Section: rapport (SI reporting specifique au module)
|
|
147
|
+
└── Rapports configurables, export, planification
|
|
148
|
+
└── Resources : report-builder, report-export
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Ce qui n'est JAMAIS une section
|
|
152
|
+
|
|
153
|
+
| PAS une section | C'est quoi en realite |
|
|
154
|
+
|-----------------|----------------------|
|
|
155
|
+
| `create` | Action (bouton) dans la page `list`, ouvre un formulaire en modale/drawer |
|
|
156
|
+
| `edit` | Action dans la page detail, bascule les champs en mode edition |
|
|
157
|
+
| `detail` | Page de detail accessible par navigation depuis `list` (pas une section menu) |
|
|
158
|
+
| `delete` | Action avec confirmation dans la page `list` ou `detail` |
|
|
159
|
+
| `search` | Composant de filtrage integre dans la section `list` |
|
|
160
|
+
|
|
161
|
+
### Regles de proposition de sections
|
|
162
|
+
|
|
163
|
+
| Condition detectee | Section a proposer |
|
|
164
|
+
|--------------------|--------------------|
|
|
165
|
+
| Module avec entites | `list` (TOUJOURS — section par defaut obligatoire) |
|
|
166
|
+
| KPIs, indicateurs, ou role manager | `dashboard` |
|
|
167
|
+
| Workflow de validation/approbation | `approve` |
|
|
168
|
+
| Volume > 100 ou import mentionne | `import` |
|
|
169
|
+
| Reporting specifique au module | `rapport` |
|
|
170
|
+
| Planification temporelle | `planning` / `calendar` |
|
|
171
|
+
| Visualisation geographique | `map` |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 5. Architecture Proposal Template
|
|
176
|
+
|
|
177
|
+
> **Utiliser ce template quand la recommandation est "Module dedie".**
|
|
178
|
+
|
|
179
|
+
```markdown
|
|
180
|
+
### Architecture proposee : {ModuleName}
|
|
181
|
+
|
|
182
|
+
| Niveau | Valeur | Justification |
|
|
183
|
+
|--------|--------|---------------|
|
|
184
|
+
| Context | `business` | Contexte metier standard |
|
|
185
|
+
| Application | `{ApplicationCode}` | {Nom de l'application en cours d'analyse} |
|
|
186
|
+
| Module | `{ModuleCode}` | {Pourquoi ce decoupage : autonomie fonctionnelle, domaine distinct, cycle de vie propre} |
|
|
187
|
+
|
|
188
|
+
**Sections fonctionnelles :**
|
|
189
|
+
|
|
190
|
+
| Section | Justification | Resources |
|
|
191
|
+
|---------|---------------|-----------|
|
|
192
|
+
| `list` | Page principale de gestion des {entity_plural} | {entity}-grid, {entity}-filters, {entity}-form |
|
|
193
|
+
| {section_2} | {pourquoi cette section est necessaire pour CE module} | {resources} |
|
|
194
|
+
| ... | ... | ... |
|
|
195
|
+
|
|
196
|
+
**Onglets de la page detail :**
|
|
197
|
+
|
|
198
|
+
| Onglet | Contenu | Pourquoi |
|
|
199
|
+
|--------|---------|----------|
|
|
200
|
+
| Informations | Fiche principale de l'{entity} | Toujours present |
|
|
201
|
+
| {relation_1} | {sous-entites ou entites liees} | {pourquoi cet onglet} |
|
|
202
|
+
| Historique | Journal des modifications | Toujours present si audit requis |
|
|
203
|
+
|
|
204
|
+
**Impact sur le graphe de dependances :**
|
|
205
|
+
- {ModuleName} sera une dependance de : {list of modules that reference this entity}
|
|
206
|
+
- {ModuleName} depend de : {list of modules it references, or "aucun (module fondation)"}
|
|
207
|
+
- Position dans le tri topologique : couche {N}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 6. Confidence Levels
|
|
213
|
+
|
|
214
|
+
| Confiance | Quand | Presentation au client |
|
|
215
|
+
|-----------|-------|------------------------|
|
|
216
|
+
| **HAUTE** | Pre-classification match + Score coherent + Domaine CORE | "Je recommande fortement..." + option en premier avec "(Recommande)" |
|
|
217
|
+
| **MOYENNE** | Score dans la zone grise (6-8) ou domaine SUPPORT | "Mon analyse suggere..." + option en premier avec "(Suggere)" |
|
|
218
|
+
| **BASSE** | Informations insuffisantes ou domaine PERIPHERAL | "Plusieurs options sont possibles..." + pas de recommandation, options neutres |
|
|
@@ -317,7 +317,8 @@ Status: READY FOR DEVELOPMENT ✓
|
|
|
317
317
|
Next Steps:
|
|
318
318
|
1. Address warnings (optional, recommended)
|
|
319
319
|
2. Review progress tracker: .ralph/progress.txt
|
|
320
|
-
3. Launch development: /ralph-loop
|
|
320
|
+
3. Launch development: /ralph-loop
|
|
321
|
+
(Use /ralph-loop -r ONLY to resume an interrupted loop)
|
|
321
322
|
═══════════════════════════════════════════════════════════════
|
|
322
323
|
```
|
|
323
324
|
|