@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.
- package/.documentation/agents.html +1 -1
- package/.documentation/apex.html +1 -1
- package/.documentation/business-analyse.html +1 -1
- package/.documentation/cli-commands.html +3 -3
- package/.documentation/commands.html +1 -1
- package/.documentation/efcore.html +1 -1
- package/.documentation/gitflow.html +231 -236
- package/.documentation/hooks.html +1 -1
- package/.documentation/index.html +1 -1
- package/.documentation/init.html +3 -3
- package/.documentation/installation.html +1075 -351
- package/.documentation/ralph-loop.html +1 -1
- package/.documentation/test-web.html +1 -1
- package/README.md +88 -20
- package/config/default-config.json +10 -1
- package/dist/index.js +276 -85
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/code-reviewer.md +163 -0
- package/templates/agents/efcore/db-deploy.md +25 -7
- package/templates/agents/efcore/db-reset.md +31 -10
- package/templates/agents/efcore/db-status.md +22 -5
- package/templates/agents/efcore/migration.md +70 -20
- package/templates/agents/gitflow/cleanup.md +8 -1
- package/templates/agents/gitflow/commit.md +7 -5
- package/templates/agents/gitflow/finish.md +6 -4
- package/templates/agents/gitflow/pr.md +8 -1
- package/templates/agents/gitflow/start.md +1 -1
- package/templates/commands/check-version.md +267 -0
- package/templates/commands/efcore/_shared.md +31 -2
- package/templates/commands/efcore/db-reset.md +18 -6
- package/templates/commands/efcore/migration.md +1 -1
- package/templates/commands/efcore/rebase-snapshot.md +1 -1
- package/templates/commands/efcore/squash.md +1 -0
- package/templates/commands/refactor.md +164 -0
- package/templates/project/DependencyInjection.Application.cs.template +25 -0
- package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -0
- package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -0
- package/templates/project/ExampleEntity.cs.template +116 -0
- package/templates/project/ExampleEntityConfiguration.cs.template +64 -0
- package/templates/project/ExampleService.cs.template +146 -0
- package/templates/project/ExtensionsDbContext.cs.template +41 -0
- package/templates/project/IExtensionsDbContext.cs.template +22 -0
- package/templates/project/Program.cs.template +47 -0
- package/templates/project/README.md +79 -0
- package/templates/ralph/README.md +10 -8
- package/templates/ralph/ralph.config.yaml +2 -2
- package/templates/skills/_shared.md +44 -44
- package/templates/skills/ai-prompt/SKILL.md +55 -55
- package/templates/skills/apex/SKILL.md +235 -0
- package/templates/skills/apex/steps/step-00-init.md +203 -0
- package/templates/skills/apex/steps/step-01-analyze.md +210 -0
- package/templates/skills/apex/steps/step-02-plan.md +217 -0
- package/templates/skills/apex/steps/step-03-execute.md +178 -0
- package/templates/skills/apex/steps/step-04-validate.md +217 -0
- package/templates/skills/apex/steps/step-05-examine.md +207 -0
- package/templates/skills/apex/steps/step-06-resolve.md +181 -0
- package/templates/skills/apex/steps/step-07-tests.md +206 -0
- package/templates/skills/apex/steps/step-08-run-tests.md +207 -0
- package/templates/skills/apex/templates/00-context.md +46 -0
- package/templates/skills/apex/templates/01-analyze.md +63 -0
- package/templates/skills/apex/templates/02-plan.md +63 -0
- package/templates/skills/apex/templates/03-execute.md +34 -0
- package/templates/skills/apex/templates/04-validate.md +61 -0
- package/templates/skills/apex/templates/05-examine.md +58 -0
- package/templates/skills/apex/templates/06-resolve.md +39 -0
- package/templates/skills/apex/templates/07-tests.md +56 -0
- package/templates/skills/apex/templates/08-run-tests.md +41 -0
- package/templates/skills/apex/templates/README.md +69 -0
- package/templates/skills/application/SKILL.md +50 -50
- package/templates/skills/application/templates-backend.md +25 -25
- package/templates/skills/application/templates-frontend.md +43 -43
- package/templates/skills/application/templates-i18n.md +29 -29
- package/templates/skills/application/templates-seed.md +77 -77
- package/templates/skills/business-analyse/SKILL.md +223 -0
- package/templates/skills/business-analyse/_shared.md +258 -0
- package/templates/skills/business-analyse/questionnaire/01-context.md +33 -0
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +35 -0
- package/templates/skills/business-analyse/questionnaire/03-scope.md +35 -0
- package/templates/skills/business-analyse/questionnaire/04-data.md +36 -0
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +36 -0
- package/templates/skills/business-analyse/questionnaire/06-security.md +40 -0
- package/templates/skills/business-analyse/questionnaire/07-ui.md +36 -0
- package/templates/skills/business-analyse/questionnaire/08-performance.md +35 -0
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +35 -0
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +35 -0
- package/templates/skills/business-analyse/questionnaire.md +177 -177
- package/templates/skills/business-analyse/react/components.md +340 -0
- package/templates/skills/business-analyse/react/i18n-template.md +245 -0
- package/templates/skills/business-analyse/react/schema.md +151 -0
- package/templates/skills/business-analyse/steps/step-00-init.md +293 -0
- package/templates/skills/business-analyse/steps/step-01-discover.md +267 -0
- package/templates/skills/business-analyse/steps/step-02-analyse.md +243 -0
- package/templates/skills/business-analyse/steps/step-03-specify.md +317 -0
- package/templates/skills/business-analyse/steps/step-04-validate.md +239 -0
- package/templates/skills/business-analyse/steps/step-05-handoff.md +336 -0
- package/templates/skills/business-analyse/steps/step-06-doc-html.md +261 -0
- package/templates/skills/business-analyse/templates/00-context.md +105 -0
- package/templates/skills/business-analyse/templates/frd-brd.md +97 -0
- package/templates/skills/business-analyse/templates/frd-discovery.md +78 -0
- package/templates/skills/business-analyse/templates/frd-handoff.md +118 -0
- package/templates/skills/business-analyse/templates/frd-spec.md +168 -0
- package/templates/skills/business-analyse/templates-frd.md +217 -217
- package/templates/skills/business-analyse/templates-react.md +26 -26
- package/templates/skills/controller/SKILL.md +141 -92
- package/templates/skills/controller/postman-templates.md +15 -15
- package/templates/skills/controller/steps/step-00-init.md +191 -0
- package/templates/skills/controller/steps/step-01-analyze.md +146 -0
- package/templates/skills/controller/steps/step-02-plan.md +176 -0
- package/templates/skills/controller/steps/step-03-generate.md +219 -0
- package/templates/skills/controller/steps/step-04-perms.md +219 -0
- package/templates/skills/controller/steps/step-05-validate.md +107 -0
- package/templates/skills/controller/templates.md +77 -77
- package/templates/skills/documentation/SKILL.md +79 -79
- package/templates/skills/feature-full/SKILL.md +38 -38
- package/templates/skills/gitflow/SKILL.md +277 -0
- package/templates/{commands → skills}/gitflow/_shared.md +20 -20
- package/templates/skills/gitflow/phases/abort.md +173 -0
- package/templates/skills/gitflow/phases/cleanup.md +226 -0
- package/templates/skills/gitflow/phases/status.md +178 -0
- package/templates/skills/gitflow/steps/step-commit.md +255 -0
- package/templates/skills/gitflow/steps/step-finish.md +255 -0
- package/templates/skills/gitflow/steps/step-init.md +209 -0
- package/templates/skills/gitflow/steps/step-merge.md +225 -0
- package/templates/skills/gitflow/steps/step-plan.md +208 -0
- package/templates/skills/gitflow/steps/step-pr.md +235 -0
- package/templates/skills/gitflow/steps/step-start.md +334 -0
- package/templates/skills/gitflow/steps/step-sync.md +200 -0
- package/templates/skills/gitflow/templates/config.json +53 -0
- package/templates/skills/notification/SKILL.md +51 -51
- package/templates/skills/ralph-loop/SKILL.md +228 -0
- package/templates/skills/ralph-loop/steps/step-00-init.md +201 -0
- package/templates/skills/ralph-loop/steps/step-01-task.md +169 -0
- package/templates/skills/ralph-loop/steps/step-02-execute.md +173 -0
- package/templates/skills/ralph-loop/steps/step-03-commit.md +170 -0
- package/templates/skills/ralph-loop/steps/step-04-check.md +162 -0
- package/templates/skills/ralph-loop/steps/step-05-report.md +181 -0
- package/templates/skills/review-code/SKILL.md +219 -0
- package/templates/skills/review-code/references/clean-code-principles.md +140 -0
- package/templates/skills/review-code/references/code-quality-metrics.md +174 -0
- package/templates/skills/review-code/references/feedback-patterns.md +149 -0
- package/templates/skills/review-code/references/security-checklist.md +127 -0
- package/templates/skills/ui-components/SKILL.md +54 -54
- package/templates/skills/workflow/SKILL.md +46 -46
- package/templates/commands/ai-prompt.md +0 -315
- package/templates/commands/apex/1-analyze.md +0 -100
- package/templates/commands/apex/2-plan.md +0 -145
- package/templates/commands/apex/3-execute.md +0 -171
- package/templates/commands/apex/4-examine.md +0 -116
- package/templates/commands/apex/5-tasks.md +0 -209
- package/templates/commands/apex.md +0 -76
- package/templates/commands/application/create.md +0 -362
- package/templates/commands/application/templates-backend.md +0 -463
- package/templates/commands/application/templates-frontend.md +0 -517
- package/templates/commands/application/templates-i18n.md +0 -478
- package/templates/commands/application/templates-seed.md +0 -362
- package/templates/commands/application.md +0 -303
- package/templates/commands/business-analyse/0-orchestrate.md +0 -156
- package/templates/commands/business-analyse/1-init.md +0 -99
- package/templates/commands/business-analyse/2-discover.md +0 -143
- package/templates/commands/business-analyse/3-analyse.md +0 -106
- package/templates/commands/business-analyse/4-specify.md +0 -133
- package/templates/commands/business-analyse/5-validate.md +0 -132
- package/templates/commands/business-analyse/6-handoff.md +0 -157
- package/templates/commands/business-analyse/7-doc-html.md +0 -103
- package/templates/commands/business-analyse/_shared.md +0 -176
- package/templates/commands/business-analyse/bug.md +0 -118
- package/templates/commands/business-analyse/change-request.md +0 -144
- package/templates/commands/business-analyse/hotfix.md +0 -116
- package/templates/commands/business-analyse.md +0 -121
- package/templates/commands/controller/create.md +0 -216
- package/templates/commands/controller/postman-templates.md +0 -528
- package/templates/commands/controller/templates.md +0 -600
- package/templates/commands/controller.md +0 -337
- package/templates/commands/create/agent.md +0 -138
- package/templates/commands/create/command.md +0 -166
- package/templates/commands/create/hook.md +0 -234
- package/templates/commands/create/plugin.md +0 -329
- package/templates/commands/create/project.md +0 -508
- package/templates/commands/create/skill.md +0 -199
- package/templates/commands/create.md +0 -220
- package/templates/commands/documentation/module.md +0 -202
- package/templates/commands/documentation/templates.md +0 -432
- package/templates/commands/documentation.md +0 -190
- package/templates/commands/epct.md +0 -69
- package/templates/commands/explain.md +0 -186
- package/templates/commands/feature-full.md +0 -267
- package/templates/commands/gitflow/1-init.md +0 -188
- package/templates/commands/gitflow/10-start.md +0 -190
- package/templates/commands/gitflow/11-finish.md +0 -382
- package/templates/commands/gitflow/12-cleanup.md +0 -103
- package/templates/commands/gitflow/13-sync.md +0 -216
- package/templates/commands/gitflow/14-rebase.md +0 -251
- package/templates/commands/gitflow/2-status.md +0 -122
- package/templates/commands/gitflow/3-commit.md +0 -209
- package/templates/commands/gitflow/4-plan.md +0 -174
- package/templates/commands/gitflow/5-exec.md +0 -202
- package/templates/commands/gitflow/6-abort.md +0 -121
- package/templates/commands/gitflow/7-pull-request.md +0 -176
- package/templates/commands/gitflow/8-review.md +0 -113
- package/templates/commands/gitflow/9-merge.md +0 -157
- package/templates/commands/gitflow.md +0 -128
- package/templates/commands/implement.md +0 -663
- package/templates/commands/init.md +0 -567
- package/templates/commands/mcp-integration.md +0 -330
- package/templates/commands/notification.md +0 -129
- package/templates/commands/oneshot.md +0 -57
- package/templates/commands/quickstart.md +0 -154
- package/templates/commands/ralph-loop/cancel-ralph.md +0 -18
- package/templates/commands/ralph-loop/help.md +0 -126
- package/templates/commands/ralph-loop/ralph-loop.md +0 -120
- package/templates/commands/review.md +0 -106
- package/templates/commands/workflow.md +0 -193
- 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`
|
|
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`
|
|
18
|
+
| `sqlcmd` pour DDL/DML | `dotnet ef database drop` |
|
|
19
19
|
| Scripts .sql dans repo | `dotnet ef database update` |
|
|
20
|
-
|
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
@@ -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
|
+
}
|