@atlashub/smartstack-cli 4.32.0 → 4.33.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/index.html +2 -2
- package/.documentation/init.html +358 -174
- package/dist/mcp-entry.mjs +271 -44
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/mcp-scaffolding/controller.cs.hbs +54 -128
- package/templates/project/README.md +19 -0
- package/templates/skills/apex/SKILL.md +16 -10
- package/templates/skills/apex/_shared.md +1 -1
- package/templates/skills/apex/references/checks/architecture-checks.sh +154 -0
- package/templates/skills/apex/references/checks/backend-checks.sh +194 -0
- package/templates/skills/apex/references/checks/frontend-checks.sh +448 -0
- package/templates/skills/apex/references/checks/infrastructure-checks.sh +255 -0
- package/templates/skills/apex/references/checks/security-checks.sh +153 -0
- package/templates/skills/apex/references/checks/seed-checks.sh +536 -0
- package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +49 -192
- package/templates/skills/apex/references/post-checks.md +124 -2156
- package/templates/skills/apex/references/smartstack-api.md +160 -957
- package/templates/skills/apex/references/smartstack-frontend.md +134 -1022
- package/templates/skills/apex/references/smartstack-layers.md +12 -6
- package/templates/skills/apex/steps/step-00-init.md +81 -238
- package/templates/skills/apex/steps/step-03-execute.md +25 -752
- package/templates/skills/apex/steps/step-03a-layer0-domain.md +118 -0
- package/templates/skills/apex/steps/step-03b-layer1-seed.md +91 -0
- package/templates/skills/apex/steps/step-03c-layer2-backend.md +240 -0
- package/templates/skills/apex/steps/step-03d-layer3-frontend.md +300 -0
- package/templates/skills/apex/steps/step-03e-layer4-devdata.md +44 -0
- package/templates/skills/apex/steps/step-04-examine.md +70 -150
- package/templates/skills/application/references/frontend-i18n-and-output.md +2 -2
- package/templates/skills/application/references/frontend-route-naming.md +5 -1
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +49 -198
- package/templates/skills/application/references/frontend-verification.md +11 -11
- package/templates/skills/application/steps/step-05-frontend.md +26 -15
- package/templates/skills/application/templates-frontend.md +4 -0
- package/templates/skills/cli-app-sync/SKILL.md +2 -2
- package/templates/skills/cli-app-sync/references/comparison-map.md +1 -1
- package/templates/skills/controller/references/controller-code-templates.md +70 -67
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +5 -1
package/.documentation/init.html
CHANGED
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
</a>
|
|
90
90
|
<a href="#structure" class="sidebar-toc-link">Structure</a>
|
|
91
91
|
<a href="#development" class="sidebar-toc-link">
|
|
92
|
-
<span data-lang="fr">
|
|
93
|
-
<span data-lang="en">
|
|
92
|
+
<span data-lang="fr">Quel skill ?</span>
|
|
93
|
+
<span data-lang="en">Which skill?</span>
|
|
94
94
|
</a>
|
|
95
95
|
<a href="#maintenance" class="sidebar-toc-link">Maintenance</a>
|
|
96
96
|
<a href="#first-steps" class="sidebar-toc-link">
|
|
@@ -170,100 +170,111 @@
|
|
|
170
170
|
============================================ -->
|
|
171
171
|
<section id="introduction">
|
|
172
172
|
<h2>
|
|
173
|
-
<span data-lang="fr">Qu'est-ce qu'
|
|
174
|
-
<span data-lang="en">What is a SmartStack
|
|
173
|
+
<span data-lang="fr">Qu'est-ce qu'une application SmartStack ?</span>
|
|
174
|
+
<span data-lang="en">What is a SmartStack application?</span>
|
|
175
175
|
</h2>
|
|
176
176
|
|
|
177
177
|
<p data-lang="fr">
|
|
178
|
-
|
|
178
|
+
Une application SmartStack s'organise en <strong>4 niveaux</strong> : <strong>Application → Module → Section → Resource</strong>. Chaque niveau genere automatiquement sa navigation, ses permissions et ses roles.
|
|
179
179
|
</p>
|
|
180
180
|
<p data-lang="en">
|
|
181
|
-
A SmartStack
|
|
181
|
+
A SmartStack application is organized in <strong>4 levels</strong>: <strong>Application → Module → Section → Resource</strong>. Each level automatically generates its navigation, permissions and roles.
|
|
182
182
|
</p>
|
|
183
183
|
|
|
184
|
-
|
|
185
|
-
La separation est stricte : vous n'avez jamais besoin de toucher au code du socle. Vous <em>etendez</em> SmartStack en ajoutant vos propres couches, et le socle evolue independamment via les mises a jour (<code>ss upgrade</code>).
|
|
186
|
-
</p>
|
|
187
|
-
<p data-lang="en">
|
|
188
|
-
The separation is strict: you never need to touch the foundation code. You <em>extend</em> SmartStack by adding your own layers, and the foundation evolves independently through updates (<code>ss upgrade</code>).
|
|
189
|
-
</p>
|
|
190
|
-
|
|
191
|
-
<!-- SVG: Foundation Layers -->
|
|
184
|
+
<!-- SVG: Hierarchy + 3 pillars -->
|
|
192
185
|
<div class="svg-diagram">
|
|
193
|
-
<svg viewBox="0 0 780
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
</
|
|
198
|
-
</
|
|
199
|
-
|
|
200
|
-
<!--
|
|
201
|
-
<rect x="
|
|
202
|
-
<text x="390" y="
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
<
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
<
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
<
|
|
229
|
-
<text x="
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
<
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
<rect x="260" y="194" width="108" height="32" rx="6" fill="#312e81"/>
|
|
244
|
-
<text x="314" y="215" text-anchor="middle" fill="#c4b5fd" font-size="11">Multi-tenant</text>
|
|
186
|
+
<svg viewBox="0 0 780 310" xmlns="http://www.w3.org/2000/svg" style="font-family: 'Inter', system-ui, sans-serif; width: 100%; max-width: 780px; height: auto; display: block; margin: 1.5rem auto;">
|
|
187
|
+
<!-- Hierarchy tree -->
|
|
188
|
+
<text x="390" y="25" text-anchor="middle" fill="#94a3b8" font-size="11" font-weight="500">
|
|
189
|
+
<tspan data-lang="fr">Exemple : Gestion RH</tspan>
|
|
190
|
+
<tspan data-lang="en">Example: HR Management</tspan>
|
|
191
|
+
</text>
|
|
192
|
+
|
|
193
|
+
<!-- Application level -->
|
|
194
|
+
<rect x="290" y="38" width="200" height="36" rx="8" fill="#1e293b" stroke="#6366f1" stroke-width="2.5"/>
|
|
195
|
+
<text x="390" y="61" text-anchor="middle" fill="#c4b5fd" font-size="12" font-weight="600">
|
|
196
|
+
<tspan data-lang="fr">⚙ Application : RH</tspan>
|
|
197
|
+
<tspan data-lang="en">⚙ Application: HR</tspan>
|
|
198
|
+
</text>
|
|
199
|
+
|
|
200
|
+
<!-- Branches down -->
|
|
201
|
+
<line x1="340" y1="74" x2="340" y2="95" stroke="#475569" stroke-width="1.5"/>
|
|
202
|
+
<line x1="440" y1="74" x2="440" y2="95" stroke="#475569" stroke-width="1.5"/>
|
|
203
|
+
|
|
204
|
+
<!-- Module level -->
|
|
205
|
+
<rect x="220" y="98" width="170" height="36" rx="8" fill="#1e293b" stroke="#3b82f6" stroke-width="2"/>
|
|
206
|
+
<text x="305" y="121" text-anchor="middle" fill="#93c5fd" font-size="11" font-weight="600">
|
|
207
|
+
<tspan data-lang="fr">📂 Module : Employes</tspan>
|
|
208
|
+
<tspan data-lang="en">📂 Module: Employees</tspan>
|
|
209
|
+
</text>
|
|
210
|
+
|
|
211
|
+
<rect x="420" y="98" width="170" height="36" rx="8" fill="#1e293b" stroke="#3b82f6" stroke-width="2"/>
|
|
212
|
+
<text x="505" y="121" text-anchor="middle" fill="#93c5fd" font-size="11" font-weight="600">
|
|
213
|
+
<tspan data-lang="fr">📂 Module : Conges</tspan>
|
|
214
|
+
<tspan data-lang="en">📂 Module: Leave</tspan>
|
|
215
|
+
</text>
|
|
216
|
+
|
|
217
|
+
<!-- Branch down from Employes -->
|
|
218
|
+
<line x1="305" y1="134" x2="305" y2="155" stroke="#475569" stroke-width="1.5"/>
|
|
219
|
+
|
|
220
|
+
<!-- Section level -->
|
|
221
|
+
<rect x="210" y="158" width="190" height="36" rx="8" fill="#1e293b" stroke="#06b6d4" stroke-width="2"/>
|
|
222
|
+
<text x="305" y="181" text-anchor="middle" fill="#67e8f9" font-size="11" font-weight="600">
|
|
223
|
+
<tspan data-lang="fr">📄 Section : Contrats</tspan>
|
|
224
|
+
<tspan data-lang="en">📄 Section: Contracts</tspan>
|
|
225
|
+
</text>
|
|
226
|
+
|
|
227
|
+
<!-- Branch down from Section -->
|
|
228
|
+
<line x1="305" y1="194" x2="305" y2="215" stroke="#475569" stroke-width="1.5"/>
|
|
229
|
+
|
|
230
|
+
<!-- Resource level -->
|
|
231
|
+
<rect x="195" y="218" width="220" height="36" rx="8" fill="#1e293b" stroke="#22c55e" stroke-width="2"/>
|
|
232
|
+
<text x="305" y="241" text-anchor="middle" fill="#86efac" font-size="11" font-weight="600">
|
|
233
|
+
<tspan data-lang="fr">📋 Resource : TypeContrat</tspan>
|
|
234
|
+
<tspan data-lang="en">📋 Resource: ContractType</tspan>
|
|
235
|
+
</text>
|
|
245
236
|
|
|
246
|
-
|
|
247
|
-
<
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
<text x="
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
237
|
+
<!-- Separator -->
|
|
238
|
+
<line x1="450" y1="158" x2="450" y2="290" stroke="#334155" stroke-width="1" stroke-dasharray="4,4"/>
|
|
239
|
+
|
|
240
|
+
<!-- What gets generated (right side) -->
|
|
241
|
+
<text x="615" y="170" text-anchor="middle" fill="#94a3b8" font-size="10" font-weight="500">
|
|
242
|
+
<tspan data-lang="fr">Genere automatiquement :</tspan>
|
|
243
|
+
<tspan data-lang="en">Automatically generated:</tspan>
|
|
244
|
+
</text>
|
|
245
|
+
|
|
246
|
+
<!-- Navigation pill -->
|
|
247
|
+
<rect x="480" y="185" width="115" height="28" rx="6" fill="#6366f1" fill-opacity="0.15" stroke="#6366f1" stroke-width="1.5"/>
|
|
248
|
+
<text x="537" y="204" text-anchor="middle" fill="#c4b5fd" font-size="10" font-weight="600">☰ Navigation</text>
|
|
249
|
+
|
|
250
|
+
<!-- Permissions pill -->
|
|
251
|
+
<rect x="605" y="185" width="115" height="28" rx="6" fill="#22c55e" fill-opacity="0.15" stroke="#22c55e" stroke-width="1.5"/>
|
|
252
|
+
<text x="662" y="204" text-anchor="middle" fill="#86efac" font-size="10" font-weight="600">🔒 Permissions</text>
|
|
253
|
+
|
|
254
|
+
<!-- Roles pill -->
|
|
255
|
+
<rect x="540" y="222" width="115" height="28" rx="6" fill="#f97316" fill-opacity="0.15" stroke="#f97316" stroke-width="1.5"/>
|
|
256
|
+
<text x="597" y="241" text-anchor="middle" fill="#fdba74" font-size="10" font-weight="600">
|
|
257
|
+
<tspan data-lang="fr">👥 Roles</tspan>
|
|
258
|
+
<tspan data-lang="en">👥 Roles</tspan>
|
|
259
|
+
</text>
|
|
260
|
+
|
|
261
|
+
<!-- Bottom: concrete example -->
|
|
262
|
+
<rect x="20" y="270" width="740" height="32" rx="6" fill="#334155" fill-opacity="0.5"/>
|
|
263
|
+
<text x="390" y="291" text-anchor="middle" fill="#94a3b8" font-size="10">
|
|
264
|
+
<tspan data-lang="fr">Permission generee : <tspan fill="#86efac" font-family="monospace">RH.Employes.Contrats.TypeContrat.Create / Read / Update / Delete</tspan></tspan>
|
|
265
|
+
<tspan data-lang="en">Generated permission: <tspan fill="#86efac" font-family="monospace">HR.Employees.Contracts.ContractType.Create / Read / Update / Delete</tspan></tspan>
|
|
266
|
+
</text>
|
|
254
267
|
</svg>
|
|
255
268
|
</div>
|
|
256
269
|
|
|
257
270
|
<div class="alert alert-info">
|
|
258
271
|
<span class="alert-icon">💡</span>
|
|
259
272
|
<div class="alert-content">
|
|
260
|
-
<h5 data-lang="fr">Principe fondamental</h5>
|
|
261
|
-
<h5 data-lang="en">Core principle</h5>
|
|
262
273
|
<p data-lang="fr">
|
|
263
|
-
Vous
|
|
274
|
+
Vous decrivez votre besoin (ex: <em>« Creer un module Employes avec gestion des contrats »</em>), SmartStack genere le code full-stack : entite, API, pages React, navigation dans le menu, permissions CRUD et assignation aux roles. Voir <a href="#development">l'arbre de decision</a> pour choisir le bon skill.
|
|
264
275
|
</p>
|
|
265
276
|
<p data-lang="en">
|
|
266
|
-
You
|
|
277
|
+
You describe your need (e.g., <em>« Create an Employees module with contract management »</em>), SmartStack generates the full-stack code: entity, API, React pages, menu navigation, CRUD permissions and role assignment. See the <a href="#development">decision tree</a> to choose the right skill.
|
|
267
278
|
</p>
|
|
268
279
|
</div>
|
|
269
280
|
</div>
|
|
@@ -670,115 +681,288 @@
|
|
|
670
681
|
</section>
|
|
671
682
|
|
|
672
683
|
<!-- ============================================
|
|
673
|
-
5.
|
|
684
|
+
5. QUEL SKILL UTILISER ?
|
|
674
685
|
============================================ -->
|
|
675
686
|
<section id="development">
|
|
676
687
|
<h2>
|
|
677
|
-
<span data-lang="fr">
|
|
678
|
-
<span data-lang="en">
|
|
688
|
+
<span data-lang="fr">Quel skill utiliser ?</span>
|
|
689
|
+
<span data-lang="en">Which skill to use?</span>
|
|
679
690
|
</h2>
|
|
680
691
|
|
|
681
692
|
<p data-lang="fr">
|
|
682
|
-
|
|
693
|
+
Choisissez votre situation, le diagramme vous guide vers le bon parcours.
|
|
683
694
|
</p>
|
|
684
695
|
<p data-lang="en">
|
|
685
|
-
|
|
696
|
+
Choose your situation, the diagram guides you to the right path.
|
|
686
697
|
</p>
|
|
687
698
|
|
|
688
|
-
<!-- SVG:
|
|
699
|
+
<!-- SVG: Decision Tree -->
|
|
689
700
|
<div class="svg-diagram">
|
|
690
|
-
<svg viewBox="0 0
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
<
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
<
|
|
709
|
-
<
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
<
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
<text x="
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
<!--
|
|
723
|
-
<
|
|
724
|
-
<
|
|
725
|
-
<
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
<!--
|
|
731
|
-
<
|
|
732
|
-
<
|
|
733
|
-
<
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
<!--
|
|
739
|
-
<
|
|
740
|
-
<
|
|
741
|
-
<
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
<
|
|
748
|
-
<
|
|
749
|
-
<
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
<
|
|
756
|
-
<
|
|
701
|
+
<svg viewBox="0 0 1200 680" preserveAspectRatio="xMidYMid meet" style="width: 100%; max-width: 1800px; height: auto; display: block; margin: 0 auto;">
|
|
702
|
+
<!-- Background -->
|
|
703
|
+
<rect width="1200" height="680" fill="#0f172a" rx="8"/>
|
|
704
|
+
|
|
705
|
+
<!-- Title -->
|
|
706
|
+
<text x="600" y="35" text-anchor="middle" fill="#f8fafc" font-size="20" font-weight="600">
|
|
707
|
+
<tspan data-lang="fr">Que voulez-vous faire ?</tspan>
|
|
708
|
+
<tspan data-lang="en">What do you want to do?</tspan>
|
|
709
|
+
</text>
|
|
710
|
+
|
|
711
|
+
<!-- Central decision diamond -->
|
|
712
|
+
<polygon points="600,55 720,115 600,175 480,115" fill="transparent" stroke="#6366f1" stroke-width="2.5"/>
|
|
713
|
+
<text x="600" y="120" text-anchor="middle" fill="#f8fafc" font-size="13" font-weight="500">
|
|
714
|
+
<tspan data-lang="fr">Objectif</tspan>
|
|
715
|
+
<tspan data-lang="en">Goal</tspan>
|
|
716
|
+
</text>
|
|
717
|
+
|
|
718
|
+
<!-- ===== PATH 1: NOUVEAU PROJET (green) ===== -->
|
|
719
|
+
<line x1="480" y1="115" x2="120" y2="115" stroke="#22c55e" stroke-width="2.5"/>
|
|
720
|
+
<line x1="120" y1="115" x2="120" y2="195" stroke="#22c55e" stroke-width="2.5"/>
|
|
721
|
+
<polygon points="120,195 114,183 126,183" fill="#22c55e"/>
|
|
722
|
+
|
|
723
|
+
<rect x="30" y="200" width="180" height="50" rx="8" fill="#22c55e" fill-opacity="0.15" stroke="#22c55e" stroke-width="2.5"/>
|
|
724
|
+
<text x="120" y="222" text-anchor="middle" fill="#22c55e" font-size="12" font-weight="600">
|
|
725
|
+
<tspan data-lang="fr">Nouveau projet</tspan>
|
|
726
|
+
<tspan data-lang="en">New project</tspan>
|
|
727
|
+
</text>
|
|
728
|
+
<text x="120" y="240" text-anchor="middle" fill="#94a3b8" font-size="9">
|
|
729
|
+
<tspan data-lang="fr">partir de zero</tspan>
|
|
730
|
+
<tspan data-lang="en">from scratch</tspan>
|
|
731
|
+
</text>
|
|
732
|
+
|
|
733
|
+
<!-- ss init -->
|
|
734
|
+
<line x1="120" y1="250" x2="120" y2="270" stroke="#22c55e" stroke-width="2"/>
|
|
735
|
+
<polygon points="120,270 114,262 126,262" fill="#22c55e"/>
|
|
736
|
+
<g class="cmd-copyable" data-cmd="ss init MyApp" style="cursor:pointer;">
|
|
737
|
+
<rect x="30" y="275" width="180" height="32" rx="6" fill="#0f172a" stroke="#22c55e" stroke-width="2"/>
|
|
738
|
+
<text x="120" y="296" text-anchor="middle" fill="#22c55e" font-size="10" font-family="monospace">ss init MyApp</text>
|
|
739
|
+
</g>
|
|
740
|
+
|
|
741
|
+
<!-- /business-analyse -->
|
|
742
|
+
<line x1="120" y1="307" x2="120" y2="322" stroke="#22c55e" stroke-width="2"/>
|
|
743
|
+
<polygon points="120,322 114,314 126,314" fill="#22c55e"/>
|
|
744
|
+
<g class="cmd-copyable" data-cmd="/business-analyse" style="cursor:pointer;">
|
|
745
|
+
<rect x="30" y="327" width="180" height="32" rx="6" fill="#0f172a" stroke="#22c55e" stroke-width="2"/>
|
|
746
|
+
<text x="120" y="348" text-anchor="middle" fill="#22c55e" font-size="10" font-family="monospace">/business-analyse</text>
|
|
747
|
+
</g>
|
|
748
|
+
|
|
749
|
+
<!-- /derive-prd -->
|
|
750
|
+
<line x1="120" y1="359" x2="120" y2="374" stroke="#22c55e" stroke-width="2"/>
|
|
751
|
+
<polygon points="120,374 114,366 126,366" fill="#22c55e"/>
|
|
752
|
+
<g class="cmd-copyable" data-cmd="/derive-prd" style="cursor:pointer;">
|
|
753
|
+
<rect x="30" y="379" width="180" height="32" rx="6" fill="#0f172a" stroke="#22c55e" stroke-width="2"/>
|
|
754
|
+
<text x="120" y="400" text-anchor="middle" fill="#22c55e" font-size="10" font-family="monospace">/derive-prd</text>
|
|
755
|
+
</g>
|
|
756
|
+
|
|
757
|
+
<!-- /ralph-loop -->
|
|
758
|
+
<line x1="120" y1="411" x2="120" y2="426" stroke="#22c55e" stroke-width="2"/>
|
|
759
|
+
<polygon points="120,426 114,418 126,418" fill="#22c55e"/>
|
|
760
|
+
<g class="cmd-copyable" data-cmd="/ralph-loop" style="cursor:pointer;">
|
|
761
|
+
<rect x="30" y="431" width="180" height="32" rx="6" fill="#0f172a" stroke="#22c55e" stroke-width="2"/>
|
|
762
|
+
<text x="120" y="452" text-anchor="middle" fill="#22c55e" font-size="10" font-family="monospace">/ralph-loop</text>
|
|
763
|
+
</g>
|
|
764
|
+
|
|
765
|
+
<!-- /validate-feature -->
|
|
766
|
+
<line x1="120" y1="463" x2="120" y2="478" stroke="#22c55e" stroke-width="2"/>
|
|
767
|
+
<polygon points="120,478 114,470 126,470" fill="#22c55e"/>
|
|
768
|
+
<g class="cmd-copyable" data-cmd="/validate-feature" style="cursor:pointer;">
|
|
769
|
+
<rect x="30" y="483" width="180" height="32" rx="6" fill="#0f172a" stroke="#22c55e" stroke-width="2"/>
|
|
770
|
+
<text x="120" y="504" text-anchor="middle" fill="#22c55e" font-size="10" font-family="monospace">/validate-feature</text>
|
|
771
|
+
</g>
|
|
772
|
+
|
|
773
|
+
<!-- Result -->
|
|
774
|
+
<line x1="120" y1="515" x2="120" y2="530" stroke="#22c55e" stroke-width="2"/>
|
|
775
|
+
<polygon points="120,530 114,522 126,522" fill="#22c55e"/>
|
|
776
|
+
<rect x="30" y="535" width="180" height="40" rx="8" fill="#22c55e" fill-opacity="0.2" stroke="#22c55e" stroke-width="2.5"/>
|
|
777
|
+
<text x="120" y="555" text-anchor="middle" fill="#22c55e" font-size="10" font-weight="600">
|
|
778
|
+
<tspan data-lang="fr">✓ Projet complet</tspan>
|
|
779
|
+
<tspan data-lang="en">✓ Complete project</tspan>
|
|
780
|
+
</text>
|
|
781
|
+
<text x="120" y="568" text-anchor="middle" fill="#94a3b8" font-size="8">multi-module, full-stack</text>
|
|
782
|
+
|
|
783
|
+
<!-- ===== PATH 2: MODULE COMPLET (blue) ===== -->
|
|
784
|
+
<line x1="360" y1="115" x2="360" y2="195" stroke="#3b82f6" stroke-width="2.5"/>
|
|
785
|
+
<polygon points="360,195 354,183 366,183" fill="#3b82f6"/>
|
|
786
|
+
|
|
787
|
+
<rect x="270" y="200" width="180" height="50" rx="8" fill="#3b82f6" fill-opacity="0.15" stroke="#3b82f6" stroke-width="2.5"/>
|
|
788
|
+
<text x="360" y="222" text-anchor="middle" fill="#3b82f6" font-size="12" font-weight="600">
|
|
789
|
+
<tspan data-lang="fr">Module complet</tspan>
|
|
790
|
+
<tspan data-lang="en">Complete module</tspan>
|
|
791
|
+
</text>
|
|
792
|
+
<text x="360" y="240" text-anchor="middle" fill="#94a3b8" font-size="9">
|
|
793
|
+
<tspan data-lang="fr">full-stack en 1 commande</tspan>
|
|
794
|
+
<tspan data-lang="en">full-stack in 1 command</tspan>
|
|
795
|
+
</text>
|
|
796
|
+
|
|
797
|
+
<!-- /application -->
|
|
798
|
+
<line x1="360" y1="250" x2="360" y2="270" stroke="#3b82f6" stroke-width="2"/>
|
|
799
|
+
<polygon points="360,270 354,262 366,262" fill="#3b82f6"/>
|
|
800
|
+
<g class="cmd-copyable" data-cmd="/application" style="cursor:pointer;">
|
|
801
|
+
<rect x="270" y="275" width="180" height="32" rx="6" fill="#0f172a" stroke="#3b82f6" stroke-width="2"/>
|
|
802
|
+
<text x="360" y="296" text-anchor="middle" fill="#3b82f6" font-size="10" font-family="monospace">/application</text>
|
|
803
|
+
</g>
|
|
804
|
+
|
|
805
|
+
<!-- /efcore db-deploy -->
|
|
806
|
+
<line x1="360" y1="307" x2="360" y2="322" stroke="#3b82f6" stroke-width="2"/>
|
|
807
|
+
<polygon points="360,322 354,314 366,314" fill="#3b82f6"/>
|
|
808
|
+
<g class="cmd-copyable" data-cmd="/efcore db-deploy" style="cursor:pointer;">
|
|
809
|
+
<rect x="270" y="327" width="180" height="32" rx="6" fill="#0f172a" stroke="#3b82f6" stroke-width="2"/>
|
|
810
|
+
<text x="360" y="348" text-anchor="middle" fill="#3b82f6" font-size="10" font-family="monospace">/efcore db-deploy</text>
|
|
811
|
+
</g>
|
|
812
|
+
|
|
813
|
+
<!-- /validate-feature -->
|
|
814
|
+
<line x1="360" y1="359" x2="360" y2="374" stroke="#3b82f6" stroke-width="2"/>
|
|
815
|
+
<polygon points="360,374 354,366 366,366" fill="#3b82f6"/>
|
|
816
|
+
<g class="cmd-copyable" data-cmd="/validate-feature" style="cursor:pointer;">
|
|
817
|
+
<rect x="270" y="379" width="180" height="32" rx="6" fill="#0f172a" stroke="#3b82f6" stroke-width="2"/>
|
|
818
|
+
<text x="360" y="400" text-anchor="middle" fill="#3b82f6" font-size="10" font-family="monospace">/validate-feature</text>
|
|
819
|
+
</g>
|
|
820
|
+
|
|
821
|
+
<!-- Result -->
|
|
822
|
+
<line x1="360" y1="411" x2="360" y2="426" stroke="#3b82f6" stroke-width="2"/>
|
|
823
|
+
<polygon points="360,426 354,418 366,418" fill="#3b82f6"/>
|
|
824
|
+
<rect x="270" y="431" width="180" height="40" rx="8" fill="#3b82f6" fill-opacity="0.2" stroke="#3b82f6" stroke-width="2.5"/>
|
|
825
|
+
<text x="360" y="448" text-anchor="middle" fill="#3b82f6" font-size="10" font-weight="600">
|
|
826
|
+
<tspan data-lang="fr">✓ Nav + API + Pages</tspan>
|
|
827
|
+
<tspan data-lang="en">✓ Nav + API + Pages</tspan>
|
|
828
|
+
</text>
|
|
829
|
+
<text x="360" y="462" text-anchor="middle" fill="#94a3b8" font-size="8">+ permissions + roles + tests</text>
|
|
830
|
+
|
|
831
|
+
<!-- ===== PATH 3: FEATURE INCREMENTALE (cyan) ===== -->
|
|
832
|
+
<line x1="600" y1="175" x2="600" y2="195" stroke="#06b6d4" stroke-width="2.5"/>
|
|
833
|
+
<polygon points="600,195 594,183 606,183" fill="#06b6d4"/>
|
|
834
|
+
|
|
835
|
+
<rect x="510" y="200" width="180" height="50" rx="8" fill="#06b6d4" fill-opacity="0.15" stroke="#06b6d4" stroke-width="2.5"/>
|
|
836
|
+
<text x="600" y="222" text-anchor="middle" fill="#06b6d4" font-size="12" font-weight="600">
|
|
837
|
+
<tspan data-lang="fr">Feature incrementale</tspan>
|
|
838
|
+
<tspan data-lang="en">Incremental feature</tspan>
|
|
839
|
+
</text>
|
|
840
|
+
<text x="600" y="240" text-anchor="middle" fill="#94a3b8" font-size="9">
|
|
841
|
+
<tspan data-lang="fr">ajouter a un module existant</tspan>
|
|
842
|
+
<tspan data-lang="en">add to existing module</tspan>
|
|
843
|
+
</text>
|
|
844
|
+
|
|
845
|
+
<!-- /apex -->
|
|
846
|
+
<line x1="600" y1="250" x2="600" y2="270" stroke="#06b6d4" stroke-width="2"/>
|
|
847
|
+
<polygon points="600,270 594,262 606,262" fill="#06b6d4"/>
|
|
848
|
+
<g class="cmd-copyable" data-cmd="/apex" style="cursor:pointer;">
|
|
849
|
+
<rect x="510" y="275" width="180" height="32" rx="6" fill="#0f172a" stroke="#06b6d4" stroke-width="2"/>
|
|
850
|
+
<text x="600" y="296" text-anchor="middle" fill="#06b6d4" font-size="10" font-family="monospace">/apex</text>
|
|
851
|
+
</g>
|
|
852
|
+
|
|
853
|
+
<!-- /validate-feature -->
|
|
854
|
+
<line x1="600" y1="307" x2="600" y2="322" stroke="#06b6d4" stroke-width="2"/>
|
|
855
|
+
<polygon points="600,322 594,314 606,314" fill="#06b6d4"/>
|
|
856
|
+
<g class="cmd-copyable" data-cmd="/validate-feature" style="cursor:pointer;">
|
|
857
|
+
<rect x="510" y="327" width="180" height="32" rx="6" fill="#0f172a" stroke="#06b6d4" stroke-width="2"/>
|
|
858
|
+
<text x="600" y="348" text-anchor="middle" fill="#06b6d4" font-size="10" font-family="monospace">/validate-feature</text>
|
|
859
|
+
</g>
|
|
860
|
+
|
|
861
|
+
<!-- Result -->
|
|
862
|
+
<line x1="600" y1="359" x2="600" y2="374" stroke="#06b6d4" stroke-width="2"/>
|
|
863
|
+
<polygon points="600,374 594,366 606,366" fill="#06b6d4"/>
|
|
864
|
+
<rect x="510" y="379" width="180" height="40" rx="8" fill="#06b6d4" fill-opacity="0.2" stroke="#06b6d4" stroke-width="2.5"/>
|
|
865
|
+
<text x="600" y="404" text-anchor="middle" fill="#06b6d4" font-size="10" font-weight="600">
|
|
866
|
+
<tspan data-lang="fr">✓ Feature ajoutee</tspan>
|
|
867
|
+
<tspan data-lang="en">✓ Feature added</tspan>
|
|
868
|
+
</text>
|
|
869
|
+
|
|
870
|
+
<!-- ===== PATH 4: CORRIGER UN BUG (red) ===== -->
|
|
871
|
+
<line x1="720" y1="115" x2="840" y2="115" stroke="#ef4444" stroke-width="2.5"/>
|
|
872
|
+
<line x1="840" y1="115" x2="840" y2="195" stroke="#ef4444" stroke-width="2.5"/>
|
|
873
|
+
<polygon points="840,195 834,183 846,183" fill="#ef4444"/>
|
|
874
|
+
|
|
875
|
+
<rect x="750" y="200" width="180" height="50" rx="8" fill="#ef4444" fill-opacity="0.15" stroke="#ef4444" stroke-width="2.5"/>
|
|
876
|
+
<text x="840" y="222" text-anchor="middle" fill="#ef4444" font-size="12" font-weight="600">
|
|
877
|
+
<tspan data-lang="fr">Corriger un bug</tspan>
|
|
878
|
+
<tspan data-lang="en">Fix a bug</tspan>
|
|
879
|
+
</text>
|
|
880
|
+
<text x="840" y="240" text-anchor="middle" fill="#94a3b8" font-size="9">
|
|
881
|
+
<tspan data-lang="fr">investigation + correction</tspan>
|
|
882
|
+
<tspan data-lang="en">investigation + fix</tspan>
|
|
883
|
+
</text>
|
|
884
|
+
|
|
885
|
+
<!-- /debug -->
|
|
886
|
+
<line x1="840" y1="250" x2="840" y2="270" stroke="#ef4444" stroke-width="2"/>
|
|
887
|
+
<polygon points="840,270 834,262 846,262" fill="#ef4444"/>
|
|
888
|
+
<g class="cmd-copyable" data-cmd="/debug" style="cursor:pointer;">
|
|
889
|
+
<rect x="750" y="275" width="180" height="32" rx="6" fill="#0f172a" stroke="#ef4444" stroke-width="2"/>
|
|
890
|
+
<text x="840" y="296" text-anchor="middle" fill="#ef4444" font-size="10" font-family="monospace">/debug</text>
|
|
891
|
+
</g>
|
|
892
|
+
|
|
893
|
+
<!-- /review-code -->
|
|
894
|
+
<line x1="840" y1="307" x2="840" y2="322" stroke="#ef4444" stroke-width="2"/>
|
|
895
|
+
<polygon points="840,322 834,314 846,314" fill="#ef4444"/>
|
|
896
|
+
<g class="cmd-copyable" data-cmd="/review-code" style="cursor:pointer;">
|
|
897
|
+
<rect x="750" y="327" width="180" height="32" rx="6" fill="#0f172a" stroke="#ef4444" stroke-width="2"/>
|
|
898
|
+
<text x="840" y="348" text-anchor="middle" fill="#ef4444" font-size="10" font-family="monospace">/review-code</text>
|
|
899
|
+
</g>
|
|
900
|
+
|
|
901
|
+
<!-- Result -->
|
|
902
|
+
<line x1="840" y1="359" x2="840" y2="374" stroke="#ef4444" stroke-width="2"/>
|
|
903
|
+
<polygon points="840,374 834,366 846,366" fill="#ef4444"/>
|
|
904
|
+
<rect x="750" y="379" width="180" height="40" rx="8" fill="#ef4444" fill-opacity="0.2" stroke="#ef4444" stroke-width="2.5"/>
|
|
905
|
+
<text x="840" y="404" text-anchor="middle" fill="#ef4444" font-size="10" font-weight="600">
|
|
906
|
+
<tspan data-lang="fr">✓ Bug corrige</tspan>
|
|
907
|
+
<tspan data-lang="en">✓ Bug fixed</tspan>
|
|
908
|
+
</text>
|
|
909
|
+
|
|
910
|
+
<!-- ===== PATH 5: PUBLIER (yellow) ===== -->
|
|
911
|
+
<line x1="840" y1="115" x2="1080" y2="115" stroke="#eab308" stroke-width="2.5"/>
|
|
912
|
+
<line x1="1080" y1="115" x2="1080" y2="195" stroke="#eab308" stroke-width="2.5"/>
|
|
913
|
+
<polygon points="1080,195 1074,183 1086,183" fill="#eab308"/>
|
|
914
|
+
|
|
915
|
+
<rect x="990" y="200" width="180" height="50" rx="8" fill="#eab308" fill-opacity="0.15" stroke="#eab308" stroke-width="2.5"/>
|
|
916
|
+
<text x="1080" y="222" text-anchor="middle" fill="#eab308" font-size="12" font-weight="600">
|
|
917
|
+
<tspan data-lang="fr">Publier une version</tspan>
|
|
918
|
+
<tspan data-lang="en">Publish a release</tspan>
|
|
919
|
+
</text>
|
|
920
|
+
<text x="1080" y="240" text-anchor="middle" fill="#94a3b8" font-size="9">
|
|
921
|
+
<tspan data-lang="fr">release + tag + npm</tspan>
|
|
922
|
+
<tspan data-lang="en">release + tag + npm</tspan>
|
|
923
|
+
</text>
|
|
924
|
+
|
|
925
|
+
<!-- /gitflow -r -->
|
|
926
|
+
<line x1="1080" y1="250" x2="1080" y2="270" stroke="#eab308" stroke-width="2"/>
|
|
927
|
+
<polygon points="1080,270 1074,262 1086,262" fill="#eab308"/>
|
|
928
|
+
<g class="cmd-copyable" data-cmd="/gitflow -r" style="cursor:pointer;">
|
|
929
|
+
<rect x="990" y="275" width="180" height="32" rx="6" fill="#0f172a" stroke="#eab308" stroke-width="2"/>
|
|
930
|
+
<text x="1080" y="296" text-anchor="middle" fill="#eab308" font-size="10" font-family="monospace">/gitflow -r</text>
|
|
931
|
+
</g>
|
|
932
|
+
|
|
933
|
+
<!-- /gitflow finish -->
|
|
934
|
+
<line x1="1080" y1="307" x2="1080" y2="322" stroke="#eab308" stroke-width="2"/>
|
|
935
|
+
<polygon points="1080,322 1074,314 1086,314" fill="#eab308"/>
|
|
936
|
+
<g class="cmd-copyable" data-cmd="/gitflow finish" style="cursor:pointer;">
|
|
937
|
+
<rect x="990" y="327" width="180" height="32" rx="6" fill="#0f172a" stroke="#eab308" stroke-width="2"/>
|
|
938
|
+
<text x="1080" y="348" text-anchor="middle" fill="#eab308" font-size="10" font-family="monospace">/gitflow finish</text>
|
|
939
|
+
</g>
|
|
940
|
+
|
|
941
|
+
<!-- Result -->
|
|
942
|
+
<line x1="1080" y1="359" x2="1080" y2="374" stroke="#eab308" stroke-width="2"/>
|
|
943
|
+
<polygon points="1080,374 1074,366 1086,366" fill="#eab308"/>
|
|
944
|
+
<rect x="990" y="379" width="180" height="40" rx="8" fill="#eab308" fill-opacity="0.2" stroke="#eab308" stroke-width="2.5"/>
|
|
945
|
+
<text x="1080" y="396" text-anchor="middle" fill="#eab308" font-size="10" font-weight="600">
|
|
946
|
+
<tspan data-lang="fr">✓ Tag + pipeline</tspan>
|
|
947
|
+
<tspan data-lang="en">✓ Tag + pipeline</tspan>
|
|
948
|
+
</text>
|
|
949
|
+
<text x="1080" y="410" text-anchor="middle" fill="#94a3b8" font-size="8">
|
|
950
|
+
<tspan data-lang="fr">publication npm automatique</tspan>
|
|
951
|
+
<tspan data-lang="en">automatic npm publish</tspan>
|
|
952
|
+
</text>
|
|
953
|
+
|
|
954
|
+
<!-- ===== BOTTOM: Common workflow reminder ===== -->
|
|
955
|
+
<rect x="30" y="620" width="1140" height="44" rx="8" fill="#334155" fill-opacity="0.5" stroke="#475569" stroke-width="1"/>
|
|
956
|
+
<text x="600" y="640" text-anchor="middle" fill="#94a3b8" font-size="11">
|
|
957
|
+
<tspan data-lang="fr">🔄 Toujours dans une branche GitFlow : <tspan fill="#8b5cf6" font-family="monospace">/gitflow start feature {nom}</tspan> → coder → <tspan fill="#8b5cf6" font-family="monospace">/gitflow commit</tspan> → <tspan fill="#8b5cf6" font-family="monospace">/gitflow pr</tspan></tspan>
|
|
958
|
+
<tspan data-lang="en">🔄 Always in a GitFlow branch: <tspan fill="#8b5cf6" font-family="monospace">/gitflow start feature {name}</tspan> → code → <tspan fill="#8b5cf6" font-family="monospace">/gitflow commit</tspan> → <tspan fill="#8b5cf6" font-family="monospace">/gitflow pr</tspan></tspan>
|
|
959
|
+
</text>
|
|
960
|
+
<text x="600" y="656" text-anchor="middle" fill="#64748b" font-size="9">
|
|
961
|
+
<tspan data-lang="fr">Voir <tspan text-decoration="underline">GitFlow</tspan> pour le detail complet du workflow de branches</tspan>
|
|
962
|
+
<tspan data-lang="en">See <tspan text-decoration="underline">GitFlow</tspan> for the complete branch workflow</tspan>
|
|
963
|
+
</text>
|
|
757
964
|
</svg>
|
|
758
965
|
</div>
|
|
759
|
-
|
|
760
|
-
<p data-lang="fr">
|
|
761
|
-
Vous pouvez realiser chaque etape manuellement, ou generer un module complet (entite + service + controller + page) avec <strong><code>/application</code></strong>.
|
|
762
|
-
</p>
|
|
763
|
-
<p data-lang="en">
|
|
764
|
-
You can perform each step manually, or generate a complete module (entity + service + controller + page) with <strong><code>/application</code></strong>.
|
|
765
|
-
</p>
|
|
766
|
-
|
|
767
|
-
<div class="alert alert-info">
|
|
768
|
-
<span class="alert-icon">🔗</span>
|
|
769
|
-
<div class="alert-content">
|
|
770
|
-
<h5 data-lang="fr">Pages liees</h5>
|
|
771
|
-
<h5 data-lang="en">Related pages</h5>
|
|
772
|
-
<p data-lang="fr">
|
|
773
|
-
<a href="efcore.html">EF Core</a> — workflow complet des migrations (conflits, rebase, squash) •
|
|
774
|
-
<a href="gitflow.html">GitFlow</a> — gestion des branches et versioning
|
|
775
|
-
</p>
|
|
776
|
-
<p data-lang="en">
|
|
777
|
-
<a href="efcore.html">EF Core</a> — complete migration workflow (conflicts, rebase, squash) •
|
|
778
|
-
<a href="gitflow.html">GitFlow</a> — branch management and versioning
|
|
779
|
-
</p>
|
|
780
|
-
</div>
|
|
781
|
-
</div>
|
|
782
966
|
</section>
|
|
783
967
|
|
|
784
968
|
<!-- ============================================
|