@atlashub/smartstack-cli 4.18.0 → 4.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.
Files changed (164) hide show
  1. package/package.json +1 -1
  2. package/templates/agents/ba-reader.md +86 -80
  3. package/templates/agents/ba-writer.md +318 -415
  4. package/templates/agents/docs-context-reader.md +3 -3
  5. package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -0
  6. package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -0
  7. package/templates/skills/apex/SKILL.md +29 -16
  8. package/templates/skills/apex/_shared.md +62 -9
  9. package/templates/skills/apex/references/analysis-methods.md +8 -6
  10. package/templates/skills/apex/references/challenge-questions.md +5 -5
  11. package/templates/skills/apex/references/core-seed-data.md +68 -45
  12. package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +26 -21
  13. package/templates/skills/apex/references/parallel-execution.md +156 -0
  14. package/templates/skills/apex/references/person-extension-pattern.md +12 -12
  15. package/templates/skills/apex/references/post-checks.md +1748 -1726
  16. package/templates/skills/apex/references/smartstack-api.md +63 -57
  17. package/templates/skills/apex/references/smartstack-frontend-compliance.md +594 -0
  18. package/templates/skills/apex/references/smartstack-frontend.md +1246 -1842
  19. package/templates/skills/apex/references/smartstack-layers.md +98 -145
  20. package/templates/skills/apex/steps/step-00-init.md +30 -6
  21. package/templates/skills/apex/steps/step-01-analyze.md +27 -23
  22. package/templates/skills/apex/steps/step-02-plan.md +12 -12
  23. package/templates/skills/apex/steps/step-03-execute.md +198 -143
  24. package/templates/skills/apex/steps/step-04-examine.md +24 -93
  25. package/templates/skills/apex/steps/step-05-deep-review.md +16 -16
  26. package/templates/skills/apex/steps/step-06-resolve.md +9 -9
  27. package/templates/skills/apex/steps/step-07-tests.md +3 -1
  28. package/templates/skills/apex/steps/step-08-run-tests.md +1 -1
  29. package/templates/skills/business-analyse/SKILL.md +182 -301
  30. package/templates/skills/business-analyse/_shared.md +119 -336
  31. package/templates/skills/business-analyse/html/ba-interactive.html +706 -85
  32. package/templates/skills/business-analyse/html/build-html.js +41 -3
  33. package/templates/skills/business-analyse/html/src/partials/cadrage-context.html +34 -0
  34. package/templates/skills/business-analyse/html/src/partials/cadrage-risks.html +48 -0
  35. package/templates/skills/business-analyse/html/src/partials/cadrage-scope.html +49 -0
  36. package/templates/skills/business-analyse/html/src/partials/cadrage-stakeholders.html +55 -0
  37. package/templates/skills/business-analyse/html/src/partials/cadrage-success.html +34 -0
  38. package/templates/skills/business-analyse/html/src/partials/consol-datamodel.html +8 -0
  39. package/templates/skills/business-analyse/html/src/partials/consol-flows.html +29 -0
  40. package/templates/skills/business-analyse/html/src/partials/consol-interactions.html +8 -0
  41. package/templates/skills/business-analyse/html/src/partials/consol-permissions.html +8 -0
  42. package/templates/skills/business-analyse/html/src/partials/decomp-dependencies.html +38 -0
  43. package/templates/skills/business-analyse/html/src/partials/decomp-modules.html +51 -0
  44. package/templates/skills/business-analyse/html/src/partials/handoff-summary.html +24 -0
  45. package/templates/skills/business-analyse/html/src/partials/module-spec-container.html +4 -0
  46. package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +17 -1
  47. package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +32 -6
  48. package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +100 -63
  49. package/templates/skills/business-analyse/html/src/scripts/06-render-mockups.js +372 -0
  50. package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +1 -1
  51. package/templates/skills/business-analyse/html/src/scripts/10-comments.js +41 -13
  52. package/templates/skills/business-analyse/html/src/styles/09-mockups-html.css +136 -0
  53. package/templates/skills/business-analyse/html/src/template.html +1 -1
  54. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +7 -5
  55. package/templates/skills/business-analyse/questionnaire/01-context.md +11 -157
  56. package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +101 -0
  57. package/templates/skills/business-analyse/questionnaire/03-data-ui.md +92 -0
  58. package/templates/skills/business-analyse/questionnaire/04-risks-metrics.md +6 -0
  59. package/templates/skills/business-analyse/questionnaire/05-cross-module.md +69 -0
  60. package/templates/skills/business-analyse/questionnaire.md +22 -280
  61. package/templates/skills/business-analyse/react/application-viewer.md +2 -2
  62. package/templates/skills/business-analyse/react/components.md +4 -4
  63. package/templates/skills/business-analyse/react/i18n-template.md +1 -1
  64. package/templates/skills/business-analyse/react/schema.md +14 -14
  65. package/templates/skills/business-analyse/references/acceptance-criteria.md +21 -21
  66. package/templates/skills/business-analyse/references/analysis-semantic-checks.md +3 -3
  67. package/templates/skills/business-analyse/references/compilation-structure-cards.md +1 -1
  68. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +5 -5
  69. package/templates/skills/business-analyse/references/deploy-data-build.md +12 -11
  70. package/templates/skills/business-analyse/references/deploy-modes.md +10 -10
  71. package/templates/skills/business-analyse/references/detection-strategies.md +6 -6
  72. package/templates/skills/business-analyse/references/html-data-mapping.md +15 -15
  73. package/templates/skills/business-analyse/references/naming-conventions.md +4 -4
  74. package/templates/skills/business-analyse/references/review-data-mapping.md +29 -29
  75. package/templates/skills/business-analyse/references/robustness-checks.md +36 -36
  76. package/templates/skills/business-analyse/references/spec-auto-inference.md +2 -2
  77. package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
  78. package/templates/skills/business-analyse/references/ui-resource-cards.md +1 -1
  79. package/templates/skills/business-analyse/references/validation-checklist.md +3 -3
  80. package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +2 -2
  81. package/templates/skills/business-analyse/schemas/application-schema.json +8 -8
  82. package/templates/skills/business-analyse/schemas/feature-schema.json +3 -3
  83. package/templates/skills/business-analyse/schemas/index-schema.json +47 -0
  84. package/templates/skills/business-analyse/schemas/project-schema.json +6 -6
  85. package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +1 -1
  86. package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +5 -3
  87. package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +4 -4
  88. package/templates/skills/business-analyse/schemas/sections/specification-schema.json +1 -1
  89. package/templates/skills/business-analyse/schemas/shared/common-defs.json +4 -4
  90. package/templates/skills/business-analyse/steps/step-00-init.md +68 -77
  91. package/templates/skills/business-analyse/steps/step-01-cadrage.md +50 -216
  92. package/templates/skills/business-analyse/steps/step-02-structure.md +175 -0
  93. package/templates/skills/business-analyse/steps/step-03-specify.md +198 -0
  94. package/templates/skills/business-analyse/steps/step-04-consolidate.md +478 -0
  95. package/templates/skills/business-analyse/steps/step-05-deploy.md +220 -0
  96. package/templates/skills/business-analyse/steps/step-06-review.md +51 -69
  97. package/templates/skills/business-analyse/templates/tpl-frd.md +1 -1
  98. package/templates/skills/business-analyse/templates/tpl-handoff.md +20 -17
  99. package/templates/skills/business-analyse/templates/tpl-launch-displays.md +2 -2
  100. package/templates/skills/business-analyse/templates-react.md +2 -2
  101. package/templates/skills/derive-prd/SKILL.md +92 -0
  102. package/templates/skills/derive-prd/references/acceptance-criteria.md +169 -0
  103. package/templates/skills/derive-prd/references/entity-domain-mapping.md +115 -0
  104. package/templates/skills/{business-analyse → derive-prd}/references/handoff-file-templates.md +131 -120
  105. package/templates/skills/{business-analyse → derive-prd}/references/handoff-mappings.md +95 -95
  106. package/templates/skills/{business-analyse → derive-prd}/references/handoff-seeddata-generation.md +312 -312
  107. package/templates/skills/{business-analyse → derive-prd}/references/prd-generation.md +262 -263
  108. package/templates/skills/derive-prd/references/readiness-scoring.md +104 -0
  109. package/templates/skills/derive-prd/schemas/handoff-schema.json +95 -0
  110. package/templates/skills/derive-prd/steps/step-00-validate.md +130 -0
  111. package/templates/skills/derive-prd/steps/step-01-transform.md +206 -0
  112. package/templates/skills/derive-prd/steps/step-02-export.md +181 -0
  113. package/templates/skills/{business-analyse → derive-prd}/templates/tpl-progress.md +172 -172
  114. package/templates/skills/documentation/SKILL.md +7 -0
  115. package/templates/skills/ralph-loop/SKILL.md +2 -1
  116. package/templates/skills/ralph-loop/references/init-resume-recovery.md +1 -1
  117. package/templates/skills/ralph-loop/steps/step-01-task.md +2 -2
  118. package/templates/skills/apex/references/agent-teams-protocol.md +0 -203
  119. package/templates/skills/business-analyse/_architecture.md +0 -124
  120. package/templates/skills/business-analyse/_elicitation.md +0 -206
  121. package/templates/skills/business-analyse/_module-loop.md +0 -115
  122. package/templates/skills/business-analyse/_rules.md +0 -142
  123. package/templates/skills/business-analyse/_suggestions.md +0 -34
  124. package/templates/skills/business-analyse/questionnaire/00-application.md +0 -160
  125. package/templates/skills/business-analyse/questionnaire/00b-project.md +0 -85
  126. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +0 -189
  127. package/templates/skills/business-analyse/questionnaire/03-scope.md +0 -164
  128. package/templates/skills/business-analyse/questionnaire/04-data.md +0 -88
  129. package/templates/skills/business-analyse/questionnaire/05-integrations.md +0 -58
  130. package/templates/skills/business-analyse/questionnaire/06-security.md +0 -68
  131. package/templates/skills/business-analyse/questionnaire/07-ui.md +0 -76
  132. package/templates/skills/business-analyse/questionnaire/08-performance.md +0 -42
  133. package/templates/skills/business-analyse/questionnaire/09-constraints.md +0 -45
  134. package/templates/skills/business-analyse/questionnaire/10-documentation.md +0 -58
  135. package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +0 -59
  136. package/templates/skills/business-analyse/questionnaire/12-migration.md +0 -58
  137. package/templates/skills/business-analyse/questionnaire/13-cross-module.md +0 -69
  138. package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +0 -135
  139. package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +0 -136
  140. package/templates/skills/business-analyse/references/agent-module-prompt.md +0 -366
  141. package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +0 -557
  142. package/templates/skills/business-analyse/references/cache-warming-strategy.md +0 -566
  143. package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +0 -41
  144. package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +0 -74
  145. package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +0 -115
  146. package/templates/skills/business-analyse/references/cadrage-shared-modules.md +0 -68
  147. package/templates/skills/business-analyse/references/cadrage-structure-cards.md +0 -85
  148. package/templates/skills/business-analyse/references/team-orchestration.md +0 -1093
  149. package/templates/skills/business-analyse/references/validate-incremental-html.md +0 -121
  150. package/templates/skills/business-analyse/steps/step-01b-applications.md +0 -419
  151. package/templates/skills/business-analyse/steps/step-02-decomposition.md +0 -387
  152. package/templates/skills/business-analyse/steps/step-03a-data.md +0 -16
  153. package/templates/skills/business-analyse/steps/step-03a1-setup.md +0 -486
  154. package/templates/skills/business-analyse/steps/step-03a2-analysis.md +0 -300
  155. package/templates/skills/business-analyse/steps/step-03b-ui.md +0 -405
  156. package/templates/skills/business-analyse/steps/step-03c-compile.md +0 -516
  157. package/templates/skills/business-analyse/steps/step-03d-validate.md +0 -691
  158. package/templates/skills/business-analyse/steps/step-04-consolidation.md +0 -17
  159. package/templates/skills/business-analyse/steps/step-04a-collect.md +0 -415
  160. package/templates/skills/business-analyse/steps/step-04b-analyze.md +0 -163
  161. package/templates/skills/business-analyse/steps/step-04c-decide.md +0 -186
  162. package/templates/skills/business-analyse/steps/step-05a-handoff.md +0 -937
  163. package/templates/skills/business-analyse/steps/step-05b-deploy.md +0 -522
  164. package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +0 -703
@@ -0,0 +1,198 @@
1
+ ---
2
+ name: step-03-specify
3
+ description: Sequential deep dive per module - entities, BRs, UCs, permissions, screens
4
+ model: opus
5
+ next_step: steps/step-04-consolidate.md
6
+ ---
7
+
8
+ # Step 03 — Specify (Deep Dive per Module)
9
+
10
+ ## Objective
11
+
12
+ For each module (in dependency order), produce complete specifications: entities, business rules, use cases, permissions, and interface specs (screens).
13
+
14
+ ## Prerequisites
15
+
16
+ - Step 02 (structure) completed
17
+ - Applications, modules, sections, dependencies identified
18
+
19
+ ## Sequential Execution
20
+
21
+ **No team mode.** Each module receives 100% of LLM attention for maximum specification quality.
22
+
23
+ Process modules in topological order (dependencies first):
24
+ ```
25
+ For module in topologicalSort(modules):
26
+ specify(module)
27
+ ```
28
+
29
+ ## Per-Module Specification Loop
30
+
31
+ For each module, execute these sub-steps:
32
+
33
+ ### A. Context Loading
34
+
35
+ Load via ba-reader:
36
+ - Module's `index.json` (if exists from previous run)
37
+ - Application `cadrage.json` for stakeholder context
38
+ - Completed modules' summaries (compact, <100 lines each)
39
+
40
+ ### B. Entities
41
+
42
+ For each entity identified in step 02:
43
+
44
+ ```json
45
+ {
46
+ "name": "Employee",
47
+ "description": "Represente un employe de l'entreprise",
48
+ "attributes": [
49
+ { "name": "code", "type": "string", "required": true, "description": "Identifiant unique" },
50
+ { "name": "userId", "type": "guid", "required": true, "description": "Reference vers l'utilisateur" },
51
+ { "name": "departmentId", "type": "guid", "required": true, "description": "Departement d'affectation" },
52
+ { "name": "hireDate", "type": "date", "required": true, "description": "Date d'embauche" },
53
+ { "name": "position", "type": "string", "description": "Poste occupe" },
54
+ { "name": "status", "type": "enum", "options": ["Active", "Inactive", "OnLeave", "Terminated"], "description": "Statut de l'employe" }
55
+ ],
56
+ "relationships": [
57
+ { "target": "Department", "type": "ManyToOne", "description": "Appartient a un departement" },
58
+ { "target": "Contract", "type": "OneToMany", "description": "Possede plusieurs contrats" }
59
+ ]
60
+ }
61
+ ```
62
+
63
+ ### C. Business Rules
64
+
65
+ For each entity/process, identify rules:
66
+
67
+ ```json
68
+ {
69
+ "id": "BR-VAL-EMPLOYEES-001",
70
+ "name": "Validation date embauche",
71
+ "category": "validation",
72
+ "statement": "La date d'embauche ne peut pas etre dans le futur",
73
+ "example": "Date embauche = 2027-01-01 → erreur car > date du jour",
74
+ "entities": ["Employee"],
75
+ "severity": "blocking"
76
+ }
77
+ ```
78
+
79
+ Categories: `validation`, `calculation`, `workflow`, `security`, `data`
80
+
81
+ ### D. Use Cases
82
+
83
+ For each stakeholder action:
84
+
85
+ ```json
86
+ {
87
+ "id": "UC-EMPLOYEES-001",
88
+ "name": "Creer un employe",
89
+ "actor": "Responsable RH",
90
+ "preconditions": ["L'utilisateur a la permission HumanResources.Employees.Create"],
91
+ "steps": [
92
+ "L'utilisateur ouvre la page de creation",
93
+ "Il remplit les champs obligatoires (nom, departement, date embauche)",
94
+ "Il valide le formulaire",
95
+ "Le systeme verifie les regles metier (BR-VAL-EMPLOYEES-001)",
96
+ "Le systeme cree l'employe et affiche la fiche"
97
+ ],
98
+ "alternative": "Si les donnees sont invalides, le systeme affiche les erreurs",
99
+ "businessRules": ["BR-VAL-EMPLOYEES-001"],
100
+ "result": "L'employe est cree avec le statut 'Actif'"
101
+ }
102
+ ```
103
+
104
+ ### E. Permissions
105
+
106
+ Define the permission matrix:
107
+
108
+ ```json
109
+ {
110
+ "roles": ["RH Admin", "Manager", "Employee"],
111
+ "matrix": [
112
+ { "role": "RH Admin", "permissions": ["Read", "Create", "Update", "Delete", "Export"] },
113
+ { "role": "Manager", "permissions": ["Read", "Export"] },
114
+ { "role": "Employee", "permissions": ["Read"] }
115
+ ],
116
+ "permissionPaths": [
117
+ "HumanResources.Employees.Read",
118
+ "HumanResources.Employees.Create",
119
+ "HumanResources.Employees.Update",
120
+ "HumanResources.Employees.Delete",
121
+ "HumanResources.Employees.Export"
122
+ ]
123
+ }
124
+ ```
125
+
126
+ ### F. Interface Specs (Screens)
127
+
128
+ For each section/resource identified in step 02, specify the full interface:
129
+
130
+ ```json
131
+ {
132
+ "sectionCode": "list",
133
+ "sectionLabel": "Liste des employes",
134
+ "resources": [
135
+ {
136
+ "code": "employees-grid",
137
+ "type": "SmartTable",
138
+ "label": "Grille des employes",
139
+ "columns": [
140
+ { "field": "code", "label": "Code", "type": "text", "sortable": true },
141
+ { "field": "fullName", "label": "Nom complet", "type": "text", "sortable": true },
142
+ { "field": "department.name", "label": "Departement", "type": "lookup", "filterable": true },
143
+ { "field": "status", "label": "Statut", "type": "badge", "filterable": true }
144
+ ],
145
+ "actions": ["create", "edit", "delete", "export"],
146
+ "filters": ["department", "status"],
147
+ "permission": "HumanResources.Employees.Read"
148
+ }
149
+ ]
150
+ }
151
+ ```
152
+
153
+ Resource types:
154
+ - **SmartTable**: columns[], actions[], filters[], permission
155
+ - **SmartForm**: tabs[{ label, fields[{ field, label, type, required, readonly, options }] }], actions[], permission
156
+ - **SmartCard**: columns/fields[], permission
157
+ - **SmartKanban**: options/columns[], permission
158
+ - **SmartDashboard**: kpis[{ label, value }], permission
159
+ - **SmartFilter**: options[], permission
160
+
161
+ ### G. Write & Advance
162
+
163
+ After completing all sub-steps for a module:
164
+
165
+ 1. Write via ba-writer:
166
+ - `entities.json`
167
+ - `rules.json`
168
+ - `usecases.json`
169
+ - `permissions.json`
170
+ - `screens.json`
171
+ - Update `index.json` (hashes, summary counts)
172
+
173
+ 2. Update module status to `specified`
174
+
175
+ 3. Advance to next module in topological order
176
+
177
+ ### H. Module Completion Check
178
+
179
+ After all modules are specified:
180
+ - Verify all modules have status `specified`
181
+ - Display summary: total entities, rules, UCs, permissions, screens across all modules
182
+ - Transition to step 04
183
+
184
+ ## POST-CHECK
185
+
186
+ Before advancing to step 04, verify:
187
+ - [ ] Every module has at least 1 entity
188
+ - [ ] Every module has at least 1 use case
189
+ - [ ] Every module has at least 1 business rule
190
+ - [ ] Every module has permissions defined
191
+ - [ ] Every module has at least 1 screen defined
192
+ - [ ] All entity relationships reference existing entities
193
+ - [ ] All UC business rule references exist
194
+ - [ ] All permission paths follow the convention
195
+
196
+ ## Transition
197
+
198
+ → Step 04 (consolidate) — Cross-module validation
@@ -0,0 +1,478 @@
1
+ ---
2
+ name: step-04-consolidate
3
+ description: Cross-module validation - data model, permissions, E2E flows, approval
4
+ model: opus
5
+ next_step: steps/step-05-deploy.md
6
+ ---
7
+
8
+ > **Context files:** `_shared.md`
9
+
10
+ # Step 4: Consolidate - Cross-Module Validation & Approval
11
+
12
+ ## MANDATORY EXECUTION RULES
13
+ - ALWAYS load granular JSON files via index.json (entities.json, rules.json, permissions.json, etc.)
14
+ - ALWAYS validate permission coherence across modules
15
+ - ALWAYS execute semantic validation checks
16
+ - NEVER duplicate module content - work with summaries only
17
+ - Single-module shortcut: auto-approve consolidation if only 1 module
18
+
19
+ ## YOUR TASK
20
+ Consolidate all modules by validating cross-module interactions, permission coherence, data model integrity, E2E flows, and global risks. Obtain client approval and write consolidation data to validation.json.
21
+
22
+ ---
23
+
24
+ ## EXECUTION SEQUENCE
25
+
26
+ ### 1. Load Completed Modules & Validate Status
27
+
28
+ ```
29
+ ba-reader.getCompletedModulesSummary({feature_id})
30
+ → For each module: code, entities[], key BRs, permissions[], dependencies
31
+ → Max 100 lines per module summary
32
+
33
+ ba-reader.readApplicationContext({feature_id})
34
+ → cadrage.applicationRoles, modules[], dependencyGraph
35
+
36
+ IF status already "consolidated":
37
+ Display: "Consolidation already completed. Loading step-05-deploy."
38
+ Load: steps/step-05-deploy.md
39
+ STOP
40
+ ```
41
+
42
+ ### 2. Cross-Module Interaction Analysis
43
+
44
+ **2a. Load Module Index Files**
45
+
46
+ For each completed module, read `index.json` and discover granular files:
47
+
48
+ ```javascript
49
+ const moduleFiles = {
50
+ entities: "entities.json",
51
+ rules: "rules.json",
52
+ usecases: "usecases.json",
53
+ permissions: "permissions.json",
54
+ screens: "screens.json"
55
+ };
56
+
57
+ for (const module of completedModules) {
58
+ const index = ba-reader.readSection(module.code, "index");
59
+ module.files = index.files;
60
+ // Load only files needed for consolidation
61
+ module.entities = ba-reader.readSection(module.code, "entities");
62
+ module.permissions = ba-reader.readSection(module.code, "permissions");
63
+ }
64
+ ```
65
+
66
+ **2b. Foreign Key References & Shared Entities**
67
+
68
+ Build entity registry and validate cross-module references:
69
+
70
+ ```javascript
71
+ const entityRegistry = {};
72
+ for (const module of completedModules) {
73
+ entityRegistry[module.code] = {
74
+ entities: module.entities.map(e => ({
75
+ name: e.name,
76
+ attributes: e.attributes.map(a => a.name),
77
+ pk: e.attributes.find(a => a.name === "Id" || a.unique)?.name || "Id"
78
+ }))
79
+ };
80
+ }
81
+
82
+ // Detect shared entities
83
+ const sharedEntities = [];
84
+ for (const module of completedModules) {
85
+ for (const entity of module.entities) {
86
+ for (const rel of entity.relationships || []) {
87
+ if (rel.target.includes(".")) {
88
+ const [targetModule, targetEntity] = rel.target.split(".");
89
+ if (!entityRegistry[targetModule]) {
90
+ BLOCKING_ERROR(`Module ${module.code}: references non-existent module "${targetModule}"`);
91
+ }
92
+ sharedEntities.push({
93
+ entity: targetEntity,
94
+ definedIn: targetModule,
95
+ referencedBy: module.code,
96
+ referenceType: rel.type
97
+ });
98
+ }
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ **2c. Detect Circular Dependencies**
105
+
106
+ ```javascript
107
+ const cycles = detectCycles(dependencyGraph);
108
+ if (cycles.length > 0) {
109
+ BLOCKING_ERROR("Circular dependencies detected:");
110
+ for (const cycle of cycles) {
111
+ ERROR(` ${cycle.join(" → ")}`);
112
+ }
113
+ ACTIONS: Review dependencies, move shared entities to Core module, or use event-driven communication
114
+ STOP - DO NOT PROCEED
115
+ }
116
+ ```
117
+
118
+ **2d. Display Cross-Module Interaction Map**
119
+
120
+ ```
121
+ ═══════════════════════════════════════════════════════════════
122
+ CROSS-MODULE INTERACTIONS VALIDATED
123
+ ═══════════════════════════════════════════════════════════════
124
+
125
+ | Source Module | Target | Type | Status |
126
+ |---------------|--------|------|--------|
127
+ | Orders | Customers.Customer | FK (N:1) | ✓ RESOLVED |
128
+ | Invoices | Customers.Customer | FK (N:1) | ✓ RESOLVED |
129
+
130
+ Total: {count} cross-module references
131
+ Shared entities: {count}
132
+ ═══════════════════════════════════════════════════════════════
133
+ ```
134
+
135
+ ### 3. Permission Coherence Check
136
+
137
+ Load permissions from all modules and validate:
138
+
139
+ ```javascript
140
+ const allRoles = {};
141
+ const permissionPaths = [];
142
+
143
+ for (const module of completedModules) {
144
+ for (const perm of module.permissions) {
145
+ // Verify path format: {app}.{module}.{action} or {app}.{module}.{section}.{action}
146
+ if (!perm.path.match(/^[A-Za-z]+\.[A-Za-z]+\.[A-Za-z]+(\.[A-Za-z]+)?$/)) {
147
+ ERROR(`Invalid permission path: "${perm.path}"`);
148
+ }
149
+
150
+ // Verify role exists in cadrage.applicationRoles
151
+ if (!cadrage.applicationRoles.find(r => r.role === perm.role)) {
152
+ WARNING(`Permission assigned to undefined role: ${perm.role}`);
153
+ }
154
+
155
+ permissionPaths.push(perm);
156
+ }
157
+ }
158
+
159
+ // Verify role hierarchy: Admin ⊃ Manager ⊃ Contributor ⊃ Viewer
160
+ const hierarchy = ["Admin", "Manager", "Contributor", "Viewer"];
161
+ // For each admin permission, verify manager/contributor/viewer exist with same path
162
+ ```
163
+
164
+ **3a. Role Consistency** — All modules use same applicationRoles ✓
165
+
166
+ **3b. Permission Path Format** — 3-segment or 4-segment patterns ✓
167
+
168
+ **3c. Role Hierarchy Coherence** — Admin ⊃ Manager ⊃ Contributor ⊃ Viewer ✓
169
+
170
+ **3d. Permission Conflicts** — Present to user via AskUserQuestion if Manager can approve in one module but not another
171
+
172
+ **3e. Permission-Role Coherence** — Verify pattern consistency across modules (store as WARNING if intentional)
173
+
174
+ ### 4. Semantic Validation (MANDATORY)
175
+
176
+ Execute 13 semantic checks per module:
177
+
178
+ ```javascript
179
+ const semanticChecks = [
180
+ { check: "permission-orpheline", severity: "WARNING" },
181
+ { check: "uc-sans-fr", severity: "WARNING" },
182
+ { check: "entity-sans-endpoint", severity: "WARNING" },
183
+ { check: "uc-sans-scenario", severity: "WARNING" },
184
+ { check: "role-sans-permissions", severity: "WARNING" },
185
+ { check: "navigation-sans-traduction", severity: "ERROR" },
186
+ { check: "lifecycle-terminal", severity: "WARNING" },
187
+ { check: "schema-conformity", severity: "ERROR" },
188
+ { check: "wireframe-coverage", severity: "ERROR" },
189
+ { check: "entity-doublon", severity: "ERROR" },
190
+ { check: "permission-fantome", severity: "ERROR" },
191
+ { check: "dashboard-coverage", severity: "WARNING" },
192
+ { check: "permission-uc-alignment", severity: "WARNING" }
193
+ ];
194
+
195
+ for (const module of completedModules) {
196
+ for (const check of semanticChecks) {
197
+ const result = executeSemanticCheck(module, check);
198
+ if (result.status === "ERROR") {
199
+ errors.push({module: module.code, check: check.check, details: result.details});
200
+ } else if (result.status === "WARNING") {
201
+ warnings.push({module: module.code, check: check.check, details: result.details});
202
+ }
203
+ }
204
+ }
205
+
206
+ // Blocking rule: 0 ERROR → PASS, ≥1 ERROR → BLOCK (ask user for each)
207
+ if (errors.length > 0) {
208
+ BLOCKING_ERROR("Semantic validation failed");
209
+ for (const error of errors) {
210
+ ERROR(` [${error.module}] ${error.check}: ${error.details}`);
211
+ }
212
+ STOP - User must fix before proceeding
213
+ }
214
+ ```
215
+
216
+ ### 5. Data Model Consolidation
217
+
218
+ Generate global entity relationship diagram:
219
+
220
+ ```javascript
221
+ const globalEntities = [];
222
+ const globalRelationships = [];
223
+
224
+ for (const module of completedModules) {
225
+ for (const entity of module.entities) {
226
+ globalEntities.push({
227
+ name: entity.name,
228
+ module: module.code,
229
+ attributes: entity.attributes.length,
230
+ pk: entity.pk || "Id"
231
+ });
232
+
233
+ for (const rel of entity.relationships || []) {
234
+ globalRelationships.push({
235
+ sourceEntity: entity.name,
236
+ sourceModule: module.code,
237
+ targetEntity: rel.target.split(".")[1] || rel.target,
238
+ targetModule: rel.target.split(".")[0] || module.code,
239
+ cardinality: rel.cardinality || "N:1",
240
+ cascadeDelete: rel.cascadeDelete || false
241
+ });
242
+ }
243
+ }
244
+ }
245
+
246
+ // Display ERD summary
247
+ Display("Global Entity Count: {count}")
248
+ Display("Global Relationships: {count}")
249
+ ```
250
+
251
+ ### 6. E2E Flow Validation
252
+
253
+ Identify business processes spanning multiple modules:
254
+
255
+ ```javascript
256
+ const e2eFlows = [
257
+ {
258
+ name: "Order to Invoice",
259
+ modules: ["Orders", "Customers", "Invoices"],
260
+ steps: [
261
+ { module: "Orders", action: "Create order", permission: "sales.orders.create", dataFlow: "Customer → Order" },
262
+ { module: "Invoices", action: "Generate invoice", permission: "sales.invoices.create", dataFlow: "Order → Invoice" }
263
+ ]
264
+ }
265
+ ];
266
+
267
+ for (const flow of e2eFlows) {
268
+ // Verify all permissions exist
269
+ // Verify entities in dataFlow are defined
270
+ // Verify module sequence respects dependency graph
271
+ }
272
+ ```
273
+
274
+ Display E2E flows and actors involved.
275
+
276
+ ### 7. Global Risk Assessment
277
+
278
+ Evaluate application-level risks:
279
+
280
+ ```javascript
281
+ const riskMetrics = {
282
+ totalEntities: globalEntities.length,
283
+ totalBRs: completedModules.reduce((sum, m) => sum + (m.rules?.length || 0), 0),
284
+ crossModuleDependencies: dependencyGraph.edges.length,
285
+ sharedEntities: sharedEntities.length,
286
+ maxE2EFlowLength: Math.max(...e2eFlows.map(f => f.steps.length)),
287
+ permissionPaths: permissionPaths.length
288
+ };
289
+
290
+ const risks = [
291
+ riskMetrics.totalEntities > 20 ? {risk: "High entity count", severity: "medium"} : null,
292
+ riskMetrics.totalBRs > 50 ? {risk: "High BR count", severity: "medium"} : null,
293
+ riskMetrics.crossModuleDependencies > 10 ? {risk: "Complex module coupling", severity: "high"} : null,
294
+ riskMetrics.sharedEntities > 5 ? {risk: "Many shared entities", severity: "medium"} : null,
295
+ riskMetrics.maxE2EFlowLength > 8 ? {risk: "Long E2E flow", severity: "medium"} : null
296
+ ].filter(r => r !== null);
297
+ ```
298
+
299
+ ### 8. Consolidation Summary Display
300
+
301
+ ```
302
+ ═══════════════════════════════════════════════════════════════
303
+ CONSOLIDATION SUMMARY - {application_name}
304
+ ═══════════════════════════════════════════════════════════════
305
+
306
+ MODULES ({count})
307
+ | Module | Entities | BRs | UCs | Status |
308
+ |--------|----------|-----|-----|--------|
309
+ {for each module}
310
+
311
+ INTERACTIONS
312
+ - Cross-module references: {count}
313
+ - Shared entities: {count}
314
+ - E2E flows: {count}
315
+ - Circular dependencies: {count}
316
+
317
+ PERMISSIONS
318
+ - Roles: {count} (coherent: ✓)
319
+ - Total paths: {count}
320
+ - Conflicts: {count} (resolved)
321
+
322
+ SEMANTIC CHECKS
323
+ - Errors: {count}
324
+ - Warnings: {count}
325
+ - Pass rate: {percent}%
326
+
327
+ RISKS
328
+ {risk table}
329
+
330
+ ═══════════════════════════════════════════════════════════════
331
+ ```
332
+
333
+ ### 9. Client Approval (BLOCKING)
334
+
335
+ **Single-Module Mode:** Auto-approve (no cross-module concerns)
336
+
337
+ ```
338
+ IF completedModules.length === 1:
339
+ Display: "Module unique - consolidation automatique ✓"
340
+ approval = { approved: true, reason: "Single module", approvedAt: now() }
341
+ SKIP to section 10
342
+ ```
343
+
344
+ **Multi-Module Mode:** Ask via AskUserQuestion:
345
+
346
+ ```
347
+ question: "La consolidation est complète. Validez-vous l'ensemble ?"
348
+ header: "Approbation Finale"
349
+ options:
350
+ - label: "Approuvé"
351
+ description: "Passer au handoff pour la phase d'implémentation"
352
+ - label: "Réviser un module"
353
+ description: "Retourner à la spécification d'un module spécifique"
354
+ - label: "Modifier les interactions"
355
+ description: "Ajuster les interactions cross-module"
356
+
357
+ IF "Réviser un module":
358
+ Ask which module → set currentModuleIndex → load step-03-specify.md
359
+
360
+ IF "Modifier les interactions":
361
+ RESTART consolidation (section 2-4)
362
+ ```
363
+
364
+ ### 10. Write Consolidation Data
365
+
366
+ ```javascript
367
+ ba-writer.enrichSection({
368
+ featureId: {feature_id},
369
+ section: "consolidation",
370
+ data: {
371
+ crossModuleInteractions: globalRelationships.map(rel => ({
372
+ fromModule: rel.sourceModule,
373
+ toModule: rel.targetModule,
374
+ interactionType: "FK-reference|event|shared-lookup",
375
+ description: `${rel.sourceEntity} → ${rel.targetEntity} (${rel.cardinality})`,
376
+ entities: [`${rel.sourceEntity}→${rel.targetEntity}`]
377
+ })),
378
+ sharedEntities: sharedEntities.map(se => ({
379
+ entity: se.entity,
380
+ ownerModule: se.definedIn,
381
+ referencedBy: [se.referencedBy],
382
+ sharedFields: []
383
+ })),
384
+ permissionCoherence: {
385
+ rolesConsistent: true,
386
+ pathFormatConsistent: true,
387
+ hierarchyRespected: true,
388
+ conflicts: [],
389
+ warnings: []
390
+ },
391
+ e2eFlows: e2eFlows,
392
+ globalRiskAssessment: risks,
393
+ semanticChecks: [
394
+ { check: "permission-orpheline", status: "PASS|WARNING", details: "..." }
395
+ ],
396
+ decision: {
397
+ approved: approval.approved,
398
+ reason: approval.reason,
399
+ approvedBy: "Client",
400
+ approvedAt: approval.approvedAt
401
+ }
402
+ }
403
+ });
404
+
405
+ // Add changelog entry
406
+ ba-writer.enrichSection({
407
+ featureId: {feature_id},
408
+ section: "metadata.changelog",
409
+ data: {
410
+ step: "step-04-consolidate",
411
+ timestamp: now(),
412
+ changes: [
413
+ `Cross-module interactions: ${globalRelationships.length} FK references`,
414
+ `Permission coherence: validated (${permissionPaths.length} paths)`,
415
+ `E2E flows: ${e2eFlows.length} identified`,
416
+ `Global risk: ${risks.length > 0 ? 'MEDIUM' : 'LOW'}`,
417
+ `Semantic checks: PASSED`,
418
+ `Client approval: APPROVED`
419
+ ]
420
+ }
421
+ });
422
+
423
+ // Update status
424
+ ba-writer.updateStatus({feature_id}, "consolidated");
425
+
426
+ // Save workflow state for resume support
427
+ ba-writer.enrichSection({
428
+ featureId: {feature_id},
429
+ section: "metadata.workflow",
430
+ data: {
431
+ lastCompletedStep: "step-04-consolidate",
432
+ readyForHandoff: true
433
+ }
434
+ });
435
+ ```
436
+
437
+ ### 11. Summary & Proceed
438
+
439
+ Display final summary:
440
+
441
+ ```
442
+ ✓ Consolidation completed
443
+ ✓ All validations passed
444
+ ✓ Client approval obtained
445
+ ✓ Status: consolidated
446
+ → Proceeding to step-05-deploy.md
447
+ ```
448
+
449
+ ---
450
+
451
+ ## CONTEXT MANAGEMENT
452
+
453
+ | Loaded | Not Loaded |
454
+ |--------|------------|
455
+ | _shared.md | Full module JSON files |
456
+ | Module summaries | Questionnaires |
457
+ | cadrage.json | Templates |
458
+ | Granular JSON files via index.json | React viewer files |
459
+ | dependencyGraph | |
460
+
461
+ ---
462
+
463
+ ## SUCCESS CRITERIA
464
+
465
+ - ✓ All cross-module references resolved
466
+ - ✓ No circular dependencies
467
+ - ✓ Permission coherence validated
468
+ - ✓ Semantic checks: 0 errors
469
+ - ✓ Client approval obtained (or auto-approved for single module)
470
+ - ✓ Consolidation section written to validation.json
471
+ - ✓ Status updated to "consolidated"
472
+ - ✓ Workflow state saved for resume support
473
+
474
+ ---
475
+
476
+ ## NEXT STEP
477
+
478
+ Load: `./step-05-deploy.md`