@atlashub/smartstack-cli 1.13.2 → 1.14.1

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.
Files changed (214) hide show
  1. package/.documentation/agents.html +1 -1
  2. package/.documentation/apex.html +1 -1
  3. package/.documentation/business-analyse.html +1 -1
  4. package/.documentation/cli-commands.html +3 -3
  5. package/.documentation/commands.html +1 -1
  6. package/.documentation/efcore.html +1 -1
  7. package/.documentation/gitflow.html +231 -236
  8. package/.documentation/hooks.html +1 -1
  9. package/.documentation/index.html +1 -1
  10. package/.documentation/init.html +3 -3
  11. package/.documentation/installation.html +1075 -351
  12. package/.documentation/ralph-loop.html +1 -1
  13. package/.documentation/test-web.html +1 -1
  14. package/README.md +88 -20
  15. package/config/default-config.json +10 -1
  16. package/dist/index.js +276 -85
  17. package/dist/index.js.map +1 -1
  18. package/package.json +1 -1
  19. package/templates/agents/code-reviewer.md +163 -0
  20. package/templates/agents/efcore/db-deploy.md +25 -7
  21. package/templates/agents/efcore/db-reset.md +31 -10
  22. package/templates/agents/efcore/db-status.md +22 -5
  23. package/templates/agents/efcore/migration.md +70 -20
  24. package/templates/agents/gitflow/cleanup.md +8 -1
  25. package/templates/agents/gitflow/commit.md +7 -5
  26. package/templates/agents/gitflow/finish.md +6 -4
  27. package/templates/agents/gitflow/pr.md +8 -1
  28. package/templates/agents/gitflow/start.md +1 -1
  29. package/templates/commands/check-version.md +267 -0
  30. package/templates/commands/efcore/_shared.md +31 -2
  31. package/templates/commands/efcore/db-reset.md +18 -6
  32. package/templates/commands/efcore/migration.md +1 -1
  33. package/templates/commands/efcore/rebase-snapshot.md +1 -1
  34. package/templates/commands/efcore/squash.md +1 -0
  35. package/templates/commands/refactor.md +164 -0
  36. package/templates/project/DependencyInjection.Application.cs.template +25 -0
  37. package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -0
  38. package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -0
  39. package/templates/project/ExampleEntity.cs.template +116 -0
  40. package/templates/project/ExampleEntityConfiguration.cs.template +64 -0
  41. package/templates/project/ExampleService.cs.template +146 -0
  42. package/templates/project/ExtensionsDbContext.cs.template +41 -0
  43. package/templates/project/IExtensionsDbContext.cs.template +22 -0
  44. package/templates/project/Program.cs.template +47 -0
  45. package/templates/project/README.md +79 -0
  46. package/templates/ralph/README.md +10 -8
  47. package/templates/ralph/ralph.config.yaml +2 -2
  48. package/templates/skills/_shared.md +44 -44
  49. package/templates/skills/ai-prompt/SKILL.md +55 -55
  50. package/templates/skills/apex/SKILL.md +235 -0
  51. package/templates/skills/apex/steps/step-00-init.md +203 -0
  52. package/templates/skills/apex/steps/step-01-analyze.md +210 -0
  53. package/templates/skills/apex/steps/step-02-plan.md +217 -0
  54. package/templates/skills/apex/steps/step-03-execute.md +178 -0
  55. package/templates/skills/apex/steps/step-04-validate.md +217 -0
  56. package/templates/skills/apex/steps/step-05-examine.md +207 -0
  57. package/templates/skills/apex/steps/step-06-resolve.md +181 -0
  58. package/templates/skills/apex/steps/step-07-tests.md +206 -0
  59. package/templates/skills/apex/steps/step-08-run-tests.md +207 -0
  60. package/templates/skills/apex/templates/00-context.md +46 -0
  61. package/templates/skills/apex/templates/01-analyze.md +63 -0
  62. package/templates/skills/apex/templates/02-plan.md +63 -0
  63. package/templates/skills/apex/templates/03-execute.md +34 -0
  64. package/templates/skills/apex/templates/04-validate.md +61 -0
  65. package/templates/skills/apex/templates/05-examine.md +58 -0
  66. package/templates/skills/apex/templates/06-resolve.md +39 -0
  67. package/templates/skills/apex/templates/07-tests.md +56 -0
  68. package/templates/skills/apex/templates/08-run-tests.md +41 -0
  69. package/templates/skills/apex/templates/README.md +69 -0
  70. package/templates/skills/application/SKILL.md +50 -50
  71. package/templates/skills/application/templates-backend.md +25 -25
  72. package/templates/skills/application/templates-frontend.md +43 -43
  73. package/templates/skills/application/templates-i18n.md +29 -29
  74. package/templates/skills/application/templates-seed.md +77 -77
  75. package/templates/skills/business-analyse/SKILL.md +223 -0
  76. package/templates/skills/business-analyse/_shared.md +258 -0
  77. package/templates/skills/business-analyse/questionnaire/01-context.md +33 -0
  78. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +35 -0
  79. package/templates/skills/business-analyse/questionnaire/03-scope.md +35 -0
  80. package/templates/skills/business-analyse/questionnaire/04-data.md +36 -0
  81. package/templates/skills/business-analyse/questionnaire/05-integrations.md +36 -0
  82. package/templates/skills/business-analyse/questionnaire/06-security.md +40 -0
  83. package/templates/skills/business-analyse/questionnaire/07-ui.md +36 -0
  84. package/templates/skills/business-analyse/questionnaire/08-performance.md +35 -0
  85. package/templates/skills/business-analyse/questionnaire/09-constraints.md +35 -0
  86. package/templates/skills/business-analyse/questionnaire/10-documentation.md +35 -0
  87. package/templates/skills/business-analyse/questionnaire.md +177 -177
  88. package/templates/skills/business-analyse/react/components.md +340 -0
  89. package/templates/skills/business-analyse/react/i18n-template.md +245 -0
  90. package/templates/skills/business-analyse/react/schema.md +151 -0
  91. package/templates/skills/business-analyse/steps/step-00-init.md +293 -0
  92. package/templates/skills/business-analyse/steps/step-01-discover.md +267 -0
  93. package/templates/skills/business-analyse/steps/step-02-analyse.md +243 -0
  94. package/templates/skills/business-analyse/steps/step-03-specify.md +317 -0
  95. package/templates/skills/business-analyse/steps/step-04-validate.md +239 -0
  96. package/templates/skills/business-analyse/steps/step-05-handoff.md +336 -0
  97. package/templates/skills/business-analyse/steps/step-06-doc-html.md +261 -0
  98. package/templates/skills/business-analyse/templates/00-context.md +105 -0
  99. package/templates/skills/business-analyse/templates/frd-brd.md +97 -0
  100. package/templates/skills/business-analyse/templates/frd-discovery.md +78 -0
  101. package/templates/skills/business-analyse/templates/frd-handoff.md +118 -0
  102. package/templates/skills/business-analyse/templates/frd-spec.md +168 -0
  103. package/templates/skills/business-analyse/templates-frd.md +217 -217
  104. package/templates/skills/business-analyse/templates-react.md +26 -26
  105. package/templates/skills/controller/SKILL.md +141 -92
  106. package/templates/skills/controller/postman-templates.md +15 -15
  107. package/templates/skills/controller/steps/step-00-init.md +191 -0
  108. package/templates/skills/controller/steps/step-01-analyze.md +146 -0
  109. package/templates/skills/controller/steps/step-02-plan.md +176 -0
  110. package/templates/skills/controller/steps/step-03-generate.md +219 -0
  111. package/templates/skills/controller/steps/step-04-perms.md +219 -0
  112. package/templates/skills/controller/steps/step-05-validate.md +107 -0
  113. package/templates/skills/controller/templates.md +77 -77
  114. package/templates/skills/documentation/SKILL.md +79 -79
  115. package/templates/skills/feature-full/SKILL.md +38 -38
  116. package/templates/skills/gitflow/SKILL.md +277 -0
  117. package/templates/{commands → skills}/gitflow/_shared.md +20 -20
  118. package/templates/skills/gitflow/phases/abort.md +173 -0
  119. package/templates/skills/gitflow/phases/cleanup.md +226 -0
  120. package/templates/skills/gitflow/phases/status.md +178 -0
  121. package/templates/skills/gitflow/steps/step-commit.md +255 -0
  122. package/templates/skills/gitflow/steps/step-finish.md +255 -0
  123. package/templates/skills/gitflow/steps/step-init.md +209 -0
  124. package/templates/skills/gitflow/steps/step-merge.md +225 -0
  125. package/templates/skills/gitflow/steps/step-plan.md +208 -0
  126. package/templates/skills/gitflow/steps/step-pr.md +235 -0
  127. package/templates/skills/gitflow/steps/step-start.md +334 -0
  128. package/templates/skills/gitflow/steps/step-sync.md +200 -0
  129. package/templates/skills/gitflow/templates/config.json +53 -0
  130. package/templates/skills/notification/SKILL.md +51 -51
  131. package/templates/skills/ralph-loop/SKILL.md +228 -0
  132. package/templates/skills/ralph-loop/steps/step-00-init.md +201 -0
  133. package/templates/skills/ralph-loop/steps/step-01-task.md +169 -0
  134. package/templates/skills/ralph-loop/steps/step-02-execute.md +173 -0
  135. package/templates/skills/ralph-loop/steps/step-03-commit.md +170 -0
  136. package/templates/skills/ralph-loop/steps/step-04-check.md +162 -0
  137. package/templates/skills/ralph-loop/steps/step-05-report.md +181 -0
  138. package/templates/skills/review-code/SKILL.md +219 -0
  139. package/templates/skills/review-code/references/clean-code-principles.md +140 -0
  140. package/templates/skills/review-code/references/code-quality-metrics.md +174 -0
  141. package/templates/skills/review-code/references/feedback-patterns.md +149 -0
  142. package/templates/skills/review-code/references/security-checklist.md +127 -0
  143. package/templates/skills/ui-components/SKILL.md +54 -54
  144. package/templates/skills/workflow/SKILL.md +46 -46
  145. package/templates/commands/ai-prompt.md +0 -315
  146. package/templates/commands/apex/1-analyze.md +0 -100
  147. package/templates/commands/apex/2-plan.md +0 -145
  148. package/templates/commands/apex/3-execute.md +0 -171
  149. package/templates/commands/apex/4-examine.md +0 -116
  150. package/templates/commands/apex/5-tasks.md +0 -209
  151. package/templates/commands/apex.md +0 -76
  152. package/templates/commands/application/create.md +0 -362
  153. package/templates/commands/application/templates-backend.md +0 -463
  154. package/templates/commands/application/templates-frontend.md +0 -517
  155. package/templates/commands/application/templates-i18n.md +0 -478
  156. package/templates/commands/application/templates-seed.md +0 -362
  157. package/templates/commands/application.md +0 -303
  158. package/templates/commands/business-analyse/0-orchestrate.md +0 -156
  159. package/templates/commands/business-analyse/1-init.md +0 -99
  160. package/templates/commands/business-analyse/2-discover.md +0 -143
  161. package/templates/commands/business-analyse/3-analyse.md +0 -106
  162. package/templates/commands/business-analyse/4-specify.md +0 -133
  163. package/templates/commands/business-analyse/5-validate.md +0 -132
  164. package/templates/commands/business-analyse/6-handoff.md +0 -157
  165. package/templates/commands/business-analyse/7-doc-html.md +0 -103
  166. package/templates/commands/business-analyse/_shared.md +0 -176
  167. package/templates/commands/business-analyse/bug.md +0 -118
  168. package/templates/commands/business-analyse/change-request.md +0 -144
  169. package/templates/commands/business-analyse/hotfix.md +0 -116
  170. package/templates/commands/business-analyse.md +0 -121
  171. package/templates/commands/controller/create.md +0 -216
  172. package/templates/commands/controller/postman-templates.md +0 -528
  173. package/templates/commands/controller/templates.md +0 -600
  174. package/templates/commands/controller.md +0 -337
  175. package/templates/commands/create/agent.md +0 -138
  176. package/templates/commands/create/command.md +0 -166
  177. package/templates/commands/create/hook.md +0 -234
  178. package/templates/commands/create/plugin.md +0 -329
  179. package/templates/commands/create/project.md +0 -508
  180. package/templates/commands/create/skill.md +0 -199
  181. package/templates/commands/create.md +0 -220
  182. package/templates/commands/documentation/module.md +0 -202
  183. package/templates/commands/documentation/templates.md +0 -432
  184. package/templates/commands/documentation.md +0 -190
  185. package/templates/commands/epct.md +0 -69
  186. package/templates/commands/explain.md +0 -186
  187. package/templates/commands/feature-full.md +0 -267
  188. package/templates/commands/gitflow/1-init.md +0 -188
  189. package/templates/commands/gitflow/10-start.md +0 -190
  190. package/templates/commands/gitflow/11-finish.md +0 -382
  191. package/templates/commands/gitflow/12-cleanup.md +0 -103
  192. package/templates/commands/gitflow/13-sync.md +0 -216
  193. package/templates/commands/gitflow/14-rebase.md +0 -251
  194. package/templates/commands/gitflow/2-status.md +0 -122
  195. package/templates/commands/gitflow/3-commit.md +0 -209
  196. package/templates/commands/gitflow/4-plan.md +0 -174
  197. package/templates/commands/gitflow/5-exec.md +0 -202
  198. package/templates/commands/gitflow/6-abort.md +0 -121
  199. package/templates/commands/gitflow/7-pull-request.md +0 -176
  200. package/templates/commands/gitflow/8-review.md +0 -113
  201. package/templates/commands/gitflow/9-merge.md +0 -157
  202. package/templates/commands/gitflow.md +0 -128
  203. package/templates/commands/implement.md +0 -663
  204. package/templates/commands/init.md +0 -567
  205. package/templates/commands/mcp-integration.md +0 -330
  206. package/templates/commands/notification.md +0 -129
  207. package/templates/commands/oneshot.md +0 -57
  208. package/templates/commands/quickstart.md +0 -154
  209. package/templates/commands/ralph-loop/cancel-ralph.md +0 -18
  210. package/templates/commands/ralph-loop/help.md +0 -126
  211. package/templates/commands/ralph-loop/ralph-loop.md +0 -120
  212. package/templates/commands/review.md +0 -106
  213. package/templates/commands/workflow.md +0 -193
  214. package/templates/gitflow/config.json +0 -138
@@ -0,0 +1,267 @@
1
+ ---
2
+ description: Verify version alignment between package.json and documentation
3
+ agent: action
4
+ model: haiku
5
+ ---
6
+
7
+ # /check-version - Version Alignment Validator
8
+
9
+ Verifies that the version in `package.json` is aligned with all documentation files in `.documentation/`.
10
+
11
+ **USAGE:** Run before releases or as part of release process to ensure documentation is up-to-date.
12
+
13
+ **INTEGRATION:** Called automatically by `/gitflow:11-finish` for release branches.
14
+
15
+ ---
16
+
17
+ ## STEP 1: Read Package Version
18
+
19
+ **EXECUTE:**
20
+
21
+ ```bash
22
+ # Get version from package.json
23
+ PKG_VERSION=$(cat package.json | grep -oP '"version":\s*"\K[^"]+' | head -1)
24
+ echo "Package version: $PKG_VERSION"
25
+ ```
26
+
27
+ ---
28
+
29
+ ## STEP 2: Scan Documentation Files
30
+
31
+ **EXECUTE:**
32
+
33
+ ```bash
34
+ # Find all HTML files with version-badge
35
+ echo ""
36
+ echo "Scanning documentation files..."
37
+ echo ""
38
+
39
+ # Extract versions from all doc files
40
+ for file in .documentation/*.html; do
41
+ if [ -f "$file" ]; then
42
+ DOC_VERSION=$(grep -oP 'version-badge">v?\K[^<]+' "$file" | head -1)
43
+ if [ -n "$DOC_VERSION" ]; then
44
+ FILENAME=$(basename "$file")
45
+ # Remove 'v' prefix if present for comparison
46
+ DOC_VERSION_CLEAN=${DOC_VERSION#v}
47
+
48
+ if [ "$DOC_VERSION_CLEAN" = "$PKG_VERSION" ]; then
49
+ echo "OK $FILENAME: v$DOC_VERSION_CLEAN"
50
+ else
51
+ echo "MISMATCH $FILENAME: v$DOC_VERSION_CLEAN (expected v$PKG_VERSION)"
52
+ fi
53
+ fi
54
+ fi
55
+ done
56
+ ```
57
+
58
+ ---
59
+
60
+ ## STEP 3: Generate Report
61
+
62
+ **EXECUTE:**
63
+
64
+ ```bash
65
+ echo ""
66
+ echo "====================================================================="
67
+ echo " VERSION ALIGNMENT CHECK"
68
+ echo "====================================================================="
69
+ echo ""
70
+
71
+ PKG_VERSION=$(cat package.json | grep -oP '"version":\s*"\K[^"]+' | head -1)
72
+ MISMATCH_COUNT=0
73
+ TOTAL_COUNT=0
74
+
75
+ for file in .documentation/*.html; do
76
+ if [ -f "$file" ]; then
77
+ DOC_VERSION=$(grep -oP 'version-badge">v?\K[^<]+' "$file" | head -1)
78
+ if [ -n "$DOC_VERSION" ]; then
79
+ TOTAL_COUNT=$((TOTAL_COUNT + 1))
80
+ DOC_VERSION_CLEAN=${DOC_VERSION#v}
81
+ if [ "$DOC_VERSION_CLEAN" != "$PKG_VERSION" ]; then
82
+ MISMATCH_COUNT=$((MISMATCH_COUNT + 1))
83
+ fi
84
+ fi
85
+ fi
86
+ done
87
+
88
+ echo "Package version: v$PKG_VERSION"
89
+ echo "Documentation files checked: $TOTAL_COUNT"
90
+ echo "Mismatches found: $MISMATCH_COUNT"
91
+ echo ""
92
+
93
+ if [ "$MISMATCH_COUNT" -eq 0 ]; then
94
+ echo "STATUS: PASSED - All versions aligned"
95
+ else
96
+ echo "STATUS: FAILED - Version mismatches detected"
97
+ echo ""
98
+ echo "Run /check-version:fix to auto-update documentation"
99
+ fi
100
+ echo ""
101
+ echo "====================================================================="
102
+ ```
103
+
104
+ ---
105
+
106
+ ## Conditional: If Mismatches Detected
107
+
108
+ **IF** `MISMATCH_COUNT > 0`:
109
+
110
+ Use `AskUserQuestion` tool to ask:
111
+
112
+ ```json
113
+ {
114
+ "questions": [{
115
+ "question": "Des fichiers de documentation ont des versions obsoletes. Voulez-vous les mettre a jour automatiquement ?",
116
+ "header": "Fix versions",
117
+ "options": [
118
+ {
119
+ "label": "Oui, mettre a jour (Recommended)",
120
+ "description": "Met a jour tous les fichiers avec la version actuelle"
121
+ },
122
+ {
123
+ "label": "Non, ignorer",
124
+ "description": "Continuer sans corriger les versions"
125
+ }
126
+ ],
127
+ "multiSelect": false
128
+ }]
129
+ }
130
+ ```
131
+
132
+ **IF** user selects "Oui":
133
+ - Execute the fix command below
134
+
135
+ ---
136
+
137
+ ## /check-version:fix - Auto-Update Documentation Versions
138
+
139
+ **EXECUTE:**
140
+
141
+ ```bash
142
+ PKG_VERSION=$(cat package.json | grep -oP '"version":\s*"\K[^"]+' | head -1)
143
+
144
+ echo "Updating documentation to v$PKG_VERSION..."
145
+ echo ""
146
+
147
+ UPDATED_COUNT=0
148
+
149
+ for file in .documentation/*.html; do
150
+ if [ -f "$file" ]; then
151
+ DOC_VERSION=$(grep -oP 'version-badge">v?\K[^<]+' "$file" | head -1)
152
+ if [ -n "$DOC_VERSION" ]; then
153
+ DOC_VERSION_CLEAN=${DOC_VERSION#v}
154
+ if [ "$DOC_VERSION_CLEAN" != "$PKG_VERSION" ]; then
155
+ # Update version in file
156
+ sed -i "s/version-badge\">v[^<]*/version-badge\">v$PKG_VERSION/" "$file"
157
+ UPDATED_COUNT=$((UPDATED_COUNT + 1))
158
+ echo "UPDATED $(basename "$file"): v$DOC_VERSION_CLEAN -> v$PKG_VERSION"
159
+ fi
160
+ fi
161
+ fi
162
+ done
163
+
164
+ echo ""
165
+ if [ "$UPDATED_COUNT" -gt 0 ]; then
166
+ echo "OK $UPDATED_COUNT file(s) updated"
167
+ echo ""
168
+ echo "Files modified:"
169
+ git status --porcelain .documentation/*.html | grep "^ M" | sed 's/^ M / /'
170
+ echo ""
171
+ echo "Next steps:"
172
+ echo " 1. Review changes: git diff .documentation/"
173
+ echo " 2. Commit: /gitflow:commit"
174
+ else
175
+ echo "OK No files needed updating"
176
+ fi
177
+ ```
178
+
179
+ ---
180
+
181
+ ## /check-version:report - Detailed Report
182
+
183
+ **EXECUTE:**
184
+
185
+ ```bash
186
+ PKG_VERSION=$(cat package.json | grep -oP '"version":\s*"\K[^"]+' | head -1)
187
+
188
+ echo "====================================================================="
189
+ echo " VERSION ALIGNMENT DETAILED REPORT"
190
+ echo "====================================================================="
191
+ echo ""
192
+ echo "Package: @atlashub/smartstack-cli"
193
+ echo "Current version: v$PKG_VERSION"
194
+ echo ""
195
+ echo "---------------------------------------------------------------------"
196
+ echo "FILE | DOC VERSION | STATUS"
197
+ echo "---------------------------------------------------------------------"
198
+
199
+ for file in .documentation/*.html; do
200
+ if [ -f "$file" ]; then
201
+ DOC_VERSION=$(grep -oP 'version-badge">v?\K[^<]+' "$file" | head -1)
202
+ if [ -n "$DOC_VERSION" ]; then
203
+ FILENAME=$(basename "$file")
204
+ DOC_VERSION_CLEAN=${DOC_VERSION#v}
205
+
206
+ # Pad filename to 30 chars
207
+ PADDED_NAME=$(printf "%-28s" "$FILENAME")
208
+
209
+ if [ "$DOC_VERSION_CLEAN" = "$PKG_VERSION" ]; then
210
+ printf "%s | v%-10s | OK\n" "$PADDED_NAME" "$DOC_VERSION_CLEAN"
211
+ else
212
+ printf "%s | v%-10s | MISMATCH\n" "$PADDED_NAME" "$DOC_VERSION_CLEAN"
213
+ fi
214
+ fi
215
+ fi
216
+ done
217
+
218
+ echo "---------------------------------------------------------------------"
219
+ ```
220
+
221
+ ---
222
+
223
+ ## Integration with GitFlow Release
224
+
225
+ This command is automatically called during `/gitflow:11-finish` for release branches.
226
+
227
+ **In release finish workflow:**
228
+
229
+ ```bash
230
+ # Before creating tag, verify versions are aligned
231
+ if [[ "$TYPE" = "release" ]]; then
232
+ /check-version
233
+
234
+ # If mismatches, prompt to fix before continuing
235
+ if [ "$MISMATCH_COUNT" -gt 0 ]; then
236
+ echo "WARNING: Documentation versions not aligned"
237
+ echo "Fix with: /check-version:fix"
238
+ # Block release until fixed
239
+ fi
240
+ fi
241
+ ```
242
+
243
+ ---
244
+
245
+ ## Usage Examples
246
+
247
+ | Command | Description |
248
+ |---------|-------------|
249
+ | `/check-version` | Check version alignment (interactive) |
250
+ | `/check-version:fix` | Auto-update all doc files |
251
+ | `/check-version:report` | Detailed report without prompts |
252
+
253
+ ---
254
+
255
+ ## Exit Codes
256
+
257
+ | Code | Meaning |
258
+ |------|---------|
259
+ | 0 | All versions aligned |
260
+ | 1 | Mismatches detected (blocking for releases) |
261
+
262
+ ---
263
+
264
+ ## Files Checked
265
+
266
+ - `.documentation/*.html` - All HTML documentation files
267
+ - Looks for `<span class="version-badge">vX.Y.Z</span>` pattern
@@ -11,7 +11,7 @@ detect_efcore_project() {
11
11
  CSPROJ=$(find . -name "*.csproj" -exec grep -l "Microsoft.EntityFrameworkCore" {} \; | head -1)
12
12
  PROJECT_DIR=$(dirname "$CSPROJ")
13
13
  PROJECT_NAME=$(basename "$CSPROJ" .csproj)
14
- MIGRATIONS_DIR="$PROJECT_DIR/Migrations"
14
+ MIGRATIONS_DIR="$PROJECT_DIR/Persistence/Migrations"
15
15
 
16
16
  STARTUP_PROJECT=$(find . -name "*.Api.csproj" -o -name "*Web.csproj" | head -1)
17
17
  INFRA_PROJECT=$(find . -name "*Infrastructure.csproj" | head -1)
@@ -63,6 +63,33 @@ block_production() {
63
63
 
64
64
  ---
65
65
 
66
+ ## Backup Base de Données
67
+
68
+ ```bash
69
+ backup_database() {
70
+ BACKUP_DIR=".claude/gitflow/backup/database"
71
+ mkdir -p "$BACKUP_DIR"
72
+
73
+ BACKUP_FILE="${BACKUP_DIR}/${DATABASE_NAME}_$(date +%Y%m%d_%H%M%S).bak"
74
+
75
+ echo "Backup: $DATABASE_NAME → $BACKUP_FILE"
76
+
77
+ sqlcmd -S "$SERVER_NAME" -E -Q "BACKUP DATABASE [$DATABASE_NAME] TO DISK='$BACKUP_FILE' WITH FORMAT, INIT, COMPRESSION"
78
+
79
+ if [ $? -eq 0 ]; then
80
+ echo "✓ Backup créé: $BACKUP_FILE"
81
+ BACKUP_PATH="$BACKUP_FILE"
82
+ else
83
+ echo "⚠️ Backup échoué (sqlcmd non disponible ou erreur SQL)"
84
+ BACKUP_PATH="none"
85
+ fi
86
+ }
87
+ ```
88
+
89
+ **Prérequis:** `sqlcmd` doit être installé et accessible dans le PATH.
90
+
91
+ ---
92
+
66
93
  ## Détermination Branche Parente
67
94
 
68
95
  **Règle d'or:** Le ModelSnapshot de référence doit venir de la branche parente (état validé).
@@ -150,9 +177,11 @@ Pattern: `{context}_v{version}_{sequence}_{Description}`
150
177
  | ❌ INTERDIT | ✅ OBLIGATOIRE |
151
178
  |-------------|----------------|
152
179
  | Scripts SQL (.sql) dans le repo | `dotnet ef database update` |
153
- | `sqlcmd` avec SQL brut | `dotnet ef migrations add` |
180
+ | `sqlcmd` pour DDL/DML | `dotnet ef migrations add` |
154
181
  | `migrationBuilder.Sql()` INSERT | `HasData()` pour seeding |
155
182
 
183
+ **Exception:** `sqlcmd` est autorisé UNIQUEMENT pour `BACKUP DATABASE` (backup avant reset).
184
+
156
185
  ---
157
186
 
158
187
  ## MCP Tool Reference
@@ -15,9 +15,11 @@ model: sonnet
15
15
 
16
16
  | ❌ INTERDIT | ✅ OBLIGATOIRE |
17
17
  |-------------|----------------|
18
- | `sqlcmd` avec SQL brut | `dotnet ef database drop` |
18
+ | `sqlcmd` pour DDL/DML | `dotnet ef database drop` |
19
19
  | Scripts .sql dans repo | `dotnet ef database update` |
20
- | Backup via scripts | Backup via SSMS/Azure |
20
+ | INSERT via scripts | `HasData()` pour seeding |
21
+
22
+ **Exception:** `sqlcmd` est autorisé UNIQUEMENT pour `BACKUP DATABASE`.
21
23
 
22
24
  ---
23
25
 
@@ -50,23 +52,32 @@ AskUserQuestion({
50
52
 
51
53
  ---
52
54
 
53
- ## STEP 2: Backup (optionnel)
55
+ ## STEP 2: Backup (automatique si configuré)
56
+
57
+ Lire config: `.claude/gitflow/config.json` → `efcore.database.backupBeforeReset`
54
58
 
55
59
  ```javascript
56
60
  AskUserQuestion({
57
61
  questions: [{
58
- question: "Backup nécessaire avant suppression?",
62
+ question: "Backup de la base '" + DATABASE_NAME + "' avant suppression?",
59
63
  header: "Backup",
60
64
  options: [
65
+ { label: "Oui, backup auto (Recommandé)", description: "Créer .bak via sqlcmd" },
61
66
  { label: "Non", description: "Données dev uniquement - continuer" },
62
- { label: "Backup manuel", description: "Via SSMS/Azure Portal" }
67
+ { label: "Backup manuel", description: "Via SSMS/Azure Portal (stoppe ici)" }
63
68
  ],
64
69
  multiSelect: false
65
70
  }]
66
71
  })
67
72
  ```
68
73
 
69
- Si backup manuel: afficher instructions SSMS/Azure, stopper.
74
+ **Si "Oui, backup auto":**
75
+
76
+ ```bash
77
+ backup_database # Fonction de _shared.md
78
+ ```
79
+
80
+ **Si "Backup manuel":** Afficher instructions et stopper.
70
81
 
71
82
  ---
72
83
 
@@ -109,6 +120,7 @@ AskUserQuestion({
109
120
  ```
110
121
  RESET - {DATABASE_NAME}
111
122
  ├── Environnement: {SELECTED_ENV}
123
+ ├── Backup: {BACKUP_PATH|none}
112
124
  ├── Opérations: ✓ Drop, ✓ Create, ✓ {N} migrations
113
125
  ├── Conformité: ✓ EF Core CLI uniquement
114
126
  └── Prochains: /efcore:db-status, /efcore:db-seed
@@ -93,7 +93,7 @@ AskUserQuestion({
93
93
  ## STEP 5: Création
94
94
 
95
95
  ```bash
96
- dotnet ef migrations add "$MIGRATION_NAME" --verbose
96
+ dotnet ef migrations add "$MIGRATION_NAME" -o Persistence/Migrations --verbose
97
97
  ```
98
98
 
99
99
  ---
@@ -71,7 +71,7 @@ done
71
71
 
72
72
  ```bash
73
73
  MIGRATION_NAME="${BRANCH_TYPE}_${VERSION}_${BRANCH_NAME}_Consolidated"
74
- dotnet ef migrations add "$MIGRATION_NAME" --verbose
74
+ dotnet ef migrations add "$MIGRATION_NAME" -o Persistence/Migrations --verbose
75
75
  ```
76
76
 
77
77
  ---
@@ -165,6 +165,7 @@ esac
165
165
  dotnet ef migrations add "$MIGRATION_NAME" \
166
166
  --project "$INFRA_PROJECT" \
167
167
  --startup-project "$STARTUP_PROJECT" \
168
+ -o Persistence/Migrations \
168
169
  --verbose
169
170
  ```
170
171
 
@@ -0,0 +1,164 @@
1
+ ---
2
+ description: Refactor code by finding files, grouping them, and launching parallel Snipper agents
3
+ argument-hint: <search-pattern-or-description>
4
+ ---
5
+
6
+ <objective>
7
+ Refactor code matching #$ARGUMENTS across the codebase using parallel Snipper agents for maximum speed.
8
+
9
+ This command finds all relevant files, creates ONE instruction file, then launches Snipper agents in parallel with batches of max 3 files each.
10
+ </objective>
11
+
12
+ <process>
13
+
14
+ ## Phase 1: Discovery
15
+
16
+ 1. **Parse the refactor request**: Understand what #$ARGUMENTS means
17
+ - Could be: method name, component name, pattern, code smell, etc.
18
+ - Identify the search strategy (Grep for code patterns, Glob for file patterns)
19
+
20
+ 2. **Find all affected files**:
21
+ - Use Grep to search for the pattern in the codebase
22
+ - Use Glob if searching by file name patterns
23
+ - Exclude node_modules, .git, dist, build directories
24
+ - List all files that need refactoring
25
+
26
+ 3. **Analyze scope**:
27
+ - Count total files found
28
+ - If more than 15 files, ask user to confirm or narrow scope
29
+ - Show preview of files to refactor
30
+
31
+ ## Phase 2: Create Instructions
32
+
33
+ 4. **Create task folder**:
34
+ - Generate unique ID: `refactor-{timestamp}`
35
+ - Create folder: `.claude/tasks/refactor-{timestamp}/`
36
+
37
+ 5. **Create ONE instruction file**:
38
+ Create `.claude/tasks/refactor-{id}/instructions.md` with precise, adaptive instructions:
39
+
40
+ ```markdown
41
+ # Refactor Instructions
42
+
43
+ ## Objective
44
+ {Clear description of what to refactor based on #$ARGUMENTS}
45
+
46
+ ## What to Change
47
+ {Specific patterns/code to find and modify}
48
+
49
+ ## How to Change
50
+ {Step-by-step transformation rules}
51
+
52
+ ## Rules
53
+ - Follow existing codebase patterns
54
+ - No unnecessary comments
55
+ - Preserve functionality
56
+ - Only modify what's necessary for this refactor
57
+ ```
58
+
59
+ **IMPORTANT**: Make instructions adaptive - they should work for ANY file in the list.
60
+
61
+ ## Phase 3: Group and Execute
62
+
63
+ 6. **Group files into batches**:
64
+ - Maximum 3 files per batch
65
+ - Group by related functionality when possible
66
+
67
+ 7. **Launch Snipper agents in parallel**:
68
+ For EACH batch, use Task tool with subagent_type='Snipper':
69
+
70
+ ```
71
+ Using the instructions in .claude/tasks/refactor-{id}/instructions.md, refactor these files:
72
+ - {file_1}
73
+ - {file_2}
74
+ - {file_3}
75
+ ```
76
+
77
+ **CRITICAL**: Launch ALL batches in a SINGLE message with multiple Task calls.
78
+
79
+ 8. **Wait for completion**:
80
+ - All Snipper agents run in parallel
81
+ - Collect results from each
82
+
83
+ ## Phase 4: Verification
84
+
85
+ 9. **Validate changes**:
86
+ - Run `pnpm lint` or `npm run lint` to check for errors
87
+ - Run `pnpm tsc` or `npx tsc` if TypeScript project
88
+ - Report any failures
89
+
90
+ 10. **Summary report**:
91
+ - List all files modified
92
+ - Show any errors encountered
93
+ - Provide next steps if needed
94
+
95
+ </process>
96
+
97
+ <instructions_template>
98
+ Create ONE file at `.claude/tasks/refactor-{id}/instructions.md`:
99
+
100
+ ```markdown
101
+ # Refactor: {title}
102
+
103
+ ## Objective
104
+ {What needs to be refactored - derived from #$ARGUMENTS}
105
+
106
+ ## Pattern to Find
107
+ {Exact code pattern, method name, or structure to locate}
108
+
109
+ ## Transformation
110
+ {How to transform the found pattern - be specific and adaptive}
111
+
112
+ ## Examples
113
+ Before:
114
+ ```
115
+ {example of current code}
116
+ ```
117
+
118
+ After:
119
+ ```
120
+ {example of refactored code}
121
+ ```
122
+
123
+ ## Constraints
124
+ - Only modify code matching the pattern
125
+ - Preserve all existing functionality
126
+ - Follow codebase conventions
127
+ - No comments unless necessary
128
+ ```
129
+ </instructions_template>
130
+
131
+ <snipper_prompt_template>
132
+ For each batch, call Snipper with:
133
+
134
+ ```
135
+ Using the instructions in .claude/tasks/refactor-{id}/instructions.md, refactor these files:
136
+ - {file_path_1}
137
+ - {file_path_2}
138
+ - {file_path_3}
139
+
140
+ Read the instructions file first, then apply the refactor to each file.
141
+ ```
142
+ </snipper_prompt_template>
143
+
144
+ <success_criteria>
145
+ - All target files identified
146
+ - ONE instruction file created in `.claude/tasks/refactor-{id}/instructions.md`
147
+ - Snipper agents launched in parallel (max 3 files per agent)
148
+ - All batches completed successfully
149
+ - Lint/type checks pass
150
+ - Summary provided to user
151
+ </success_criteria>
152
+
153
+ <example>
154
+ User: `/refactor rename getUserData to fetchUserProfile`
155
+
156
+ 1. Grep finds 12 files containing "getUserData"
157
+ 2. Creates `.claude/tasks/refactor-1702489200/`
158
+ 3. Creates ONE file: `instructions.md` with rename rules
159
+ 4. Groups into 4 batches of 3 files
160
+ 5. Launches 4 Snipper agents in parallel, each with:
161
+ "Using instructions in .../instructions.md, refactor: file1, file2, file3"
162
+ 6. Waits for completion, runs lint
163
+ 7. Reports: "Refactored 12 files, renamed getUserData to fetchUserProfile"
164
+ </example>
@@ -0,0 +1,25 @@
1
+ using Microsoft.Extensions.DependencyInjection;
2
+
3
+ namespace {{ProjectName}}.Application;
4
+
5
+ /// <summary>
6
+ /// Dependency injection configuration for client Application layer.
7
+ /// </summary>
8
+ public static class DependencyInjection
9
+ {
10
+ /// <summary>
11
+ /// Adds client-specific application services to the DI container.
12
+ ///
13
+ /// IMPORTANT: This must be called AFTER AddSmartStackApplication()
14
+ /// to ensure all Core services are available.
15
+ /// </summary>
16
+ public static IServiceCollection Add{{ProjectName}}Application(
17
+ this IServiceCollection services)
18
+ {
19
+ // TODO: Register your application services here
20
+ // Example:
21
+ // services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(DependencyInjection).Assembly));
22
+
23
+ return services;
24
+ }
25
+ }
@@ -0,0 +1,61 @@
1
+ using Microsoft.EntityFrameworkCore;
2
+ using Microsoft.EntityFrameworkCore.Diagnostics;
3
+ using Microsoft.Extensions.Configuration;
4
+ using Microsoft.Extensions.DependencyInjection;
5
+ using {{ProjectName}}.Application.Common.Interfaces;
6
+ using {{ProjectName}}.Infrastructure.Persistence;
7
+ using SmartStack.Infrastructure.Persistence.Configurations;
8
+
9
+ namespace {{ProjectName}}.Infrastructure;
10
+
11
+ /// <summary>
12
+ /// Dependency injection configuration for client Infrastructure layer.
13
+ /// </summary>
14
+ public static class DependencyInjection
15
+ {
16
+ /// <summary>
17
+ /// Adds client-specific infrastructure services to the DI container.
18
+ ///
19
+ /// IMPORTANT: This must be called AFTER AddSmartStackInfrastructure()
20
+ /// to ensure CoreDbContext is registered first.
21
+ /// </summary>
22
+ public static IServiceCollection Add{{ProjectName}}Infrastructure(
23
+ this IServiceCollection services,
24
+ IConfiguration configuration)
25
+ {
26
+ // ExtensionsDbContext with migrations in 'extensions' schema
27
+ services.AddDbContext<ExtensionsDbContext>(options =>
28
+ {
29
+ options.UseSqlServer(
30
+ configuration.GetConnectionString("DefaultConnection"),
31
+ sqlOptions =>
32
+ {
33
+ sqlOptions.MigrationsAssembly(typeof(ExtensionsDbContext).Assembly.FullName);
34
+
35
+ // Store migrations history in extensions schema (separate from Core)
36
+ sqlOptions.MigrationsHistoryTable("__EFMigrationsHistory", SchemaConstants.Extensions);
37
+
38
+ // Enable retry policy for transient failures
39
+ sqlOptions.EnableRetryOnFailure(
40
+ maxRetryCount: 5,
41
+ maxRetryDelay: TimeSpan.FromSeconds(10),
42
+ errorNumbersToAdd: null);
43
+
44
+ // Set command timeout
45
+ sqlOptions.CommandTimeout(60);
46
+ });
47
+
48
+ // Suppress false positive warning for static seed data
49
+ options.ConfigureWarnings(w => w.Ignore(RelationalEventId.PendingModelChangesWarning));
50
+ });
51
+
52
+ // Register the interface
53
+ services.AddScoped<IExtensionsDbContext>(provider =>
54
+ provider.GetRequiredService<ExtensionsDbContext>());
55
+
56
+ // TODO: Register your services here
57
+ // services.AddScoped<IOrderService, OrderService>();
58
+
59
+ return services;
60
+ }
61
+ }