@atlashub/smartstack-cli 3.5.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/business-analyse/SKILL.md +26 -15
- package/templates/skills/business-analyse/_architecture.md +1 -1
- package/templates/skills/business-analyse/_elicitation.md +1 -1
- package/templates/skills/business-analyse/_module-loop.md +4 -4
- package/templates/skills/business-analyse/html/ba-interactive.html +39 -10
- package/templates/skills/business-analyse/questionnaire/06-security.md +1 -1
- package/templates/skills/business-analyse/questionnaire.md +2 -2
- package/templates/skills/business-analyse/react/components.md +1 -1
- package/templates/skills/business-analyse/react/schema.md +1 -1
- package/templates/skills/business-analyse/references/html-data-mapping.md +4 -3
- package/templates/skills/business-analyse/schemas/feature-schema.json +1 -1
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +1 -1
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +1 -0
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +1 -1
- package/templates/skills/business-analyse/steps/step-00-init.md +29 -0
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +166 -6
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +4 -4
- package/templates/skills/business-analyse/steps/{step-03a-specify.md → step-03a-data.md} +10 -359
- package/templates/skills/business-analyse/steps/step-03b-ui.md +414 -0
- package/templates/skills/business-analyse/steps/step-03c-compile.md +343 -0
- package/templates/skills/business-analyse/steps/{step-03b-compile.md → step-03d-validate.md} +26 -308
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +2 -2
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +49 -292
- package/templates/skills/business-analyse/steps/step-05b-mapping.md +302 -0
- package/templates/skills/business-analyse/steps/step-05c-deploy.md +296 -0
- package/templates/skills/business-analyse/steps/step-05d-html.md +326 -0
- package/templates/skills/business-analyse/templates/tpl-frd.md +1 -1
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +1 -1
- package/templates/skills/business-analyse/templates/tpl-progress.md +1 -1
- package/templates/skills/controller/steps/step-03-generate.md +2 -1
- package/templates/skills/ralph-loop/SKILL.md +17 -2
- package/templates/skills/ralph-loop/references/core-seed-data.md +538 -0
- package/templates/skills/ralph-loop/steps/step-00-init.md +2 -0
- package/templates/skills/ralph-loop/steps/step-01-task.md +25 -2
- package/templates/skills/ralph-loop/steps/step-02-execute.md +39 -15
- package/templates/skills/ralph-loop/steps/step-04-check.md +87 -4
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +0 -475
package/templates/skills/business-analyse/steps/{step-03b-compile.md → step-03d-validate.md}
RENAMED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: step-
|
|
3
|
-
description:
|
|
4
|
-
model:
|
|
5
|
-
next_step: steps/step-03a-
|
|
2
|
+
name: step-03d-validate
|
|
3
|
+
description: Per-module validation, write feature.json, incremental HTML deploy, loop decision
|
|
4
|
+
model: sonnet
|
|
5
|
+
next_step: steps/step-03a-data.md OR steps/step-04-consolidation.md (conditional)
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
> **Context files:** `_shared.md` | `_module-loop.md`
|
|
9
9
|
|
|
10
|
-
# Step
|
|
10
|
+
# Step 3d: Validation & Loop
|
|
11
11
|
|
|
12
12
|
## MANDATORY EXECUTION RULES
|
|
13
13
|
|
|
14
14
|
- ALWAYS use ULTRATHINK mode
|
|
15
|
-
- This step
|
|
16
|
-
- ALWAYS
|
|
15
|
+
- This step VALIDATES the specification from step-03c, writes it to feature.json, and decides loop continuation
|
|
16
|
+
- ALWAYS verify specification completeness before writing
|
|
17
17
|
- ALL communication in `{language}`
|
|
18
|
-
- NEVER skip per-module validation
|
|
19
18
|
- **ID NAMING RULE (MANDATORY, NO EXCEPTION):**
|
|
20
19
|
All IDs MUST include a module prefix to guarantee application-wide uniqueness.
|
|
21
20
|
The prefix is derived from the module code initials (2-4 chars):
|
|
@@ -23,302 +22,16 @@ next_step: steps/step-03a-specify.md OR steps/step-04-consolidation.md (conditio
|
|
|
23
22
|
RepairManagement → RM | MaintenanceSchedule → MS | DataSync → DS
|
|
24
23
|
Notifications → NT | Dashboard → DB | Orders → OR | Customers → CU
|
|
25
24
|
|
|
26
|
-
Patterns:
|
|
27
|
-
UC-{PREFIX}-{NNN} → UC-RM-001, UC-PI-003
|
|
28
|
-
BR-{CAT}-{PREFIX}-{NNN} → BR-VAL-RM-001, BR-CALC-PI-002
|
|
29
|
-
FR-{PREFIX}-{NNN} → FR-RM-001
|
|
30
|
-
OBJ-{PREFIX}-{NNN} → OBJ-RM-001
|
|
31
|
-
AC-{PREFIX}-{NNN} → AC-RM-001
|
|
32
|
-
RISK-{PREFIX}-{NNN} → RISK-RM-001
|
|
33
|
-
|
|
34
25
|
NEVER use bare IDs (UC-001, BR-VAL-001) in multi-module mode.
|
|
35
|
-
- **SCHEMA CONFORMITY RULE:**
|
|
36
|
-
ALL data MUST fit within the defined feature-schema.json structure.
|
|
37
|
-
NEVER create custom top-level fields (KPIDefinitions, ChartConfigurations, etc.)
|
|
38
|
-
Dashboard modules MUST use specification.dashboards[] (it exists in the schema).
|
|
39
|
-
If truly needed, use specification.extensions: {} (additionalProperties: true).
|
|
40
26
|
|
|
41
27
|
## YOUR TASK
|
|
42
28
|
|
|
43
|
-
|
|
29
|
+
Validate the module specification for completeness and consistency, write to feature.json, deploy incremental HTML, and decide whether to loop to the next module or proceed to consolidation.
|
|
44
30
|
|
|
45
31
|
---
|
|
46
32
|
|
|
47
|
-
### 8. Full Specification
|
|
48
|
-
|
|
49
|
-
Generate the complete specification for this module. **Each subsection below includes a STRUCTURE CARD showing the EXACT JSON format. Follow them precisely.**
|
|
50
|
-
|
|
51
|
-
#### 8a. Actors
|
|
52
|
-
|
|
53
|
-
Inherited from application roles → mapped to module permissions.
|
|
54
|
-
|
|
55
|
-
> **STRUCTURE CARD: specification.actors[]**
|
|
56
|
-
> ```json
|
|
57
|
-
> {
|
|
58
|
-
> "role": "Sales Manager",
|
|
59
|
-
> "description": "Creates and approves orders",
|
|
60
|
-
> "permissions": [
|
|
61
|
-
> "business.{app}.{module}.read",
|
|
62
|
-
> "business.{app}.{module}.create",
|
|
63
|
-
> "business.{app}.{module}.update"
|
|
64
|
-
> ]
|
|
65
|
-
> }
|
|
66
|
-
> ```
|
|
67
|
-
> **MANDATORY fields:** `role`, `permissions` (array of permission paths)
|
|
68
|
-
> **FORBIDDEN fields:** Do NOT use `systemRole`. Use `permissions` array.
|
|
69
|
-
|
|
70
|
-
#### 8b. Use Cases (UC-{PREFIX}-NNN)
|
|
71
|
-
|
|
72
|
-
Per section: list, create, read, update, delete, approve, etc.
|
|
73
|
-
|
|
74
|
-
> **STRUCTURE CARD: specification.useCases[]**
|
|
75
|
-
> ```json
|
|
76
|
-
> {
|
|
77
|
-
> "id": "UC-{PREFIX}-001",
|
|
78
|
-
> "name": "Create Order",
|
|
79
|
-
> "primaryActor": "Sales Representative",
|
|
80
|
-
> "permission": "business.{app}.{module}.create",
|
|
81
|
-
> "preconditions": ["Customer exists", "Products in stock"],
|
|
82
|
-
> "postconditions": ["Order created with Draft status"],
|
|
83
|
-
> "mainScenario": [
|
|
84
|
-
> "1. User navigates to creation form",
|
|
85
|
-
> "2. User fills in required fields",
|
|
86
|
-
> "3. System validates data (BR-VAL-{PREFIX}-001)",
|
|
87
|
-
> "4. System creates the record",
|
|
88
|
-
> "5. System displays confirmation"
|
|
89
|
-
> ],
|
|
90
|
-
> "alternativeScenarios": [
|
|
91
|
-
> { "name": "Validation failure", "steps": ["1. System detects invalid data", "2. System highlights errors"] }
|
|
92
|
-
> ],
|
|
93
|
-
> "errorScenarios": [
|
|
94
|
-
> { "name": "Server error", "steps": ["1. System shows error message", "2. Data preserved for retry"] }
|
|
95
|
-
> ],
|
|
96
|
-
> "linkedRules": ["BR-VAL-{PREFIX}-001", "BR-WF-{PREFIX}-002"]
|
|
97
|
-
> }
|
|
98
|
-
> ```
|
|
99
|
-
> **MANDATORY fields:** `id`, `name`, `primaryActor`, `permission`, `mainScenario`, `linkedRules`
|
|
100
|
-
> **FORBIDDEN fields:** Do NOT use `actor` (use `primaryActor`), `linkedBRs` (use `linkedRules`), `linkedFRs` (not in UC, FRs link to UCs instead)
|
|
101
|
-
|
|
102
|
-
#### 8c. Functional Requirements (FR-{PREFIX}-NNN)
|
|
103
|
-
|
|
104
|
-
Linked to BRs and UCs.
|
|
105
|
-
|
|
106
|
-
> **STRUCTURE CARD: specification.functionalRequirements[]**
|
|
107
|
-
> ```json
|
|
108
|
-
> {
|
|
109
|
-
> "id": "FR-{PREFIX}-001",
|
|
110
|
-
> "statement": "System MUST validate customer budget before order creation",
|
|
111
|
-
> "priority": "must|should|could",
|
|
112
|
-
> "linkedRules": ["BR-VAL-{PREFIX}-001"],
|
|
113
|
-
> "linkedUseCases": ["UC-{PREFIX}-001"],
|
|
114
|
-
> "acceptanceCriteria": [
|
|
115
|
-
> "Order rejected if total > budget",
|
|
116
|
-
> "Error message displayed with remaining budget"
|
|
117
|
-
> ]
|
|
118
|
-
> }
|
|
119
|
-
> ```
|
|
120
|
-
> **MANDATORY fields:** `id`, `statement`, `priority`, `linkedUseCases`
|
|
121
|
-
> **FORBIDDEN fields:** Do NOT use `name`/`description` (use `statement` with System MUST/SHOULD/COULD format), `linkedUCs` (use `linkedUseCases`), `linkedBRs` (use `linkedRules`)
|
|
122
|
-
|
|
123
|
-
#### 8d. Permission Matrix
|
|
124
|
-
|
|
125
|
-
Roles × resources × operations with full paths.
|
|
126
|
-
|
|
127
|
-
> **STRUCTURE CARD: specification.permissionMatrix**
|
|
128
|
-
> ```json
|
|
129
|
-
> {
|
|
130
|
-
> "permissions": [
|
|
131
|
-
> { "path": "business.{app}.{module}.read", "action": "read", "description": "View records" },
|
|
132
|
-
> { "path": "business.{app}.{module}.create", "action": "create", "description": "Create new records" },
|
|
133
|
-
> { "path": "business.{app}.{module}.update", "action": "update", "description": "Update existing records" },
|
|
134
|
-
> { "path": "business.{app}.{module}.delete", "action": "delete", "description": "Delete records" },
|
|
135
|
-
> { "path": "business.{app}.{module}.export", "action": "export", "description": "Export data" }
|
|
136
|
-
> ],
|
|
137
|
-
> "roleAssignments": [
|
|
138
|
-
> { "role": "{App} Admin", "permissions": ["business.{app}.{module}.read", "business.{app}.{module}.create", "business.{app}.{module}.update", "business.{app}.{module}.delete", "business.{app}.{module}.export"] },
|
|
139
|
-
> { "role": "{App} Manager", "permissions": ["business.{app}.{module}.read", "business.{app}.{module}.create", "business.{app}.{module}.update"] },
|
|
140
|
-
> { "role": "{App} Viewer", "permissions": ["business.{app}.{module}.read"] }
|
|
141
|
-
> ]
|
|
142
|
-
> }
|
|
143
|
-
> ```
|
|
144
|
-
> **STRUCTURE:** Object with 2 arrays: `permissions[]` and `roleAssignments[]`
|
|
145
|
-
> **FORBIDDEN:** Do NOT use a flat array with `resource`/`roles` fields. Always use the nested structure above.
|
|
146
|
-
|
|
147
|
-
#### 8e. Navigation
|
|
148
|
-
|
|
149
|
-
Module → Sections → Resources (levels 3-4-5 of the hierarchy).
|
|
150
|
-
|
|
151
|
-
> **STRUCTURE CARD: specification.navigation**
|
|
152
|
-
> ```json
|
|
153
|
-
> {
|
|
154
|
-
> "entries": [
|
|
155
|
-
> { "level": "module", "code": "{module}", "labels": {"fr": "...", "en": "..."}, "route": "/business/{app}/{module}", "icon": "list" },
|
|
156
|
-
> { "level": "section", "code": "list", "labels": {"fr": "Liste", "en": "List", "it": "Elenco", "de": "Liste"}, "route": "/business/{app}/{module}/list", "icon": "list" },
|
|
157
|
-
> { "level": "section", "code": "dashboard", "labels": {"fr": "Dashboard", "en": "Dashboard"}, "route": "/business/{app}/{module}/dashboard", "icon": "chart-bar", "isNew": true }
|
|
158
|
-
> ]
|
|
159
|
-
> }
|
|
160
|
-
> ```
|
|
161
|
-
|
|
162
|
-
#### 8f. SeedData Core
|
|
163
|
-
|
|
164
|
-
5 MANDATORY typed arrays — each with structured objects, NOT flat strings or objects.
|
|
165
|
-
|
|
166
|
-
> **STRUCTURE CARD: specification.seedDataCore**
|
|
167
|
-
> ```json
|
|
168
|
-
> {
|
|
169
|
-
> "navigationModules": [
|
|
170
|
-
> { "code": "{module}", "label": "{Module Name}", "icon": "list", "route": "/business/{app}/{module}", "parentCode": "{app}", "sort": 1 }
|
|
171
|
-
> ],
|
|
172
|
-
> "navigationTranslations": [
|
|
173
|
-
> { "moduleCode": "{module}", "language": "fr", "label": "..." },
|
|
174
|
-
> { "moduleCode": "{module}", "language": "en", "label": "..." },
|
|
175
|
-
> { "moduleCode": "{module}", "language": "it", "label": "..." },
|
|
176
|
-
> { "moduleCode": "{module}", "language": "de", "label": "..." }
|
|
177
|
-
> ],
|
|
178
|
-
> "permissions": [
|
|
179
|
-
> { "path": "business.{app}.{module}.read", "action": "read", "description": "View {module}" },
|
|
180
|
-
> { "path": "business.{app}.{module}.create", "action": "create", "description": "Create {module}" }
|
|
181
|
-
> ],
|
|
182
|
-
> "rolePermissions": [
|
|
183
|
-
> { "role": "{App} Admin", "permissionPath": "business.{app}.{module}.*" },
|
|
184
|
-
> { "role": "{App} Manager", "permissionPath": "business.{app}.{module}.read" }
|
|
185
|
-
> ],
|
|
186
|
-
> "permissionConstants": [
|
|
187
|
-
> { "constantName": "{Module}Read", "path": "business.{app}.{module}.read" },
|
|
188
|
-
> { "constantName": "{Module}Create", "path": "business.{app}.{module}.create" }
|
|
189
|
-
> ]
|
|
190
|
-
> }
|
|
191
|
-
> ```
|
|
192
|
-
> **MANDATORY:** All 5 arrays must be present. Each element must be an object, NOT a string.
|
|
193
|
-
> **FORBIDDEN:** Do NOT use `navigationModule` (singular string), `permissions` as flat string array, `rolePermissions` as flat object, `permissionsConstants` as comma-separated string.
|
|
194
|
-
|
|
195
|
-
#### 8g. Gherkin Scenarios
|
|
196
|
-
|
|
197
|
-
BDD acceptance tests per UC.
|
|
198
|
-
|
|
199
|
-
> **STRUCTURE CARD: specification.gherkinScenarios[]**
|
|
200
|
-
> ```json
|
|
201
|
-
> {
|
|
202
|
-
> "feature": "{Module} Management",
|
|
203
|
-
> "scenarios": [
|
|
204
|
-
> {
|
|
205
|
-
> "name": "Create a new record with valid data",
|
|
206
|
-
> "tags": ["@{module}", "@create", "@smoke"],
|
|
207
|
-
> "given": ["An authenticated user with role Manager", "No existing record with code 'TEST-001'"],
|
|
208
|
-
> "when": ["The user fills the creation form", "The user submits the form"],
|
|
209
|
-
> "then": ["The record is created with Draft status", "A success message is displayed"]
|
|
210
|
-
> }
|
|
211
|
-
> ]
|
|
212
|
-
> }
|
|
213
|
-
> ```
|
|
214
|
-
> **STRUCTURE:** Object with `feature` string + `scenarios[]` array. Each scenario has `given`, `when`, `then` as ARRAYS of strings.
|
|
215
|
-
> **FORBIDDEN:** Do NOT use flat arrays of `{uc, scenario, given, when, then}` where given/when/then are single strings.
|
|
216
|
-
|
|
217
|
-
#### 8h. Validations
|
|
218
|
-
|
|
219
|
-
Field validation rules per entity.
|
|
220
|
-
|
|
221
|
-
> **STRUCTURE CARD: specification.validations[]**
|
|
222
|
-
> ```json
|
|
223
|
-
> {
|
|
224
|
-
> "entity": "Order",
|
|
225
|
-
> "field": "amount",
|
|
226
|
-
> "rules": ["required", "decimal", "min:0.01", "max:999999.99"],
|
|
227
|
-
> "errorMessageKey": "validation.{module}.amount.invalid"
|
|
228
|
-
> }
|
|
229
|
-
> ```
|
|
230
|
-
> **MANDATORY fields:** `entity`, `field`, `rules` (array), `errorMessageKey`
|
|
231
|
-
> **FORBIDDEN fields:** Do NOT use `rule` (singular string) or `message` (use `errorMessageKey`).
|
|
232
|
-
|
|
233
|
-
#### 8i. Business Messages
|
|
234
|
-
|
|
235
|
-
Minimum 4: success, error CRUD, error validation, error permission.
|
|
236
|
-
|
|
237
|
-
> **STRUCTURE CARD: specification.messages[]**
|
|
238
|
-
> ```json
|
|
239
|
-
> {
|
|
240
|
-
> "code": "{MODULE}-SUCCESS-CREATE",
|
|
241
|
-
> "type": "success|error|warning|info",
|
|
242
|
-
> "title": "Record Created",
|
|
243
|
-
> "message": "The record {code} has been created successfully.",
|
|
244
|
-
> "i18nKey": "message.{module}.created"
|
|
245
|
-
> }
|
|
246
|
-
> ```
|
|
247
|
-
> **MANDATORY fields:** `code`, `type`, `message`, `i18nKey`
|
|
248
|
-
> **FORBIDDEN:** Do NOT omit `title` or `i18nKey`. Every message MUST have an i18n key.
|
|
249
|
-
|
|
250
|
-
#### 8j. Entity Lifecycle
|
|
251
|
-
|
|
252
|
-
State machines for entities with status/state.
|
|
253
|
-
**Note:** If depth = full and 3a-state was executed, lifeCycles are already defined. Verify completeness and add any missing states/transitions.
|
|
254
|
-
|
|
255
|
-
> **STRUCTURE CARD: specification.lifeCycles[]**
|
|
256
|
-
> ```json
|
|
257
|
-
> {
|
|
258
|
-
> "entity": "Order",
|
|
259
|
-
> "field": "status",
|
|
260
|
-
> "initialState": "draft",
|
|
261
|
-
> "states": [
|
|
262
|
-
> { "id": "draft", "displayName": "Brouillon", "color": "gray", "allowedTransitions": ["submitted"], "isTerminal": false },
|
|
263
|
-
> { "id": "submitted", "displayName": "Soumis", "color": "blue", "allowedTransitions": ["approved", "rejected"], "isTerminal": false },
|
|
264
|
-
> { "id": "approved", "displayName": "Approuvé", "color": "green", "allowedTransitions": ["archived"], "isTerminal": false },
|
|
265
|
-
> { "id": "rejected", "displayName": "Rejeté", "color": "red", "allowedTransitions": [], "isTerminal": true },
|
|
266
|
-
> { "id": "archived", "displayName": "Archivé", "color": "purple", "allowedTransitions": [], "isTerminal": true }
|
|
267
|
-
> ],
|
|
268
|
-
> "transitions": [
|
|
269
|
-
> {
|
|
270
|
-
> "from": "draft", "to": "submitted", "action": "submit",
|
|
271
|
-
> "label": { "fr": "Soumettre", "en": "Submit" },
|
|
272
|
-
> "permission": "business.{app}.{module}.update",
|
|
273
|
-
> "guards": ["BR-VAL-{PREFIX}-001"],
|
|
274
|
-
> "effects": [{ "type": "notification", "target": "role:manager", "template": "{module}-submitted" }],
|
|
275
|
-
> "confirm": true
|
|
276
|
-
> }
|
|
277
|
-
> ]
|
|
278
|
-
> }
|
|
279
|
-
> ```
|
|
280
|
-
> **MANDATORY:** `states` MUST be an array of OBJECTS with `id`, `displayName`, `color`, `allowedTransitions`, `isTerminal`. NEVER use flat string arrays.
|
|
281
|
-
> **Colors:** gray (draft/new), blue (in-progress), green (active/approved), yellow (warning/pending), orange (review), red (error/rejected), purple (archived/terminal)
|
|
282
|
-
> **FORBIDDEN:** Do NOT use `states: ["Active", "Inactive"]` (flat strings), `terminalStates` (use `isTerminal: true` on each state).
|
|
283
|
-
|
|
284
|
-
#### 8k. API Endpoints
|
|
285
|
-
|
|
286
|
-
RESTful routes following SmartStack patterns.
|
|
287
|
-
|
|
288
|
-
> **STRUCTURE CARD: specification.apiEndpoints[]**
|
|
289
|
-
> ```json
|
|
290
|
-
> {
|
|
291
|
-
> "method": "GET|POST|PUT|PATCH|DELETE",
|
|
292
|
-
> "path": "/api/business/{app}/{module}",
|
|
293
|
-
> "permission": "business.{app}.{module}.read",
|
|
294
|
-
> "requestDto": "Get{Module}Query",
|
|
295
|
-
> "responseDto": "{Module}Dto[]",
|
|
296
|
-
> "description": "List all records with pagination and filters"
|
|
297
|
-
> }
|
|
298
|
-
> ```
|
|
299
|
-
> **MANDATORY fields:** `method`, `path`, `permission`, `description`
|
|
300
|
-
> **Recommended:** Include `requestDto` and `responseDto` for implementation clarity.
|
|
301
|
-
|
|
302
|
-
#### 8l. i18n Keys
|
|
303
|
-
|
|
304
|
-
Translation keys for all UI text (4 languages: fr, en, it, de).
|
|
305
|
-
|
|
306
|
-
> **STRUCTURE CARD: specification.i18nKeys**
|
|
307
|
-
> ```json
|
|
308
|
-
> {
|
|
309
|
-
> "title": { "fr": "{Module}", "en": "{Module}", "it": "{Module}", "de": "{Module}" },
|
|
310
|
-
> "list": { "title": { "fr": "Liste", "en": "List" }, "empty": { "fr": "Aucun enregistrement", "en": "No records" } },
|
|
311
|
-
> "create": { "title": { "fr": "Nouveau", "en": "New" } },
|
|
312
|
-
> "detail": { "title": { "fr": "Détail", "en": "Detail" } },
|
|
313
|
-
> "buttons": { "create": { "fr": "Créer", "en": "Create" }, "edit": { "fr": "Modifier", "en": "Edit" }, "delete": { "fr": "Supprimer", "en": "Delete" } },
|
|
314
|
-
> "validation": { "required": { "fr": "Ce champ est requis", "en": "This field is required" } }
|
|
315
|
-
> }
|
|
316
|
-
> ```
|
|
317
|
-
|
|
318
33
|
### 9. Per-Module Validation
|
|
319
34
|
|
|
320
|
-
> **Fused from old step-03-validate.md, run INLINE after specification.**
|
|
321
|
-
|
|
322
35
|
#### 9a. Completeness Checks
|
|
323
36
|
|
|
324
37
|
| Section | Minimum | Status |
|
|
@@ -413,6 +126,8 @@ ba-writer.enrichSection({
|
|
|
413
126
|
})
|
|
414
127
|
```
|
|
415
128
|
|
|
129
|
+
---
|
|
130
|
+
|
|
416
131
|
### 10. Module Summary with Roles & Permissions
|
|
417
132
|
|
|
418
133
|
Display comprehensive summary:
|
|
@@ -458,6 +173,8 @@ options:
|
|
|
458
173
|
description: "Modifier des éléments du module"
|
|
459
174
|
```
|
|
460
175
|
|
|
176
|
+
---
|
|
177
|
+
|
|
461
178
|
### 11. Write Module Feature.json
|
|
462
179
|
|
|
463
180
|
```
|
|
@@ -506,6 +223,8 @@ ba-writer.updateStatus({module_feature_id}, "specified")
|
|
|
506
223
|
ba-writer.updateModuleStatus({feature_id}, {currentModule.code}, "specified")
|
|
507
224
|
```
|
|
508
225
|
|
|
226
|
+
---
|
|
227
|
+
|
|
509
228
|
### 11-bis. Deploy Incremental Interactive HTML (MANDATORY)
|
|
510
229
|
|
|
511
230
|
> **After each module is specified, deploy/update the interactive HTML document with all available data.**
|
|
@@ -525,7 +244,7 @@ ba-writer.updateModuleStatus({feature_id}, {currentModule.code}, "specified")
|
|
|
525
244
|
|
|
526
245
|
2. **Build FEATURE_DATA object:**
|
|
527
246
|
|
|
528
|
-
> **Use the EXACT SAME mapping defined in step-
|
|
247
|
+
> **Use the EXACT SAME mapping defined in step-05d-html.md and references/html-data-mapping.md.**
|
|
529
248
|
> The mapping is identical — the only difference is that `moduleSpecs` only includes completed modules.
|
|
530
249
|
> Modules not yet specified will NOT appear in `moduleSpecs` (their entry in `modules[]` will show `status: "pending"`).
|
|
531
250
|
|
|
@@ -572,7 +291,7 @@ ba-writer.advanceModuleLoop({feature_id})
|
|
|
572
291
|
|
|
573
292
|
IF currentModuleIndex < moduleOrder.length:
|
|
574
293
|
Display: "→ Module suivant: {nextModule} ({currentModuleIndex + 1}/{total})"
|
|
575
|
-
Load: steps/step-03a-
|
|
294
|
+
Load: steps/step-03a-data.md
|
|
576
295
|
|
|
577
296
|
IF currentModuleIndex >= moduleOrder.length:
|
|
578
297
|
Display: "═══ Tous les modules spécifiés! Passage à la consolidation... ═══"
|
|
@@ -599,7 +318,7 @@ Before proceeding to step-03a (next module) or step-04 (consolidation), VERIFY:
|
|
|
599
318
|
|
|
600
319
|
When only 1 module in moduleOrder:
|
|
601
320
|
|
|
602
|
-
- Same full
|
|
321
|
+
- Same full validation flow
|
|
603
322
|
- Skip cross-module references (section 5)
|
|
604
323
|
- After validation → direct to step-04-consolidation.md (auto-consolidation)
|
|
605
324
|
|
|
@@ -642,21 +361,20 @@ Read metadata.workflow.currentModule
|
|
|
642
361
|
|
|
643
362
|
## SUCCESS METRICS
|
|
644
363
|
|
|
645
|
-
-
|
|
646
|
-
-
|
|
647
|
-
- Entities defined with business attributes
|
|
648
|
-
- Business rules extracted and categorized
|
|
649
|
-
- Per-module validation PASS
|
|
364
|
+
- Module specification validation PASS
|
|
365
|
+
- Per-module validation results recorded in feature.json
|
|
650
366
|
- Client confirmed module specification
|
|
651
|
-
- Module feature.json written
|
|
367
|
+
- Module feature.json written with all sections
|
|
652
368
|
- Master updated with module status
|
|
653
|
-
-
|
|
654
|
-
- Loop advanced correctly
|
|
369
|
+
- Interactive HTML deployed/updated with completed module data (incremental)
|
|
370
|
+
- Loop advanced correctly or consolidation phase initiated
|
|
371
|
+
|
|
372
|
+
---
|
|
655
373
|
|
|
656
374
|
## FAILURE MODES
|
|
657
375
|
|
|
658
376
|
- Validation FAIL → offer auto-correct / manual revise / force
|
|
659
|
-
- Client rejects → revise specific sections
|
|
377
|
+
- Client rejects → revise specific sections via step-03a or step-03b
|
|
660
378
|
- Cross-module reference error → clarify with client
|
|
661
379
|
- Interruption → resumable via workflow state
|
|
662
380
|
|
|
@@ -666,5 +384,5 @@ Read metadata.workflow.currentModule
|
|
|
666
384
|
|
|
667
385
|
Conditional:
|
|
668
386
|
|
|
669
|
-
- IF modules remaining → Load `steps/step-03a-
|
|
387
|
+
- IF modules remaining → Load `steps/step-03a-data.md`
|
|
670
388
|
- IF all modules done → Load `steps/step-04-consolidation.md`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: step-04-consolidation
|
|
3
3
|
description: Cross-module consolidation - interactions, permission coherence, E2E flows, final approval
|
|
4
|
-
model:
|
|
4
|
+
model: opus
|
|
5
5
|
next_step: steps/step-05a-handoff.md
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -412,7 +412,7 @@ options:
|
|
|
412
412
|
```
|
|
413
413
|
|
|
414
414
|
IF "Réviser un module":
|
|
415
|
-
Ask which module → set currentModuleIndex to that module → load step-03a-
|
|
415
|
+
Ask which module → set currentModuleIndex to that module → load step-03a-data.md
|
|
416
416
|
|
|
417
417
|
IF "Modifier les interactions":
|
|
418
418
|
Re-enter section 2-4 of this step
|