@atlashub/smartstack-cli 3.18.0 → 3.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/gitflow/cleanup.md +5 -1
- package/templates/agents/gitflow/finish.md +2 -0
- package/templates/agents/gitflow/init-clone.md +13 -0
- package/templates/agents/gitflow/init-validate.md +14 -0
- package/templates/agents/gitflow/start.md +2 -2
- package/templates/agents/gitflow/status.md +6 -0
- package/templates/skills/business-analyse/SKILL.md +1 -1
- package/templates/skills/business-analyse/_shared.md +46 -20
- package/templates/skills/business-analyse/html/ba-interactive.html +57 -107
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +13 -0
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +1 -1
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +11 -20
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +1 -3
- package/templates/skills/business-analyse/html/src/template.html +31 -83
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +71 -3
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +11 -8
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +7 -5
- package/templates/skills/business-analyse/references/deploy-data-build.md +42 -14
- package/templates/skills/business-analyse/references/deploy-modes.md +1 -1
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -0
- package/templates/skills/business-analyse/references/robustness-checks.md +2 -1
- package/templates/skills/business-analyse/references/spec-auto-inference.md +70 -16
- package/templates/skills/business-analyse/references/ui-resource-cards.md +149 -0
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +220 -32
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +51 -29
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +122 -32
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +8 -0
- package/templates/skills/business-analyse/steps/step-03b-ui.md +68 -5
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +99 -2
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +35 -1
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +4 -1
- package/templates/skills/business-analyse/steps/step-06-review.md +2 -1
- package/templates/skills/business-analyse/templates/tpl-handoff.md +5 -4
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +4 -1
- package/templates/skills/business-analyse/templates-frd.md +5 -4
- package/templates/skills/gitflow/_shared.md +65 -17
- package/templates/skills/gitflow/phases/status.md +8 -3
- package/templates/skills/gitflow/references/start-local-config.md +6 -3
- package/templates/skills/gitflow/steps/step-start.md +5 -2
package/package.json
CHANGED
|
@@ -51,7 +51,11 @@ fi
|
|
|
51
51
|
## Commandes
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
|
-
#
|
|
54
|
+
# Repair cross-platform paths before any operation (WSL ↔ Windows)
|
|
55
|
+
detect_platform
|
|
56
|
+
repair_worktree_paths "$(git rev-parse --git-common-dir 2>/dev/null || echo '.bare')"
|
|
57
|
+
|
|
58
|
+
# Lister worktrees (paths now normalized for current platform)
|
|
55
59
|
git worktree list --porcelain
|
|
56
60
|
|
|
57
61
|
# Verifier si branche existe
|
|
@@ -32,7 +32,9 @@ BRANCH=${1:-$(git rev-parse --abbrev-ref HEAD)}
|
|
|
32
32
|
BRANCH_TYPE=$(echo $BRANCH | cut -d'/' -f1)
|
|
33
33
|
|
|
34
34
|
# Worktree detection: if in a worktree, navigate to main repo
|
|
35
|
+
# Normalize path for cross-platform compatibility (WSL ↔ Windows)
|
|
35
36
|
WORKTREE_PATH=$(git worktree list --porcelain | grep -B2 "branch refs/heads/$BRANCH" | grep "^worktree " | sed 's/^worktree //')
|
|
37
|
+
WORKTREE_PATH=$(normalize_path_for_platform "$WORKTREE_PATH")
|
|
36
38
|
```
|
|
37
39
|
|
|
38
40
|
### 2. Verify PR Merged
|
|
@@ -96,6 +96,19 @@ if [ ! -d "$PROJECT_BASE/develop" ]; then
|
|
|
96
96
|
fi
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
### 5b. Fix Cross-Platform Worktree Paths
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
PROJECT_BASE="{PROJECT_BASE}"
|
|
103
|
+
|
|
104
|
+
# Detect current platform (needed for path normalization)
|
|
105
|
+
detect_platform
|
|
106
|
+
|
|
107
|
+
# Repair any cross-platform paths written by git worktree add
|
|
108
|
+
# (e.g., WSL paths /mnt/d/... when running on Windows, or vice versa)
|
|
109
|
+
repair_worktree_paths "$PROJECT_BASE/.bare"
|
|
110
|
+
```
|
|
111
|
+
|
|
99
112
|
### 6. Create Config Directory
|
|
100
113
|
|
|
101
114
|
```bash
|
|
@@ -134,6 +134,20 @@ for subdir in features releases hotfixes; do
|
|
|
134
134
|
done
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
+
### 2b. Worktree Path Integrity (Cross-Platform)
|
|
138
|
+
|
|
139
|
+
Repair worktree metadata files that contain paths from a different platform (e.g., WSL paths `/mnt/d/...` on Windows or Windows paths `D:/...` on WSL).
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
PROJECT_BASE="{PROJECT_BASE}"
|
|
143
|
+
|
|
144
|
+
# Source platform detection and path functions from _shared.md
|
|
145
|
+
detect_platform
|
|
146
|
+
|
|
147
|
+
# Repair cross-platform paths in .bare/worktrees/*/gitdir and worktree/.git files
|
|
148
|
+
repair_worktree_paths "$PROJECT_BASE/.bare"
|
|
149
|
+
```
|
|
150
|
+
|
|
137
151
|
### 3. Config Integrity
|
|
138
152
|
|
|
139
153
|
```bash
|
|
@@ -70,8 +70,8 @@ git fetch origin $FULL_BRANCH:refs/remotes/origin/$FULL_BRANCH --force --quiet
|
|
|
70
70
|
- Add `Local` profile to `launchSettings.json`
|
|
71
71
|
|
|
72
72
|
**Frontend (web project detected):**
|
|
73
|
-
- Create `.env.
|
|
74
|
-
- Add `npm run local` script if missing
|
|
73
|
+
- Create `.env.standalone` pointing to the API port (Vite 7+ forbids "local" as mode name)
|
|
74
|
+
- Add `npm run local` script if missing (uses `--mode standalone`)
|
|
75
75
|
|
|
76
76
|
**Port allocation:** Hash branch name for unique ports (API: 5200+, Web: 5300+)
|
|
77
77
|
|
|
@@ -24,7 +24,13 @@ Expert GitFlow. Display COMPLETE repository state with accessible vocabulary.
|
|
|
24
24
|
# 1. BRANCHES
|
|
25
25
|
git fetch --all --quiet 2>/dev/null
|
|
26
26
|
git for-each-ref --sort=-committerdate --format='%(refname:short)|%(objectname:short)|%(committerdate:short)|%(subject)' refs/heads refs/remotes/origin
|
|
27
|
+
|
|
28
|
+
# Worktree list (normalize paths for cross-platform WSL/Windows compatibility)
|
|
29
|
+
# Before listing, repair any cross-platform paths in worktree metadata
|
|
30
|
+
detect_platform
|
|
31
|
+
repair_worktree_paths "$(git rev-parse --git-common-dir 2>/dev/null || echo '.bare')"
|
|
27
32
|
git worktree list
|
|
33
|
+
|
|
28
34
|
git branch -vv
|
|
29
35
|
|
|
30
36
|
# 2. TAGS
|
|
@@ -280,7 +280,7 @@ Load ONLY relevant categories based on feature type:
|
|
|
280
280
|
- Each module specified iteratively with client validation
|
|
281
281
|
- ASCII/SVG mockups proposed for each module's sections
|
|
282
282
|
- Cross-module consolidation passed (step-04)
|
|
283
|
-
- Development handoff ready for `/ralph-loop
|
|
283
|
+
- Development handoff ready for `/ralph-loop`
|
|
284
284
|
- Ralph Loop prd.json generated (per module or consolidated)
|
|
285
285
|
- All outputs renderable by SmartStack app viewer at `/docs/business/{app}/`
|
|
286
286
|
</success_criteria>
|
|
@@ -59,16 +59,19 @@ The BA aligns with the SmartStack navigation hierarchy:
|
|
|
59
59
|
Level 1: Context (business)
|
|
60
60
|
Level 2: Application (Sales)
|
|
61
61
|
Level 3: Module (Customers)
|
|
62
|
-
Level 4: Section (list)
|
|
63
|
-
Level 5:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
Level 4: Section (list) ← sidebar nav
|
|
63
|
+
Level 5: Resource (customer-grid)
|
|
64
|
+
Level 5: Resource (customer-filters)
|
|
65
|
+
Level 4: Section (detail) [hidden] ← reached by row click, route :id
|
|
66
|
+
Level 5: Resource (customer-detail-header)
|
|
67
|
+
Level 5: Resource (customer-detail-tabs)
|
|
68
|
+
Level 5: Resource (customer-info-card)
|
|
69
|
+
Level 5: Resource (customer-orders-grid) ← relation tab
|
|
70
|
+
Level 5: Resource (customer-history) ← audit tab
|
|
67
71
|
Level 3: Module (Orders)
|
|
68
|
-
Level 4: Section (list)
|
|
69
|
-
Level 4: Section (detail)
|
|
70
|
-
Level 4: Section (
|
|
71
|
-
Level 4: Section (approve)
|
|
72
|
+
Level 4: Section (list) ← sidebar nav
|
|
73
|
+
Level 4: Section (detail) [hidden] ← reached by row click
|
|
74
|
+
Level 4: Section (approve) ← sidebar nav (workflow)
|
|
72
75
|
```
|
|
73
76
|
|
|
74
77
|
| BA Phase | Levels treated | What is defined |
|
|
@@ -79,22 +82,45 @@ Level 1: Context (business)
|
|
|
79
82
|
| Consolidation (step-04) | Cross-module | Interactions, permission coherence, E2E flows |
|
|
80
83
|
| Handoff (step-05) | All levels | Implementation mapping, prd.json |
|
|
81
84
|
|
|
82
|
-
### Route
|
|
85
|
+
### Route patterns
|
|
83
86
|
```
|
|
84
|
-
/business/{application}/{module}/{section}
|
|
87
|
+
/business/{application}/{module}/{section} ← sidebar sections (list, dashboard, approve, etc.)
|
|
88
|
+
/business/{application}/{module}/detail/:id ← detail page (hidden from sidebar, reached by row click)
|
|
85
89
|
```
|
|
86
90
|
|
|
91
|
+
**Detail page routing:**
|
|
92
|
+
- The detail page uses a parameterized route with `:id`
|
|
93
|
+
- It is NOT registered as a sidebar navigation entry (`navigation: "hidden"`)
|
|
94
|
+
- It is reached by clicking a row in the `list` section (action: `navigate:detail`)
|
|
95
|
+
- The back button navigates to `/business/{application}/{module}/list`
|
|
96
|
+
- Route MUST be registered in frontend routing (App.tsx) alongside the list route
|
|
97
|
+
|
|
87
98
|
### Standard Sections per Module
|
|
99
|
+
|
|
100
|
+
> **RULE: Sections are functional zones, NOT CRUD operations.**
|
|
101
|
+
> `create` and `edit` are ACTIONS within the `list` page (modal/drawer).
|
|
102
|
+
> `detail` is a page with tabs accessible by clicking a row in `list` (not a standalone nav section).
|
|
103
|
+
|
|
88
104
|
| Section | Purpose | Typical Components |
|
|
89
105
|
|---------|---------|-------------------|
|
|
90
|
-
| `list` | Main entity
|
|
91
|
-
| `detail` |
|
|
92
|
-
| `
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
96
|
-
| `
|
|
97
|
-
|
|
106
|
+
| `list` | **Main page**: entity grid + create action (modal/drawer) + click to detail | DataGrid, FilterBar, Pagination, CreateForm |
|
|
107
|
+
| `detail` | **Reached from list** (hidden nav, route `:id`): tabbed view of entity details + edit capability | BackButton, DetailHeader, StatusBadge, TabPanel, DetailCard, SmartForm (edit), SmartTable (relations), Timeline (history) |
|
|
108
|
+
| `dashboard` | Module overview/KPIs (if analytics needed) | Charts, StatCards, RecentActivity |
|
|
109
|
+
| `approve` | Approval workflow queue (if validation workflow) | ApprovalPanel, StatusTimeline |
|
|
110
|
+
| `import` | Bulk data import (if volume > 100) | FileUpload, MappingTable, Preview |
|
|
111
|
+
| `rapport` | Module-specific reporting | ReportBuilder, ExportPanel |
|
|
112
|
+
| `planning` | Calendar/planning view (if time-based data) | Calendar, GanttChart, TimelineView |
|
|
113
|
+
|
|
114
|
+
**What is NEVER a section:**
|
|
115
|
+
|
|
116
|
+
| NOT a sidebar section | What it really is |
|
|
117
|
+
|---------------|-------------------|
|
|
118
|
+
| `create` | Action button in `list` page → opens Form in modal/drawer |
|
|
119
|
+
| `edit` | Action in detail page → switches fields to edit mode |
|
|
120
|
+
| `delete` | Action with confirmation dialog in `list` or detail |
|
|
121
|
+
| `search` | FilterBar component integrated in the `list` section |
|
|
122
|
+
|
|
123
|
+
> **Note on `detail`:** The detail page IS a `specification.sections[]` entry (with `navigation: "hidden"`) so it gets a wireframe, resources, and route. But it is NOT shown in the sidebar — it is reached by clicking a row in `list`. Every module with a `list` section MUST have a companion `detail` section.
|
|
98
124
|
|
|
99
125
|
---
|
|
100
126
|
|
|
@@ -148,7 +174,7 @@ docs/
|
|
|
148
174
|
|
|
149
175
|
```
|
|
150
176
|
.ralph/
|
|
151
|
-
prd.json # Task breakdown derived from handoff (for /ralph-loop
|
|
177
|
+
prd.json # Task breakdown derived from handoff (for /ralph-loop)
|
|
152
178
|
progress.txt # Links back to BA feature documents
|
|
153
179
|
logs/
|
|
154
180
|
reports/
|
|
@@ -1515,14 +1515,8 @@ body {
|
|
|
1515
1515
|
<!-- Phase 1 : Cadrage -->
|
|
1516
1516
|
<div class="nav-group">
|
|
1517
1517
|
<div class="nav-group-title">1. Cadrage</div>
|
|
1518
|
-
<a class="nav-item active" onclick="showSection('cadrage-
|
|
1519
|
-
<span class="nav-icon">●</span>
|
|
1520
|
-
</a>
|
|
1521
|
-
<a class="nav-item" onclick="showSection('cadrage-current')" data-section="cadrage-current" data-vibe-hide>
|
|
1522
|
-
<span class="nav-icon">●</span> Situation actuelle
|
|
1523
|
-
</a>
|
|
1524
|
-
<a class="nav-item" onclick="showSection('cadrage-vision')" data-section="cadrage-vision" data-vibe-hide>
|
|
1525
|
-
<span class="nav-icon">●</span> Situation souhaitee
|
|
1518
|
+
<a class="nav-item active" onclick="showSection('cadrage-context')" data-section="cadrage-context">
|
|
1519
|
+
<span class="nav-icon">●</span> Contexte
|
|
1526
1520
|
</a>
|
|
1527
1521
|
<a class="nav-item" onclick="showSection('cadrage-stakeholders')" data-section="cadrage-stakeholders">
|
|
1528
1522
|
<span class="nav-icon">●</span> Parties prenantes
|
|
@@ -1589,84 +1583,38 @@ body {
|
|
|
1589
1583
|
============================================ -->
|
|
1590
1584
|
<main class="main" id="mainContent">
|
|
1591
1585
|
|
|
1592
|
-
<!-- SECTION:
|
|
1593
|
-
<div class="section" id="cadrage-
|
|
1594
|
-
<h2 class="section-title">
|
|
1595
|
-
<p class="section-subtitle">
|
|
1596
|
-
|
|
1597
|
-
<div
|
|
1598
|
-
<div class="card
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
</div>
|
|
1606
|
-
|
|
1607
|
-
<div class="card" data-vibe-hide>
|
|
1608
|
-
<div class="card-label">Depuis quand ce probleme existe-t-il ?</div>
|
|
1609
|
-
<div class="editable" contenteditable="true" data-field="problem.history" data-placeholder="Depuis combien de temps ce probleme existe-t-il ? A-t-il empire recemment ?"></div>
|
|
1610
|
-
</div>
|
|
1611
|
-
|
|
1612
|
-
<div class="card">
|
|
1613
|
-
<div class="card-label">Evenement declencheur</div>
|
|
1614
|
-
<div class="editable" contenteditable="true" data-field="problem.trigger" data-placeholder="Qu'est-ce qui a declenche cette demande maintenant ? Pourquoi pas il y a 6 mois ?"></div>
|
|
1615
|
-
</div>
|
|
1616
|
-
|
|
1617
|
-
<div class="card" data-vibe-hide>
|
|
1618
|
-
<div class="card-label">Consequences si le projet n'est pas realise</div>
|
|
1619
|
-
<div class="editable" contenteditable="true" data-field="problem.consequences" data-placeholder="Que se passerait-il si ce projet n'etait PAS realise ? Quelles consequences a court et moyen terme ?"></div>
|
|
1620
|
-
</div>
|
|
1621
|
-
</div>
|
|
1622
|
-
|
|
1623
|
-
<!-- SECTION: Situation actuelle -->
|
|
1624
|
-
<div class="section" id="cadrage-current" style="display:none;" data-vibe-hide>
|
|
1625
|
-
<h2 class="section-title">Situation actuelle</h2>
|
|
1626
|
-
<p class="section-subtitle">Comment les choses se passent aujourd'hui, concretement.</p>
|
|
1627
|
-
|
|
1628
|
-
<div class="card">
|
|
1629
|
-
<div class="card-label">Outils et methodes utilises aujourd'hui</div>
|
|
1630
|
-
<div class="editable" contenteditable="true" data-field="current.tools" data-placeholder="Comment gerez-vous ce sujet aujourd'hui ? Avec quels outils (tableur, email, papier, logiciel) ?"></div>
|
|
1631
|
-
</div>
|
|
1632
|
-
|
|
1633
|
-
<div class="card">
|
|
1634
|
-
<div class="card-label">Processus actuel, etape par etape</div>
|
|
1635
|
-
<div id="processFlow" class="process-flow">
|
|
1636
|
-
<!-- Populated dynamically -->
|
|
1586
|
+
<!-- SECTION: Contexte (merged: problem + current + vision) -->
|
|
1587
|
+
<div class="section" id="cadrage-context">
|
|
1588
|
+
<h2 class="section-title">Contexte du projet</h2>
|
|
1589
|
+
<p class="section-subtitle">Vue synthetique du besoin : probleme, situation actuelle et objectif vise.</p>
|
|
1590
|
+
|
|
1591
|
+
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.5rem;">
|
|
1592
|
+
<div class="card" style="border-left:3px solid #f87171;">
|
|
1593
|
+
<div class="card-label" style="color:#f87171;">Probleme identifie</div>
|
|
1594
|
+
<div class="editable" contenteditable="true" data-field="context.problem" data-placeholder="Quel probleme ce projet doit-il resoudre ?"></div>
|
|
1595
|
+
<div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
|
|
1596
|
+
<strong>Declencheur :</strong>
|
|
1597
|
+
<div class="editable" contenteditable="true" data-field="context.trigger" data-placeholder="Evenement declencheur" style="display:inline;"></div>
|
|
1598
|
+
</div>
|
|
1637
1599
|
</div>
|
|
1638
|
-
<button class="add-btn" onclick="addProcessStep()">+ Ajouter une etape au processus</button>
|
|
1639
|
-
</div>
|
|
1640
|
-
|
|
1641
|
-
<div class="card">
|
|
1642
|
-
<div class="card-label">Etapes les plus penibles ou les plus longues</div>
|
|
1643
|
-
<div class="editable" contenteditable="true" data-field="current.painPoints" data-placeholder="Quelles sont les etapes les plus penibles ou les plus longues dans ce processus ?"></div>
|
|
1644
|
-
</div>
|
|
1645
|
-
|
|
1646
|
-
<div class="card">
|
|
1647
|
-
<div class="card-label">Erreurs ou problemes recurrents</div>
|
|
1648
|
-
<div class="editable" contenteditable="true" data-field="current.errors" data-placeholder="Quelles erreurs ou problemes reviennent regulierement ? Donnez 2 a 3 exemples concrets."></div>
|
|
1649
|
-
</div>
|
|
1650
|
-
</div>
|
|
1651
|
-
|
|
1652
|
-
<!-- SECTION: Situation souhaitee -->
|
|
1653
|
-
<div class="section" id="cadrage-vision" style="display:none;" data-vibe-hide>
|
|
1654
|
-
<h2 class="section-title">Situation souhaitee</h2>
|
|
1655
|
-
<p class="section-subtitle">Ce que le client veut obtenir, pas ce qu'il veut construire.</p>
|
|
1656
1600
|
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
</div>
|
|
1601
|
+
<div class="card" style="border-left:3px solid #facc15;">
|
|
1602
|
+
<div class="card-label" style="color:#facc15;">Aujourd'hui</div>
|
|
1603
|
+
<div class="editable" contenteditable="true" data-field="context.currentSituation" data-placeholder="Comment les choses fonctionnent actuellement ?"></div>
|
|
1604
|
+
<div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
|
|
1605
|
+
<strong>Points douleur :</strong>
|
|
1606
|
+
<div class="editable" contenteditable="true" data-field="context.painPoints" data-placeholder="Problemes recurrents" style="display:inline;"></div>
|
|
1607
|
+
</div>
|
|
1608
|
+
</div>
|
|
1666
1609
|
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1610
|
+
<div class="card" style="border-left:3px solid #4ade80;">
|
|
1611
|
+
<div class="card-label" style="color:#4ade80;">Objectif</div>
|
|
1612
|
+
<div class="editable" contenteditable="true" data-field="context.desiredSituation" data-placeholder="Que doit permettre le systeme cible ?"></div>
|
|
1613
|
+
<div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
|
|
1614
|
+
<strong>Criteres :</strong>
|
|
1615
|
+
<div class="editable" contenteditable="true" data-field="context.acceptanceCriteria" data-placeholder="Criteres de succes" style="display:inline;"></div>
|
|
1616
|
+
</div>
|
|
1617
|
+
</div>
|
|
1670
1618
|
</div>
|
|
1671
1619
|
</div>
|
|
1672
1620
|
|
|
@@ -2113,6 +2061,19 @@ data.cadrage.risks = data.cadrage.risks || [];
|
|
|
2113
2061
|
data.consolidation = data.consolidation || {};
|
|
2114
2062
|
data.consolidation.e2eFlows = data.consolidation.e2eFlows || [];
|
|
2115
2063
|
|
|
2064
|
+
// Backward compat: merge old problem/current/vision into context
|
|
2065
|
+
if (!data.cadrage.context) {
|
|
2066
|
+
data.cadrage.context = {
|
|
2067
|
+
problem: data.cadrage.problem?.description || data.cadrage.problem || '',
|
|
2068
|
+
trigger: data.cadrage.problem?.trigger || '',
|
|
2069
|
+
currentSituation: data.cadrage.current?.tools || '',
|
|
2070
|
+
desiredSituation: data.cadrage.vision?.changes || '',
|
|
2071
|
+
painPoints: data.cadrage.current?.painPoints || (data.cadrage.stakeholders || []).flatMap(s => (s.frustrations || '').split('\n').filter(Boolean)).join('\n'),
|
|
2072
|
+
acceptanceCriteria: data.cadrage.vision?.results || (data.cadrage.criteria || []).map(c => c.text).join('\n')
|
|
2073
|
+
};
|
|
2074
|
+
}
|
|
2075
|
+
data.cadrage.context = data.cadrage.context || { problem: '', trigger: '', currentSituation: '', desiredSituation: '', painPoints: '', acceptanceCriteria: '' };
|
|
2076
|
+
|
|
2116
2077
|
// Initialize comments array
|
|
2117
2078
|
data.comments = data.comments || [];
|
|
2118
2079
|
|
|
@@ -2233,7 +2194,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
|
2233
2194
|
/* ============================================
|
|
2234
2195
|
NAVIGATION
|
|
2235
2196
|
============================================ */
|
|
2236
|
-
let currentSectionId = 'cadrage-
|
|
2197
|
+
let currentSectionId = 'cadrage-context';
|
|
2237
2198
|
|
|
2238
2199
|
function showSection(sectionId) {
|
|
2239
2200
|
currentSectionId = sectionId;
|
|
@@ -2441,27 +2402,18 @@ function renderRisks() {
|
|
|
2441
2402
|
}
|
|
2442
2403
|
|
|
2443
2404
|
/* ============================================
|
|
2444
|
-
|
|
2405
|
+
CONTEXT RENDERING (merged problem/current/vision)
|
|
2445
2406
|
============================================ */
|
|
2446
|
-
function
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
const container = document.getElementById('processFlow');
|
|
2457
|
-
const steps = data.cadrage.current.steps || [];
|
|
2458
|
-
container.innerHTML = steps.map((step, i) => `
|
|
2459
|
-
<div class="process-step">
|
|
2460
|
-
<div class="process-step-number">Etape ${i + 1}</div>
|
|
2461
|
-
<div class="process-step-label">${step}</div>
|
|
2462
|
-
</div>
|
|
2463
|
-
${i < steps.length - 1 ? '<div class="process-arrow">→</div>' : ''}
|
|
2464
|
-
`).join('');
|
|
2407
|
+
function renderContext() {
|
|
2408
|
+
// context fields are handled by initEditableFields() via data-field="context.*"
|
|
2409
|
+
// This function ensures backward compat data is displayed as strings
|
|
2410
|
+
const ctx = data.cadrage.context || {};
|
|
2411
|
+
if (Array.isArray(ctx.painPoints)) {
|
|
2412
|
+
data.cadrage.context.painPoints = ctx.painPoints.join('\n');
|
|
2413
|
+
}
|
|
2414
|
+
if (Array.isArray(ctx.acceptanceCriteria)) {
|
|
2415
|
+
data.cadrage.context.acceptanceCriteria = ctx.acceptanceCriteria.join('\n');
|
|
2416
|
+
}
|
|
2465
2417
|
}
|
|
2466
2418
|
|
|
2467
2419
|
|
|
@@ -4029,9 +3981,7 @@ function renderReviewPanel() {
|
|
|
4029
3981
|
|
|
4030
3982
|
function getSectionLabel(sectionId) {
|
|
4031
3983
|
const labels = {
|
|
4032
|
-
'cadrage-
|
|
4033
|
-
'cadrage-current': 'Situation actuelle',
|
|
4034
|
-
'cadrage-vision': 'Vision',
|
|
3984
|
+
'cadrage-context': 'Contexte',
|
|
4035
3985
|
'cadrage-stakeholders': 'Parties prenantes',
|
|
4036
3986
|
'cadrage-scope': 'Perimetre',
|
|
4037
3987
|
'cadrage-risks': 'Risques',
|
|
@@ -16,6 +16,19 @@ data.cadrage.risks = data.cadrage.risks || [];
|
|
|
16
16
|
data.consolidation = data.consolidation || {};
|
|
17
17
|
data.consolidation.e2eFlows = data.consolidation.e2eFlows || [];
|
|
18
18
|
|
|
19
|
+
// Backward compat: merge old problem/current/vision into context
|
|
20
|
+
if (!data.cadrage.context) {
|
|
21
|
+
data.cadrage.context = {
|
|
22
|
+
problem: data.cadrage.problem?.description || data.cadrage.problem || '',
|
|
23
|
+
trigger: data.cadrage.problem?.trigger || '',
|
|
24
|
+
currentSituation: data.cadrage.current?.tools || '',
|
|
25
|
+
desiredSituation: data.cadrage.vision?.changes || '',
|
|
26
|
+
painPoints: data.cadrage.current?.painPoints || (data.cadrage.stakeholders || []).flatMap(s => (s.frustrations || '').split('\n').filter(Boolean)).join('\n'),
|
|
27
|
+
acceptanceCriteria: data.cadrage.vision?.results || (data.cadrage.criteria || []).map(c => c.text).join('\n')
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
data.cadrage.context = data.cadrage.context || { problem: '', trigger: '', currentSituation: '', desiredSituation: '', painPoints: '', acceptanceCriteria: '' };
|
|
31
|
+
|
|
19
32
|
// Initialize comments array
|
|
20
33
|
data.comments = data.comments || [];
|
|
21
34
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* ============================================
|
|
2
2
|
NAVIGATION
|
|
3
3
|
============================================ */
|
|
4
|
-
let currentSectionId = 'cadrage-
|
|
4
|
+
let currentSectionId = 'cadrage-context';
|
|
5
5
|
|
|
6
6
|
function showSection(sectionId) {
|
|
7
7
|
currentSectionId = sectionId;
|
|
@@ -184,25 +184,16 @@ function renderRisks() {
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
/* ============================================
|
|
187
|
-
|
|
187
|
+
CONTEXT RENDERING (merged problem/current/vision)
|
|
188
188
|
============================================ */
|
|
189
|
-
function
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const container = document.getElementById('processFlow');
|
|
200
|
-
const steps = data.cadrage.current.steps || [];
|
|
201
|
-
container.innerHTML = steps.map((step, i) => `
|
|
202
|
-
<div class="process-step">
|
|
203
|
-
<div class="process-step-number">Etape ${i + 1}</div>
|
|
204
|
-
<div class="process-step-label">${step}</div>
|
|
205
|
-
</div>
|
|
206
|
-
${i < steps.length - 1 ? '<div class="process-arrow">→</div>' : ''}
|
|
207
|
-
`).join('');
|
|
189
|
+
function renderContext() {
|
|
190
|
+
// context fields are handled by initEditableFields() via data-field="context.*"
|
|
191
|
+
// This function ensures backward compat data is displayed as strings
|
|
192
|
+
const ctx = data.cadrage.context || {};
|
|
193
|
+
if (Array.isArray(ctx.painPoints)) {
|
|
194
|
+
data.cadrage.context.painPoints = ctx.painPoints.join('\n');
|
|
195
|
+
}
|
|
196
|
+
if (Array.isArray(ctx.acceptanceCriteria)) {
|
|
197
|
+
data.cadrage.context.acceptanceCriteria = ctx.acceptanceCriteria.join('\n');
|
|
198
|
+
}
|
|
208
199
|
}
|
|
@@ -100,9 +100,7 @@ function renderReviewPanel() {
|
|
|
100
100
|
|
|
101
101
|
function getSectionLabel(sectionId) {
|
|
102
102
|
const labels = {
|
|
103
|
-
'cadrage-
|
|
104
|
-
'cadrage-current': 'Situation actuelle',
|
|
105
|
-
'cadrage-vision': 'Vision',
|
|
103
|
+
'cadrage-context': 'Contexte',
|
|
106
104
|
'cadrage-stakeholders': 'Parties prenantes',
|
|
107
105
|
'cadrage-scope': 'Perimetre',
|
|
108
106
|
'cadrage-risks': 'Risques',
|