@atlashub/smartstack-cli 3.17.0 → 3.19.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 (43) hide show
  1. package/dist/index.js +3 -0
  2. package/dist/index.js.map +1 -1
  3. package/package.json +1 -1
  4. package/templates/agents/gitflow/start.md +2 -2
  5. package/templates/skills/business-analyse/SKILL.md +5 -5
  6. package/templates/skills/business-analyse/_shared.md +46 -20
  7. package/templates/skills/business-analyse/html/ba-interactive.html +57 -107
  8. package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +13 -0
  9. package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +1 -1
  10. package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +11 -20
  11. package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +1 -3
  12. package/templates/skills/business-analyse/html/src/template.html +31 -83
  13. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +71 -3
  14. package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +11 -8
  15. package/templates/skills/business-analyse/references/cadrage-structure-cards.md +7 -5
  16. package/templates/skills/business-analyse/references/deploy-data-build.md +42 -14
  17. package/templates/skills/business-analyse/references/deploy-modes.md +1 -1
  18. package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -0
  19. package/templates/skills/business-analyse/references/robustness-checks.md +2 -1
  20. package/templates/skills/business-analyse/references/spec-auto-inference.md +70 -16
  21. package/templates/skills/business-analyse/references/ui-resource-cards.md +149 -0
  22. package/templates/skills/business-analyse/steps/step-00-init.md +23 -5
  23. package/templates/skills/business-analyse/steps/step-01-cadrage.md +220 -32
  24. package/templates/skills/business-analyse/steps/step-02-decomposition.md +35 -26
  25. package/templates/skills/business-analyse/steps/step-03a1-setup.md +122 -32
  26. package/templates/skills/business-analyse/steps/step-03a2-analysis.md +8 -0
  27. package/templates/skills/business-analyse/steps/step-03b-ui.md +68 -5
  28. package/templates/skills/business-analyse/steps/step-03d-validate.md +34 -1
  29. package/templates/skills/business-analyse/steps/step-05a-handoff.md +99 -2
  30. package/templates/skills/business-analyse/steps/step-05b-deploy.md +44 -8
  31. package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +226 -41
  32. package/templates/skills/business-analyse/steps/step-06-review.md +2 -1
  33. package/templates/skills/business-analyse/templates/tpl-handoff.md +5 -4
  34. package/templates/skills/business-analyse/templates/tpl-launch-displays.md +4 -1
  35. package/templates/skills/business-analyse/templates-frd.md +5 -4
  36. package/templates/skills/gitflow/references/start-local-config.md +6 -3
  37. package/templates/skills/gitflow/steps/step-start.md +2 -2
  38. package/templates/skills/ralph-loop/SKILL.md +41 -1
  39. package/templates/skills/ralph-loop/references/category-rules.md +96 -2
  40. package/templates/skills/ralph-loop/references/compact-loop.md +85 -24
  41. package/templates/skills/ralph-loop/steps/step-00-init.md +30 -54
  42. package/templates/skills/ralph-loop/steps/step-01-task.md +102 -1
  43. package/templates/skills/ralph-loop/steps/step-04-check.md +87 -40
@@ -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:** 1.0.0
474
- **Last Updated:** 2025-02-01
475
- **Next Review:** 2025-05-01
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 | Standard sections | Standard resources per section |
80
- |-------------|------------------|------------------------------|
81
- | data-centric | list, detail, create, edit | {entity}-grid, {entity}-form, {entity}-card |
82
- | workflow | list, detail, create, edit, approve, history | {entity}-grid, {entity}-form, approval-panel, status-timeline |
83
- | reporting | dashboard, detail, export | summary-chart, kpi-cards, export-panel |
84
- | integration | list, detail, config, sync, logs | sync-status-grid, config-form, log-viewer |
85
-
86
- **Always check:** Does the user's description imply additional sections beyond the standard set? (e.g., "reports" → dashboard + export, "calendar view" → calendar section)
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", "detail", "create", "edit"],
68
- "anticipatedResources": ["user-grid", "user-form", "user-card"]
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) — e.g., `["list", "detail", "create", "edit", "dashboard", "export"]`
75
- **anticipatedResources:** Array of resource codes (Level 5) — e.g., `["user-grid", "user-form", "user-card"]`
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
- goal: master.cadrage.goal,
18
- vision: master.cadrage.vision,
19
- success_criteria: master.cadrage.success_criteria,
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
- important: master.globalScope.shouldHave || [],
25
- optional: master.globalScope.couldHave || [],
26
- excluded: master.globalScope.outOfScope || []
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
- constraints: master.cadrage.constraints || [],
29
- risks: master.cadrage.risks || [],
30
- stakeholders: master.stakeholders || []
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
- moduleCode: module.code,
35
- moduleName: module.name,
36
- moduleDescription: module.description || "",
37
- // ... per-module fields from feature.json
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 -r` command for later use
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 -r
320
+ 3. Launch development: /ralph-loop
321
+ (Use /ralph-loop -r ONLY to resume an interrupted loop)
321
322
  ═══════════════════════════════════════════════════════════════
322
323
  ```
323
324
 
@@ -29,24 +29,78 @@
29
29
  | datetime | DatePicker | entity.required | — |
30
30
  | bool | Toggle | — | default: false |
31
31
 
32
- ## Auto-Generated Sections by featureType
33
-
34
- | featureType | Sections generated |
35
- |---|---|
36
- | data-centric | list, create, detail |
37
- | workflow | list, create, detail, edit |
38
- | integration | list, detail, config |
39
- | reporting | dashboard |
40
- | full-module | list, create, detail, edit, dashboard |
41
-
42
- ## Section Generation Rules
43
-
44
- 1. **list section:** SmartTable with all non-long-text attributes as columns, actions = [view, edit, delete], defaultSort = { createdAt, desc }
45
- 2. **create section:** SmartForm with all writable attributes as fields, component inferred from type
46
- 3. **detail section:** DetailCard with all attributes + child SmartTable for each 1:N relationship
47
- 4. **edit section:** Same as create but pre-filled (mode: edit)
32
+ ## Auto-Generated UI Components by featureType
33
+
34
+ > **RULE:** Sections = functional zones only. `create`/`edit` are actions within `list`. `detail` is a tabbed page reached from `list`.
35
+
36
+ | featureType | Sections (functional zones) | List page includes | Detail page tabs |
37
+ |---|---|---|---|
38
+ | data-centric | list | grid, filters, create form (modal) | Infos, {relations} |
39
+ | workflow | list, approve | grid, filters, create form (modal) | Infos, {relations}, Historique |
40
+ | integration | list | grid, filters, config form | Infos, Config, Logs |
41
+ | reporting | dashboard | — | — |
42
+ | full-module | list, dashboard | grid, filters, create form (modal) | Infos, {relations}, Historique |
43
+
44
+ ## Component Generation Rules
45
+
46
+ 1. **list section:** SmartTable with all non-long-text attributes as columns, actions = [view, edit, delete], defaultSort = { createdAt, desc }. Create action opens SmartForm in modal/drawer.
47
+ 2. **create form (in list):** SmartForm with all writable attributes as fields, component inferred from type. Opens as modal/drawer from the list page.
48
+ 3. **detail page (from list click):** TabPanel with: Info tab (all attributes), relation tabs (child SmartTable for each 1:N relationship), History tab (if auditable). See "Detail Page Tab Auto-Inference" below for exact rules.
49
+ 4. **edit (in detail):** Same form as create but pre-filled (mode: edit). Inline in the detail page Info tab.
48
50
  5. **dashboard section:** Trigger 3d (dashboard specification)
49
51
 
52
+ ## Detail Page Tab Auto-Inference
53
+
54
+ > **RULE:** Every module with a `list` section MUST have a companion detail page. Tabs are inferred from multiple sources.
55
+
56
+ ### Tab sources (merged in order)
57
+
58
+ | Priority | Source | Tabs generated |
59
+ |----------|--------|----------------|
60
+ | 1 | `coverageMatrix[].detailTabs` (from cadrage) | Exact tab names as specified by client |
61
+ | 2 | Entity `relationships[]` where `type = "1:N"` | One tab per child relationship (SmartTable) |
62
+ | 3 | Entity has `lifeCycles[]` | History tab (Timeline) |
63
+ | 4 | Always present | Info tab (first position) |
64
+
65
+ ### Merge algorithm
66
+
67
+ ```
68
+ detailTabs = []
69
+
70
+ # 1. Always add Info tab first
71
+ detailTabs.push({ code: "info", label: "Informations", content: DetailCard })
72
+
73
+ # 2. If cadrage specified detailTabs, use those names
74
+ IF coverageMatrix[module].detailTabs EXISTS:
75
+ FOR EACH tabName IN detailTabs:
76
+ IF tabName matches a 1:N relationship entity → SmartTable tab
77
+ ELIF tabName == "Historique"/"History" → Timeline tab
78
+ ELSE → custom DetailCard tab (contents TBD in step-03b)
79
+
80
+ # 3. If no cadrage tabs, auto-infer from relationships
81
+ ELSE:
82
+ FOR EACH rel IN entity.relationships WHERE rel.type == "1:N":
83
+ detailTabs.push({ code: rel.target (kebab-case), label: rel.target (plural), content: SmartTable })
84
+
85
+ # 4. Add History tab if auditable
86
+ IF entity has lifeCycles:
87
+ detailTabs.push({ code: "history", label: "Historique", content: Timeline })
88
+ ```
89
+
90
+ ### Detail section auto-generation
91
+
92
+ When auto-generating the detail section, create:
93
+ - `specification.sections[]` entry with `code: "detail"`, `navigation: "hidden"`, route `/business/{app}/{module}/detail/:id`
94
+ - `specification.uiWireframes[]` entry with `section: "detail"` and ASCII mockup showing all tabs
95
+ - Resources: `{module}-detail-header` (DetailHeader), `{module}-detail-tabs` (TabPanel), `{module}-info-card` (DetailCard), one `{module}-{relation}-grid` per relation tab, `{module}-history` (Timeline if auditable)
96
+
97
+ ### Detail page navigation wiring
98
+
99
+ The detail page is NOT a sidebar entry. Navigation is handled by:
100
+ - **From list**: row click action `navigate:detail` → `/business/{app}/{module}/detail/{id}`
101
+ - **Back button**: detail header → `/business/{app}/{module}/list`
102
+ - **Route registration**: route MUST be registered in frontend routing with `:id` parameter
103
+
50
104
  ## Status/Lifecycle Enhancement
51
105
 
52
106
  If entity has a status/enum field AND lifeCycles exists: