@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.
- package/package.json +1 -1
- package/templates/agents/ba-reader.md +86 -80
- package/templates/agents/ba-writer.md +318 -415
- package/templates/agents/docs-context-reader.md +3 -3
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -0
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -0
- package/templates/skills/apex/SKILL.md +29 -16
- package/templates/skills/apex/_shared.md +62 -9
- package/templates/skills/apex/references/analysis-methods.md +8 -6
- package/templates/skills/apex/references/challenge-questions.md +5 -5
- package/templates/skills/apex/references/core-seed-data.md +68 -45
- package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +26 -21
- package/templates/skills/apex/references/parallel-execution.md +156 -0
- package/templates/skills/apex/references/person-extension-pattern.md +12 -12
- package/templates/skills/apex/references/post-checks.md +1748 -1726
- package/templates/skills/apex/references/smartstack-api.md +63 -57
- package/templates/skills/apex/references/smartstack-frontend-compliance.md +594 -0
- package/templates/skills/apex/references/smartstack-frontend.md +1246 -1842
- package/templates/skills/apex/references/smartstack-layers.md +98 -145
- package/templates/skills/apex/steps/step-00-init.md +30 -6
- package/templates/skills/apex/steps/step-01-analyze.md +27 -23
- package/templates/skills/apex/steps/step-02-plan.md +12 -12
- package/templates/skills/apex/steps/step-03-execute.md +198 -143
- package/templates/skills/apex/steps/step-04-examine.md +24 -93
- package/templates/skills/apex/steps/step-05-deep-review.md +16 -16
- package/templates/skills/apex/steps/step-06-resolve.md +9 -9
- package/templates/skills/apex/steps/step-07-tests.md +3 -1
- package/templates/skills/apex/steps/step-08-run-tests.md +1 -1
- package/templates/skills/business-analyse/SKILL.md +182 -301
- package/templates/skills/business-analyse/_shared.md +119 -336
- package/templates/skills/business-analyse/html/ba-interactive.html +706 -85
- package/templates/skills/business-analyse/html/build-html.js +41 -3
- package/templates/skills/business-analyse/html/src/partials/cadrage-context.html +34 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-risks.html +48 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-scope.html +49 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-stakeholders.html +55 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-success.html +34 -0
- package/templates/skills/business-analyse/html/src/partials/consol-datamodel.html +8 -0
- package/templates/skills/business-analyse/html/src/partials/consol-flows.html +29 -0
- package/templates/skills/business-analyse/html/src/partials/consol-interactions.html +8 -0
- package/templates/skills/business-analyse/html/src/partials/consol-permissions.html +8 -0
- package/templates/skills/business-analyse/html/src/partials/decomp-dependencies.html +38 -0
- package/templates/skills/business-analyse/html/src/partials/decomp-modules.html +51 -0
- package/templates/skills/business-analyse/html/src/partials/handoff-summary.html +24 -0
- package/templates/skills/business-analyse/html/src/partials/module-spec-container.html +4 -0
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +17 -1
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +32 -6
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +100 -63
- package/templates/skills/business-analyse/html/src/scripts/06-render-mockups.js +372 -0
- package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +1 -1
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +41 -13
- package/templates/skills/business-analyse/html/src/styles/09-mockups-html.css +136 -0
- package/templates/skills/business-analyse/html/src/template.html +1 -1
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +7 -5
- package/templates/skills/business-analyse/questionnaire/01-context.md +11 -157
- package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +101 -0
- package/templates/skills/business-analyse/questionnaire/03-data-ui.md +92 -0
- package/templates/skills/business-analyse/questionnaire/04-risks-metrics.md +6 -0
- package/templates/skills/business-analyse/questionnaire/05-cross-module.md +69 -0
- package/templates/skills/business-analyse/questionnaire.md +22 -280
- package/templates/skills/business-analyse/react/application-viewer.md +2 -2
- package/templates/skills/business-analyse/react/components.md +4 -4
- package/templates/skills/business-analyse/react/i18n-template.md +1 -1
- package/templates/skills/business-analyse/react/schema.md +14 -14
- package/templates/skills/business-analyse/references/acceptance-criteria.md +21 -21
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +3 -3
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +1 -1
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +5 -5
- package/templates/skills/business-analyse/references/deploy-data-build.md +12 -11
- package/templates/skills/business-analyse/references/deploy-modes.md +10 -10
- package/templates/skills/business-analyse/references/detection-strategies.md +6 -6
- package/templates/skills/business-analyse/references/html-data-mapping.md +15 -15
- package/templates/skills/business-analyse/references/naming-conventions.md +4 -4
- package/templates/skills/business-analyse/references/review-data-mapping.md +29 -29
- package/templates/skills/business-analyse/references/robustness-checks.md +36 -36
- package/templates/skills/business-analyse/references/spec-auto-inference.md +2 -2
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
- package/templates/skills/business-analyse/references/ui-resource-cards.md +1 -1
- package/templates/skills/business-analyse/references/validation-checklist.md +3 -3
- package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +2 -2
- package/templates/skills/business-analyse/schemas/application-schema.json +8 -8
- package/templates/skills/business-analyse/schemas/feature-schema.json +3 -3
- package/templates/skills/business-analyse/schemas/index-schema.json +47 -0
- package/templates/skills/business-analyse/schemas/project-schema.json +6 -6
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +1 -1
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +5 -3
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +4 -4
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +1 -1
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +4 -4
- package/templates/skills/business-analyse/steps/step-00-init.md +68 -77
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +50 -216
- package/templates/skills/business-analyse/steps/step-02-structure.md +175 -0
- package/templates/skills/business-analyse/steps/step-03-specify.md +198 -0
- package/templates/skills/business-analyse/steps/step-04-consolidate.md +478 -0
- package/templates/skills/business-analyse/steps/step-05-deploy.md +220 -0
- package/templates/skills/business-analyse/steps/step-06-review.md +51 -69
- package/templates/skills/business-analyse/templates/tpl-frd.md +1 -1
- package/templates/skills/business-analyse/templates/tpl-handoff.md +20 -17
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +2 -2
- package/templates/skills/business-analyse/templates-react.md +2 -2
- package/templates/skills/derive-prd/SKILL.md +92 -0
- package/templates/skills/derive-prd/references/acceptance-criteria.md +169 -0
- package/templates/skills/derive-prd/references/entity-domain-mapping.md +115 -0
- package/templates/skills/{business-analyse → derive-prd}/references/handoff-file-templates.md +131 -120
- package/templates/skills/{business-analyse → derive-prd}/references/handoff-mappings.md +95 -95
- package/templates/skills/{business-analyse → derive-prd}/references/handoff-seeddata-generation.md +312 -312
- package/templates/skills/{business-analyse → derive-prd}/references/prd-generation.md +262 -263
- package/templates/skills/derive-prd/references/readiness-scoring.md +104 -0
- package/templates/skills/derive-prd/schemas/handoff-schema.json +95 -0
- package/templates/skills/derive-prd/steps/step-00-validate.md +130 -0
- package/templates/skills/derive-prd/steps/step-01-transform.md +206 -0
- package/templates/skills/derive-prd/steps/step-02-export.md +181 -0
- package/templates/skills/{business-analyse → derive-prd}/templates/tpl-progress.md +172 -172
- package/templates/skills/documentation/SKILL.md +7 -0
- package/templates/skills/ralph-loop/SKILL.md +2 -1
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +1 -1
- package/templates/skills/ralph-loop/steps/step-01-task.md +2 -2
- package/templates/skills/apex/references/agent-teams-protocol.md +0 -203
- package/templates/skills/business-analyse/_architecture.md +0 -124
- package/templates/skills/business-analyse/_elicitation.md +0 -206
- package/templates/skills/business-analyse/_module-loop.md +0 -115
- package/templates/skills/business-analyse/_rules.md +0 -142
- package/templates/skills/business-analyse/_suggestions.md +0 -34
- package/templates/skills/business-analyse/questionnaire/00-application.md +0 -160
- package/templates/skills/business-analyse/questionnaire/00b-project.md +0 -85
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +0 -189
- package/templates/skills/business-analyse/questionnaire/03-scope.md +0 -164
- package/templates/skills/business-analyse/questionnaire/04-data.md +0 -88
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +0 -58
- package/templates/skills/business-analyse/questionnaire/06-security.md +0 -68
- package/templates/skills/business-analyse/questionnaire/07-ui.md +0 -76
- package/templates/skills/business-analyse/questionnaire/08-performance.md +0 -42
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +0 -45
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +0 -58
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +0 -59
- package/templates/skills/business-analyse/questionnaire/12-migration.md +0 -58
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +0 -69
- package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +0 -135
- package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +0 -136
- package/templates/skills/business-analyse/references/agent-module-prompt.md +0 -366
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +0 -557
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +0 -566
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +0 -41
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +0 -74
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +0 -115
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +0 -68
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +0 -85
- package/templates/skills/business-analyse/references/team-orchestration.md +0 -1093
- package/templates/skills/business-analyse/references/validate-incremental-html.md +0 -121
- package/templates/skills/business-analyse/steps/step-01b-applications.md +0 -419
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +0 -387
- package/templates/skills/business-analyse/steps/step-03a-data.md +0 -16
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +0 -486
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +0 -300
- package/templates/skills/business-analyse/steps/step-03b-ui.md +0 -405
- package/templates/skills/business-analyse/steps/step-03c-compile.md +0 -516
- package/templates/skills/business-analyse/steps/step-03d-validate.md +0 -691
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +0 -17
- package/templates/skills/business-analyse/steps/step-04a-collect.md +0 -415
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +0 -163
- package/templates/skills/business-analyse/steps/step-04c-decide.md +0 -186
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +0 -937
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +0 -522
- 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`
|