@atlashub/smartstack-cli 3.32.0 → 3.34.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/agents.html +5 -1
- package/.documentation/apex.html +644 -0
- package/.documentation/business-analyse.html +81 -1
- package/.documentation/cli-commands.html +5 -1
- package/.documentation/commands.html +5 -1
- package/.documentation/efcore.html +5 -1
- package/.documentation/gitflow.html +5 -1
- package/.documentation/hooks.html +5 -1
- package/.documentation/index.html +60 -2
- package/.documentation/init.html +5 -1
- package/.documentation/installation.html +5 -1
- package/.documentation/ralph-loop.html +365 -216
- package/.documentation/test-web.html +5 -1
- package/package.json +1 -1
- package/templates/agents/ba-writer.md +142 -15
- package/templates/skills/apex/SKILL.md +7 -1
- package/templates/skills/apex/_shared.md +49 -4
- package/templates/skills/{ralph-loop → apex}/references/core-seed-data.md +20 -11
- package/templates/skills/{ralph-loop → apex}/references/error-classification.md +2 -1
- package/templates/skills/apex/references/post-checks.md +238 -3
- package/templates/skills/apex/references/smartstack-api.md +47 -7
- package/templates/skills/apex/references/smartstack-frontend.md +47 -1
- package/templates/skills/apex/references/smartstack-layers.md +3 -1
- package/templates/skills/apex/steps/step-00-init.md +48 -1
- package/templates/skills/apex/steps/step-01-analyze.md +37 -0
- package/templates/skills/apex/steps/step-02-plan.md +36 -0
- package/templates/skills/apex/steps/step-03-execute.md +42 -2
- package/templates/skills/apex/steps/step-04-examine.md +110 -2
- package/templates/skills/business-analyse/SKILL.md +29 -19
- package/templates/skills/business-analyse/_module-loop.md +68 -9
- package/templates/skills/business-analyse/_shared.md +71 -21
- package/templates/skills/business-analyse/questionnaire/00-application.md +4 -2
- package/templates/skills/business-analyse/questionnaire/00b-project.md +85 -0
- package/templates/skills/business-analyse/references/deploy-modes.md +69 -0
- package/templates/skills/business-analyse/references/team-orchestration.md +158 -7
- package/templates/skills/business-analyse/schemas/application-schema.json +2 -1
- package/templates/skills/business-analyse/schemas/project-schema.json +490 -0
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +2 -1
- package/templates/skills/business-analyse/steps/step-00-init.md +30 -4
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +62 -2
- package/templates/skills/business-analyse/steps/step-01b-applications.md +252 -0
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +23 -6
- package/templates/skills/business-analyse/steps/step-03d-validate.md +27 -6
- package/templates/skills/business-analyse/steps/step-04a-collect.md +111 -0
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +296 -103
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +46 -14
- package/templates/skills/documentation/SKILL.md +92 -2
- package/templates/skills/ralph-loop/SKILL.md +9 -17
- package/templates/skills/ralph-loop/references/category-rules.md +43 -692
- package/templates/skills/ralph-loop/references/compact-loop.md +104 -427
- package/templates/skills/ralph-loop/references/team-orchestration.md +13 -14
- package/templates/skills/ralph-loop/steps/step-02-execute.md +49 -704
- package/templates/skills/ralph-loop/steps/step-03-commit.md +38 -79
- package/templates/skills/ralph-loop/steps/step-04-check.md +39 -58
- package/templates/skills/ralph-loop/steps/step-05-report.md +12 -123
|
@@ -0,0 +1,644 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="fr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>APEX - SmartStack CLI</title>
|
|
7
|
+
<link rel="stylesheet" href="css/styles.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div class="app-container">
|
|
11
|
+
<!-- Global Header (single unified element) -->
|
|
12
|
+
<header class="global-header">
|
|
13
|
+
<div class="logo">SS</div>
|
|
14
|
+
<span class="site-title">SmartStack CLI</span>
|
|
15
|
+
<span class="version-badge">v3.34.0</span>
|
|
16
|
+
<div class="header-divider"></div>
|
|
17
|
+
<span class="page-title" data-lang="fr">APEX - Développement Incrémental</span>
|
|
18
|
+
<span class="page-title" data-lang="en">APEX - Incremental Development</span>
|
|
19
|
+
<nav class="breadcrumb">
|
|
20
|
+
<a href="index.html">
|
|
21
|
+
<span data-lang="fr">Accueil</span>
|
|
22
|
+
<span data-lang="en">Home</span>
|
|
23
|
+
</a>
|
|
24
|
+
<span class="breadcrumb-separator">›</span>
|
|
25
|
+
<span data-lang="fr">Workflows</span>
|
|
26
|
+
<span data-lang="en">Workflows</span>
|
|
27
|
+
<span class="breadcrumb-separator">›</span>
|
|
28
|
+
<span class="breadcrumb-current">APEX</span>
|
|
29
|
+
</nav>
|
|
30
|
+
<!-- Language Select -->
|
|
31
|
+
<select class="lang-select" id="lang-select" onchange="setLanguage(this.value); localStorage.setItem('doc-language', this.value);">
|
|
32
|
+
<option value="fr">🇫🇷 FR</option>
|
|
33
|
+
<option value="en">🇬🇧 EN</option>
|
|
34
|
+
</select>
|
|
35
|
+
<!-- Search -->
|
|
36
|
+
<div class="header-search">
|
|
37
|
+
<div class="search-input-wrapper">
|
|
38
|
+
<span class="search-icon">🔍</span>
|
|
39
|
+
<input type="text" id="search-input" class="search-input" placeholder="Rechercher..." data-placeholder-fr="Rechercher..." data-placeholder-en="Search..." autocomplete="off">
|
|
40
|
+
<span class="search-shortcut">Ctrl+K</span>
|
|
41
|
+
</div>
|
|
42
|
+
<div id="search-results" class="search-results"></div>
|
|
43
|
+
</div>
|
|
44
|
+
</header>
|
|
45
|
+
|
|
46
|
+
<!-- App Body -->
|
|
47
|
+
<div class="app-body">
|
|
48
|
+
<!-- Sidebar -->
|
|
49
|
+
<aside class="sidebar">
|
|
50
|
+
<button class="sidebar-toggle" title="Toggle sidebar">
|
|
51
|
+
<span class="toggle-icon-collapse">«</span>
|
|
52
|
+
<span class="toggle-icon-expand">»</span>
|
|
53
|
+
</button>
|
|
54
|
+
|
|
55
|
+
<nav class="sidebar-nav">
|
|
56
|
+
<div class="nav-section">
|
|
57
|
+
<div class="nav-section-title">
|
|
58
|
+
<span data-lang="fr">Demarrage</span>
|
|
59
|
+
<span data-lang="en">Getting Started</span>
|
|
60
|
+
</div>
|
|
61
|
+
<a href="index.html" class="nav-item">
|
|
62
|
+
<span class="icon">🏠</span>
|
|
63
|
+
<span class="nav-text" data-lang="fr">Accueil</span>
|
|
64
|
+
<span class="nav-text" data-lang="en">Home</span>
|
|
65
|
+
</a>
|
|
66
|
+
<a href="installation.html" class="nav-item">
|
|
67
|
+
<span class="icon">📦</span>
|
|
68
|
+
<span class="nav-text">Installation</span>
|
|
69
|
+
</a>
|
|
70
|
+
<a href="init.html" class="nav-item">
|
|
71
|
+
<span class="icon">🚀</span>
|
|
72
|
+
<span class="nav-text">Projet Client</span>
|
|
73
|
+
</a>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div class="nav-section">
|
|
77
|
+
<div class="nav-section-title">Workflows</div>
|
|
78
|
+
<a href="gitflow.html" class="nav-item">
|
|
79
|
+
<span class="icon">🔀</span>
|
|
80
|
+
<span class="nav-text">GitFlow</span>
|
|
81
|
+
</a>
|
|
82
|
+
<a href="efcore.html" class="nav-item">
|
|
83
|
+
<span class="icon">🗄</span>
|
|
84
|
+
<span class="nav-text">EF Core</span>
|
|
85
|
+
</a>
|
|
86
|
+
<a href="business-analyse.html" class="nav-item">
|
|
87
|
+
<span class="icon">📊</span>
|
|
88
|
+
<span class="nav-text">Business Analyse</span>
|
|
89
|
+
</a>
|
|
90
|
+
<a href="ralph-loop.html" class="nav-item">
|
|
91
|
+
<span class="icon">🔄</span>
|
|
92
|
+
<span class="nav-text">Ralph Loop</span>
|
|
93
|
+
</a>
|
|
94
|
+
<a href="apex.html" class="nav-item active">
|
|
95
|
+
<span class="icon">⚙</span>
|
|
96
|
+
<span class="nav-text">APEX</span>
|
|
97
|
+
</a>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<div class="nav-section">
|
|
101
|
+
<div class="nav-section-title">
|
|
102
|
+
<span data-lang="fr">Outils</span>
|
|
103
|
+
<span data-lang="en">Tools</span>
|
|
104
|
+
</div>
|
|
105
|
+
<a href="cli-commands.html" class="nav-item">
|
|
106
|
+
<span class="icon">💻</span>
|
|
107
|
+
<span class="nav-text" data-lang="fr">CLI SmartStack</span>
|
|
108
|
+
<span class="nav-text" data-lang="en">SmartStack CLI</span>
|
|
109
|
+
</a>
|
|
110
|
+
<a href="agents.html" class="nav-item">
|
|
111
|
+
<span class="icon">🤖</span>
|
|
112
|
+
<span class="nav-text">Agents</span>
|
|
113
|
+
</a>
|
|
114
|
+
<a href="commands.html" class="nav-item">
|
|
115
|
+
<span class="icon">⚡</span>
|
|
116
|
+
<span class="nav-text" data-lang="fr">Commandes Claude</span>
|
|
117
|
+
<span class="nav-text" data-lang="en">Claude Commands</span>
|
|
118
|
+
</a>
|
|
119
|
+
<a href="hooks.html" class="nav-item">
|
|
120
|
+
<span class="icon">🔗</span>
|
|
121
|
+
<span class="nav-text">Hooks</span>
|
|
122
|
+
</a>
|
|
123
|
+
<a href="test-web.html" class="nav-item">
|
|
124
|
+
<span class="icon">🌐</span>
|
|
125
|
+
<span class="nav-text">Test Web</span>
|
|
126
|
+
</a>
|
|
127
|
+
</div>
|
|
128
|
+
</nav>
|
|
129
|
+
|
|
130
|
+
</aside>
|
|
131
|
+
|
|
132
|
+
<!-- Main Content -->
|
|
133
|
+
<main class="main-content">
|
|
134
|
+
<div class="content content-wide">
|
|
135
|
+
<!-- Introduction -->
|
|
136
|
+
<section id="introduction">
|
|
137
|
+
<h1>APEX</h1>
|
|
138
|
+
<p data-lang="fr">
|
|
139
|
+
<strong>APEX = Analyze → Plan → Execute → eXamine</strong>
|
|
140
|
+
</p>
|
|
141
|
+
<p data-lang="en">
|
|
142
|
+
<strong>APEX = Analyze → Plan → Execute → eXamine</strong>
|
|
143
|
+
</p>
|
|
144
|
+
|
|
145
|
+
<p data-lang="fr">
|
|
146
|
+
APEX est la méthodologie SmartStack de développement incrémental. C'est un orchestrateur qui coordonne la génération de code via les skills existants (/controller, /application, /ui-components, /efcore) et les outils MCP.
|
|
147
|
+
</p>
|
|
148
|
+
<p data-lang="en">
|
|
149
|
+
APEX is the SmartStack incremental development methodology. It is an orchestrator that coordinates code generation through existing skills (/controller, /application, /ui-components, /efcore) and MCP tools.
|
|
150
|
+
</p>
|
|
151
|
+
|
|
152
|
+
<div class="alert alert-info">
|
|
153
|
+
<span class="alert-icon">💡</span>
|
|
154
|
+
<div class="alert-content">
|
|
155
|
+
<h5 data-lang="fr">Principe clé</h5>
|
|
156
|
+
<h5 data-lang="en">Key Principle</h5>
|
|
157
|
+
<p data-lang="fr">
|
|
158
|
+
APEX orchestre — il ne génère jamais le code SmartStack directement. Toute génération passe par les skills et les outils MCP.
|
|
159
|
+
</p>
|
|
160
|
+
<p data-lang="en">
|
|
161
|
+
APEX orchestrates — it never generates SmartStack code directly. All generation goes through skills and MCP tools.
|
|
162
|
+
</p>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
</section>
|
|
166
|
+
|
|
167
|
+
<!-- Quick Start -->
|
|
168
|
+
<section id="quick-start">
|
|
169
|
+
<h2 data-lang="fr">Démarrage Rapide</h2>
|
|
170
|
+
<h2 data-lang="en">Quick Start</h2>
|
|
171
|
+
|
|
172
|
+
<div class="code-block">
|
|
173
|
+
<div class="code-label" data-lang="fr">Commandes APEX</div>
|
|
174
|
+
<div class="code-label" data-lang="en">APEX Commands</div>
|
|
175
|
+
<pre><code>/apex add absence management to HR module # Add section
|
|
176
|
+
/apex -a fix the leave request controller # Auto fix
|
|
177
|
+
/apex -a -x -s -pr add PDF export to Orders # Full workflow
|
|
178
|
+
/apex -e add status field to Project entity # Economy (no agents)
|
|
179
|
+
/apex -r # Resume previous
|
|
180
|
+
/apex -d .ralph/prd.json # Delegate mode (from ralph-loop)</code></pre>
|
|
181
|
+
</div>
|
|
182
|
+
</section>
|
|
183
|
+
|
|
184
|
+
<!-- Flags -->
|
|
185
|
+
<section id="flags">
|
|
186
|
+
<h2 data-lang="fr">Drapeaux</h2>
|
|
187
|
+
<h2 data-lang="en">Flags</h2>
|
|
188
|
+
|
|
189
|
+
<div class="table-container">
|
|
190
|
+
<table class="reference-table">
|
|
191
|
+
<thead>
|
|
192
|
+
<tr>
|
|
193
|
+
<th data-lang="fr">Drapeau</th>
|
|
194
|
+
<th data-lang="en">Flag</th>
|
|
195
|
+
<th data-lang="fr">Description</th>
|
|
196
|
+
<th data-lang="en">Description</th>
|
|
197
|
+
</tr>
|
|
198
|
+
</thead>
|
|
199
|
+
<tbody>
|
|
200
|
+
<tr>
|
|
201
|
+
<td><code>-a</code></td>
|
|
202
|
+
<td colspan="1"></td>
|
|
203
|
+
<td data-lang="fr">Mode auto: saute les confirmations</td>
|
|
204
|
+
<td data-lang="en">Auto mode: skip confirmations</td>
|
|
205
|
+
</tr>
|
|
206
|
+
<tr>
|
|
207
|
+
<td><code>-x</code></td>
|
|
208
|
+
<td colspan="1"></td>
|
|
209
|
+
<td data-lang="fr">Revue approfondie: revue de code adversariale</td>
|
|
210
|
+
<td data-lang="en">Deep review: adversarial code review</td>
|
|
211
|
+
</tr>
|
|
212
|
+
<tr>
|
|
213
|
+
<td><code>-s</code></td>
|
|
214
|
+
<td colspan="1"></td>
|
|
215
|
+
<td data-lang="fr">Mode sauvegarde: sortie vers `.claude/output/apex/`</td>
|
|
216
|
+
<td data-lang="en">Save mode: output to `.claude/output/apex/`</td>
|
|
217
|
+
</tr>
|
|
218
|
+
<tr>
|
|
219
|
+
<td><code>-e</code></td>
|
|
220
|
+
<td colspan="1"></td>
|
|
221
|
+
<td data-lang="fr">Mode économie: pas de sous-agents</td>
|
|
222
|
+
<td data-lang="en">Economy mode: no subagents</td>
|
|
223
|
+
</tr>
|
|
224
|
+
<tr>
|
|
225
|
+
<td><code>-r</code></td>
|
|
226
|
+
<td colspan="1"></td>
|
|
227
|
+
<td data-lang="fr">Reprendre l'état précédent</td>
|
|
228
|
+
<td data-lang="en">Resume: continue from previous state</td>
|
|
229
|
+
</tr>
|
|
230
|
+
<tr>
|
|
231
|
+
<td><code>-pr</code></td>
|
|
232
|
+
<td colspan="1"></td>
|
|
233
|
+
<td data-lang="fr">Mode PR: créer une pull request à la fin</td>
|
|
234
|
+
<td data-lang="en">PR mode: create pull request at end</td>
|
|
235
|
+
</tr>
|
|
236
|
+
<tr>
|
|
237
|
+
<td><code>-d {path}</code></td>
|
|
238
|
+
<td colspan="1"></td>
|
|
239
|
+
<td data-lang="fr">Mode délégué: lire le contexte d'un fichier PRD. Implique -a -e. Utilisé par /ralph-loop.</td>
|
|
240
|
+
<td data-lang="en">Delegate mode: read context from PRD file. Implies -a -e. Used by /ralph-loop.</td>
|
|
241
|
+
</tr>
|
|
242
|
+
</tbody>
|
|
243
|
+
</table>
|
|
244
|
+
</div>
|
|
245
|
+
</section>
|
|
246
|
+
|
|
247
|
+
<!-- 9 Steps Architecture -->
|
|
248
|
+
<section id="steps">
|
|
249
|
+
<h2 data-lang="fr">Architecture: 9 Étapes</h2>
|
|
250
|
+
<h2 data-lang="en">Architecture: 9 Steps</h2>
|
|
251
|
+
|
|
252
|
+
<svg class="svg-diagram" viewBox="0 0 1000 500" xmlns="http://www.w3.org/2000/svg" style="margin: 2rem 0;">
|
|
253
|
+
<!-- Title -->
|
|
254
|
+
<text x="500" y="30" text-anchor="middle" font-size="24" font-weight="bold" fill="#1f2937">APEX Phases & Layers</text>
|
|
255
|
+
|
|
256
|
+
<!-- Phase boxes -->
|
|
257
|
+
<g>
|
|
258
|
+
<!-- ANALYZE -->
|
|
259
|
+
<rect x="50" y="80" width="180" height="100" fill="#3b82f6" opacity="0.2" stroke="#3b82f6" stroke-width="2" rx="8"/>
|
|
260
|
+
<text x="140" y="110" text-anchor="middle" font-weight="bold" font-size="18" fill="#1e40af">ANALYZE</text>
|
|
261
|
+
<text x="140" y="140" text-anchor="middle" font-size="13" fill="#1f2937">Step 00: Init</text>
|
|
262
|
+
<text x="140" y="160" text-anchor="middle" font-size="13" fill="#1f2937">Step 01: Explore</text>
|
|
263
|
+
|
|
264
|
+
<!-- PLAN -->
|
|
265
|
+
<rect x="280" y="80" width="180" height="100" fill="#8b5cf6" opacity="0.2" stroke="#8b5cf6" stroke-width="2" rx="8"/>
|
|
266
|
+
<text x="370" y="110" text-anchor="middle" font-weight="bold" font-size="18" fill="#5b21b6">PLAN</text>
|
|
267
|
+
<text x="370" y="140" text-anchor="middle" font-size="13" fill="#1f2937">Step 02: Layer</text>
|
|
268
|
+
<text x="370" y="160" text-anchor="middle" font-size="13" fill="#1f2937">Mapping</text>
|
|
269
|
+
|
|
270
|
+
<!-- EXECUTE -->
|
|
271
|
+
<rect x="510" y="80" width="180" height="100" fill="#10b981" opacity="0.2" stroke="#10b981" stroke-width="2" rx="8"/>
|
|
272
|
+
<text x="600" y="110" text-anchor="middle" font-weight="bold" font-size="18" fill="#065f46">EXECUTE</text>
|
|
273
|
+
<text x="600" y="140" text-anchor="middle" font-size="13" fill="#1f2937">Step 03: Run</text>
|
|
274
|
+
<text x="600" y="160" text-anchor="middle" font-size="13" fill="#1f2937">Skills & MCP</text>
|
|
275
|
+
|
|
276
|
+
<!-- EXAMINE -->
|
|
277
|
+
<rect x="740" y="80" width="180" height="100" fill="#f59e0b" opacity="0.2" stroke="#f59e0b" stroke-width="2" rx="8"/>
|
|
278
|
+
<text x="830" y="110" text-anchor="middle" font-weight="bold" font-size="18" fill="#92400e">EXAMINE</text>
|
|
279
|
+
<text x="830" y="140" text-anchor="middle" font-size="13" fill="#1f2937">Step 04: Validate</text>
|
|
280
|
+
<text x="830" y="160" text-anchor="middle" font-size="13" fill="#1f2937">43 POST-CHECKs</text>
|
|
281
|
+
</g>
|
|
282
|
+
|
|
283
|
+
<!-- Arrows between phases -->
|
|
284
|
+
<g stroke="#6b7280" stroke-width="2" fill="none">
|
|
285
|
+
<path d="M 230 130 L 280 130" marker-end="url(#arrowhead)"/>
|
|
286
|
+
<path d="M 460 130 L 510 130" marker-end="url(#arrowhead)"/>
|
|
287
|
+
<path d="M 690 130 L 740 130" marker-end="url(#arrowhead)"/>
|
|
288
|
+
</g>
|
|
289
|
+
|
|
290
|
+
<!-- Layer Execution Order -->
|
|
291
|
+
<text x="50" y="230" font-weight="bold" font-size="16" fill="#1f2937">Layer Execution Order:</text>
|
|
292
|
+
|
|
293
|
+
<g id="layers">
|
|
294
|
+
<rect x="50" y="250" width="880" height="200" fill="#f3f4f6" stroke="#d1d5db" stroke-width="1" rx="4"/>
|
|
295
|
+
|
|
296
|
+
<!-- Layer flow -->
|
|
297
|
+
<text x="70" y="275" font-size="12" fill="#374151" font-family="monospace">domain</text>
|
|
298
|
+
<text x="70" y="300" font-size="12" fill="#374151" font-family="monospace">↓ infrastructure</text>
|
|
299
|
+
<text x="70" y="325" font-size="12" fill="#dc2626" font-family="monospace" font-weight="bold">↓ migration (BLOCKING)</text>
|
|
300
|
+
<text x="70" y="350" font-size="12" fill="#374151" font-family="monospace">↓ application</text>
|
|
301
|
+
<text x="70" y="375" font-size="12" fill="#374151" font-family="monospace">↓ api</text>
|
|
302
|
+
<text x="70" y="400" font-size="12" fill="#374151" font-family="monospace">↓ frontend</text>
|
|
303
|
+
<text x="70" y="425" font-size="12" fill="#374151" font-family="monospace">↓ i18n → tests</text>
|
|
304
|
+
</g>
|
|
305
|
+
|
|
306
|
+
<!-- Arrow marker definition -->
|
|
307
|
+
<defs>
|
|
308
|
+
<marker id="arrowhead" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
|
|
309
|
+
<polygon points="0 0, 10 3, 0 6" fill="#6b7280"/>
|
|
310
|
+
</marker>
|
|
311
|
+
</defs>
|
|
312
|
+
</svg>
|
|
313
|
+
|
|
314
|
+
<div class="table-container">
|
|
315
|
+
<table class="reference-table">
|
|
316
|
+
<thead>
|
|
317
|
+
<tr>
|
|
318
|
+
<th data-lang="fr">Étape</th>
|
|
319
|
+
<th data-lang="en">Step</th>
|
|
320
|
+
<th data-lang="fr">Phase</th>
|
|
321
|
+
<th data-lang="en">Phase</th>
|
|
322
|
+
<th data-lang="fr">Objectif</th>
|
|
323
|
+
<th data-lang="en">Purpose</th>
|
|
324
|
+
</tr>
|
|
325
|
+
</thead>
|
|
326
|
+
<tbody>
|
|
327
|
+
<tr>
|
|
328
|
+
<td>00</td>
|
|
329
|
+
<td colspan="1"></td>
|
|
330
|
+
<td colspan="1">Init</td>
|
|
331
|
+
<td colspan="1"></td>
|
|
332
|
+
<td data-lang="fr">Parser flags, détecter contexte, vérifier MCP, définir hiérarchie 5 niveaux, challenger besoin</td>
|
|
333
|
+
<td data-lang="en">Parse flags, detect context, verify MCP, define 5-level hierarchy, challenge need</td>
|
|
334
|
+
</tr>
|
|
335
|
+
<tr style="background: #3b82f6; background: rgba(59, 130, 246, 0.1);">
|
|
336
|
+
<td>01</td>
|
|
337
|
+
<td colspan="1"></td>
|
|
338
|
+
<td colspan="1" style="font-weight: bold;">ANALYZE</td>
|
|
339
|
+
<td colspan="1"></td>
|
|
340
|
+
<td data-lang="fr">Explorer le code existant (Agent Teams ou direct)</td>
|
|
341
|
+
<td data-lang="en">Explore existing code (Agent Teams or direct)</td>
|
|
342
|
+
</tr>
|
|
343
|
+
<tr style="background: rgba(139, 92, 246, 0.1);">
|
|
344
|
+
<td>02</td>
|
|
345
|
+
<td colspan="1"></td>
|
|
346
|
+
<td colspan="1" style="font-weight: bold;">PLAN</td>
|
|
347
|
+
<td colspan="1"></td>
|
|
348
|
+
<td data-lang="fr">Plan par couche avec mapping skill/MCP</td>
|
|
349
|
+
<td data-lang="en">Layer-by-layer plan with skill/MCP mapping</td>
|
|
350
|
+
</tr>
|
|
351
|
+
<tr style="background: rgba(16, 185, 129, 0.1);">
|
|
352
|
+
<td>03</td>
|
|
353
|
+
<td colspan="1"></td>
|
|
354
|
+
<td colspan="1" style="font-weight: bold;">EXECUTE</td>
|
|
355
|
+
<td colspan="1"></td>
|
|
356
|
+
<td data-lang="fr">Orchestrer exécution via skills et MCP</td>
|
|
357
|
+
<td data-lang="en">Orchestrate execution via skills and MCP</td>
|
|
358
|
+
</tr>
|
|
359
|
+
<tr style="background: rgba(245, 158, 11, 0.1);">
|
|
360
|
+
<td>04</td>
|
|
361
|
+
<td colspan="1"></td>
|
|
362
|
+
<td colspan="1" style="font-weight: bold;">EXAMINE</td>
|
|
363
|
+
<td colspan="1"></td>
|
|
364
|
+
<td data-lang="fr">Validation MCP, build, 43 POST-CHECKs, critères acceptation</td>
|
|
365
|
+
<td data-lang="en">MCP validation, build, 43 POST-CHECKs, acceptance criteria</td>
|
|
366
|
+
</tr>
|
|
367
|
+
<tr>
|
|
368
|
+
<td>05</td>
|
|
369
|
+
<td colspan="1"></td>
|
|
370
|
+
<td colspan="1">Deep Review</td>
|
|
371
|
+
<td colspan="1"></td>
|
|
372
|
+
<td data-lang="fr">Revue de code adversariale (si flag -x)</td>
|
|
373
|
+
<td data-lang="en">Adversarial code review (if -x flag)</td>
|
|
374
|
+
</tr>
|
|
375
|
+
<tr>
|
|
376
|
+
<td>06</td>
|
|
377
|
+
<td colspan="1"></td>
|
|
378
|
+
<td colspan="1">Resolve</td>
|
|
379
|
+
<td colspan="1"></td>
|
|
380
|
+
<td data-lang="fr">Corriger les trouvailles BLOQUANTES</td>
|
|
381
|
+
<td data-lang="en">Fix BLOCKING findings</td>
|
|
382
|
+
</tr>
|
|
383
|
+
<tr>
|
|
384
|
+
<td>07</td>
|
|
385
|
+
<td colspan="1"></td>
|
|
386
|
+
<td colspan="1">Tests</td>
|
|
387
|
+
<td colspan="1"></td>
|
|
388
|
+
<td data-lang="fr">Scaffolder tests via MCP</td>
|
|
389
|
+
<td data-lang="en">Scaffold tests via MCP</td>
|
|
390
|
+
</tr>
|
|
391
|
+
<tr>
|
|
392
|
+
<td>08</td>
|
|
393
|
+
<td colspan="1"></td>
|
|
394
|
+
<td colspan="1">Run Tests</td>
|
|
395
|
+
<td colspan="1"></td>
|
|
396
|
+
<td data-lang="fr">Exécuter tests jusqu'à 100% réussi</td>
|
|
397
|
+
<td data-lang="en">Run tests until 100% pass</td>
|
|
398
|
+
</tr>
|
|
399
|
+
</tbody>
|
|
400
|
+
</table>
|
|
401
|
+
</div>
|
|
402
|
+
</section>
|
|
403
|
+
|
|
404
|
+
<!-- 43 POST-CHECKs -->
|
|
405
|
+
<section id="post-checks">
|
|
406
|
+
<h2 data-lang="fr">43 POST-CHECKs (Étape 04)</h2>
|
|
407
|
+
<h2 data-lang="en">43 POST-CHECKs (Step 04)</h2>
|
|
408
|
+
|
|
409
|
+
<p data-lang="fr">
|
|
410
|
+
Validation automatisée couvrant:
|
|
411
|
+
</p>
|
|
412
|
+
<p data-lang="en">
|
|
413
|
+
Automated validation covering:
|
|
414
|
+
</p>
|
|
415
|
+
|
|
416
|
+
<ul style="margin-top: 1rem; margin-bottom: 2rem; line-height: 1.8;">
|
|
417
|
+
<li data-lang="fr">Conventions namespace, usage BaseEntity, ITenantEntity</li>
|
|
418
|
+
<li data-lang="en">Namespace conventions, BaseEntity usage, ITenantEntity</li>
|
|
419
|
+
|
|
420
|
+
<li data-lang="fr">Filtrage TenantId dans les services (clause de garde obligatoire)</li>
|
|
421
|
+
<li data-lang="en">TenantId filtering in services (guard clause mandatory)</li>
|
|
422
|
+
|
|
423
|
+
<li data-lang="fr">[RequirePermission] sur contrôleurs (pas seulement [Authorize])</li>
|
|
424
|
+
<li data-lang="en">[RequirePermission] on controllers (not just [Authorize])</li>
|
|
425
|
+
|
|
426
|
+
<li data-lang="fr">Routes chemin complet, permissions en kebab-case</li>
|
|
427
|
+
<li data-lang="en">Full-path routes, kebab-case permissions</li>
|
|
428
|
+
|
|
429
|
+
<li data-lang="fr">Complétude données seed (navigation, permissions, rôles, traductions)</li>
|
|
430
|
+
<li data-lang="en">Seed data completeness (navigation, permissions, roles, translations)</li>
|
|
431
|
+
|
|
432
|
+
<li data-lang="fr">Idempotence traductions (gardes AnyAsync)</li>
|
|
433
|
+
<li data-lang="en">Translation idempotency (AnyAsync guards)</li>
|
|
434
|
+
|
|
435
|
+
<li data-lang="fr">Sécurité données seed FK (requête IDs réels de DB)</li>
|
|
436
|
+
<li data-lang="en">FK seed data safety (query actual IDs from DB)</li>
|
|
437
|
+
|
|
438
|
+
<li data-lang="fr">Frontend: i18n 4 langues, pas imports statiques en routes, pas couleurs en dur</li>
|
|
439
|
+
<li data-lang="en">Frontend: i18n 4 languages, no static imports in routes, no hardcoded colors</li>
|
|
440
|
+
|
|
441
|
+
<li data-lang="fr">Pas de modaux pour formulaires, pages create/edit existent, fichiers test existent</li>
|
|
442
|
+
<li data-lang="en">No modals for forms, create/edit pages exist, test files exist</li>
|
|
443
|
+
|
|
444
|
+
<li data-lang="fr">EntityLookup pour champs FK, param search sur GetAll</li>
|
|
445
|
+
<li data-lang="en">EntityLookup for FK fields, search param on GetAll</li>
|
|
446
|
+
|
|
447
|
+
<li data-lang="fr">Complétude sous-ressources, onglets page détail état local</li>
|
|
448
|
+
<li data-lang="en">Sub-resource completeness, detail page tabs local state</li>
|
|
449
|
+
</ul>
|
|
450
|
+
</section>
|
|
451
|
+
|
|
452
|
+
<!-- Error Handling -->
|
|
453
|
+
<section id="error-handling">
|
|
454
|
+
<h2 data-lang="fr">Gestion des Erreurs</h2>
|
|
455
|
+
<h2 data-lang="en">Error Handling</h2>
|
|
456
|
+
|
|
457
|
+
<div class="table-container">
|
|
458
|
+
<table class="reference-table">
|
|
459
|
+
<thead>
|
|
460
|
+
<tr>
|
|
461
|
+
<th data-lang="fr">Erreur</th>
|
|
462
|
+
<th data-lang="en">Error</th>
|
|
463
|
+
<th data-lang="fr">Action</th>
|
|
464
|
+
<th data-lang="en">Action</th>
|
|
465
|
+
</tr>
|
|
466
|
+
</thead>
|
|
467
|
+
<tbody>
|
|
468
|
+
<tr>
|
|
469
|
+
<td><code>dotnet build</code> <span data-lang="fr">échoue</span><span data-lang="en">fails</span></td>
|
|
470
|
+
<td colspan="1"></td>
|
|
471
|
+
<td data-lang="fr">Corriger via skill/MCP, rebuilder (max 3)</td>
|
|
472
|
+
<td data-lang="en">Fix via skill/MCP, rebuild (max 3)</td>
|
|
473
|
+
</tr>
|
|
474
|
+
<tr>
|
|
475
|
+
<td><code>npm run typecheck</code> <span data-lang="fr">échoue</span><span data-lang="en">fails</span></td>
|
|
476
|
+
<td colspan="1"></td>
|
|
477
|
+
<td data-lang="fr">Corriger erreur TypeScript (max 3)</td>
|
|
478
|
+
<td data-lang="en">Fix TypeScript error (max 3)</td>
|
|
479
|
+
</tr>
|
|
480
|
+
<tr>
|
|
481
|
+
<td data-lang="fr">MCP indisponible</td>
|
|
482
|
+
<td data-lang="en">MCP unavailable</td>
|
|
483
|
+
<td colspan="1"></td>
|
|
484
|
+
<td data-lang="fr">Mode dégradé avec smartstack-api.md</td>
|
|
485
|
+
<td data-lang="en">Degraded mode with smartstack-api.md</td>
|
|
486
|
+
</tr>
|
|
487
|
+
<tr>
|
|
488
|
+
<td data-lang="fr">POST-CHECK échoue</td>
|
|
489
|
+
<td data-lang="en">POST-CHECK fails</td>
|
|
490
|
+
<td colspan="1"></td>
|
|
491
|
+
<td data-lang="fr">Retourner execute, corriger, re-valider (max 2)</td>
|
|
492
|
+
<td data-lang="en">Return to execute, fix, re-validate (max 2)</td>
|
|
493
|
+
</tr>
|
|
494
|
+
</tbody>
|
|
495
|
+
</table>
|
|
496
|
+
</div>
|
|
497
|
+
</section>
|
|
498
|
+
|
|
499
|
+
<!-- Success Criteria -->
|
|
500
|
+
<section id="success-criteria">
|
|
501
|
+
<h2 data-lang="fr">Critères de Succès</h2>
|
|
502
|
+
<h2 data-lang="en">Success Criteria</h2>
|
|
503
|
+
|
|
504
|
+
<div class="alert alert-success" style="background: rgba(34, 197, 94, 0.1); border-color: #22c55e;">
|
|
505
|
+
<span class="alert-icon" style="color: #22c55e;">✓</span>
|
|
506
|
+
<div class="alert-content">
|
|
507
|
+
<ul style="margin: 0; padding-left: 1.5rem;">
|
|
508
|
+
<li data-lang="fr"><code>validate_conventions</code> MCP: 0 erreurs</li>
|
|
509
|
+
<li data-lang="en"><code>validate_conventions</code> MCP: 0 errors</li>
|
|
510
|
+
|
|
511
|
+
<li data-lang="fr"><code>dotnet build</code> PASS + <code>npm run typecheck</code> PASS</li>
|
|
512
|
+
<li data-lang="en"><code>dotnet build</code> PASS + <code>npm run typecheck</code> PASS</li>
|
|
513
|
+
|
|
514
|
+
<li data-lang="fr">Données seed complètes (navigation, permissions, rôles)</li>
|
|
515
|
+
<li data-lang="en">Seed data complete (navigation, permissions, roles)</li>
|
|
516
|
+
|
|
517
|
+
<li data-lang="fr">Tests: 100% réussi, >= 80% couverture</li>
|
|
518
|
+
<li data-lang="en">Tests: 100% pass, >= 80% coverage</li>
|
|
519
|
+
|
|
520
|
+
<li data-lang="fr">Commits atomiques par couche</li>
|
|
521
|
+
<li data-lang="en">Commits atomic per layer</li>
|
|
522
|
+
</ul>
|
|
523
|
+
</div>
|
|
524
|
+
</div>
|
|
525
|
+
</section>
|
|
526
|
+
|
|
527
|
+
<!-- Delegate Mode -->
|
|
528
|
+
<section id="delegate-mode">
|
|
529
|
+
<h2 data-lang="fr">Mode Délégué (ralph-loop)</h2>
|
|
530
|
+
<h2 data-lang="en">Delegate Mode (ralph-loop)</h2>
|
|
531
|
+
|
|
532
|
+
<p data-lang="fr">
|
|
533
|
+
Quand ralph-loop invoque APEX avec `-d .ralph/prd.json`, APEX lit le contexte PRD et exécute le workflow complet en mode autonome.
|
|
534
|
+
</p>
|
|
535
|
+
<p data-lang="en">
|
|
536
|
+
When ralph-loop invokes APEX with `-d .ralph/prd.json`, APEX reads PRD context and executes the full workflow in autonomous mode.
|
|
537
|
+
</p>
|
|
538
|
+
|
|
539
|
+
<div class="code-block">
|
|
540
|
+
<div class="code-label" data-lang="fr">Structure PRD</div>
|
|
541
|
+
<div class="code-label" data-lang="en">PRD Structure</div>
|
|
542
|
+
<pre><code>{
|
|
543
|
+
"version": "1.0",
|
|
544
|
+
"metadata": {
|
|
545
|
+
"name": "Feature Name",
|
|
546
|
+
"domain": "module-path",
|
|
547
|
+
"category": "feature|bugfix|refactor"
|
|
548
|
+
},
|
|
549
|
+
"context": {
|
|
550
|
+
"domain": {...},
|
|
551
|
+
"infrastructure": {...},
|
|
552
|
+
"application": {...},
|
|
553
|
+
"api": {...},
|
|
554
|
+
"seedData": {...},
|
|
555
|
+
"frontend": {...}
|
|
556
|
+
},
|
|
557
|
+
"tasks": [
|
|
558
|
+
{
|
|
559
|
+
"id": "entity",
|
|
560
|
+
"category": "domain",
|
|
561
|
+
"status": "pending",
|
|
562
|
+
"completed_at": null,
|
|
563
|
+
"commit_hash": null,
|
|
564
|
+
"files_changed": []
|
|
565
|
+
}
|
|
566
|
+
]
|
|
567
|
+
}</code></pre>
|
|
568
|
+
</div>
|
|
569
|
+
|
|
570
|
+
<p data-lang="fr">
|
|
571
|
+
APEX met à jour `task.status`, `completed_at`, `commit_hash`, et `files_changed` au fur et à mesure. Ralph lit le fichier PRD mis à jour après que APEX retourne.
|
|
572
|
+
</p>
|
|
573
|
+
<p data-lang="en">
|
|
574
|
+
APEX updates `task.status`, `completed_at`, `commit_hash`, and `files_changed` as it progresses. Ralph reads the updated PRD file after APEX returns.
|
|
575
|
+
</p>
|
|
576
|
+
</section>
|
|
577
|
+
|
|
578
|
+
<!-- Integration Points -->
|
|
579
|
+
<section id="integration">
|
|
580
|
+
<h2 data-lang="fr">Points d'Intégration</h2>
|
|
581
|
+
<h2 data-lang="en">Integration Points</h2>
|
|
582
|
+
|
|
583
|
+
<p data-lang="fr">
|
|
584
|
+
APEX intègre:
|
|
585
|
+
</p>
|
|
586
|
+
<p data-lang="en">
|
|
587
|
+
APEX integrates:
|
|
588
|
+
</p>
|
|
589
|
+
|
|
590
|
+
<div class="feature-grid" style="margin-top: 1.5rem;">
|
|
591
|
+
<div class="feature-item">
|
|
592
|
+
<span class="feature-icon">🛠</span>
|
|
593
|
+
<span class="feature-text" data-lang="fr">Skills: /controller, /application, /ui-components, /efcore</span>
|
|
594
|
+
<span class="feature-text" data-lang="en">Skills: /controller, /application, /ui-components, /efcore</span>
|
|
595
|
+
</div>
|
|
596
|
+
<div class="feature-item">
|
|
597
|
+
<span class="feature-icon">📍</span>
|
|
598
|
+
<span class="feature-text" data-lang="fr">MCP: validate_conventions, scaffold_*, generate_*, suggest_*</span>
|
|
599
|
+
<span class="feature-text" data-lang="en">MCP: validate_conventions, scaffold_*, generate_*, suggest_*</span>
|
|
600
|
+
</div>
|
|
601
|
+
<div class="feature-item">
|
|
602
|
+
<span class="feature-icon">📉</span>
|
|
603
|
+
<span class="feature-text" data-lang="fr">Agents: explore-codebase, code-reviewer (si -x)</span>
|
|
604
|
+
<span class="feature-text" data-lang="en">Agents: explore-codebase, code-reviewer (if -x)</span>
|
|
605
|
+
</div>
|
|
606
|
+
<div class="feature-item">
|
|
607
|
+
<span class="feature-icon">🔁</span>
|
|
608
|
+
<span class="feature-text" data-lang="fr">GitFlow: commits atomiques, PR creation (si -pr)</span>
|
|
609
|
+
<span class="feature-text" data-lang="en">GitFlow: atomic commits, PR creation (if -pr)</span>
|
|
610
|
+
</div>
|
|
611
|
+
</div>
|
|
612
|
+
</section>
|
|
613
|
+
|
|
614
|
+
<!-- Reference -->
|
|
615
|
+
<section id="reference">
|
|
616
|
+
<h2 data-lang="fr">Référence</h2>
|
|
617
|
+
<h2 data-lang="en">Reference</h2>
|
|
618
|
+
|
|
619
|
+
<p class="template-path"><code>templates/skills/apex/</code></p>
|
|
620
|
+
|
|
621
|
+
<div class="alert alert-info" style="margin-top: 1.5rem;">
|
|
622
|
+
<span class="alert-icon">💡</span>
|
|
623
|
+
<div class="alert-content">
|
|
624
|
+
<p data-lang="fr">
|
|
625
|
+
Pour une documentation complète des étapes APEX, références, et patterns: consultez les fichiers de la skill APEX dans `templates/skills/apex/`.
|
|
626
|
+
</p>
|
|
627
|
+
<p data-lang="en">
|
|
628
|
+
For complete APEX step documentation, references, and patterns: see APEX skill files in `templates/skills/apex/`.
|
|
629
|
+
</p>
|
|
630
|
+
</div>
|
|
631
|
+
</div>
|
|
632
|
+
</section>
|
|
633
|
+
</div>
|
|
634
|
+
</main>
|
|
635
|
+
</div>
|
|
636
|
+
</div>
|
|
637
|
+
|
|
638
|
+
<!-- Mobile Menu Button -->
|
|
639
|
+
<button class="mobile-menu-btn">☰</button>
|
|
640
|
+
<div class="overlay"></div>
|
|
641
|
+
|
|
642
|
+
<script src="js/app.js"></script>
|
|
643
|
+
</body>
|
|
644
|
+
</html>
|