@atlashub/smartstack-cli 3.8.0 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/index.js +365 -2
  2. package/dist/index.js.map +1 -1
  3. package/package.json +2 -1
  4. package/templates/agents/action.md +1 -0
  5. package/templates/agents/ba-writer.md +211 -0
  6. package/templates/agents/explore-codebase.md +1 -0
  7. package/templates/agents/explore-docs.md +1 -0
  8. package/templates/agents/fix-grammar.md +1 -0
  9. package/templates/agents/snipper.md +1 -0
  10. package/templates/skills/admin/SKILL.md +6 -0
  11. package/templates/skills/ai-prompt/SKILL.md +32 -136
  12. package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -0
  13. package/templates/skills/apex/SKILL.md +120 -0
  14. package/templates/skills/apex/_shared.md +86 -0
  15. package/templates/skills/apex/references/agent-teams-protocol.md +164 -0
  16. package/templates/skills/apex/references/smartstack-layers.md +173 -0
  17. package/templates/skills/apex/steps/step-00-init.md +156 -0
  18. package/templates/skills/apex/steps/step-01-analyze.md +169 -0
  19. package/templates/skills/apex/steps/step-02-plan.md +160 -0
  20. package/templates/skills/apex/steps/step-03-execute.md +166 -0
  21. package/templates/skills/apex/steps/step-04-validate.md +138 -0
  22. package/templates/skills/apex/steps/step-05-examine.md +124 -0
  23. package/templates/skills/apex/steps/step-06-resolve.md +105 -0
  24. package/templates/skills/apex/steps/step-07-tests.md +130 -0
  25. package/templates/skills/apex/steps/step-08-run-tests.md +115 -0
  26. package/templates/skills/application/SKILL.md +10 -0
  27. package/templates/skills/application/references/application-roles-template.md +227 -0
  28. package/templates/skills/application/references/backend-controller-hierarchy.md +58 -0
  29. package/templates/skills/application/references/backend-entity-seeding.md +72 -0
  30. package/templates/skills/application/references/backend-verification.md +88 -0
  31. package/templates/skills/application/references/frontend-verification.md +111 -0
  32. package/templates/skills/application/references/nav-fallback-procedure.md +200 -0
  33. package/templates/skills/application/references/provider-template.md +158 -0
  34. package/templates/skills/application/references/test-frontend.md +73 -0
  35. package/templates/skills/application/references/test-prerequisites.md +72 -0
  36. package/templates/skills/application/steps/step-01-navigation.md +7 -198
  37. package/templates/skills/application/steps/step-03-roles.md +45 -7
  38. package/templates/skills/application/steps/step-03b-provider.md +15 -132
  39. package/templates/skills/application/steps/step-04-backend.md +20 -350
  40. package/templates/skills/application/steps/step-05-frontend.md +12 -101
  41. package/templates/skills/application/steps/step-07-tests.md +12 -132
  42. package/templates/skills/business-analyse/SKILL.md +67 -6
  43. package/templates/skills/business-analyse/html/ba-interactive.html +176 -14
  44. package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +1 -0
  45. package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +16 -4
  46. package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +7 -2
  47. package/templates/skills/business-analyse/html/src/scripts/09-export.js +103 -0
  48. package/templates/skills/business-analyse/html/src/scripts/10-comments.js +12 -6
  49. package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +24 -2
  50. package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +12 -0
  51. package/templates/skills/business-analyse/html/src/template.html +1 -0
  52. package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +477 -0
  53. package/templates/skills/business-analyse/references/cache-warming-strategy.md +578 -0
  54. package/templates/skills/business-analyse/references/cadrage-structure-cards.md +78 -0
  55. package/templates/skills/business-analyse/references/cadrage-vibe-coding.md +97 -0
  56. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +92 -0
  57. package/templates/skills/business-analyse/references/deploy-data-build.md +121 -0
  58. package/templates/skills/business-analyse/references/deploy-modes.md +49 -0
  59. package/templates/skills/business-analyse/references/handoff-file-templates.md +119 -0
  60. package/templates/skills/business-analyse/references/handoff-mappings.md +81 -0
  61. package/templates/skills/business-analyse/references/html-data-mapping.md +10 -2
  62. package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -0
  63. package/templates/skills/business-analyse/references/review-data-mapping.md +363 -0
  64. package/templates/skills/business-analyse/references/robustness-checks.md +538 -0
  65. package/templates/skills/business-analyse/references/spec-auto-inference.md +57 -0
  66. package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -0
  67. package/templates/skills/business-analyse/references/ui-resource-cards.md +110 -0
  68. package/templates/skills/business-analyse/references/validate-incremental-html.md +55 -0
  69. package/templates/skills/business-analyse/schemas/sections/specification-schema.json +33 -1
  70. package/templates/skills/business-analyse/steps/step-00-init.md +186 -53
  71. package/templates/skills/business-analyse/steps/step-01-cadrage.md +5 -194
  72. package/templates/skills/business-analyse/steps/step-03a-data.md +42 -49
  73. package/templates/skills/business-analyse/steps/step-03b-ui.md +12 -178
  74. package/templates/skills/business-analyse/steps/step-03c-compile.md +71 -2
  75. package/templates/skills/business-analyse/steps/step-03d-validate.md +277 -48
  76. package/templates/skills/business-analyse/steps/step-04-consolidation.md +175 -104
  77. package/templates/skills/business-analyse/steps/step-05a-handoff.md +66 -438
  78. package/templates/skills/business-analyse/steps/step-05b-deploy.md +35 -184
  79. package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +526 -0
  80. package/templates/skills/business-analyse/steps/step-06-review.md +277 -0
  81. package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -0
  82. package/templates/skills/cc-agent/steps/step-02-generate.md +5 -78
  83. package/templates/skills/check-version/SKILL.md +7 -0
  84. package/templates/skills/controller/references/controller-code-templates.md +159 -0
  85. package/templates/skills/controller/references/permission-sync-templates.md +152 -0
  86. package/templates/skills/controller/steps/step-03-generate.md +166 -158
  87. package/templates/skills/controller/steps/step-04-perms.md +5 -144
  88. package/templates/skills/controller/templates.md +11 -2
  89. package/templates/skills/debug/SKILL.md +7 -0
  90. package/templates/skills/explore/SKILL.md +6 -0
  91. package/templates/skills/feature-full/SKILL.md +39 -142
  92. package/templates/skills/feature-full/steps/step-01-implementation.md +120 -0
  93. package/templates/skills/gitflow/references/init-config-template.md +135 -0
  94. package/templates/skills/gitflow/references/init-name-normalization.md +103 -0
  95. package/templates/skills/gitflow/references/plan-template.md +69 -0
  96. package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -0
  97. package/templates/skills/gitflow/references/start-local-config.md +110 -0
  98. package/templates/skills/gitflow/steps/step-init.md +18 -289
  99. package/templates/skills/gitflow/steps/step-plan.md +6 -63
  100. package/templates/skills/gitflow/steps/step-start.md +16 -126
  101. package/templates/skills/mcp/SKILL.md +9 -213
  102. package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -0
  103. package/templates/skills/mcp/steps/step-02-tools.md +73 -0
  104. package/templates/skills/notification/SKILL.md +7 -0
  105. package/templates/skills/quick-search/SKILL.md +5 -0
  106. package/templates/skills/ralph-loop/SKILL.md +99 -381
  107. package/templates/skills/ralph-loop/references/category-rules.md +259 -0
  108. package/templates/skills/ralph-loop/references/compact-loop.md +182 -0
  109. package/templates/skills/ralph-loop/references/core-seed-data.md +173 -21
  110. package/templates/skills/ralph-loop/references/task-transform-legacy.md +259 -0
  111. package/templates/skills/ralph-loop/references/team-orchestration.md +189 -0
  112. package/templates/skills/ralph-loop/steps/step-00-init.md +111 -383
  113. package/templates/skills/ralph-loop/steps/step-01-task.md +79 -896
  114. package/templates/skills/ralph-loop/steps/step-02-execute.md +68 -680
  115. package/templates/skills/ralph-loop/steps/step-03-commit.md +47 -277
  116. package/templates/skills/ralph-loop/steps/step-04-check.md +124 -607
  117. package/templates/skills/ralph-loop/steps/step-05-report.md +68 -367
  118. package/templates/skills/refactor/SKILL.md +12 -176
  119. package/templates/skills/refactor/steps/step-01-discover.md +60 -0
  120. package/templates/skills/refactor/steps/step-02-execute.md +67 -0
  121. package/templates/skills/review-code/SKILL.md +19 -257
  122. package/templates/skills/review-code/steps/step-01-smartstack.md +96 -0
  123. package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -0
  124. package/templates/skills/review-code/steps/step-03-react.md +44 -0
  125. package/templates/skills/ui-components/SKILL.md +7 -0
  126. package/templates/skills/utils/SKILL.md +6 -0
  127. package/templates/skills/validate/SKILL.md +6 -0
  128. package/templates/skills/validate-feature/SKILL.md +8 -0
  129. package/templates/skills/workflow/SKILL.md +40 -118
  130. package/templates/skills/workflow/steps/step-01-implementation.md +84 -0
@@ -92,133 +92,10 @@ ELSE:
92
92
  > Skip organizational questions (adoption, change management, governance, KPIs).
93
93
  > Focus on functional decisions and technical challenges.
94
94
 
95
- ### 3v. Vibe Coding Lot 1: Problem & Scope
96
-
97
- **Goal:** Capture the core need and must-have features in a single batch.
98
-
99
- Ask via AskUserQuestion (2 questions):
100
- ```
101
- question: "Quel est le besoin principal de cette application ?"
102
- header: "Besoin"
103
- options:
104
- - label: "Automatiser un processus manuel"
105
- description: "Remplacer des taches repetitives par une application"
106
- - label: "Creer un outil manquant"
107
- description: "Construire quelque chose qui n'existe pas encore"
108
- - label: "Remplacer un outil existant"
109
- description: "Remplacer un logiciel ou tableur qui ne convient plus"
110
- - label: "Centraliser des donnees"
111
- description: "Rassembler des informations dispersees en un seul endroit"
112
- ```
113
-
114
- ```
115
- question: "Quelles fonctionnalites sont indispensables pour la V1 ?"
116
- header: "Indispensable"
117
- multiSelect: true
118
- options:
119
- → Generate 4 options dynamically from {feature_description}
120
- → Each option = one functional area detected in the description
121
- → Example for HR app: "Gestion des employes", "Saisie des heures", "Gestion des conges", "Rapports et exports"
122
- ```
123
-
124
- **Store:**
125
- ```yaml
126
- problem_type: string (from Q1)
127
- must_have_features: string[] (from Q2)
128
- ```
129
-
130
- ### 4v. Vibe Coding — Lot 2: Users & Permissions
131
-
132
- **Goal:** Determine access model (solo vs multi-user) and roles.
133
-
134
- Ask via AskUserQuestion:
135
- ```
136
- question: "Qui va utiliser cette application ?"
137
- header: "Utilisateurs"
138
- options:
139
- - label: "Moi seul"
140
- description: "Application mono-utilisateur, je suis l'unique admin"
141
- - label: "Quelques utilisateurs (2-10)"
142
- description: "Petite equipe avec des roles differents"
143
- - label: "Organisation (10+)"
144
- description: "Deploiement a l'echelle d'une equipe ou entreprise"
145
- ```
146
-
147
- ```
148
- IF "Moi seul":
149
- Auto-set:
150
- applicationRoles = [{ role: "{App} Admin", level: "admin", permissionPattern: "business.{app}.*" }]
151
- stakeholders = [{ role: "Developpeur", function: "Product owner et developpeur", involvement: "decision-maker", tasks: ["Toutes les operations"] }]
152
- → SKIP role question
153
-
154
- IF "Quelques utilisateurs" or "Organisation":
155
- Display standard 4-tier roles table, then ask:
156
- question: "Ces 4 roles (Admin, Manager, Contributor, Viewer) conviennent-ils ?"
157
- header: "Roles"
158
- options:
159
- - label: "Oui, parfait"
160
- description: "Utiliser les 4 roles standards"
161
- - label: "Personnaliser"
162
- description: "Modifier les roles ou permissions"
163
-
164
- Auto-set stakeholders from user type:
165
- IF "Quelques utilisateurs":
166
- stakeholders = [
167
- { role: "Administrateur", function: "Gere le systeme et les utilisateurs", involvement: "decision-maker", tasks: ["Configuration", "Gestion utilisateurs"] },
168
- { role: "Utilisateur", function: "Utilise le systeme au quotidien", involvement: "end-user", tasks: ["Saisie", "Consultation"] }
169
- ]
170
- IF "Organisation":
171
- stakeholders = [
172
- { role: "Administrateur", function: "Gere le systeme", involvement: "decision-maker", tasks: ["Configuration", "Gestion"] },
173
- { role: "Manager", function: "Supervise et valide", involvement: "approver", tasks: ["Validation", "Reporting"] },
174
- { role: "Utilisateur", function: "Operations quotidiennes", involvement: "end-user", tasks: ["Saisie", "Consultation"] }
175
- ]
176
- ```
177
-
178
- ### 5v. Vibe Coding — Lot 3: Technical Challenges
179
-
180
- **Goal:** Identify technical risks specific to AI-assisted development.
181
-
182
- Ask via AskUserQuestion:
183
- ```
184
- question: "Quels defis techniques anticipez-vous ?"
185
- header: "Defis"
186
- multiSelect: true
187
- options:
188
- - label: "Regles metier complexes"
189
- description: "Calculs, validations ou workflows difficiles a specifier"
190
- - label: "Volume de donnees"
191
- description: "Grandes quantites de donnees a gerer ou migrer"
192
- - label: "Integrations externes"
193
- description: "APIs, services tiers ou synchronisation avec d'autres systemes"
194
- - label: "Interface riche"
195
- description: "Ecrans avec beaucoup d'interactions, graphiques ou visualisations"
196
- ```
197
-
198
- **Auto-infer cadrage data (DO NOT ask these — derive from answers):**
199
-
200
- ```yaml
201
- cadrage.problem: "{feature_description} — {problem_type}"
202
- cadrage.asIs: "Aucun systeme en place" | "Processus manuel existant" | "Outil existant a remplacer"
203
- → Derived from Lot 1 problem_type
204
- cadrage.toBe: "Application {application_name} couvrant: {must_have_features joined}"
205
- cadrage.trigger: "Projet vibe coding initie par le developpeur"
206
- cadrage.risks:
207
- → Map each selected technical challenge to a RISK entry:
208
- - "Regles metier complexes" → RISK-001, type: "technical", probability: "medium", impact: "high"
209
- - "Volume de donnees" → RISK-002, type: "technical", probability: "low", impact: "medium"
210
- - "Integrations externes" → RISK-003, type: "technical", probability: "medium", impact: "medium"
211
- - "Interface riche" → RISK-004, type: "technical", probability: "low", impact: "low"
212
- → Add mitigation for each: "Specification detaillee dans step-03 + generation iterative"
213
- cadrage.acceptanceCriteria:
214
- - { id: "AC-001", criterion: "Toutes les fonctionnalites must-have implementees et fonctionnelles", validated: false }
215
- - { id: "AC-002", criterion: "Application deployable et utilisable", validated: false }
216
- cadrage.globalScope:
217
- mustHave: {must_have_features}
218
- shouldHave: [] → Determined later in coverage matrix
219
- couldHave: [] → Determined later in coverage matrix
220
- outOfScope: []
221
- ```
95
+ See [references/cadrage-vibe-coding.md](../references/cadrage-vibe-coding.md) for the complete 3-lot questionnaire:
96
+ - **Lot 1 (3v):** Problem & Scope — capture core need + must-have features
97
+ - **Lot 2 (4v):** Users & Permissions access model (solo/team/org) + roles
98
+ - **Lot 3 (5v):** Technical Challenges — risks specific to AI-assisted dev + auto-inferred cadrage data
222
99
 
223
100
  **After Lot 3:** Go directly to **section 9 (Coverage Matrix)**.
224
101
 
@@ -389,73 +266,7 @@ If a feature is in mustHave → it MUST have at least one UC in the correspondin
389
266
 
390
267
  Use ba-writer to enrich master feature.json. **Follow the STRUCTURE CARDS below exactly.**
391
268
 
392
- > **STRUCTURE CARD: cadrage.stakeholders[]**
393
- > ```json
394
- > {
395
- > "role": "Fleet Manager",
396
- > "function": "Manages daily fleet operations",
397
- > "involvement": "decision-maker",
398
- > "tasks": ["Monitor vehicles", "Approve repairs", "Export reports"],
399
- > "frequency": "Daily",
400
- > "painPoints": ["Manual tracking in spreadsheets", "No real-time visibility"]
401
- > }
402
- > ```
403
- > **MANDATORY fields:** `role`, `function`, `involvement`, `tasks`
404
- > **involvement values:** `approver`, `decision-maker`, `consulted`, `informed`, `end-user`
405
- > **FORBIDDEN fields:** Do NOT use `expertise`, `systemRole`, `description` (use `function` instead).
406
-
407
- > **STRUCTURE CARD: cadrage.applicationRoles[]**
408
- > ```json
409
- > {
410
- > "role": "{App} Admin",
411
- > "description": "Full access to all modules",
412
- > "level": "admin",
413
- > "permissionPattern": "business.{app}.*"
414
- > }
415
- > ```
416
- > **MANDATORY fields:** `role`, `level`, `permissionPattern`
417
- > **level values:** `admin`, `manager`, `contributor`, `viewer`
418
- > **FORBIDDEN fields:** Do NOT use `permissions` (use `permissionPattern`), `isDefault`.
419
-
420
- > **STRUCTURE CARD: cadrage.risks[]**
421
- > ```json
422
- > {
423
- > "id": "RISK-001",
424
- > "type": "business|technical|organizational",
425
- > "description": "CSV data may contain duplicates and errors",
426
- > "probability": "high|medium|low",
427
- > "impact": "high|medium|low",
428
- > "priority": "critical|medium|low",
429
- > "mitigation": "Data cleaning phase before import, detailed error reports"
430
- > }
431
- > ```
432
- > **MANDATORY fields:** `id` (pattern: RISK-NNN), `type`, `description`, `mitigation`
433
- > **FORBIDDEN fields:** Do NOT use `risk` (name), `severity`. Use `id` + `description` + `priority`.
434
-
435
- > **STRUCTURE CARD: cadrage.acceptanceCriteria[]**
436
- > ```json
437
- > { "id": "AC-001", "criterion": "All must-have features delivered and tested", "validated": false }
438
- > ```
439
- > **MANDATORY:** This section must NOT be omitted.
440
-
441
- > **STRUCTURE CARD: cadrage.coverageMatrix[]**
442
- > ```json
443
- > {
444
- > "item": "User management with CRUD",
445
- > "category": "mustHave|shouldHave|couldHave|outOfScope|implicit",
446
- > "module": "Users",
447
- > "ucRef": "UC-UM-001",
448
- > "notes": "Foundation module, must be implemented first"
449
- > }
450
- > ```
451
- > **MANDATORY fields:** `item`, `category`, `module`
452
- > **category values:** `mustHave`, `shouldHave`, `couldHave`, `outOfScope`, `implicit` (camelCase)
453
- > **FORBIDDEN fields:** Do NOT use `id`, `feature`, `priority`. Use `item` + `category`.
454
-
455
- > **STRUCTURE CARD: cadrage.codebaseContext** — Must be a string, NOT an object.
456
- > ```json
457
- > "codebaseContext": "Greenfield project, no existing entities. SmartStack 2.1.0 with Extensions DbContext."
458
- > ```
269
+ See [references/cadrage-structure-cards.md](../references/cadrage-structure-cards.md) for exact JSON formats of: `stakeholders[]`, `applicationRoles[]`, `risks[]`, `acceptanceCriteria[]`, `coverageMatrix[]`, `codebaseContext`.
459
270
 
460
271
  ```
461
272
  ba-writer.enrichSection({
@@ -62,6 +62,42 @@ IF module already specified (status = "specified" in master):
62
62
  Increment currentModuleIndex, re-check
63
63
  IF all modules specified → Load step-04-consolidation.md, STOP
64
64
 
65
+ ### 1b. Cache Warming for Module Loop (FIRST MODULE ONLY)
66
+
67
+ > **Performance Optimization:** Pre-load module specification references to reduce redundant reads across all modules.
68
+ > This step runs ONLY for the FIRST module (currentModuleIndex = 0), not repeated for subsequent modules.
69
+
70
+ ```
71
+ IF currentModuleIndex === 0:
72
+ // Pre-load module specification references (Bucket 3)
73
+ const moduleRefs = [
74
+ "~/.claude/skills/business-analyse/references/spec-auto-inference.md",
75
+ "~/.claude/skills/business-analyse/references/ui-resource-cards.md",
76
+ "~/.claude/skills/business-analyse/references/ui-dashboard-spec.md",
77
+ "~/.claude/skills/business-analyse/references/cadrage-vibe-coding.md"
78
+ ];
79
+
80
+ for (const file of moduleRefs) {
81
+ read(file); // Pre-load into cache
82
+ }
83
+
84
+ Display: "✓ Cache warmed: module specification references (23KB, 4 files)"
85
+ Display: " Expected token savings: 75% reduction in reference reads across module loop"
86
+ Display: " Retention: until step-04 (after all modules specified)"
87
+ ELSE:
88
+ // Subsequent modules use cached references (no re-load)
89
+ Display: "✓ Using cached module references (from first module)"
90
+ ```
91
+
92
+ **Rationale:**
93
+
94
+ - Module specification references are read 2-3× PER MODULE (5 modules = 10-15 reads without caching)
95
+ - Pre-loading once at start of module loop eliminates 75% of redundant reads
96
+ - Token savings: ~10,000 tokens for a 5-module application
97
+ - Cache retained until step-04 (when consolidation starts, references no longer needed)
98
+
99
+ See [references/cache-warming-strategy.md](../references/cache-warming-strategy.md) § Bucket 3 for details.
100
+
65
101
  ### 2. Initialize Module Feature.json
66
102
 
67
103
  ```
@@ -245,55 +281,12 @@ Display to client:
245
281
 
246
282
  **Prerequisites:** Entity attributes must be defined (from step 6) OR anticipated from decomposition.
247
283
 
248
- **Inference rules - Entity attribute SmartTable column:**
249
-
250
- | Attribute Type | Column Format | Sortable | Filterable | Notes |
251
- |---|---|---|---|---|
252
- | string + unique | text | yes | yes | clickAction: navigate:detail |
253
- | string | text | yes | yes | — |
254
- | enum / status | badge | yes | yes (multi-select) | colorMap from lifeCycles if exists |
255
- | FK:Entity | text (join .name) | yes | yes (entity-select) | Display related entity name |
256
- | decimal | currency | yes | no | — |
257
- | int | number | yes | no | — |
258
- | datetime | date-relative | yes | yes (date-range) | — |
259
- | bool | boolean | yes | yes (toggle) | — |
260
- | text (long) | — | no | no | Hidden in table, visible in detail |
261
-
262
- **Inference rules - Entity attribute → SmartForm field:**
263
-
264
- | Attribute Type | Component | Required from | Notes |
265
- |---|---|---|---|
266
- | string | Input | entity.required | — |
267
- | string (multiline) | TextArea | entity.required | rows: 4 |
268
- | enum | Select | entity.required | source: enum name |
269
- | FK:Entity | EntitySelect | entity.required | source: target entity, searchable |
270
- | decimal | NumberInput | entity.required | — |
271
- | int | NumberInput | entity.required | — |
272
- | datetime | DatePicker | entity.required | — |
273
- | bool | Toggle | — | default: false |
274
-
275
- **Auto-generated sections per featureType:**
276
-
277
- | featureType | Sections generated |
278
- |---|---|
279
- | data-centric | list, create, detail |
280
- | workflow | list, create, detail, edit |
281
- | integration | list, detail, config |
282
- | reporting | dashboard |
283
- | full-module | list, create, detail, edit, dashboard |
284
-
285
- **For each auto-generated section:**
286
-
287
- 1. **list section:** SmartTable with all non-long-text attributes as columns (convention or columnDefs based on depth), actions = [view, edit, delete], defaultSort = { createdAt, desc }
288
- 2. **create section:** SmartForm with all writable attributes as fields, component inferred from type
289
- 3. **detail section:** DetailCard with all attributes + child SmartTable for each 1:N relationship
290
- 4. **edit section:** Same as create but pre-filled (mode: edit)
291
- 5. **dashboard section:** Trigger 3d (dashboard specification)
292
-
293
- **If entity has a status/enum field AND lifeCycles exists:**
294
- - list section: status column gets `format: badge`, `colorMap: stateMachine:{Entity}`
295
- - list section: rowActions get `showWhen` conditions based on state machine transitions
296
- - detail section: add StatusBadge resource + transition action buttons
284
+ See [references/spec-auto-inference.md](../references/spec-auto-inference.md) for complete inference rules:
285
+ - Entity attribute → SmartTable column mapping (9 type rules)
286
+ - Entity attribute SmartForm field mapping (8 type rules)
287
+ - Auto-generated sections per featureType (5 types)
288
+ - Section generation rules (list, create, detail, edit, dashboard)
289
+ - Status/lifecycle enhancement rules
297
290
 
298
291
  Write auto-generated sections to `specification.sections[]` via ba-writer.enrichSection()
299
292
 
@@ -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
- > **STRUCTURE CARD: specification.sections[]** Resources MUST include full depth definitions.
126
- > ```json
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
- > **STRUCTURE CARD: specification.uiWireframes[]** ALL fields below are MANDATORY.
222
- > ```json
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
- When a "dashboard" section is selected, capture structured KPI and chart data **in addition** to the standard ASCII mockup.
317
-
318
- 1. **Ask client for KPIs** via AskUserQuestion (batch):
319
- - KPI name and metric description
320
- - Visualization type: `kpi-card`, `bar`, `line`, `pie`, `area`, `donut`, `stacked-bar`
321
- - Data source entity
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
 
@@ -161,7 +161,7 @@ Module → Sections → Resources (levels 3-4-5 of the hierarchy).
161
161
 
162
162
  #### 8f. SeedData Core
163
163
 
164
- 5 MANDATORY typed arrays — each with structured objects, NOT flat strings or objects.
164
+ 7 MANDATORY typed arrays — each with structured objects, NOT flat strings or objects.
165
165
 
166
166
  > **STRUCTURE CARD: specification.seedDataCore**
167
167
  > ```json
@@ -169,6 +169,16 @@ Module → Sections → Resources (levels 3-4-5 of the hierarchy).
169
169
  > "navigationModules": [
170
170
  > { "code": "{module}", "label": "{Module Name}", "icon": "list", "route": "/business/{app}/{module}", "parentCode": "{app}", "sort": 1 }
171
171
  > ],
172
+ > "navigationSections": [
173
+ > { "code": "list", "label": "Liste", "icon": "List", "route": "/business/{app}/{module}/list", "parentCode": "{module}", "permission": "business.{app}.{module}.read", "sort": 1 },
174
+ > { "code": "detail", "label": "Détail", "icon": "FileText", "route": "/business/{app}/{module}/detail/:id", "parentCode": "{module}", "permission": "business.{app}.{module}.read", "sort": 2 },
175
+ > { "code": "create", "label": "Créer", "icon": "Plus", "route": "/business/{app}/{module}/create", "parentCode": "{module}", "permission": "business.{app}.{module}.create", "sort": 3 }
176
+ > ],
177
+ > "navigationResources": [
178
+ > { "code": "{module}-grid", "type": "SmartTable", "entity": "{Entity}", "parentCode": "list", "permission": "business.{app}.{module}.read" },
179
+ > { "code": "{module}-form", "type": "SmartForm", "entity": "{Entity}", "parentCode": "create", "permission": "business.{app}.{module}.create" },
180
+ > { "code": "{module}-detail-card", "type": "DetailCard", "entity": "{Entity}", "parentCode": "detail", "permission": "business.{app}.{module}.read" }
181
+ > ],
172
182
  > "navigationTranslations": [
173
183
  > { "moduleCode": "{module}", "language": "fr", "label": "..." },
174
184
  > { "moduleCode": "{module}", "language": "en", "label": "..." },
@@ -189,9 +199,68 @@ Module → Sections → Resources (levels 3-4-5 of the hierarchy).
189
199
  > ]
190
200
  > }
191
201
  > ```
192
- > **MANDATORY:** All 5 arrays must be present. Each element must be an object, NOT a string.
202
+ > **MANDATORY:** All 7 arrays must be present. Each element must be an object, NOT a string.
203
+ > **CRITICAL:** `navigationSections` and `navigationResources` are DERIVED from `specification.sections[]` — use the transform algorithm below (section 8f-bis).
193
204
  > **FORBIDDEN:** Do NOT use `navigationModule` (singular string), `permissions` as flat string array, `rolePermissions` as flat object, `permissionsConstants` as comma-separated string.
194
205
 
206
+ #### 8f-bis. Transform Sections into Navigation SeedData
207
+
208
+ > **CRITICAL:** `navigationSections` and `navigationResources` must be generated from `specification.sections[]`.
209
+ > This ensures the navigation hierarchy (Module → Section → Resource) is complete in the database.
210
+
211
+ **Transform algorithm:**
212
+
213
+ ```javascript
214
+ // 1. Transform specification.sections[] into navigationSections
215
+ const navigationSections = specification.sections.map((section, index) => ({
216
+ code: section.code, // e.g., "list", "detail", "dashboard"
217
+ label: section.labels.fr, // Default language (fr)
218
+ icon: section.icon, // Lucide icon name
219
+ route: section.route, // Full route path
220
+ parentCode: metadata.module, // Module code (parent)
221
+ permission: section.permission, // Required permission
222
+ sort: index + 1 // Display order (1-based)
223
+ }));
224
+
225
+ // 2. Transform specification.sections[].resources[] into navigationResources
226
+ const navigationResources = specification.sections.flatMap(section =>
227
+ section.resources.map(resource => ({
228
+ code: resource.code, // e.g., "employees-grid"
229
+ type: resource.type, // e.g., "SmartTable", "SmartForm"
230
+ entity: resource.entity, // e.g., "Employee"
231
+ parentCode: section.code, // Section code (parent)
232
+ permission: resource.permission // Optional (can inherit from section)
233
+ }))
234
+ );
235
+ ```
236
+
237
+ **Write to seedDataCore:**
238
+
239
+ ```
240
+ ba-writer.enrichSection({
241
+ feature_id,
242
+ section: "specification",
243
+ data: {
244
+ seedDataCore: {
245
+ navigationModules: [ ... ],
246
+ navigationSections: navigationSections, // DERIVED
247
+ navigationResources: navigationResources, // DERIVED
248
+ navigationTranslations: [ ... ],
249
+ permissions: [ ... ],
250
+ rolePermissions: [ ... ],
251
+ permissionConstants: [ ... ]
252
+ }
253
+ }
254
+ })
255
+ ```
256
+
257
+ **Validation:**
258
+
259
+ - EVERY section in `specification.sections[]` MUST appear in `navigationSections`
260
+ - EVERY resource in `specification.sections[].resources[]` MUST appear in `navigationResources`
261
+ - Total count: `navigationSections.length === specification.sections.length`
262
+ - Total count: `navigationResources.length === sum(sections[].resources.length)`
263
+
195
264
  #### 8g. Gherkin Scenarios
196
265
 
197
266
  BDD acceptance tests per UC.