@atlashub/smartstack-cli 2.3.0 → 2.4.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/.documentation/cli-commands.html +1 -1
- package/.documentation/init.html +1 -1
- package/.documentation/installation.html +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/ba-reader.md +114 -9
- package/templates/agents/ba-writer.md +108 -27
- package/templates/agents/mcp-healthcheck.md +1 -1
- package/templates/ralph/README.md +1 -1
- package/templates/ralph/ralph.config.yaml +1 -1
- package/templates/skills/_shared.md +60 -0
- package/templates/skills/application/steps/step-00-init.md +32 -8
- package/templates/skills/business-analyse/SKILL.md +65 -42
- package/templates/skills/business-analyse/_shared.md +161 -51
- package/templates/skills/business-analyse/questionnaire/00-application.md +166 -0
- package/templates/skills/business-analyse/questionnaire.md +63 -19
- package/templates/skills/business-analyse/react/application-viewer.md +242 -0
- package/templates/skills/business-analyse/react/components.md +60 -8
- package/templates/skills/business-analyse/react/schema.md +238 -7
- package/templates/skills/business-analyse/schemas/application-schema.json +389 -0
- package/templates/skills/business-analyse/schemas/feature-schema.json +74 -3
- package/templates/skills/business-analyse/steps/step-00-init.md +110 -44
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +259 -0
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +282 -0
- package/templates/skills/business-analyse/steps/step-03-specify.md +489 -0
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +336 -0
- package/templates/skills/business-analyse/steps/step-05-handoff.md +1119 -0
- package/templates/skills/mcp/SKILL.md +2 -2
- package/templates/skills/business-analyse/steps/step-01-analyse.md +0 -523
- package/templates/skills/business-analyse/steps/step-02-specify.md +0 -899
- package/templates/skills/business-analyse/steps/step-03-validate.md +0 -1009
- package/templates/skills/business-analyse/steps/step-04-handoff.md +0 -1802
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "application-schema.json",
|
|
4
|
+
"title": "SmartStack Business Analysis - Application Level",
|
|
5
|
+
"description": "Master feature.json for multi-module application analysis. Published to docs/business/{app}/business-analyse/v{X.Y}/feature.json",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["id", "version", "status", "scope", "metadata"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"id": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"pattern": "^FEAT-\\d{3,}$",
|
|
12
|
+
"description": "Unique feature identifier (e.g., FEAT-001)"
|
|
13
|
+
},
|
|
14
|
+
"version": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^\\d+\\.\\d+$",
|
|
17
|
+
"description": "Document version (e.g., 1.0, 1.1)"
|
|
18
|
+
},
|
|
19
|
+
"status": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"enum": ["draft", "framed", "decomposed", "specified", "consolidated", "handed-off"],
|
|
22
|
+
"description": "Application-level lifecycle status"
|
|
23
|
+
},
|
|
24
|
+
"scope": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"const": "application",
|
|
27
|
+
"description": "Marks this as an application-level feature.json"
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
"metadata": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"required": ["createdAt", "updatedAt", "application", "context", "language", "featureDescription"],
|
|
33
|
+
"properties": {
|
|
34
|
+
"createdAt": { "type": "string", "format": "date-time" },
|
|
35
|
+
"updatedAt": { "type": "string", "format": "date-time" },
|
|
36
|
+
"application": { "type": "string", "description": "Application name (PascalCase)" },
|
|
37
|
+
"context": { "type": "string", "const": "business" },
|
|
38
|
+
"language": { "type": "string", "enum": ["fr", "en", "it", "de"] },
|
|
39
|
+
"featureDescription": { "type": "string" },
|
|
40
|
+
"useCase": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"enum": ["application", "new", "refactoring"],
|
|
43
|
+
"description": "Which use case triggered this analysis"
|
|
44
|
+
},
|
|
45
|
+
"mcpAvailable": { "type": "boolean" },
|
|
46
|
+
"economyMode": { "type": "boolean" },
|
|
47
|
+
"workflow": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"description": "Iterative module loop state",
|
|
50
|
+
"properties": {
|
|
51
|
+
"mode": { "type": "string", "enum": ["application", "module"] },
|
|
52
|
+
"moduleOrder": {
|
|
53
|
+
"type": "array",
|
|
54
|
+
"items": { "type": "string" },
|
|
55
|
+
"description": "Topologically sorted module codes"
|
|
56
|
+
},
|
|
57
|
+
"currentModuleIndex": {
|
|
58
|
+
"type": "integer",
|
|
59
|
+
"minimum": 0,
|
|
60
|
+
"description": "Index into moduleOrder for current module being specified"
|
|
61
|
+
},
|
|
62
|
+
"completedModules": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": { "type": "string" },
|
|
65
|
+
"description": "Module codes that have been fully specified"
|
|
66
|
+
},
|
|
67
|
+
"currentModule": {
|
|
68
|
+
"type": ["string", "null"],
|
|
69
|
+
"description": "Code of the module currently being specified"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"steps": {
|
|
74
|
+
"type": "object",
|
|
75
|
+
"description": "Progress tracking per step",
|
|
76
|
+
"properties": {
|
|
77
|
+
"init": { "$ref": "#/$defs/stepStatus" },
|
|
78
|
+
"cadrage": { "$ref": "#/$defs/stepStatus" },
|
|
79
|
+
"decomposition": { "$ref": "#/$defs/stepStatus" },
|
|
80
|
+
"specify": { "$ref": "#/$defs/stepStatus" },
|
|
81
|
+
"consolidation": { "$ref": "#/$defs/stepStatus" },
|
|
82
|
+
"handoff": { "$ref": "#/$defs/stepStatus" }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
"cadrage": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"description": "Enriched by step-01-cadrage: application-level framing",
|
|
91
|
+
"properties": {
|
|
92
|
+
"problem": { "type": "string", "description": "Business problem to solve" },
|
|
93
|
+
"asIs": { "type": "string", "description": "Current situation" },
|
|
94
|
+
"toBe": { "type": "string", "description": "Target situation" },
|
|
95
|
+
"trigger": { "type": "string", "description": "What triggered this need" },
|
|
96
|
+
"stakeholders": {
|
|
97
|
+
"type": "array",
|
|
98
|
+
"items": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"required": ["role"],
|
|
101
|
+
"properties": {
|
|
102
|
+
"role": { "type": "string" },
|
|
103
|
+
"function": { "type": "string" },
|
|
104
|
+
"involvement": { "type": "string", "enum": ["approver", "decision-maker", "consulted", "informed", "end-user"] },
|
|
105
|
+
"tasks": { "type": "array", "items": { "type": "string" } },
|
|
106
|
+
"frequency": { "type": "string" },
|
|
107
|
+
"painPoints": { "type": "array", "items": { "type": "string" } }
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"globalScope": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"properties": {
|
|
114
|
+
"mustHave": { "type": "array", "items": { "type": "string" } },
|
|
115
|
+
"shouldHave": { "type": "array", "items": { "type": "string" } },
|
|
116
|
+
"couldHave": { "type": "array", "items": { "type": "string" } },
|
|
117
|
+
"outOfScope": { "type": "array", "items": { "type": "string" } }
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"applicationRoles": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"description": "Application-level roles (defined once, inherited by all modules)",
|
|
123
|
+
"items": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"required": ["role", "level"],
|
|
126
|
+
"properties": {
|
|
127
|
+
"role": { "type": "string", "description": "Role name (e.g., Sales Admin)" },
|
|
128
|
+
"description": { "type": "string" },
|
|
129
|
+
"level": { "type": "string", "enum": ["admin", "manager", "contributor", "viewer"], "description": "Permission hierarchy level" },
|
|
130
|
+
"permissionPattern": { "type": "string", "description": "Permission pattern (e.g., business.sales.* for admin)" }
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"risks": {
|
|
135
|
+
"type": "array",
|
|
136
|
+
"items": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"required": ["id", "type", "description"],
|
|
139
|
+
"properties": {
|
|
140
|
+
"id": { "type": "string", "pattern": "^RISK-\\d{3}$" },
|
|
141
|
+
"type": { "type": "string", "enum": ["business", "technical", "organizational"] },
|
|
142
|
+
"description": { "type": "string" },
|
|
143
|
+
"probability": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
144
|
+
"impact": { "type": "string", "enum": ["high", "medium", "low"] },
|
|
145
|
+
"priority": { "type": "string", "enum": ["critical", "medium", "low"] },
|
|
146
|
+
"mitigation": { "type": "string" }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"acceptanceCriteria": {
|
|
151
|
+
"type": "array",
|
|
152
|
+
"items": {
|
|
153
|
+
"type": "object",
|
|
154
|
+
"required": ["id", "criterion"],
|
|
155
|
+
"properties": {
|
|
156
|
+
"id": { "type": "string", "pattern": "^AC-\\d{3}$" },
|
|
157
|
+
"criterion": { "type": "string" },
|
|
158
|
+
"validated": { "type": "boolean", "default": false }
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"codebaseContext": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"description": "Summary of existing modules/patterns found during pre-research"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
"modules": {
|
|
170
|
+
"type": "array",
|
|
171
|
+
"description": "Enriched by step-02-decomposition: module registry with dependencies",
|
|
172
|
+
"items": {
|
|
173
|
+
"type": "object",
|
|
174
|
+
"required": ["code", "description"],
|
|
175
|
+
"properties": {
|
|
176
|
+
"code": { "type": "string", "description": "Module code (PascalCase, e.g., Customers)" },
|
|
177
|
+
"description": { "type": "string" },
|
|
178
|
+
"featureType": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"enum": ["data-centric", "integration", "ui-centric", "workflow", "reporting", "full-module"],
|
|
181
|
+
"description": "Estimated module type"
|
|
182
|
+
},
|
|
183
|
+
"dependencies": {
|
|
184
|
+
"type": "array",
|
|
185
|
+
"items": { "type": "string" },
|
|
186
|
+
"description": "Module codes this module depends on (FK, events)"
|
|
187
|
+
},
|
|
188
|
+
"dependents": {
|
|
189
|
+
"type": "array",
|
|
190
|
+
"items": { "type": "string" },
|
|
191
|
+
"description": "Module codes that depend on this module"
|
|
192
|
+
},
|
|
193
|
+
"status": {
|
|
194
|
+
"type": "string",
|
|
195
|
+
"enum": ["pending", "in-progress", "specified", "validated"],
|
|
196
|
+
"description": "Module specification status within the iterative loop"
|
|
197
|
+
},
|
|
198
|
+
"featureJsonPath": {
|
|
199
|
+
"type": ["string", "null"],
|
|
200
|
+
"description": "Path to the module-level feature.json once created"
|
|
201
|
+
},
|
|
202
|
+
"priority": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"enum": ["must", "should", "could"],
|
|
205
|
+
"description": "MoSCoW priority from global scope"
|
|
206
|
+
},
|
|
207
|
+
"sortOrder": {
|
|
208
|
+
"type": "integer",
|
|
209
|
+
"description": "Position in topological order (0-based)"
|
|
210
|
+
},
|
|
211
|
+
"entities": {
|
|
212
|
+
"type": "array",
|
|
213
|
+
"items": { "type": "string" },
|
|
214
|
+
"description": "Anticipated entity names (from decomposition, refined in specification)"
|
|
215
|
+
},
|
|
216
|
+
"estimatedComplexity": {
|
|
217
|
+
"type": "string",
|
|
218
|
+
"enum": ["simple", "medium", "complex"]
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
"dependencyGraph": {
|
|
225
|
+
"type": "object",
|
|
226
|
+
"description": "Enriched by step-02-decomposition: module dependency graph",
|
|
227
|
+
"properties": {
|
|
228
|
+
"edges": {
|
|
229
|
+
"type": "array",
|
|
230
|
+
"items": {
|
|
231
|
+
"type": "object",
|
|
232
|
+
"required": ["from", "to", "type"],
|
|
233
|
+
"properties": {
|
|
234
|
+
"from": { "type": "string", "description": "Dependent module code" },
|
|
235
|
+
"to": { "type": "string", "description": "Dependency module code" },
|
|
236
|
+
"type": { "type": "string", "enum": ["FK", "event", "shared-entity", "lookup"], "description": "Nature of the dependency" }
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
"topologicalOrder": {
|
|
241
|
+
"type": "array",
|
|
242
|
+
"items": { "type": "string" },
|
|
243
|
+
"description": "Modules sorted by dependency (foundations first)"
|
|
244
|
+
},
|
|
245
|
+
"layers": {
|
|
246
|
+
"type": "array",
|
|
247
|
+
"description": "Modules grouped by dependency depth",
|
|
248
|
+
"items": {
|
|
249
|
+
"type": "object",
|
|
250
|
+
"properties": {
|
|
251
|
+
"layer": { "type": "integer" },
|
|
252
|
+
"modules": { "type": "array", "items": { "type": "string" } }
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
"consolidation": {
|
|
260
|
+
"type": "object",
|
|
261
|
+
"description": "Enriched by step-04-consolidation: cross-module validation",
|
|
262
|
+
"properties": {
|
|
263
|
+
"crossModuleInteractions": {
|
|
264
|
+
"type": "array",
|
|
265
|
+
"items": {
|
|
266
|
+
"type": "object",
|
|
267
|
+
"properties": {
|
|
268
|
+
"fromModule": { "type": "string" },
|
|
269
|
+
"toModule": { "type": "string" },
|
|
270
|
+
"interactionType": { "type": "string", "enum": ["FK-reference", "event-publish", "event-subscribe", "shared-lookup", "cascade-delete", "cascade-update"] },
|
|
271
|
+
"description": { "type": "string" },
|
|
272
|
+
"entities": { "type": "array", "items": { "type": "string" } }
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
"sharedEntities": {
|
|
277
|
+
"type": "array",
|
|
278
|
+
"items": {
|
|
279
|
+
"type": "object",
|
|
280
|
+
"properties": {
|
|
281
|
+
"entity": { "type": "string" },
|
|
282
|
+
"ownerModule": { "type": "string" },
|
|
283
|
+
"referencedBy": { "type": "array", "items": { "type": "string" } },
|
|
284
|
+
"sharedFields": { "type": "array", "items": { "type": "string" } }
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"permissionCoherence": {
|
|
289
|
+
"type": "object",
|
|
290
|
+
"properties": {
|
|
291
|
+
"rolesConsistent": { "type": "boolean" },
|
|
292
|
+
"pathFormatConsistent": { "type": "boolean" },
|
|
293
|
+
"hierarchyRespected": { "type": "boolean" },
|
|
294
|
+
"conflicts": { "type": "array", "items": { "type": "string" } },
|
|
295
|
+
"warnings": { "type": "array", "items": { "type": "string" } }
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"e2eFlows": {
|
|
299
|
+
"type": "array",
|
|
300
|
+
"items": {
|
|
301
|
+
"type": "object",
|
|
302
|
+
"properties": {
|
|
303
|
+
"name": { "type": "string", "description": "Flow name (e.g., Create Order to Invoice)" },
|
|
304
|
+
"modules": { "type": "array", "items": { "type": "string" } },
|
|
305
|
+
"steps": {
|
|
306
|
+
"type": "array",
|
|
307
|
+
"items": {
|
|
308
|
+
"type": "object",
|
|
309
|
+
"properties": {
|
|
310
|
+
"module": { "type": "string" },
|
|
311
|
+
"action": { "type": "string" },
|
|
312
|
+
"permission": { "type": "string" },
|
|
313
|
+
"dataFlow": { "type": "string" }
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"globalRiskAssessment": {
|
|
321
|
+
"type": "array",
|
|
322
|
+
"items": {
|
|
323
|
+
"type": "object",
|
|
324
|
+
"properties": {
|
|
325
|
+
"risk": { "type": "string" },
|
|
326
|
+
"category": { "type": "string", "enum": ["coupling", "complexity", "dependency-chain", "security", "scope"] },
|
|
327
|
+
"severity": { "type": "string", "enum": ["critical", "high", "medium", "low"] },
|
|
328
|
+
"mitigation": { "type": "string" }
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"decision": {
|
|
333
|
+
"type": "object",
|
|
334
|
+
"properties": {
|
|
335
|
+
"approved": { "type": "boolean" },
|
|
336
|
+
"reason": { "type": "string" },
|
|
337
|
+
"approvedBy": { "type": "string" },
|
|
338
|
+
"approvedAt": { "type": "string", "format": "date-time" }
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
|
|
344
|
+
"suggestions": {
|
|
345
|
+
"type": "array",
|
|
346
|
+
"description": "Proactive AI suggestions for complementary modules/sections",
|
|
347
|
+
"items": {
|
|
348
|
+
"type": "object",
|
|
349
|
+
"required": ["type", "code", "reason"],
|
|
350
|
+
"properties": {
|
|
351
|
+
"type": { "type": "string", "enum": ["module", "section", "integration", "enhancement"] },
|
|
352
|
+
"code": { "type": "string" },
|
|
353
|
+
"title": { "type": "string" },
|
|
354
|
+
"reason": { "type": "string" },
|
|
355
|
+
"accepted": { "type": ["boolean", "null"] }
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
|
|
360
|
+
"changelog": {
|
|
361
|
+
"type": "array",
|
|
362
|
+
"description": "Version history and change tracking",
|
|
363
|
+
"items": {
|
|
364
|
+
"type": "object",
|
|
365
|
+
"required": ["timestamp", "changes"],
|
|
366
|
+
"properties": {
|
|
367
|
+
"step": { "type": "string" },
|
|
368
|
+
"version": { "type": "string" },
|
|
369
|
+
"timestamp": { "type": "string", "format": "date-time" },
|
|
370
|
+
"author": { "type": "string" },
|
|
371
|
+
"changes": { "type": "array", "items": { "type": "string" } },
|
|
372
|
+
"warnings": { "type": "array", "items": { "type": "string" } },
|
|
373
|
+
"decision": { "type": "string" }
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
},
|
|
378
|
+
|
|
379
|
+
"$defs": {
|
|
380
|
+
"stepStatus": {
|
|
381
|
+
"type": "object",
|
|
382
|
+
"properties": {
|
|
383
|
+
"status": { "type": "string", "enum": ["pending", "in-progress", "completed", "skipped"] },
|
|
384
|
+
"startedAt": { "type": ["string", "null"], "format": "date-time" },
|
|
385
|
+
"completedAt": { "type": ["string", "null"], "format": "date-time" }
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
@@ -18,9 +18,15 @@
|
|
|
18
18
|
},
|
|
19
19
|
"status": {
|
|
20
20
|
"type": "string",
|
|
21
|
-
"enum": ["draft", "analysed", "specified", "approved", "handed-off"],
|
|
21
|
+
"enum": ["draft", "framed", "analysed", "specified", "approved", "consolidated", "handed-off"],
|
|
22
22
|
"description": "Current lifecycle status, enriched by each step"
|
|
23
23
|
},
|
|
24
|
+
"scope": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"enum": ["application", "module"],
|
|
27
|
+
"default": "module",
|
|
28
|
+
"description": "Scope of this feature.json: application (master) or module (detailed)"
|
|
29
|
+
},
|
|
24
30
|
|
|
25
31
|
"metadata": {
|
|
26
32
|
"type": "object",
|
|
@@ -57,12 +63,35 @@
|
|
|
57
63
|
},
|
|
58
64
|
"mcpAvailable": { "type": "boolean" },
|
|
59
65
|
"economyMode": { "type": "boolean" },
|
|
66
|
+
"scope": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"enum": ["application", "module"],
|
|
69
|
+
"default": "module",
|
|
70
|
+
"description": "Explicitly marks this as module-scope"
|
|
71
|
+
},
|
|
72
|
+
"applicationRef": {
|
|
73
|
+
"type": ["string", "null"],
|
|
74
|
+
"description": "Reference to parent application feature ID (FEAT-XXX) when part of multi-module analysis"
|
|
75
|
+
},
|
|
76
|
+
"applicationPath": {
|
|
77
|
+
"type": ["string", "null"],
|
|
78
|
+
"description": "Path to the parent application-level feature.json"
|
|
79
|
+
},
|
|
80
|
+
"moduleIndex": {
|
|
81
|
+
"type": ["integer", "null"],
|
|
82
|
+
"description": "Position in topological order within the application (0-based)"
|
|
83
|
+
},
|
|
84
|
+
"inheritsRoles": {
|
|
85
|
+
"type": "boolean",
|
|
86
|
+
"default": false,
|
|
87
|
+
"description": "Whether roles are inherited from application-level (true for multi-module)"
|
|
88
|
+
},
|
|
60
89
|
"steps": {
|
|
61
90
|
"type": "object",
|
|
62
91
|
"description": "Progress tracking per step",
|
|
63
92
|
"properties": {
|
|
64
93
|
"init": { "$ref": "#/$defs/stepStatus" },
|
|
65
|
-
"
|
|
94
|
+
"cadrage": { "$ref": "#/$defs/stepStatus" },
|
|
66
95
|
"specify": { "$ref": "#/$defs/stepStatus" },
|
|
67
96
|
"validate": { "$ref": "#/$defs/stepStatus" },
|
|
68
97
|
"handoff": { "$ref": "#/$defs/stepStatus" }
|
|
@@ -71,6 +100,35 @@
|
|
|
71
100
|
}
|
|
72
101
|
},
|
|
73
102
|
|
|
103
|
+
"applicationContext": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"description": "Inherited from parent application feature.json when part of multi-module analysis",
|
|
106
|
+
"properties": {
|
|
107
|
+
"applicationRoles": {
|
|
108
|
+
"type": "array",
|
|
109
|
+
"description": "Copied from master feature.json for reference",
|
|
110
|
+
"items": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"properties": {
|
|
113
|
+
"role": { "type": "string" },
|
|
114
|
+
"description": { "type": "string" },
|
|
115
|
+
"level": { "type": "string", "enum": ["admin", "manager", "contributor", "viewer"] },
|
|
116
|
+
"permissionPattern": { "type": "string" }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"permissionBase": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"description": "Application-level permission base (e.g., business.sales)"
|
|
123
|
+
},
|
|
124
|
+
"relatedModules": {
|
|
125
|
+
"type": "array",
|
|
126
|
+
"items": { "type": "string" },
|
|
127
|
+
"description": "Other modules in the same application"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
|
|
74
132
|
"discovery": {
|
|
75
133
|
"type": "object",
|
|
76
134
|
"description": "Enriched by step-01-analyse (discovery part)",
|
|
@@ -518,7 +576,20 @@
|
|
|
518
576
|
"description": { "type": "string" },
|
|
519
577
|
"elements": { "type": "array", "items": { "type": "string" } },
|
|
520
578
|
"actions": { "type": "array", "items": { "type": "string" } },
|
|
521
|
-
"permissionsRequired": { "type": "array", "items": { "type": "string" } }
|
|
579
|
+
"permissionsRequired": { "type": "array", "items": { "type": "string" } },
|
|
580
|
+
"mockupFormat": {
|
|
581
|
+
"type": "string",
|
|
582
|
+
"enum": ["ascii", "svg"],
|
|
583
|
+
"description": "Format of the mockup: ascii (rendered in <pre>) or svg (rendered as inline SVG)"
|
|
584
|
+
},
|
|
585
|
+
"mockup": {
|
|
586
|
+
"type": "string",
|
|
587
|
+
"description": "ASCII art or SVG markup of the wireframe"
|
|
588
|
+
},
|
|
589
|
+
"section": {
|
|
590
|
+
"type": "string",
|
|
591
|
+
"description": "Navigation section this wireframe belongs to (e.g., list, detail, create)"
|
|
592
|
+
}
|
|
522
593
|
}
|
|
523
594
|
}
|
|
524
595
|
},
|