@atlashub/smartstack-cli 4.22.0 → 4.24.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/package.json +1 -1
- package/templates/skills/ba-design-ui/SKILL.md +91 -0
- package/templates/skills/ba-design-ui/steps/step-01-screens.md +177 -0
- package/templates/skills/ba-design-ui/steps/step-02-wireframes.md +140 -0
- package/templates/skills/ba-design-ui/steps/step-03-navigation.md +134 -0
- package/templates/skills/ba-generate-html/SKILL.md +0 -1
- package/templates/skills/ba-generate-html/html/ba-interactive.html +950 -1055
- package/templates/skills/ba-generate-html/html/src/scripts/01-data-init.js +1 -2
- package/templates/skills/ba-generate-html/html/src/scripts/02-navigation.js +0 -1
- package/templates/skills/ba-generate-html/html/src/scripts/03-render-cadrage.js +0 -39
- package/templates/skills/ba-generate-html/html/src/scripts/05-render-specs.js +0 -1
- package/templates/skills/ba-generate-html/html/src/scripts/07-render-handoff.js +0 -1
- package/templates/skills/ba-generate-html/html/src/scripts/08-editing.js +133 -135
- package/templates/skills/ba-generate-html/html/src/scripts/10-comments.js +199 -199
- package/templates/skills/ba-generate-html/html/src/scripts/11-review-panel.js +165 -166
- package/templates/skills/ba-generate-html/html/src/styles/05-modules.css +444 -454
- package/templates/skills/ba-generate-html/html/src/template.html +0 -49
- package/templates/skills/ba-generate-html/references/data-build.md +176 -182
- package/templates/skills/ba-generate-html/references/data-mapping.md +295 -299
- package/templates/skills/ba-generate-html/steps/step-01-collect.md +4 -22
- package/templates/skills/ba-generate-html/steps/step-02-build-data.md +2 -11
- package/templates/skills/ba-review/SKILL.md +16 -1
- package/templates/skills/ba-review/steps/step-01-apply.md +60 -10
- package/templates/skills/business-analyse/SKILL.md +19 -15
- package/templates/skills/business-analyse/steps/step-03-specify.md +9 -38
- package/templates/skills/derive-prd/SKILL.md +9 -9
- package/templates/skills/derive-prd/references/acceptance-criteria.md +166 -116
- package/templates/skills/derive-prd/references/entity-domain-mapping.md +5 -5
- package/templates/skills/derive-prd/references/handoff-file-templates.md +12 -12
- package/templates/skills/derive-prd/references/handoff-mappings.md +13 -14
- package/templates/skills/derive-prd/references/handoff-seeddata-generation.md +1 -1
- package/templates/skills/derive-prd/references/readiness-scoring.md +41 -50
- package/templates/skills/derive-prd/schemas/handoff-schema.json +2 -2
- package/templates/skills/derive-prd/steps/step-00-validate.md +73 -52
- package/templates/skills/derive-prd/steps/step-01-transform.md +86 -43
- package/templates/skills/ba-generate-html/html/src/partials/cadrage-risks.html +0 -48
package/package.json
CHANGED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ba-design-ui
|
|
3
|
+
description: "Design user interfaces for each module: screens, wireframes, and navigation tree from Phase 1 analysis data."
|
|
4
|
+
model: opus
|
|
5
|
+
user_invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /ba-design-ui
|
|
9
|
+
|
|
10
|
+
Design user interfaces for each module based on the business analysis data (entities, use cases, permissions) produced by `/business-analyse`.
|
|
11
|
+
|
|
12
|
+
## Triggers
|
|
13
|
+
|
|
14
|
+
- Explicit invocation: `/ba-design-ui <feature-id>`
|
|
15
|
+
- After `/business-analyse` step-04 (consolidation complete)
|
|
16
|
+
- After `/ba-review` when corrections target UI/screens
|
|
17
|
+
|
|
18
|
+
## Parameters
|
|
19
|
+
|
|
20
|
+
| Parameter | Required | Description |
|
|
21
|
+
|-----------|----------|-------------|
|
|
22
|
+
| `<feature-id>` | Yes | Feature identifier (e.g., FEAT-001) |
|
|
23
|
+
| `--module` | No | Restrict to a single module (e.g., HumanResources) |
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
- `/business-analyse` must be completed (step-04 consolidated)
|
|
28
|
+
- JSON files must exist: `index.json`, `entities.json`, `usecases.json`, `permissions.json` per module
|
|
29
|
+
- Feature status must be `consolidated` or `reviewed`
|
|
30
|
+
|
|
31
|
+
## Workflow
|
|
32
|
+
|
|
33
|
+
3 progressive steps:
|
|
34
|
+
|
|
35
|
+
| Step | File | Role |
|
|
36
|
+
|------|------|------|
|
|
37
|
+
| 01 | `steps/step-01-screens.md` | Define sections/resources with detailed specs per module |
|
|
38
|
+
| 02 | `steps/step-02-wireframes.md` | Generate wireframes (ASCII/HTML) for each screen |
|
|
39
|
+
| 03 | `steps/step-03-navigation.md` | Define the complete navigation tree (seedDataCore) |
|
|
40
|
+
|
|
41
|
+
## Input
|
|
42
|
+
|
|
43
|
+
For each module, load via ba-reader:
|
|
44
|
+
- `index.json` (module metadata, anticipatedSections)
|
|
45
|
+
- `entities.json` (attributes with types, relationships)
|
|
46
|
+
- `usecases.json` (actor actions, scenarios)
|
|
47
|
+
- `permissions.json` (role matrix, permission paths)
|
|
48
|
+
|
|
49
|
+
## Output
|
|
50
|
+
|
|
51
|
+
Per module:
|
|
52
|
+
- `screens.json` — Detailed interface specifications (SmartTable columns, SmartForm fields, SmartDashboard KPIs)
|
|
53
|
+
- Wireframes embedded in screens.json (mockupFormat, elements[], layout, componentMapping)
|
|
54
|
+
|
|
55
|
+
Project-level:
|
|
56
|
+
- `navigation.json` — Complete navigation tree (routes, menus, breadcrumbs)
|
|
57
|
+
|
|
58
|
+
## Absolute Rules
|
|
59
|
+
|
|
60
|
+
- **NEVER** invent entities or permissions not defined in Phase 1 — UI specs MUST reference existing analysis data
|
|
61
|
+
- **Every screen** MUST have a `permission` field referencing a valid permission path from permissions.json
|
|
62
|
+
- **Every SmartTable column** MUST reference a valid entity attribute or relationship
|
|
63
|
+
- **Every SmartForm field** MUST reference a valid entity attribute
|
|
64
|
+
- **screens.json** MUST have at least one section per module
|
|
65
|
+
|
|
66
|
+
## Post-Design Workflow
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
/ba-design-ui completes
|
|
70
|
+
|
|
|
71
|
+
v
|
|
72
|
+
/ba-generate-html (generates interactive HTML with mockups, ERD, permission matrix)
|
|
73
|
+
|
|
|
74
|
+
v
|
|
75
|
+
Client reviews HTML
|
|
76
|
+
|
|
|
77
|
+
v
|
|
78
|
+
/ba-review (apply corrections, route back to /business-analyse or /ba-design-ui)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## References
|
|
82
|
+
|
|
83
|
+
| File | Content |
|
|
84
|
+
|------|---------|
|
|
85
|
+
| `/business-analyse` skill | Source analysis data (entities, UCs, permissions) |
|
|
86
|
+
| `/ba-generate-html` skill | HTML generation consuming screens.json |
|
|
87
|
+
| `ba-generate-html/references/data-mapping.md` | JSON to FEATURE_DATA field mapping |
|
|
88
|
+
|
|
89
|
+
## Entry Point
|
|
90
|
+
|
|
91
|
+
**FIRST ACTION:** Load `steps/step-01-screens.md`
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: step-01-screens
|
|
3
|
+
description: Define sections and resources with detailed UI specs per module
|
|
4
|
+
model: opus
|
|
5
|
+
next_step: steps/step-02-wireframes.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Step 01 — Screens (Define Sections & Resources)
|
|
9
|
+
|
|
10
|
+
## Objective
|
|
11
|
+
|
|
12
|
+
For each module, define all sections and resources with detailed interface specifications: SmartTable columns, SmartForm fields with types, SmartDashboard KPIs, SmartKanban columns.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- `/business-analyse` completed (entities, usecases, permissions exist)
|
|
17
|
+
- Module index.json accessible via ba-reader
|
|
18
|
+
|
|
19
|
+
## Execution
|
|
20
|
+
|
|
21
|
+
### 1. Load Analysis Data
|
|
22
|
+
|
|
23
|
+
For each module (in dependency order from index.json):
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Load via ba-reader:
|
|
27
|
+
- entities.json → entity attributes with types, relationships
|
|
28
|
+
- usecases.json → actor actions, CRUD operations
|
|
29
|
+
- permissions.json → role matrix, permission paths
|
|
30
|
+
- index.json → anticipatedSections from step-02
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Define Sections & Resources
|
|
34
|
+
|
|
35
|
+
For each module, transform anticipatedSections into detailed screen specs.
|
|
36
|
+
|
|
37
|
+
**SmartTable resource:**
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"code": "{entity-plural}-grid",
|
|
41
|
+
"type": "SmartTable",
|
|
42
|
+
"label": "Grille des {entity-plural}",
|
|
43
|
+
"columns": [
|
|
44
|
+
{ "field": "code", "label": "Code", "type": "text", "sortable": true, "width": "100px" },
|
|
45
|
+
{ "field": "fullName", "label": "Nom", "type": "text", "sortable": true },
|
|
46
|
+
{ "field": "department.name", "label": "Departement", "type": "lookup", "filterable": true },
|
|
47
|
+
{ "field": "status", "label": "Statut", "type": "badge", "filterable": true, "options": ["Active", "Inactive"] }
|
|
48
|
+
],
|
|
49
|
+
"actions": ["create", "edit", "delete", "export"],
|
|
50
|
+
"filters": [
|
|
51
|
+
{ "field": "department", "type": "select", "label": "Departement" },
|
|
52
|
+
{ "field": "status", "type": "select", "label": "Statut" }
|
|
53
|
+
],
|
|
54
|
+
"permission": "{AppCode}.{ModuleCode}.Read",
|
|
55
|
+
"rowActions": ["edit", "view-detail"],
|
|
56
|
+
"defaultSort": { "field": "code", "direction": "asc" },
|
|
57
|
+
"pageSize": 25
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**SmartForm resource:**
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"code": "{entity}-form",
|
|
65
|
+
"type": "SmartForm",
|
|
66
|
+
"label": "Fiche {entity}",
|
|
67
|
+
"tabs": [
|
|
68
|
+
{
|
|
69
|
+
"label": "Informations",
|
|
70
|
+
"fields": [
|
|
71
|
+
{ "field": "firstName", "label": "Prenom", "type": "text", "required": true, "col": 6 },
|
|
72
|
+
{ "field": "lastName", "label": "Nom", "type": "text", "required": true, "col": 6 },
|
|
73
|
+
{ "field": "email", "label": "Email", "type": "email", "required": true, "validation": "unique" },
|
|
74
|
+
{ "field": "department", "label": "Departement", "type": "lookup", "entity": "Department", "required": true },
|
|
75
|
+
{ "field": "status", "label": "Statut", "type": "select", "options": ["Active", "Inactive"], "readonly": "onCreate" }
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"label": "Contrats",
|
|
80
|
+
"type": "subtable",
|
|
81
|
+
"entity": "Contract",
|
|
82
|
+
"columns": ["contractType", "startDate", "endDate", "status"]
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"permission": "{AppCode}.{ModuleCode}.Update"
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**SmartDashboard resource:**
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"code": "{module}-dashboard",
|
|
93
|
+
"type": "SmartDashboard",
|
|
94
|
+
"label": "Tableau de bord {module}",
|
|
95
|
+
"kpis": [
|
|
96
|
+
{ "label": "Total actifs", "value": "count(status=Active)", "icon": "users", "color": "primary" },
|
|
97
|
+
{ "label": "En conge", "value": "count(status=OnLeave)", "icon": "calendar", "color": "warning" }
|
|
98
|
+
],
|
|
99
|
+
"charts": [
|
|
100
|
+
{ "type": "pie", "label": "Repartition par departement", "dataSource": "employees", "groupBy": "department" },
|
|
101
|
+
{ "type": "bar", "label": "Evolution des effectifs", "dataSource": "employees", "groupBy": "hireDate.year" }
|
|
102
|
+
],
|
|
103
|
+
"permission": "{AppCode}.{ModuleCode}.Read"
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**SmartKanban resource:**
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"code": "{entity}-kanban",
|
|
111
|
+
"type": "SmartKanban",
|
|
112
|
+
"label": "Kanban {entity}",
|
|
113
|
+
"statusField": "status",
|
|
114
|
+
"columns": [
|
|
115
|
+
{ "value": "Draft", "label": "Brouillon", "color": "gray" },
|
|
116
|
+
{ "value": "Submitted", "label": "Soumis", "color": "blue" },
|
|
117
|
+
{ "value": "Approved", "label": "Approuve", "color": "green" }
|
|
118
|
+
],
|
|
119
|
+
"cardFields": ["code", "assignee", "dueDate"],
|
|
120
|
+
"permission": "{AppCode}.{ModuleCode}.Read"
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 3. Column/Field Type Mapping
|
|
125
|
+
|
|
126
|
+
Map entity attribute types to UI component types:
|
|
127
|
+
|
|
128
|
+
| Entity type | SmartTable type | SmartForm type |
|
|
129
|
+
|-------------|----------------|----------------|
|
|
130
|
+
| `string` | `text` | `text` |
|
|
131
|
+
| `int`, `decimal` | `number` | `number` |
|
|
132
|
+
| `date` | `date` | `datepicker` |
|
|
133
|
+
| `datetime` | `datetime` | `datetimepicker` |
|
|
134
|
+
| `bool` | `boolean` | `checkbox` |
|
|
135
|
+
| `enum` | `badge` | `select` |
|
|
136
|
+
| `guid` (FK) | `lookup` | `lookup` |
|
|
137
|
+
| `text` (long) | `text` (truncated) | `textarea` |
|
|
138
|
+
|
|
139
|
+
### 4. Write screens.json
|
|
140
|
+
|
|
141
|
+
For each module, write via ba-writer:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"sections": [
|
|
146
|
+
{
|
|
147
|
+
"sectionCode": "list",
|
|
148
|
+
"sectionLabel": "Liste des employes",
|
|
149
|
+
"resources": [ /* SmartTable, filters */ ]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"sectionCode": "form",
|
|
153
|
+
"sectionLabel": "Fiche employe",
|
|
154
|
+
"resources": [ /* SmartForm with tabs */ ]
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"sectionCode": "dashboard",
|
|
158
|
+
"sectionLabel": "Tableau de bord",
|
|
159
|
+
"resources": [ /* SmartDashboard */ ]
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Update `index.json` with screens.json hash and status.
|
|
166
|
+
|
|
167
|
+
## Validation
|
|
168
|
+
|
|
169
|
+
- [ ] Every resource has a valid `permission` referencing permissions.json
|
|
170
|
+
- [ ] Every SmartTable column references a valid entity attribute
|
|
171
|
+
- [ ] Every SmartForm field references a valid entity attribute
|
|
172
|
+
- [ ] Every section has at least one resource
|
|
173
|
+
- [ ] Every module has at least one section
|
|
174
|
+
|
|
175
|
+
## Transition
|
|
176
|
+
|
|
177
|
+
-> Step 02 (wireframes) — Generate visual mockups for each screen
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: step-02-wireframes
|
|
3
|
+
description: Generate wireframes (ASCII/HTML mockups) for each screen defined in step-01
|
|
4
|
+
model: opus
|
|
5
|
+
next_step: steps/step-03-navigation.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Step 02 — Wireframes (Generate Mockups)
|
|
9
|
+
|
|
10
|
+
## Objective
|
|
11
|
+
|
|
12
|
+
Generate visual wireframes for each screen defined in screens.json. Each wireframe provides a concrete representation of the UI layout, component placement, and user interactions.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- Step 01 (screens) completed
|
|
17
|
+
- screens.json exists for each module with detailed section/resource specs
|
|
18
|
+
|
|
19
|
+
## Execution
|
|
20
|
+
|
|
21
|
+
### 1. Load Screen Specs
|
|
22
|
+
|
|
23
|
+
For each module, read screens.json via ba-reader.
|
|
24
|
+
|
|
25
|
+
### 2. Generate Wireframes per Resource
|
|
26
|
+
|
|
27
|
+
For each resource in each section, generate a wireframe object:
|
|
28
|
+
|
|
29
|
+
**SmartTable wireframe:**
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"screen": "{sectionCode}-{resourceCode}",
|
|
33
|
+
"section": "{sectionCode}",
|
|
34
|
+
"mockupFormat": "ascii",
|
|
35
|
+
"mockup": "+----------------------------------------------------------+\n| [Departement v] [Statut v] [+ Nouveau employe] |\n+------+----------------+---------------+--------+---------+\n| Code | Nom complet | Departement | Statut | Actions |\n+------+----------------+---------------+--------+---------+\n| E001 | Dupont Marie | RH | Actif | [E] [S] |\n| E002 | Martin Pierre | IT | Conge | [E] [S] |\n+------+----------------+---------------+--------+---------+\n| << 1 2 3 ... 10 >> 25 par page |\n+----------------------------------------------------------+",
|
|
36
|
+
"elements": ["FilterBar", "DataGrid", "Pagination", "ActionButtons"],
|
|
37
|
+
"actions": ["filter", "sort", "create", "edit", "delete", "export"],
|
|
38
|
+
"componentMapping": [
|
|
39
|
+
{ "wireframeElement": "FilterBar", "reactComponent": "SmartFilter" },
|
|
40
|
+
{ "wireframeElement": "DataGrid", "reactComponent": "SmartTable" },
|
|
41
|
+
{ "wireframeElement": "Pagination", "reactComponent": "SmartPagination" },
|
|
42
|
+
{ "wireframeElement": "ActionButtons", "reactComponent": "SmartToolbar" }
|
|
43
|
+
],
|
|
44
|
+
"layout": {
|
|
45
|
+
"type": "vertical",
|
|
46
|
+
"regions": ["filters", "grid", "pagination"]
|
|
47
|
+
},
|
|
48
|
+
"permissionsRequired": ["{AppCode}.{ModuleCode}.Read"]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**SmartForm wireframe:**
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"screen": "{sectionCode}-{resourceCode}",
|
|
56
|
+
"section": "{sectionCode}",
|
|
57
|
+
"mockupFormat": "ascii",
|
|
58
|
+
"mockup": "+----------------------------------------------------------+\n| Fiche Employe [Sauvegarder] |\n+----------------------------------------------------------+\n| [Informations] [Contrats] [Documents] |\n+----------------------------------------------------------+\n| Prenom: [_______________] Nom: [_______________] |\n| Email: [_______________] Tel: [_______________] |\n| Departement: [Selectionnez v ] Poste: [_____________] |\n| Date embauche: [__ /__ /____] Statut: [Actif v] |\n+----------------------------------------------------------+",
|
|
59
|
+
"elements": ["TabBar", "FormFields", "SaveButton"],
|
|
60
|
+
"actions": ["save", "cancel", "tab-switch"],
|
|
61
|
+
"componentMapping": [
|
|
62
|
+
{ "wireframeElement": "TabBar", "reactComponent": "SmartTabs" },
|
|
63
|
+
{ "wireframeElement": "FormFields", "reactComponent": "SmartForm" },
|
|
64
|
+
{ "wireframeElement": "SaveButton", "reactComponent": "SmartButton" }
|
|
65
|
+
],
|
|
66
|
+
"layout": {
|
|
67
|
+
"type": "vertical",
|
|
68
|
+
"regions": ["header", "tabs", "form-body", "actions"]
|
|
69
|
+
},
|
|
70
|
+
"permissionsRequired": ["{AppCode}.{ModuleCode}.Update"]
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**SmartDashboard wireframe:**
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"screen": "{sectionCode}-{resourceCode}",
|
|
78
|
+
"section": "{sectionCode}",
|
|
79
|
+
"mockupFormat": "ascii",
|
|
80
|
+
"mockup": "+----------------------------------------------------------+\n| Tableau de bord RH |\n+-------------+-------------+-------------+----------------+\n| Total actifs| En conge | Nouveaux | Taux rotation |\n| 156 | 12 | 8 | 3.2% |\n+-------------+-------------+-------------+----------------+\n| [Repartition par dept (pie)] [Evolution effectifs (bar)]|\n+----------------------------------------------------------+",
|
|
81
|
+
"elements": ["KPICards", "PieChart", "BarChart"],
|
|
82
|
+
"actions": ["filter-period", "export-report"],
|
|
83
|
+
"componentMapping": [
|
|
84
|
+
{ "wireframeElement": "KPICards", "reactComponent": "SmartKPI" },
|
|
85
|
+
{ "wireframeElement": "PieChart", "reactComponent": "SmartChart" },
|
|
86
|
+
{ "wireframeElement": "BarChart", "reactComponent": "SmartChart" }
|
|
87
|
+
],
|
|
88
|
+
"layout": {
|
|
89
|
+
"type": "grid",
|
|
90
|
+
"regions": ["kpi-row", "charts-row"]
|
|
91
|
+
},
|
|
92
|
+
"permissionsRequired": ["{AppCode}.{ModuleCode}.Read"]
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 3. Enrich screens.json with Wireframes
|
|
97
|
+
|
|
98
|
+
For each module, update screens.json to embed wireframes at the resource level:
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"sections": [
|
|
103
|
+
{
|
|
104
|
+
"sectionCode": "list",
|
|
105
|
+
"sectionLabel": "Liste des employes",
|
|
106
|
+
"resources": [
|
|
107
|
+
{
|
|
108
|
+
"code": "employees-grid",
|
|
109
|
+
"type": "SmartTable",
|
|
110
|
+
"columns": [ /* ... */ ],
|
|
111
|
+
"wireframe": {
|
|
112
|
+
"screen": "list-employees-grid",
|
|
113
|
+
"mockupFormat": "ascii",
|
|
114
|
+
"mockup": "...",
|
|
115
|
+
"elements": [...],
|
|
116
|
+
"componentMapping": [...],
|
|
117
|
+
"layout": {...}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 4. Write Updated screens.json
|
|
127
|
+
|
|
128
|
+
Write via ba-writer for each module. Update index.json hashes.
|
|
129
|
+
|
|
130
|
+
## Validation
|
|
131
|
+
|
|
132
|
+
- [ ] Every resource has a wireframe object
|
|
133
|
+
- [ ] Every wireframe has a non-empty `mockup` field
|
|
134
|
+
- [ ] Every wireframe has `elements[]` and `componentMapping[]`
|
|
135
|
+
- [ ] Wireframe `permissionsRequired` references valid permission paths
|
|
136
|
+
- [ ] All wireframes have `mockupFormat` set ("ascii" or "html")
|
|
137
|
+
|
|
138
|
+
## Transition
|
|
139
|
+
|
|
140
|
+
-> Step 03 (navigation) — Define the complete navigation tree
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: step-03-navigation
|
|
3
|
+
description: Define the complete navigation tree (routes, menus, breadcrumbs)
|
|
4
|
+
model: opus
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Step 03 — Navigation (Navigation Tree)
|
|
8
|
+
|
|
9
|
+
## Objective
|
|
10
|
+
|
|
11
|
+
Define the complete navigation tree for the application: routes, menus, breadcrumbs, and seedDataCore entries. This ensures consistent navigation across all modules.
|
|
12
|
+
|
|
13
|
+
## Prerequisites
|
|
14
|
+
|
|
15
|
+
- Step 01 (screens) and Step 02 (wireframes) completed
|
|
16
|
+
- screens.json exists for each module with sections and resources
|
|
17
|
+
|
|
18
|
+
## Execution
|
|
19
|
+
|
|
20
|
+
### 1. Load All Screens
|
|
21
|
+
|
|
22
|
+
Read screens.json for every module via ba-reader. Collect all sections and resources.
|
|
23
|
+
|
|
24
|
+
### 2. Build Navigation Tree
|
|
25
|
+
|
|
26
|
+
Build the navigation hierarchy following SmartStack conventions:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Application
|
|
30
|
+
|-- Module 1
|
|
31
|
+
| |-- Section 1 (e.g., "Liste")
|
|
32
|
+
| | |-- Resource 1 (e.g., "employees-grid")
|
|
33
|
+
| |-- Section 2 (e.g., "Fiche")
|
|
34
|
+
| | |-- Resource 1 (e.g., "employee-form")
|
|
35
|
+
| |-- Section 3 (e.g., "Dashboard")
|
|
36
|
+
| |-- Resource 1 (e.g., "hr-dashboard")
|
|
37
|
+
|-- Module 2
|
|
38
|
+
|-- ...
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 3. Generate navigation.json
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"application": {
|
|
46
|
+
"code": "{AppCode}",
|
|
47
|
+
"name": "{AppName}",
|
|
48
|
+
"icon": "app-icon"
|
|
49
|
+
},
|
|
50
|
+
"modules": [
|
|
51
|
+
{
|
|
52
|
+
"code": "{ModuleCode}",
|
|
53
|
+
"name": "{ModuleName}",
|
|
54
|
+
"icon": "module-icon",
|
|
55
|
+
"route": "/{app-code}/{module-code}",
|
|
56
|
+
"permission": "{AppCode}.{ModuleCode}.Read",
|
|
57
|
+
"sections": [
|
|
58
|
+
{
|
|
59
|
+
"code": "{sectionCode}",
|
|
60
|
+
"label": "{sectionLabel}",
|
|
61
|
+
"route": "/{app-code}/{module-code}/{section-code}",
|
|
62
|
+
"icon": "section-icon",
|
|
63
|
+
"resources": [
|
|
64
|
+
{
|
|
65
|
+
"code": "{resourceCode}",
|
|
66
|
+
"type": "{SmartTable|SmartForm|SmartDashboard|SmartKanban}",
|
|
67
|
+
"route": "/{app-code}/{module-code}/{section-code}/{resource-code}",
|
|
68
|
+
"permission": "{AppCode}.{ModuleCode}.{Action}"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"menuItems": [
|
|
76
|
+
{
|
|
77
|
+
"label": "{ModuleName}",
|
|
78
|
+
"icon": "module-icon",
|
|
79
|
+
"route": "/{app-code}/{module-code}",
|
|
80
|
+
"permission": "{AppCode}.{ModuleCode}.Read",
|
|
81
|
+
"children": [
|
|
82
|
+
{
|
|
83
|
+
"label": "{sectionLabel}",
|
|
84
|
+
"route": "/{app-code}/{module-code}/{section-code}",
|
|
85
|
+
"permission": "{AppCode}.{ModuleCode}.Read"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"breadcrumbs": {
|
|
91
|
+
"/{app-code}/{module-code}/{section-code}": [
|
|
92
|
+
{ "label": "{AppName}", "route": "/{app-code}" },
|
|
93
|
+
{ "label": "{ModuleName}", "route": "/{app-code}/{module-code}" },
|
|
94
|
+
{ "label": "{sectionLabel}", "route": "" }
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 4. Write navigation.json
|
|
101
|
+
|
|
102
|
+
Write via ba-writer at project level (alongside master index.json). Update index.json with navigation.json reference.
|
|
103
|
+
|
|
104
|
+
## Validation
|
|
105
|
+
|
|
106
|
+
- [ ] Every module in index.json has a corresponding navigation entry
|
|
107
|
+
- [ ] Every section in screens.json has a corresponding menu item
|
|
108
|
+
- [ ] Every route is unique
|
|
109
|
+
- [ ] Every menu item has a valid permission reference
|
|
110
|
+
- [ ] Breadcrumbs cover all routes
|
|
111
|
+
|
|
112
|
+
## Completion Summary
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
================================================================
|
|
116
|
+
UI DESIGN COMPLETE
|
|
117
|
+
================================================================
|
|
118
|
+
|
|
119
|
+
| Module | Sections | Resources | Wireframes |
|
|
120
|
+
|-----------------|----------|-----------|------------|
|
|
121
|
+
| {moduleCode} | {count} | {count} | {count} |
|
|
122
|
+
| ... | ... | ... | ... |
|
|
123
|
+
|
|
124
|
+
| Artifact | Path |
|
|
125
|
+
|-----------------|-----------------------------------|
|
|
126
|
+
| screens.json | {module-path}/screens.json |
|
|
127
|
+
| navigation.json | {project-path}/navigation.json |
|
|
128
|
+
|
|
129
|
+
NEXT STEPS:
|
|
130
|
+
1. Run /ba-generate-html to produce the interactive HTML with mockups
|
|
131
|
+
2. Client reviews the HTML (mockups, ERD, permission matrix)
|
|
132
|
+
3. Run /ba-review to apply corrections
|
|
133
|
+
================================================================
|
|
134
|
+
```
|
|
@@ -25,7 +25,6 @@ Generate the interactive HTML document of the business analysis from the JSON an
|
|
|
25
25
|
## Prerequisites
|
|
26
26
|
|
|
27
27
|
- JSON analysis files must exist (at minimum `index.json` + `cadrage.json`)
|
|
28
|
-
- PRD files must exist (`.ralph/prd-{moduleCode}.json`) — run `/derive-prd` first
|
|
29
28
|
- Feature status must be `consolidated`
|
|
30
29
|
|
|
31
30
|
## Workflow
|