@atlashub/smartstack-cli 3.2.0 → 3.3.1
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 +605 -25
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/ba-reader.md +1 -1
- package/templates/agents/ba-writer.md +8 -1
- package/templates/skills/business-analyse/SKILL.md +21 -23
- package/templates/skills/business-analyse/_architecture.md +123 -0
- package/templates/skills/business-analyse/_elicitation.md +206 -0
- package/templates/skills/business-analyse/_module-loop.md +56 -0
- package/templates/skills/business-analyse/_shared.md +75 -531
- package/templates/skills/business-analyse/_suggestions.md +34 -0
- 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 +294 -0
- 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/handoff-schema.json +1 -1
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +1 -1
- package/templates/skills/business-analyse/steps/step-00-init.md +13 -10
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +2 -0
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +5 -3
- package/templates/skills/business-analyse/steps/{step-03-specify.md → step-03a-specify.md} +16 -606
- package/templates/skills/business-analyse/steps/step-03b-compile.md +670 -0
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +7 -5
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +727 -0
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +479 -0
- package/templates/skills/business-analyse/steps/step-06-extract.md +4 -2
- package/templates/skills/business-analyse/templates/tpl-frd.md +1 -1
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +161 -0
- package/templates/skills/business-analyse/templates/tpl-progress.md +171 -0
- package/templates/skills/business-analyse/steps/step-05-handoff.md +0 -1682
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Business Analysis - Suggestions & Context7 (_suggestions.md)
|
|
2
|
+
|
|
3
|
+
> **Loaded by:** step-01-cadrage, step-04-consolidation
|
|
4
|
+
> **Purpose:** Proactive suggestion patterns and Context7 library references
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Proactive Suggestions
|
|
9
|
+
|
|
10
|
+
After scope definition in step-01, the skill suggests complementary modules/sections:
|
|
11
|
+
|
|
12
|
+
1. Analyze feature type and scope from questionnaire answers
|
|
13
|
+
2. Load `patterns/suggestion-catalog.md`
|
|
14
|
+
3. Match against catalog patterns
|
|
15
|
+
4. Present suggestions via AskUserQuestion (accept/reject per suggestion)
|
|
16
|
+
5. Store in feature.json.suggestions[]
|
|
17
|
+
|
|
18
|
+
Accepted suggestions become candidates for future /business-analyse runs.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Context7 (Step 04)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Prompt pattern:
|
|
26
|
+
"use context7 with /facebook/react and /i18next/react-i18next
|
|
27
|
+
to generate {component} following SmartStack patterns"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Libraries:
|
|
31
|
+
- `/facebook/react` - React 19 patterns
|
|
32
|
+
- `/i18next/react-i18next` - Internationalization
|
|
33
|
+
- `/remix-run/react-router` - React Router v7
|
|
34
|
+
- `/lucide-icons/lucide-react` - Icons
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
> - Les rôles identifiés en Q6.1-Q6.4 sont des **ensembles de permissions**, pas des données métier
|
|
45
45
|
> - L'accès est contrôlé par des permissions attribuées aux rôles, pas par des propriétés d'entité
|
|
46
46
|
> - Ne jamais proposer de créer une entité `Role`, `UserRole`, ou un attribut `User.Role`
|
|
47
|
-
> - Le mapping rôle → permissions se fait dans la **Permission Matrix** (step-
|
|
47
|
+
> - Le mapping rôle → permissions se fait dans la **Permission Matrix** (step-03a-specify)
|
|
48
48
|
|
|
49
49
|
## Elicitation Guide
|
|
50
50
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Elicitation Questionnaire - Business Analysis
|
|
2
2
|
|
|
3
|
-
> **Usage:** Structured questions for step-01-cadrage and step-
|
|
3
|
+
> **Usage:** Structured questions for step-01-cadrage and step-03a-specify
|
|
4
4
|
> **Standard:** BABOK v3 - Elicitation Techniques (VibeCoding-focused)
|
|
5
5
|
> **Model:** OPUS with ULTRATHINK
|
|
6
6
|
> **Total:** ~68 targeted questions (dev-relevant only)
|
|
@@ -284,7 +284,7 @@
|
|
|
284
284
|
| Phase | Categories utilisees |
|
|
285
285
|
|-------|---------------------|
|
|
286
286
|
| step-01-cadrage | 00 (si mode application), 01, 02, 03, 14, 15 + conditionnelles (05, 06, 08, 09, 10) |
|
|
287
|
-
| step-
|
|
287
|
+
| step-03a-specify (par module) | 04, 07, 11, 12, 13 (chargees par module) |
|
|
288
288
|
|
|
289
289
|
### Phase de cadrage
|
|
290
290
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# React Components - Business Analyse Viewer
|
|
2
2
|
|
|
3
3
|
> **Usage:** React component that renders feature.json directly
|
|
4
|
-
> **Loaded in:** step-
|
|
4
|
+
> **Loaded in:** step-05b-deploy.md
|
|
5
5
|
> **Data source (module):** `docs/business/{app}/{module}/business-analyse/v{X.Y}/feature.json`
|
|
6
6
|
> **Data source (application):** `docs/business/{app}/business-analyse/v{X.Y}/feature.json`
|
|
7
7
|
> **Related:** `react/application-viewer.md` for application-level view
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# TypeScript Schema - Feature JSON Types
|
|
2
2
|
|
|
3
3
|
> **Usage:** TypeScript interfaces aligned with feature-schema.json and application-schema.json
|
|
4
|
-
> **Loaded in:** step-
|
|
4
|
+
> **Loaded in:** step-05b-deploy.md (for web app rendering)
|
|
5
5
|
> **Source (module):** `docs/business/{app}/{module}/business-analyse/v{X.Y}/feature.json`
|
|
6
6
|
> **Source (application):** `docs/business/{app}/business-analyse/v{X.Y}/feature.json`
|
|
7
7
|
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# HTML Data Mapping Reference (references/html-data-mapping.md)
|
|
2
|
+
|
|
3
|
+
> **Used by:** step-05b-deploy (section 3: Deploy Interactive HTML Document)
|
|
4
|
+
> **Purpose:** Exact mapping from feature.json to HTML FEATURE_DATA and EMBEDDED_ARTIFACTS objects
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## FEATURE_DATA Mapping
|
|
9
|
+
|
|
10
|
+
Build a JSON object following this **exact mapping** from feature.json to the HTML data model:
|
|
11
|
+
|
|
12
|
+
```javascript
|
|
13
|
+
{
|
|
14
|
+
metadata: {
|
|
15
|
+
applicationName: master.metadata.application, // e.g. "RH"
|
|
16
|
+
applicationId: master.id, // e.g. "FEAT-001"
|
|
17
|
+
version: master.version, // e.g. "1.0"
|
|
18
|
+
createdAt: master.metadata.createdAt,
|
|
19
|
+
lastModified: master.metadata.updatedAt
|
|
20
|
+
},
|
|
21
|
+
cadrage: {
|
|
22
|
+
problem: {
|
|
23
|
+
description: master.cadrage.problem, // string → problem.description
|
|
24
|
+
trigger: master.cadrage.trigger, // string → problem.trigger
|
|
25
|
+
impactedPeople: "", // not in feature.json, client fills
|
|
26
|
+
history: "",
|
|
27
|
+
consequences: ""
|
|
28
|
+
},
|
|
29
|
+
current: {
|
|
30
|
+
tools: master.cadrage.asIs, // string → current.tools
|
|
31
|
+
steps: [], // client can add process steps
|
|
32
|
+
painPoints: master.cadrage.stakeholders
|
|
33
|
+
.flatMap(s => s.painPoints || []).join("\n"), // aggregate all painPoints
|
|
34
|
+
errors: ""
|
|
35
|
+
},
|
|
36
|
+
vision: {
|
|
37
|
+
changes: master.cadrage.toBe, // string → vision.changes
|
|
38
|
+
results: master.cadrage.acceptanceCriteria
|
|
39
|
+
.map(ac => ac.criterion).join("\n"), // AC → results (one per line)
|
|
40
|
+
successSign: ""
|
|
41
|
+
},
|
|
42
|
+
stakeholders: master.cadrage.stakeholders.map(s => ({
|
|
43
|
+
role: s.role,
|
|
44
|
+
function: s.function || "",
|
|
45
|
+
tasks: s.tasks || [],
|
|
46
|
+
frequency: mapFrequency(s.frequency), // "Quotidien"→"daily", etc.
|
|
47
|
+
access: mapAccess(s.involvement), // "decision-maker"→"admin", "end-user"→"contributor"
|
|
48
|
+
frustrations: (s.painPoints || []).join("\n")
|
|
49
|
+
})),
|
|
50
|
+
scope: {
|
|
51
|
+
vital: (master.cadrage.globalScope.mustHave || [])
|
|
52
|
+
.map(item => ({ name: item, description: "" })), // string[] → {name,description}[]
|
|
53
|
+
important: (master.cadrage.globalScope.shouldHave || [])
|
|
54
|
+
.map(item => ({ name: item, description: "" })),
|
|
55
|
+
optional: (master.cadrage.globalScope.couldHave || [])
|
|
56
|
+
.map(item => ({ name: item, description: "" })),
|
|
57
|
+
excluded: (master.cadrage.globalScope.outOfScope || [])
|
|
58
|
+
.map(item => ({ name: item, description: "" }))
|
|
59
|
+
},
|
|
60
|
+
risks: (master.cadrage.risks || []).map(r => ({
|
|
61
|
+
description: r.description,
|
|
62
|
+
probability: r.probability, // "high" | "medium" | "low"
|
|
63
|
+
impact: r.impact,
|
|
64
|
+
mitigation: r.mitigation || ""
|
|
65
|
+
})),
|
|
66
|
+
assumptions: "",
|
|
67
|
+
success: {
|
|
68
|
+
definition: (master.cadrage.acceptanceCriteria || [])
|
|
69
|
+
.map(ac => ac.criterion).join("\n"),
|
|
70
|
+
metrics: "",
|
|
71
|
+
timeline: "",
|
|
72
|
+
minimumConditions: ""
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
modules: master.modules.map(m => ({
|
|
76
|
+
code: m.code,
|
|
77
|
+
name: m.code, // module code as name
|
|
78
|
+
description: m.description || "",
|
|
79
|
+
featureType: m.featureType || "data-centric",
|
|
80
|
+
priority: m.priority || "must",
|
|
81
|
+
entities: m.entities || [],
|
|
82
|
+
status: m.status || "handed-off"
|
|
83
|
+
})),
|
|
84
|
+
dependencies: (master.dependencyGraph?.edges || []).map(e => ({
|
|
85
|
+
from: e.from,
|
|
86
|
+
to: e.to,
|
|
87
|
+
description: e.description || ""
|
|
88
|
+
})),
|
|
89
|
+
moduleSpecs: {
|
|
90
|
+
// FOR EACH module: read module feature.json, then map:
|
|
91
|
+
// [moduleCode]: { useCases, businessRules, entities, permissions, notes, mockupNotes }
|
|
92
|
+
},
|
|
93
|
+
consolidation: {
|
|
94
|
+
interactions: (master.consolidation?.crossModuleInteractions || []).map(i => ({
|
|
95
|
+
from: i.fromModule,
|
|
96
|
+
to: i.toModule,
|
|
97
|
+
description: i.description || ""
|
|
98
|
+
})),
|
|
99
|
+
e2eFlows: (master.consolidation?.e2eFlows || []).map(f => ({
|
|
100
|
+
name: f.name,
|
|
101
|
+
steps: (f.steps || []).map(s => ({ module: s.module, action: s.action })),
|
|
102
|
+
actors: (f.steps || []).map(s => s.permission).join(", ")
|
|
103
|
+
}))
|
|
104
|
+
},
|
|
105
|
+
handoff: master.handoff || {}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Module Specs Mapping
|
|
110
|
+
|
|
111
|
+
For EACH module in `master.modules[]`:
|
|
112
|
+
|
|
113
|
+
1. Read the module feature.json at `master.modules[i].featureJsonPath`
|
|
114
|
+
2. Map to `moduleSpecs[moduleCode]`:
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
moduleSpecs[moduleCode] = {
|
|
118
|
+
useCases: (moduleFeature.specification?.useCases || []).map(uc => ({
|
|
119
|
+
name: uc.name,
|
|
120
|
+
actor: uc.primaryActor,
|
|
121
|
+
steps: (uc.mainScenario || []).join("\n"), // array → newline-separated string
|
|
122
|
+
alternative: (uc.alternativeScenarios || [])
|
|
123
|
+
.map(a => a.name + ": " + (a.steps || []).join(", ")).join("\n")
|
|
124
|
+
})),
|
|
125
|
+
businessRules: (moduleFeature.analysis?.businessRules || []).map(br => ({
|
|
126
|
+
name: br.name,
|
|
127
|
+
category: br.category, // "validation"|"calculation"|"workflow"|"security"|"data"
|
|
128
|
+
statement: br.statement,
|
|
129
|
+
example: (br.examples || []).map(e => e.input + " → " + e.expected).join("; ")
|
|
130
|
+
})),
|
|
131
|
+
entities: (moduleFeature.analysis?.entities || []).map(ent => ({
|
|
132
|
+
name: ent.name,
|
|
133
|
+
description: ent.description || "",
|
|
134
|
+
attributes: (ent.attributes || []).map(a => ({
|
|
135
|
+
name: a.name,
|
|
136
|
+
description: a.description || ""
|
|
137
|
+
})),
|
|
138
|
+
relationships: (ent.relationships || []).map(r =>
|
|
139
|
+
r.target + " (" + r.type + ") - " + (r.description || "")
|
|
140
|
+
)
|
|
141
|
+
})),
|
|
142
|
+
permissions: buildPermissionKeys(moduleFeature), // see below
|
|
143
|
+
notes: "",
|
|
144
|
+
mockupNotes: "" // Deprecated: wireframes now embedded separately in EMBEDDED_ARTIFACTS
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Permission Keys Function
|
|
149
|
+
|
|
150
|
+
The HTML uses `"Role|Action"` format (e.g. `"RH Admin|Consulter"`):
|
|
151
|
+
|
|
152
|
+
```javascript
|
|
153
|
+
function buildPermissionKeys(moduleFeature) {
|
|
154
|
+
const keys = [];
|
|
155
|
+
const matrix = moduleFeature.specification?.permissionMatrix;
|
|
156
|
+
if (!matrix) return keys;
|
|
157
|
+
const actionMap = { read: "Consulter", create: "Creer", update: "Modifier",
|
|
158
|
+
delete: "Supprimer", validate: "Valider", export: "Exporter",
|
|
159
|
+
submit: "Valider", import: "Creer" };
|
|
160
|
+
(matrix.roleAssignments || []).forEach(ra => {
|
|
161
|
+
(ra.permissions || []).forEach(permPath => {
|
|
162
|
+
const action = permPath.split(".").pop(); // last segment = action
|
|
163
|
+
const uiAction = actionMap[action] || action;
|
|
164
|
+
keys.push(ra.role + "|" + uiAction);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
return keys;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Frequency Mapping
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
"Quotidien" → "daily", "Hebdomadaire" → "weekly", "Mensuel" → "monthly"
|
|
175
|
+
Default: "daily"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Access Mapping (involvement → access)
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
"decision-maker" → "admin", "end-user" with manager-like tasks → "manager"
|
|
182
|
+
"end-user" → "contributor", "observer" → "viewer"
|
|
183
|
+
Default: "contributor"
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## EMBEDDED_ARTIFACTS Mapping
|
|
189
|
+
|
|
190
|
+
Build a JSON object containing ALL visual artifacts from feature.json:
|
|
191
|
+
|
|
192
|
+
```javascript
|
|
193
|
+
{
|
|
194
|
+
wireframes: {
|
|
195
|
+
// FOR EACH module: extract all wireframes from module feature.json
|
|
196
|
+
// [moduleCode]: [ {screen, format, content, elements, componentMapping, layout, description} ]
|
|
197
|
+
},
|
|
198
|
+
e2eFlows: [
|
|
199
|
+
// Extract from master consolidation.e2eFlows[]
|
|
200
|
+
// { name, diagram, steps, actors }
|
|
201
|
+
],
|
|
202
|
+
dependencyGraph: {
|
|
203
|
+
// Extract from master dependencyGraph
|
|
204
|
+
// nodes: [ {id, label, type} ], edges: [ {from, to, description} ]
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Wireframes Mapping
|
|
210
|
+
|
|
211
|
+
For EACH module in `master.modules[]`:
|
|
212
|
+
|
|
213
|
+
```javascript
|
|
214
|
+
// Read the module feature.json
|
|
215
|
+
const moduleFeature = readModuleFeature(moduleCode);
|
|
216
|
+
const wireframes = (moduleFeature.specification?.uiWireframes || []).map(wf => ({
|
|
217
|
+
screen: wf.screen, // e.g. "UM-list", "UM-form"
|
|
218
|
+
section: wf.section, // e.g. "list", "form"
|
|
219
|
+
format: wf.mockupFormat || "ascii", // "ascii" | "svg"
|
|
220
|
+
content: wf.mockup, // ASCII art or SVG markup
|
|
221
|
+
description: wf.description || "",
|
|
222
|
+
elements: wf.elements || [], // ["DataGrid", "FilterBar", ...]
|
|
223
|
+
actions: wf.actions || [], // ["filter", "sort", "create", ...]
|
|
224
|
+
componentMapping: wf.componentMapping || [], // [{ wireframeElement, reactComponent }]
|
|
225
|
+
layout: wf.layout || null, // { type, regions: [...] }
|
|
226
|
+
permissionsRequired: wf.permissionsRequired || []
|
|
227
|
+
}));
|
|
228
|
+
|
|
229
|
+
// Store in artifacts object
|
|
230
|
+
EMBEDDED_ARTIFACTS.wireframes[moduleCode] = wireframes;
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### E2E Flows Mapping
|
|
234
|
+
|
|
235
|
+
From master consolidation:
|
|
236
|
+
|
|
237
|
+
```javascript
|
|
238
|
+
EMBEDDED_ARTIFACTS.e2eFlows = (master.consolidation?.e2eFlows || []).map(flow => ({
|
|
239
|
+
name: flow.name,
|
|
240
|
+
diagram: generateE2EDiagram(flow), // ASCII diagram from flow.steps[]
|
|
241
|
+
steps: flow.steps || [], // [{ module, action, permission }]
|
|
242
|
+
actors: Array.from(new Set((flow.steps || [])
|
|
243
|
+
.map(s => s.permission?.split(".")[0]) // Extract role from permission path
|
|
244
|
+
.filter(Boolean))).join(", "),
|
|
245
|
+
modules: Array.from(new Set((flow.steps || [])
|
|
246
|
+
.map(s => s.module))).join(" → ")
|
|
247
|
+
}));
|
|
248
|
+
|
|
249
|
+
function generateE2EDiagram(flow) {
|
|
250
|
+
// Generate ASCII diagram from flow.steps[]
|
|
251
|
+
// Example output:
|
|
252
|
+
// "Customer ──[read]──→ Order ──[create]──→ Invoice ──[send]──→"
|
|
253
|
+
// " (Orders) (Orders) (Invoices)"
|
|
254
|
+
// " Contributor Manager System"
|
|
255
|
+
|
|
256
|
+
const stepDiagrams = (flow.steps || []).map(s =>
|
|
257
|
+
`${s.action}(${s.module})`
|
|
258
|
+
).join(" ──→ ");
|
|
259
|
+
|
|
260
|
+
return stepDiagrams;
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Dependency Graph Mapping
|
|
265
|
+
|
|
266
|
+
From master dependencyGraph:
|
|
267
|
+
|
|
268
|
+
```javascript
|
|
269
|
+
EMBEDDED_ARTIFACTS.dependencyGraph = {
|
|
270
|
+
nodes: (master.modules || []).map(m => ({
|
|
271
|
+
id: m.code,
|
|
272
|
+
label: m.code,
|
|
273
|
+
type: m.featureType || "data-centric"
|
|
274
|
+
})),
|
|
275
|
+
edges: (master.dependencyGraph?.edges || []).map(e => ({
|
|
276
|
+
from: e.from,
|
|
277
|
+
to: e.to,
|
|
278
|
+
description: e.description || ""
|
|
279
|
+
}))
|
|
280
|
+
};
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Usage in step-05b-deploy
|
|
286
|
+
|
|
287
|
+
1. Serialize the FEATURE_DATA object as JSON (with 2-space indentation for readability)
|
|
288
|
+
2. Serialize the EMBEDDED_ARTIFACTS object as JSON (with 2-space indentation)
|
|
289
|
+
3. Replace `{{FEATURE_DATA}}` with the serialized FEATURE_DATA JSON
|
|
290
|
+
4. Replace `{{EMBEDDED_ARTIFACTS}}` with the serialized EMBEDDED_ARTIFACTS JSON
|
|
291
|
+
5. Replace `{{APPLICATION_NAME}}` → `{application_name}` (still used in `<title>` and header)
|
|
292
|
+
6. Replace `{{APPLICATION_ID}}` → `{feature_id}` (still used in `APP_KEY`)
|
|
293
|
+
7. Replace `{{VERSION}}` → `{version}`
|
|
294
|
+
8. Replace `{{CREATED_AT}}` → `{ISO timestamp}`
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
|
|
46
|
-
"$comment": "Sub-schema loading guide per BA step: step-00-init → metadata-schema.json | step-01-cadrage → discovery-schema.json (module) OR application-schema.json (master) | step-02-decomposition → application-schema.json (modules[], dependencyGraph) | step-
|
|
46
|
+
"$comment": "Sub-schema loading guide per BA step: step-00-init → metadata-schema.json | step-01-cadrage → discovery-schema.json (module) OR application-schema.json (master) | step-02-decomposition → application-schema.json (modules[], dependencyGraph) | step-03a-specify → analysis-schema.json | step-03b-compile → specification-schema.json | step-04-consolidation → validation-schema.json + application-schema.json (consolidation) | step-05a-handoff → handoff-schema.json | step-05b-deploy → (artifacts only)",
|
|
47
47
|
|
|
48
48
|
"$defs": {
|
|
49
49
|
"stepStatus": { "$ref": "shared/common-defs.json#/$defs/stepStatus" },
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "analysis-schema.json",
|
|
4
4
|
"title": "SmartStack BA - Analysis",
|
|
5
|
-
"description": "Module-level analysis: objectives, business rules, entities, process flows, integrations, data lifecycle. Enriched by step-
|
|
5
|
+
"description": "Module-level analysis: objectives, business rules, entities, process flows, integrations, data lifecycle. Enriched by step-03a-specify.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|
|
8
8
|
"objectives": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "handoff-schema.json",
|
|
4
4
|
"title": "SmartStack BA - Handoff",
|
|
5
|
-
"description": "Module-level handoff: file mapping (7 categories), BR-to-code mapping, API endpoint summary. Used by step-
|
|
5
|
+
"description": "Module-level handoff: file mapping (7 categories), BR-to-code mapping, API endpoint summary. Used by step-05a-handoff.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|
|
8
8
|
"complexity": { "type": "string", "enum": ["simple", "medium", "complex"] },
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "specification-schema.json",
|
|
4
4
|
"title": "SmartStack BA - Specification",
|
|
5
|
-
"description": "Module-level specification: actors, use cases, FRs, permissions, navigation, wireframes, dashboards, sections, resources. Enriched by step-
|
|
5
|
+
"description": "Module-level specification: actors, use cases, FRs, permissions, navigation, wireframes, dashboards, sections, resources. Enriched by step-03b-compile.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|
|
8
8
|
"actors": {
|
|
@@ -4,6 +4,8 @@ description: Initialize Business Analysis - Parse flags, route use case, create
|
|
|
4
4
|
next_step: steps/step-01-cadrage.md
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
> **Context files:** `_shared.md`
|
|
8
|
+
|
|
7
9
|
# Step 00: Initialize Business Analysis
|
|
8
10
|
|
|
9
11
|
Initialize the business analysis workflow by parsing input flags, routing to the appropriate use case handler, and creating the initial feature.json structure.
|
|
@@ -294,17 +296,18 @@ Determine the language for analysis and code generation.
|
|
|
294
296
|
|
|
295
297
|
**Check config:**
|
|
296
298
|
- Retrieve `businessContext.language` from config
|
|
297
|
-
- Default: "
|
|
299
|
+
- Default: "fr" (Francais)
|
|
298
300
|
|
|
299
301
|
**If not in config OR auto_mode = false:**
|
|
300
302
|
```
|
|
301
303
|
Ask via AskUserQuestion:
|
|
302
|
-
question: "
|
|
303
|
-
header: "
|
|
304
|
+
question: "Quelle langue pour l'analyse ?"
|
|
305
|
+
header: "Langue"
|
|
304
306
|
options:
|
|
307
|
+
- label: "Francais (fr)"
|
|
305
308
|
- label: "English (en)"
|
|
306
|
-
- label: "
|
|
307
|
-
- label: "
|
|
309
|
+
- label: "Italiano (it)"
|
|
310
|
+
- label: "Deutsch (de)"
|
|
308
311
|
```
|
|
309
312
|
|
|
310
313
|
**Store:**
|
|
@@ -372,12 +375,12 @@ Cache file location: `docs/business/{app}/business-analyse/.schema-cache.json`
|
|
|
372
375
|
```
|
|
373
376
|
IF EXISTS docs/business/{app}/business-analyse/.schema-cache.json:
|
|
374
377
|
Read cache file
|
|
375
|
-
IF cache.version == "
|
|
376
|
-
Display: "✓ Schemas already deployed (
|
|
378
|
+
IF cache.version == "{CLI_VERSION}" (from package.json):
|
|
379
|
+
Display: "✓ Schemas already deployed ({CLI_VERSION}) - skipping"
|
|
377
380
|
SKIP deployment (trust cache)
|
|
378
381
|
→ Go to Step 10
|
|
379
382
|
ELSE:
|
|
380
|
-
Display: "⚠ Schema version mismatch (cache: {cache.version}, current:
|
|
383
|
+
Display: "⚠ Schema version mismatch (cache: {cache.version}, current: {CLI_VERSION})"
|
|
381
384
|
Proceed to deployment
|
|
382
385
|
ELSE:
|
|
383
386
|
Display: "Deploying schemas (first time)..."
|
|
@@ -418,7 +421,7 @@ docs/business/{app}/business-analyse/schemas/
|
|
|
418
421
|
|
|
419
422
|
```json
|
|
420
423
|
{
|
|
421
|
-
"version": "
|
|
424
|
+
"version": "{CLI_VERSION}",
|
|
422
425
|
"deployedAt": "{ISO timestamp}",
|
|
423
426
|
"schemas": [
|
|
424
427
|
"feature-schema.json",
|
|
@@ -612,7 +615,7 @@ NEXT STEP: step-01-analyse ({use_case} mode)
|
|
|
612
615
|
After showing initialization summary, proceed to `./step-01-cadrage.md`
|
|
613
616
|
|
|
614
617
|
**Question mode (-q):** EXIT after ba-reader answers the question.
|
|
615
|
-
**Micro mode (-m):** Load `./step-
|
|
618
|
+
**Micro mode (-m):** Load `./step-05a-handoff.md` directly.
|
|
616
619
|
**Extract mode (-x):** Load `./step-06-extract.md` with `{json_data}` from parsed JSON file.
|
|
617
620
|
|
|
618
621
|
**Pass context variables:**
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
name: step-02-decomposition
|
|
3
3
|
description: Module decomposition - identify modules, dependency graph, topological sort, client checkpoint
|
|
4
4
|
model: sonnet
|
|
5
|
-
next_step: steps/step-
|
|
5
|
+
next_step: steps/step-03a-specify.md
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
> **Context files:** `_shared.md`
|
|
9
|
+
|
|
8
10
|
# Step 2: Decomposition
|
|
9
11
|
|
|
10
12
|
## MANDATORY EXECUTION RULES
|
|
@@ -36,7 +38,7 @@ ba-reader.findFeature({feature_id})
|
|
|
36
38
|
|
|
37
39
|
IF status already "decomposed":
|
|
38
40
|
Display: "Decomposition already completed. Loading next step."
|
|
39
|
-
Load: steps/step-
|
|
41
|
+
Load: steps/step-03a-specify.md
|
|
40
42
|
STOP
|
|
41
43
|
|
|
42
44
|
### 2. Module Identification
|
|
@@ -290,4 +292,4 @@ When `workflow.mode = "module"` or only 1 scope item identified:
|
|
|
290
292
|
|
|
291
293
|
## NEXT STEP
|
|
292
294
|
|
|
293
|
-
Load: `./step-
|
|
295
|
+
Load: `./step-03a-specify.md`
|