@atlashub/smartstack-cli 3.8.0 → 3.9.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 +365 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/templates/agents/action.md +1 -0
- package/templates/agents/ba-writer.md +33 -0
- package/templates/agents/explore-codebase.md +1 -0
- package/templates/agents/explore-docs.md +1 -0
- package/templates/agents/fix-grammar.md +1 -0
- package/templates/agents/snipper.md +1 -0
- package/templates/skills/admin/SKILL.md +6 -0
- package/templates/skills/ai-prompt/SKILL.md +32 -136
- package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -0
- package/templates/skills/apex/SKILL.md +120 -0
- package/templates/skills/apex/_shared.md +86 -0
- package/templates/skills/apex/references/agent-teams-protocol.md +164 -0
- package/templates/skills/apex/references/smartstack-layers.md +173 -0
- package/templates/skills/apex/steps/step-00-init.md +156 -0
- package/templates/skills/apex/steps/step-01-analyze.md +169 -0
- package/templates/skills/apex/steps/step-02-plan.md +160 -0
- package/templates/skills/apex/steps/step-03-execute.md +166 -0
- package/templates/skills/apex/steps/step-04-validate.md +138 -0
- package/templates/skills/apex/steps/step-05-examine.md +124 -0
- package/templates/skills/apex/steps/step-06-resolve.md +105 -0
- package/templates/skills/apex/steps/step-07-tests.md +130 -0
- package/templates/skills/apex/steps/step-08-run-tests.md +115 -0
- package/templates/skills/application/SKILL.md +10 -0
- package/templates/skills/application/references/backend-controller-hierarchy.md +58 -0
- package/templates/skills/application/references/backend-entity-seeding.md +72 -0
- package/templates/skills/application/references/backend-verification.md +88 -0
- package/templates/skills/application/references/frontend-verification.md +111 -0
- package/templates/skills/application/references/nav-fallback-procedure.md +200 -0
- package/templates/skills/application/references/provider-template.md +134 -0
- package/templates/skills/application/references/test-frontend.md +73 -0
- package/templates/skills/application/references/test-prerequisites.md +72 -0
- package/templates/skills/application/steps/step-01-navigation.md +7 -198
- package/templates/skills/application/steps/step-03b-provider.md +4 -128
- package/templates/skills/application/steps/step-04-backend.md +20 -350
- package/templates/skills/application/steps/step-05-frontend.md +12 -101
- package/templates/skills/application/steps/step-07-tests.md +12 -132
- package/templates/skills/business-analyse/SKILL.md +11 -2
- package/templates/skills/business-analyse/html/ba-interactive.html +176 -14
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +1 -0
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +16 -4
- package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +7 -2
- package/templates/skills/business-analyse/html/src/scripts/09-export.js +103 -0
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +12 -6
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +24 -2
- package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +12 -0
- package/templates/skills/business-analyse/html/src/template.html +1 -0
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +78 -0
- package/templates/skills/business-analyse/references/cadrage-vibe-coding.md +97 -0
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +92 -0
- package/templates/skills/business-analyse/references/deploy-data-build.md +121 -0
- package/templates/skills/business-analyse/references/deploy-modes.md +49 -0
- package/templates/skills/business-analyse/references/handoff-file-templates.md +119 -0
- package/templates/skills/business-analyse/references/handoff-mappings.md +81 -0
- package/templates/skills/business-analyse/references/html-data-mapping.md +10 -2
- package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -0
- package/templates/skills/business-analyse/references/review-data-mapping.md +363 -0
- package/templates/skills/business-analyse/references/spec-auto-inference.md +57 -0
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -0
- package/templates/skills/business-analyse/references/ui-resource-cards.md +110 -0
- package/templates/skills/business-analyse/references/validate-incremental-html.md +55 -0
- package/templates/skills/business-analyse/steps/step-00-init.md +35 -68
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +5 -194
- package/templates/skills/business-analyse/steps/step-03a-data.md +6 -49
- package/templates/skills/business-analyse/steps/step-03b-ui.md +12 -178
- package/templates/skills/business-analyse/steps/step-03d-validate.md +3 -48
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +9 -104
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +25 -441
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +19 -187
- package/templates/skills/business-analyse/steps/step-06-review.md +277 -0
- package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -0
- package/templates/skills/cc-agent/steps/step-02-generate.md +5 -78
- package/templates/skills/check-version/SKILL.md +7 -0
- package/templates/skills/controller/references/controller-code-templates.md +159 -0
- package/templates/skills/controller/references/permission-sync-templates.md +152 -0
- package/templates/skills/controller/steps/step-03-generate.md +6 -158
- package/templates/skills/controller/steps/step-04-perms.md +5 -144
- package/templates/skills/debug/SKILL.md +7 -0
- package/templates/skills/explore/SKILL.md +6 -0
- package/templates/skills/feature-full/SKILL.md +39 -142
- package/templates/skills/feature-full/steps/step-01-implementation.md +120 -0
- package/templates/skills/gitflow/references/init-config-template.md +135 -0
- package/templates/skills/gitflow/references/init-name-normalization.md +103 -0
- package/templates/skills/gitflow/references/plan-template.md +69 -0
- package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -0
- package/templates/skills/gitflow/references/start-local-config.md +110 -0
- package/templates/skills/gitflow/steps/step-init.md +18 -289
- package/templates/skills/gitflow/steps/step-plan.md +6 -63
- package/templates/skills/gitflow/steps/step-start.md +16 -126
- package/templates/skills/mcp/SKILL.md +9 -213
- package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -0
- package/templates/skills/mcp/steps/step-02-tools.md +73 -0
- package/templates/skills/notification/SKILL.md +7 -0
- package/templates/skills/quick-search/SKILL.md +5 -0
- package/templates/skills/ralph-loop/SKILL.md +99 -381
- package/templates/skills/ralph-loop/references/category-rules.md +259 -0
- package/templates/skills/ralph-loop/references/compact-loop.md +182 -0
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +259 -0
- package/templates/skills/ralph-loop/references/team-orchestration.md +189 -0
- package/templates/skills/ralph-loop/steps/step-00-init.md +111 -383
- package/templates/skills/ralph-loop/steps/step-01-task.md +79 -896
- package/templates/skills/ralph-loop/steps/step-02-execute.md +68 -680
- package/templates/skills/ralph-loop/steps/step-03-commit.md +47 -277
- package/templates/skills/ralph-loop/steps/step-04-check.md +124 -607
- package/templates/skills/ralph-loop/steps/step-05-report.md +68 -367
- package/templates/skills/refactor/SKILL.md +12 -176
- package/templates/skills/refactor/steps/step-01-discover.md +60 -0
- package/templates/skills/refactor/steps/step-02-execute.md +67 -0
- package/templates/skills/review-code/SKILL.md +19 -257
- package/templates/skills/review-code/steps/step-01-smartstack.md +96 -0
- package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -0
- package/templates/skills/review-code/steps/step-03-react.md +44 -0
- package/templates/skills/ui-components/SKILL.md +7 -0
- package/templates/skills/utils/SKILL.md +6 -0
- package/templates/skills/validate/SKILL.md +6 -0
- package/templates/skills/validate-feature/SKILL.md +8 -0
- package/templates/skills/workflow/SKILL.md +40 -118
- package/templates/skills/workflow/steps/step-01-implementation.md +84 -0
|
@@ -122,72 +122,9 @@ For EACH section confirmed in 3a, build the `specification.sections[]` structure
|
|
|
122
122
|
|
|
123
123
|
4. Build the section object:
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
> "code": "list",
|
|
129
|
-
> "labels": { "fr": "Liste", "en": "List", "it": "Elenco", "de": "Liste" },
|
|
130
|
-
> "route": "/business/{app}/{module}/list",
|
|
131
|
-
> "icon": "list",
|
|
132
|
-
> "permission": "business.{app}.{module}.read",
|
|
133
|
-
> "wireframe": "{module}-list",
|
|
134
|
-
> "useCases": ["UC-{PREFIX}-001", "UC-{PREFIX}-002"],
|
|
135
|
-
> "businessRules": ["BR-VAL-{PREFIX}-001"],
|
|
136
|
-
> "resources": [
|
|
137
|
-
> {
|
|
138
|
-
> "code": "{module}-grid",
|
|
139
|
-
> "type": "SmartTable",
|
|
140
|
-
> "entity": "{MainEntity}",
|
|
141
|
-
> "permission": "business.{app}.{module}.read",
|
|
142
|
-
> "columns": ["name", "status", "createdAt"],
|
|
143
|
-
> "columnDefs": [
|
|
144
|
-
> { "field": "code", "label": {"fr": "Code", "en": "Code"}, "format": "text", "sortable": true, "filterable": true, "clickAction": "navigate:detail" },
|
|
145
|
-
> { "field": "name", "label": {"fr": "Nom", "en": "Name"}, "format": "text", "sortable": true, "filterable": true },
|
|
146
|
-
> { "field": "status", "label": {"fr": "Statut", "en": "Status"}, "format": "badge", "sortable": true, "filterable": true, "colorMap": "stateMachine:{Entity}" },
|
|
147
|
-
> { "field": "createdAt", "label": {"fr": "Créé le", "en": "Created"}, "format": "date-relative", "sortable": true }
|
|
148
|
-
> ],
|
|
149
|
-
> "actions": ["view", "edit", "delete"],
|
|
150
|
-
> "rowActions": [
|
|
151
|
-
> { "action": "view", "icon": "eye", "permission": "business.{app}.{module}.read" },
|
|
152
|
-
> { "action": "edit", "icon": "edit", "permission": "business.{app}.{module}.update", "showWhen": {"status": ["draft"]} },
|
|
153
|
-
> { "action": "delete", "icon": "trash", "permission": "business.{app}.{module}.delete", "confirm": true }
|
|
154
|
-
> ],
|
|
155
|
-
> "filters": ["status", "dateRange"],
|
|
156
|
-
> "defaultSort": { "field": "createdAt", "direction": "desc" },
|
|
157
|
-
> "defaultPageSize": 20,
|
|
158
|
-
> "emptyState": { "icon": "inbox", "message": {"fr": "Aucun enregistrement", "en": "No records"}, "createAction": true }
|
|
159
|
-
> }
|
|
160
|
-
> ]
|
|
161
|
-
> }
|
|
162
|
-
> ```
|
|
163
|
-
>
|
|
164
|
-
> **SmartForm resource example (for create/edit sections):**
|
|
165
|
-
> ```json
|
|
166
|
-
> {
|
|
167
|
-
> "code": "{module}-form",
|
|
168
|
-
> "type": "SmartForm",
|
|
169
|
-
> "entity": "{MainEntity}",
|
|
170
|
-
> "permission": "business.{app}.{module}.create",
|
|
171
|
-
> "fields": [
|
|
172
|
-
> { "name": "code", "component": "Input", "required": true, "validation": "Unique, auto-generated" },
|
|
173
|
-
> { "name": "name", "component": "Input", "required": true },
|
|
174
|
-
> { "name": "type", "component": "Select", "required": true, "source": "EntityTypeEnum" },
|
|
175
|
-
> { "name": "description", "component": "TextArea", "required": false },
|
|
176
|
-
> { "name": "parentId", "component": "EntitySelect", "source": "ParentEntity", "required": true },
|
|
177
|
-
> { "name": "startDate", "component": "DatePicker", "required": true },
|
|
178
|
-
> { "name": "isActive", "component": "Toggle", "default": true }
|
|
179
|
-
> ],
|
|
180
|
-
> "formLayout": {
|
|
181
|
-
> "type": "tabs",
|
|
182
|
-
> "tabs": [
|
|
183
|
-
> { "code": "general", "label": {"fr": "Général", "en": "General"}, "fields": ["code", "name", "type", "description"] },
|
|
184
|
-
> { "code": "details", "label": {"fr": "Détails", "en": "Details"}, "fields": ["parentId", "startDate", "isActive"] }
|
|
185
|
-
> ]
|
|
186
|
-
> }
|
|
187
|
-
> }
|
|
188
|
-
> ```
|
|
189
|
-
> **MANDATORY for SmartTable:** `columnDefs`, `rowActions`, `defaultSort`, `emptyState`
|
|
190
|
-
> **MANDATORY for SmartForm:** `fields` with `component` type, `formLayout`
|
|
125
|
+
See [references/ui-resource-cards.md](../references/ui-resource-cards.md) for exact JSON formats of `specification.sections[]` (SmartTable + SmartForm resources).
|
|
126
|
+
**MANDATORY for SmartTable:** `columnDefs`, `rowActions`, `defaultSort`, `emptyState`
|
|
127
|
+
**MANDATORY for SmartForm:** `fields` with `component` type, `formLayout`
|
|
191
128
|
|
|
192
129
|
5. Write `specification.sections[]` via ba-writer.enrichSection()
|
|
193
130
|
|
|
@@ -218,39 +155,9 @@ Example for a list section:
|
|
|
218
155
|
|
|
219
156
|
Store in specification.uiWireframes[] (**MANDATORY** for every section):
|
|
220
157
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
> "screen": "{module}-{section}",
|
|
225
|
-
> "section": "{section}",
|
|
226
|
-
> "description": "Description of the screen",
|
|
227
|
-
> "mockupFormat": "ascii",
|
|
228
|
-
> "mockup": "╔═══...",
|
|
229
|
-
> "elements": ["DataGrid", "FilterBar", "Pagination", "CreateButton"],
|
|
230
|
-
> "actions": ["filter", "sort", "create", "view-detail"],
|
|
231
|
-
> "permissionsRequired": ["business.{app}.{module}.read"],
|
|
232
|
-
> "componentMapping": [
|
|
233
|
-
> { "wireframeElement": "DataGrid", "reactComponent": "SmartTable" },
|
|
234
|
-
> { "wireframeElement": "FilterBar", "reactComponent": "SmartFilter" },
|
|
235
|
-
> { "wireframeElement": "CreateButton", "reactComponent": "Button" }
|
|
236
|
-
> ],
|
|
237
|
-
> "layout": {
|
|
238
|
-
> "type": "page",
|
|
239
|
-
> "regions": [
|
|
240
|
-
> { "id": "toolbar", "position": "top", "components": [
|
|
241
|
-
> { "type": "FilterBar", "resourceRef": "{module}-filters" },
|
|
242
|
-
> { "type": "ActionMenu", "resourceRef": "{module}-actions", "permission": "business.{app}.{module}.create" }
|
|
243
|
-
> ]},
|
|
244
|
-
> { "id": "content", "position": "main", "span": 12, "components": [
|
|
245
|
-
> { "type": "SmartTable", "resourceRef": "{module}-grid" }
|
|
246
|
-
> ]}
|
|
247
|
-
> ]
|
|
248
|
-
> }
|
|
249
|
-
> }
|
|
250
|
-
> ```
|
|
251
|
-
> **REQUIRED fields:** `screen`, `mockup`, `elements`, `section`, `componentMapping`, `layout` are ALL mandatory.
|
|
252
|
-
> A wireframe without `componentMapping` or `layout` will FAIL validation in step 9.
|
|
253
|
-
> **layout.regions[].components[].resourceRef** MUST match a `sections[].resources[].code`.
|
|
158
|
+
See [references/ui-resource-cards.md](../references/ui-resource-cards.md) for exact JSON format of `specification.uiWireframes[]`.
|
|
159
|
+
**REQUIRED fields:** `screen`, `mockup`, `elements`, `section`, `componentMapping`, `layout` are ALL mandatory.
|
|
160
|
+
A wireframe without `componentMapping` or `layout` will FAIL validation in step 9.
|
|
254
161
|
|
|
255
162
|
Ask client to validate each mockup via AskUserQuestion (batch 2-3 mockups at once if possible).
|
|
256
163
|
|
|
@@ -313,85 +220,12 @@ For each section, identify what resources/components are needed:
|
|
|
313
220
|
|
|
314
221
|
### 3d. Dashboard Specification (if section = dashboard)
|
|
315
222
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
- Format: `number`, `currency`, `percent`, `duration`
|
|
323
|
-
- Thresholds (warning/critical) if applicable
|
|
324
|
-
|
|
325
|
-
2. **Ask client for filters:**
|
|
326
|
-
- Date range filter? Default period? (day/week/month/quarter/year)
|
|
327
|
-
- Entity-based filters? (status, category, etc.)
|
|
328
|
-
|
|
329
|
-
3. **Ask client for refresh mode:**
|
|
330
|
-
- Static (load on page open)
|
|
331
|
-
- Polling (periodic refresh)
|
|
332
|
-
- SignalR (real-time push)
|
|
333
|
-
|
|
334
|
-
4. **Store in specification.dashboards[]:**
|
|
335
|
-
|
|
336
|
-
```json
|
|
337
|
-
{
|
|
338
|
-
"code": "{module}-dashboard",
|
|
339
|
-
"title": "{Module} Dashboard",
|
|
340
|
-
"description": "Vue d'ensemble des métriques {module}",
|
|
341
|
-
"linkedUCs": ["UC-XXX"],
|
|
342
|
-
"refreshMode": "static",
|
|
343
|
-
"defaultPeriod": "month",
|
|
344
|
-
"kpis": [
|
|
345
|
-
{
|
|
346
|
-
"code": "total-items",
|
|
347
|
-
"label": "Total Items",
|
|
348
|
-
"metric": "COUNT(entity)",
|
|
349
|
-
"format": "number",
|
|
350
|
-
"visualization": "kpi-card",
|
|
351
|
-
"dataSource": "Entity",
|
|
352
|
-
"thresholds": { "warning": 100, "critical": 50 }
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
"code": "items-by-status",
|
|
356
|
-
"label": "Items by Status",
|
|
357
|
-
"metric": "COUNT(entity) GROUP BY status",
|
|
358
|
-
"format": "number",
|
|
359
|
-
"visualization": "pie",
|
|
360
|
-
"dataSource": "Entity",
|
|
361
|
-
"dimensions": ["status"]
|
|
362
|
-
}
|
|
363
|
-
],
|
|
364
|
-
"filters": [
|
|
365
|
-
{ "field": "dateRange", "type": "dateRange", "label": "Période" },
|
|
366
|
-
{ "field": "status", "type": "multiselect", "label": "Statut" }
|
|
367
|
-
],
|
|
368
|
-
"permissionsRequired": ["business.{app}.{module}.read"]
|
|
369
|
-
}
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
5. **ALSO generate the standard ASCII mockup** for the dashboard with KPI cards + chart placeholders:
|
|
373
|
-
|
|
374
|
-
```
|
|
375
|
-
╔═══════════════════════════════════════════════════════════════╗
|
|
376
|
-
║ {Module} > Dashboard Période: [Ce mois ▾] ║
|
|
377
|
-
╠═══════════════════════════════════════════════════════════════╣
|
|
378
|
-
║ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ║
|
|
379
|
-
║ │ KPI #1 │ │ KPI #2 │ │ KPI #3 │ │ KPI #4 │ ║
|
|
380
|
-
║ │ 1,234 │ │ 567 │ │ 89.2% │ │ 12,400 │ ║
|
|
381
|
-
║ │ ↑ +12% │ │ ↓ -3% │ │ → 0% │ │ ↑ +5% │ ║
|
|
382
|
-
║ └──────────┘ └──────────┘ └──────────┘ └──────────┘ ║
|
|
383
|
-
╠═══════════════════════════════════════════════════════════════╣
|
|
384
|
-
║ ┌─────────────────────────┐ ┌─────────────────────────┐ ║
|
|
385
|
-
║ │ [Bar Chart] │ │ [Pie Chart] │ ║
|
|
386
|
-
║ │ Items by Month │ │ Items by Status │ ║
|
|
387
|
-
║ │ ████ │ │ ████████ │ ║
|
|
388
|
-
║ │ ████ ████ │ │ ███ ███ │ ║
|
|
389
|
-
║ │ ████ ████ ████ │ │ ██ 42% ██ │ ║
|
|
390
|
-
║ └─────────────────────────┘ └─────────────────────────┘ ║
|
|
391
|
-
╚═══════════════════════════════════════════════════════════════╝
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
Store the mockup in specification.wireframes[] AS WELL (for visual reference).
|
|
223
|
+
See [references/ui-dashboard-spec.md](../references/ui-dashboard-spec.md) for the complete dashboard capture process:
|
|
224
|
+
- Ask client for KPIs (name, visualization type, format, thresholds)
|
|
225
|
+
- Ask client for filters (date range, entity-based)
|
|
226
|
+
- Ask client for refresh mode (static/polling/SignalR)
|
|
227
|
+
- Store in `specification.dashboards[]` with full JSON template
|
|
228
|
+
- Generate standard ASCII mockup with KPI cards + chart placeholders
|
|
395
229
|
|
|
396
230
|
---
|
|
397
231
|
|
|
@@ -228,56 +228,11 @@ ba-writer.updateModuleStatus({feature_id}, {currentModule.code}, "specified")
|
|
|
228
228
|
### 11-bis. Deploy Incremental Interactive HTML (MANDATORY)
|
|
229
229
|
|
|
230
230
|
> **After each module is specified, deploy/update the interactive HTML document with all available data.**
|
|
231
|
-
>
|
|
232
|
-
> The HTML is incrementally enriched: after module 1, only module 1 specs appear; after module 2, both appear; etc.
|
|
231
|
+
> The client can review completed modules while the next module is being specified.
|
|
233
232
|
|
|
234
|
-
|
|
233
|
+
See [references/validate-incremental-html.md](../references/validate-incremental-html.md) for the complete deployment process (read sources, build FEATURE_DATA, replace placeholders, write HTML).
|
|
235
234
|
|
|
236
|
-
**
|
|
237
|
-
|
|
238
|
-
**Steps:**
|
|
239
|
-
|
|
240
|
-
1. **Read sources:**
|
|
241
|
-
- Read the HTML template from skill directory
|
|
242
|
-
- Read the master feature.json (application level — now updated with current module status)
|
|
243
|
-
- Read EACH completed module's feature.json (including the one just specified)
|
|
244
|
-
|
|
245
|
-
2. **Build FEATURE_DATA object:**
|
|
246
|
-
|
|
247
|
-
> **Use the EXACT SAME mapping defined in step-05b-deploy.md and references/html-data-mapping.md.**
|
|
248
|
-
> The mapping is identical — the only difference is that `moduleSpecs` only includes completed modules.
|
|
249
|
-
> Modules not yet specified will NOT appear in `moduleSpecs` (their entry in `modules[]` will show `status: "pending"`).
|
|
250
|
-
|
|
251
|
-
Follow step-05 section 9d "Step 2: Build FEATURE_DATA object" for the complete mapping pseudocode:
|
|
252
|
-
- `metadata`, `cadrage`, `modules[]`, `dependencies[]` → from master feature.json
|
|
253
|
-
- `moduleSpecs[moduleCode]` → only for modules with status "specified" (completed so far)
|
|
254
|
-
- `consolidation` → empty `{ interactions: [], e2eFlows: [] }` (not yet consolidated)
|
|
255
|
-
- `handoff` → empty `{}` (not yet handed off)
|
|
256
|
-
|
|
257
|
-
3. **Replace placeholders in template:**
|
|
258
|
-
- Serialize the FEATURE_DATA object as JSON (2-space indentation)
|
|
259
|
-
- Replace `{{FEATURE_DATA}}` with the serialized JSON
|
|
260
|
-
- Replace `{{APPLICATION_NAME}}` → `{application_name}`
|
|
261
|
-
- Replace `{{APPLICATION_ID}}` → `{feature_id}`
|
|
262
|
-
- Replace `{{VERSION}}` → `{version}`
|
|
263
|
-
- Replace `{{CREATED_AT}}` → `{ISO timestamp}`
|
|
264
|
-
|
|
265
|
-
4. **Write and confirm:**
|
|
266
|
-
|
|
267
|
-
```
|
|
268
|
-
✓ Interactive HTML updated (incremental):
|
|
269
|
-
Path: docs/business/{app}/business-analyse/v{version}/ba-interactive.html
|
|
270
|
-
Modules included: {completedModules.length}/{totalModules} specified
|
|
271
|
-
- {completedModule1}: {uc_count} UCs, {br_count} BRs, {entity_count} entities
|
|
272
|
-
- {completedModule2}: ...
|
|
273
|
-
Remaining: {pendingModules.join(', ')} (will be added after specification)
|
|
274
|
-
→ Client can open in browser to review completed modules now.
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
> **WHY incremental?** The client doesn't have to wait until handoff to start reviewing.
|
|
278
|
-
> While module 2 is being specified, the client can already give feedback on module 1.
|
|
279
|
-
> Each incremental deployment OVERWRITES the previous HTML (latest state always).
|
|
280
|
-
> The FINAL deployment at step-05 (handoff) will include consolidation and handoff data.
|
|
235
|
+
Uses the **same mapping** as step-05b-deploy.md — only difference is `moduleSpecs` only includes completed modules.
|
|
281
236
|
|
|
282
237
|
---
|
|
283
238
|
|
|
@@ -212,112 +212,17 @@ Store results in consolidation.semanticChecks[]:
|
|
|
212
212
|
|
|
213
213
|
### 4-bis. Structural Schema Conformity Check (MANDATORY)
|
|
214
214
|
|
|
215
|
-
> **Post-generation validation.** After semantic checks, verify
|
|
216
|
-
|
|
217
|
-
For EACH module feature.json, run these structural checks:
|
|
218
|
-
|
|
219
|
-
**A. Required Sections Presence**
|
|
220
|
-
|
|
221
|
-
| Section | Required | Check |
|
|
222
|
-
|---------|----------|-------|
|
|
223
|
-
| `metadata` | YES | Must have: app, module, language, featureDescription, featureType |
|
|
224
|
-
| `discovery` | YES | Must exist (even if minimal) |
|
|
225
|
-
| `analysis.entities[]` | YES | Must have ≥1 entity |
|
|
226
|
-
| `analysis.businessRules[]` | YES | Must have ≥1 BR |
|
|
227
|
-
| `analysis.objectives[]` | YES | Must have ≥1 objective |
|
|
228
|
-
| `analysis.processFlow` | YES | Must have entryPoints, mainFlow, decisionPoints |
|
|
229
|
-
| `analysis.dataLifecycle` | YES | Must have retention, archival, deletion, gdprRelevant |
|
|
230
|
-
| `specification.useCases[]` | YES | Must have ≥1 UC |
|
|
231
|
-
| `specification.functionalRequirements[]` | YES | Must have ≥1 FR |
|
|
232
|
-
| `specification.permissionMatrix` | YES | Must be `{permissions[], roleAssignments[]}` (NOT flat array) |
|
|
233
|
-
| `specification.sections[]` | YES | Must have ≥1 section with resources |
|
|
234
|
-
| `specification.uiWireframes[]` | YES | Must have ≥1 wireframe with `layout` object |
|
|
235
|
-
| `specification.lifeCycles[]` | IF entities have status | States must be objects (NOT strings) |
|
|
236
|
-
| `specification.seedDataCore` | YES | Must have 5 arrays: navigationModules, navigationTranslations, permissions, rolePermissions, permissionConstants |
|
|
237
|
-
| `specification.gherkinScenarios` | YES | Must be `{feature, scenarios[]}` (NOT flat array) |
|
|
238
|
-
| `specification.navigation` | YES | Must have entries[] |
|
|
239
|
-
| `specification.i18nKeys[]` | YES | Must have ≥1 key with fr, en, nl, de |
|
|
240
|
-
| `validation` | YES | Must have completenessChecks, consistencyChecks, semanticChecks, decision |
|
|
241
|
-
| `handoff` | Written by step-05 | Checked post-handoff |
|
|
242
|
-
|
|
243
|
-
**B. Field Name Conformity**
|
|
244
|
-
|
|
245
|
-
For each section, verify NO FORBIDDEN field names are used:
|
|
246
|
-
|
|
247
|
-
| Section | FORBIDDEN fields | Correct fields |
|
|
248
|
-
|---------|-----------------|----------------|
|
|
249
|
-
| `entities[].attributes[]` | `type`, `values`, `rules` | `description`, `unique`, `validation` |
|
|
250
|
-
| `businessRules[]` | `rule`, `condition` (singular), `action` | `name`, `statement`, `conditions[]` |
|
|
251
|
-
| `useCases[]` | `actor`, `linkedBRs`, `linkedFRs` | `primaryActor`, `linkedRules` |
|
|
252
|
-
| `functionalRequirements[]` | `name`, `description`, `linkedUCs`, `linkedBRs` | `statement`, `linkedUseCases`, `linkedRules` |
|
|
253
|
-
| `permissionMatrix` | flat array with `resource`/`roles` | `{permissions[], roleAssignments[]}` |
|
|
254
|
-
| `lifeCycles[].states[]` | string values like `"Active"` | objects with `{id, displayName, color, isTerminal}` |
|
|
255
|
-
| `seedDataCore` | flat object, string values | 5 typed arrays |
|
|
256
|
-
| `gherkinScenarios` | flat scenario array | `{feature, scenarios[]}` nested |
|
|
257
|
-
|
|
258
|
-
**C. ID Pattern Conformity**
|
|
259
|
-
|
|
260
|
-
| ID Type | Pattern | Example |
|
|
261
|
-
|---------|---------|---------|
|
|
262
|
-
| BR | `BR-(VAL\|CALC\|WF\|SEC\|DATA)-{PREFIX}-\d{3}` | BR-VAL-RM-001 |
|
|
263
|
-
| UC | `UC-{PREFIX}-\d{3}` | UC-RM-001 |
|
|
264
|
-
| FR | `FR-{PREFIX}-\d{3}` | FR-RM-001 |
|
|
265
|
-
| Permissions | `business.{app}.{module}.{resource}.{action}` | business.freebike.repairs.create |
|
|
266
|
-
|
|
267
|
-
Verify all IDs use the correct module prefix (2-4 uppercase letters).
|
|
268
|
-
|
|
269
|
-
**D. Cross-Module ID Uniqueness**
|
|
270
|
-
|
|
271
|
-
Verify no ID collision across modules:
|
|
272
|
-
```
|
|
273
|
-
SET all_ids = {}
|
|
274
|
-
FOR each module:
|
|
275
|
-
FOR each BR, UC, FR id:
|
|
276
|
-
IF id IN all_ids → ERROR: "Duplicate {id} in {module1} and {module2}"
|
|
277
|
-
ADD id to all_ids
|
|
278
|
-
```
|
|
215
|
+
> **Post-generation validation.** After semantic checks, verify ALL module feature.json files conform to JSON schema.
|
|
279
216
|
|
|
280
|
-
|
|
217
|
+
See [references/consolidation-structural-checks.md](../references/consolidation-structural-checks.md) for the full 6-category structural check:
|
|
218
|
+
- **A.** Required Sections Presence (18 sections)
|
|
219
|
+
- **B.** Field Name Conformity (forbidden vs correct fields)
|
|
220
|
+
- **C.** ID Pattern Conformity (BR, UC, FR, Permissions)
|
|
221
|
+
- **D.** Cross-Module ID Uniqueness
|
|
222
|
+
- **E.** Wireframe Layout Completeness
|
|
223
|
+
- **F.** SeedDataCore Translation Coverage
|
|
281
224
|
|
|
282
|
-
|
|
283
|
-
```
|
|
284
|
-
IF missing componentMapping[] → ERROR
|
|
285
|
-
IF missing layout object → ERROR
|
|
286
|
-
IF missing layout.regions[] → ERROR
|
|
287
|
-
FOR each region in layout.regions[]:
|
|
288
|
-
IF missing position → ERROR
|
|
289
|
-
IF missing components[] → ERROR
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
**F. SeedDataCore Translation Coverage**
|
|
293
|
-
|
|
294
|
-
```
|
|
295
|
-
FOR each navigationModules[].code:
|
|
296
|
-
FOR each language in [fr, en, nl, de]:
|
|
297
|
-
IF NOT EXISTS navigationTranslations[] with moduleCode AND language → ERROR
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
**Result aggregation:**
|
|
301
|
-
```json
|
|
302
|
-
{
|
|
303
|
-
"structuralChecks": [
|
|
304
|
-
{ "check": "required-sections", "module": "...", "status": "PASS|ERROR", "details": "Missing: analysis.objectives" },
|
|
305
|
-
{ "check": "field-names", "module": "...", "status": "PASS|ERROR", "details": "businessRules[0] uses 'rule' instead of 'name'+'statement'" },
|
|
306
|
-
{ "check": "id-patterns", "module": "...", "status": "PASS|ERROR", "details": "BR-001 missing category segment" },
|
|
307
|
-
{ "check": "id-uniqueness", "module": "...", "status": "PASS|ERROR", "details": "UC-RM-003 duplicated in Vehicles and Repairs" },
|
|
308
|
-
{ "check": "wireframe-layout", "module": "...", "status": "PASS|ERROR", "details": "Wireframe repairs-list missing layout object" },
|
|
309
|
-
{ "check": "seeddata-translations", "module": "...", "status": "PASS|ERROR", "details": "Missing nl translation for NavigationModuleRepairs" }
|
|
310
|
-
]
|
|
311
|
-
}
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
**Blocking rule:**
|
|
315
|
-
- 0 ERROR → PASS (merge structuralChecks into consolidation.semanticChecks[])
|
|
316
|
-
- ≥1 ERROR → BLOCK. For each ERROR:
|
|
317
|
-
1. Attempt AUTO-FIX (rename fields, restructure)
|
|
318
|
-
2. Re-write the module feature.json with fixes
|
|
319
|
-
3. Re-check
|
|
320
|
-
4. If still ERROR → ask user
|
|
225
|
+
**Blocking rule:** 0 ERROR → PASS. ≥1 ERROR → BLOCK (attempt auto-fix, re-write, re-check).
|
|
321
226
|
|
|
322
227
|
### 5. End-to-End Flows
|
|
323
228
|
|