@atlashub/smartstack-cli 4.18.0 → 4.19.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/package.json +1 -1
- package/templates/agents/ba-reader.md +86 -80
- package/templates/agents/ba-writer.md +318 -415
- package/templates/agents/docs-context-reader.md +3 -3
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -0
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -0
- package/templates/skills/apex/SKILL.md +29 -16
- package/templates/skills/apex/_shared.md +62 -9
- package/templates/skills/apex/references/analysis-methods.md +8 -6
- package/templates/skills/apex/references/challenge-questions.md +5 -5
- package/templates/skills/apex/references/core-seed-data.md +68 -45
- package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +26 -21
- package/templates/skills/apex/references/parallel-execution.md +156 -0
- package/templates/skills/apex/references/person-extension-pattern.md +12 -12
- package/templates/skills/apex/references/post-checks.md +1748 -1726
- package/templates/skills/apex/references/smartstack-api.md +63 -57
- package/templates/skills/apex/references/smartstack-frontend-compliance.md +594 -0
- package/templates/skills/apex/references/smartstack-frontend.md +1246 -1842
- package/templates/skills/apex/references/smartstack-layers.md +98 -145
- package/templates/skills/apex/steps/step-00-init.md +30 -6
- package/templates/skills/apex/steps/step-01-analyze.md +27 -23
- package/templates/skills/apex/steps/step-02-plan.md +12 -12
- package/templates/skills/apex/steps/step-03-execute.md +198 -143
- package/templates/skills/apex/steps/step-04-examine.md +24 -93
- package/templates/skills/apex/steps/step-05-deep-review.md +16 -16
- package/templates/skills/apex/steps/step-06-resolve.md +9 -9
- package/templates/skills/apex/steps/step-07-tests.md +3 -1
- package/templates/skills/apex/steps/step-08-run-tests.md +1 -1
- package/templates/skills/business-analyse/SKILL.md +182 -301
- package/templates/skills/business-analyse/_shared.md +119 -336
- package/templates/skills/business-analyse/html/ba-interactive.html +703 -82
- package/templates/skills/business-analyse/html/build-html.js +41 -3
- package/templates/skills/business-analyse/html/src/partials/cadrage-context.html +34 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-risks.html +48 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-scope.html +49 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-stakeholders.html +55 -0
- package/templates/skills/business-analyse/html/src/partials/cadrage-success.html +34 -0
- package/templates/skills/business-analyse/html/src/partials/consol-datamodel.html +8 -0
- package/templates/skills/business-analyse/html/src/partials/consol-flows.html +29 -0
- package/templates/skills/business-analyse/html/src/partials/consol-interactions.html +8 -0
- package/templates/skills/business-analyse/html/src/partials/consol-permissions.html +8 -0
- package/templates/skills/business-analyse/html/src/partials/decomp-dependencies.html +38 -0
- package/templates/skills/business-analyse/html/src/partials/decomp-modules.html +51 -0
- package/templates/skills/business-analyse/html/src/partials/handoff-summary.html +24 -0
- package/templates/skills/business-analyse/html/src/partials/module-spec-container.html +4 -0
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +17 -1
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +31 -5
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +100 -63
- package/templates/skills/business-analyse/html/src/scripts/06-render-mockups.js +372 -0
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +41 -13
- package/templates/skills/business-analyse/html/src/styles/09-mockups-html.css +136 -0
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +7 -5
- package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +142 -0
- package/templates/skills/business-analyse/questionnaire/03-data-ui.md +94 -0
- package/templates/skills/business-analyse/questionnaire/04-risks-metrics.md +150 -0
- package/templates/skills/business-analyse/questionnaire/05-cross-module.md +69 -0
- package/templates/skills/business-analyse/questionnaire.md +23 -280
- package/templates/skills/business-analyse/react/application-viewer.md +2 -2
- package/templates/skills/business-analyse/react/components.md +4 -4
- package/templates/skills/business-analyse/react/i18n-template.md +1 -1
- package/templates/skills/business-analyse/react/schema.md +14 -14
- package/templates/skills/business-analyse/references/acceptance-criteria.md +21 -21
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +3 -3
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +1 -1
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +5 -5
- package/templates/skills/business-analyse/references/deploy-data-build.md +12 -11
- package/templates/skills/business-analyse/references/deploy-modes.md +10 -10
- package/templates/skills/business-analyse/references/detection-strategies.md +6 -6
- package/templates/skills/business-analyse/references/html-data-mapping.md +15 -15
- package/templates/skills/business-analyse/references/naming-conventions.md +4 -4
- package/templates/skills/business-analyse/references/review-data-mapping.md +29 -29
- package/templates/skills/business-analyse/references/robustness-checks.md +36 -36
- package/templates/skills/business-analyse/references/spec-auto-inference.md +2 -2
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
- package/templates/skills/business-analyse/references/ui-resource-cards.md +1 -1
- package/templates/skills/business-analyse/references/validation-checklist.md +3 -3
- package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +2 -2
- package/templates/skills/business-analyse/schemas/application-schema.json +8 -8
- package/templates/skills/business-analyse/schemas/feature-schema.json +3 -3
- package/templates/skills/business-analyse/schemas/index-schema.json +47 -0
- package/templates/skills/business-analyse/schemas/project-schema.json +6 -6
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +1 -1
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +5 -3
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +4 -4
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +1 -1
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +4 -4
- package/templates/skills/business-analyse/steps/step-00-init.md +68 -77
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +54 -180
- package/templates/skills/business-analyse/steps/step-02-structure.md +175 -0
- package/templates/skills/business-analyse/steps/step-03-specify.md +198 -0
- package/templates/skills/business-analyse/steps/step-04-consolidate.md +478 -0
- package/templates/skills/business-analyse/steps/step-05-deploy.md +220 -0
- package/templates/skills/business-analyse/steps/step-06-review.md +51 -69
- package/templates/skills/business-analyse/templates/tpl-frd.md +1 -1
- package/templates/skills/business-analyse/templates/tpl-handoff.md +20 -17
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +2 -2
- package/templates/skills/business-analyse/templates-react.md +2 -2
- package/templates/skills/derive-prd/SKILL.md +92 -0
- package/templates/skills/derive-prd/references/acceptance-criteria.md +169 -0
- package/templates/skills/derive-prd/references/entity-domain-mapping.md +115 -0
- package/templates/skills/{business-analyse → derive-prd}/references/handoff-file-templates.md +131 -120
- package/templates/skills/{business-analyse → derive-prd}/references/handoff-mappings.md +95 -95
- package/templates/skills/{business-analyse → derive-prd}/references/handoff-seeddata-generation.md +312 -312
- package/templates/skills/{business-analyse → derive-prd}/references/prd-generation.md +262 -263
- package/templates/skills/derive-prd/references/readiness-scoring.md +104 -0
- package/templates/skills/derive-prd/schemas/handoff-schema.json +95 -0
- package/templates/skills/derive-prd/steps/step-00-validate.md +130 -0
- package/templates/skills/derive-prd/steps/step-01-transform.md +206 -0
- package/templates/skills/derive-prd/steps/step-02-export.md +181 -0
- package/templates/skills/{business-analyse → derive-prd}/templates/tpl-progress.md +172 -172
- package/templates/skills/ralph-loop/SKILL.md +2 -1
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +1 -1
- package/templates/skills/ralph-loop/steps/step-01-task.md +2 -2
- package/templates/skills/apex/references/agent-teams-protocol.md +0 -203
- package/templates/skills/business-analyse/_architecture.md +0 -124
- package/templates/skills/business-analyse/_elicitation.md +0 -206
- package/templates/skills/business-analyse/_module-loop.md +0 -115
- package/templates/skills/business-analyse/_rules.md +0 -142
- package/templates/skills/business-analyse/_suggestions.md +0 -34
- package/templates/skills/business-analyse/questionnaire/00-application.md +0 -160
- package/templates/skills/business-analyse/questionnaire/00b-project.md +0 -85
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +0 -189
- package/templates/skills/business-analyse/questionnaire/03-scope.md +0 -164
- package/templates/skills/business-analyse/questionnaire/04-data.md +0 -88
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +0 -58
- package/templates/skills/business-analyse/questionnaire/06-security.md +0 -68
- package/templates/skills/business-analyse/questionnaire/07-ui.md +0 -76
- package/templates/skills/business-analyse/questionnaire/08-performance.md +0 -42
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +0 -45
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +0 -58
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +0 -59
- package/templates/skills/business-analyse/questionnaire/12-migration.md +0 -58
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +0 -69
- package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +0 -135
- package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +0 -136
- package/templates/skills/business-analyse/references/agent-module-prompt.md +0 -366
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +0 -557
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +0 -566
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +0 -41
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +0 -74
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +0 -115
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +0 -68
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +0 -85
- package/templates/skills/business-analyse/references/team-orchestration.md +0 -1093
- package/templates/skills/business-analyse/references/validate-incremental-html.md +0 -121
- package/templates/skills/business-analyse/steps/step-01b-applications.md +0 -419
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +0 -387
- package/templates/skills/business-analyse/steps/step-03a-data.md +0 -16
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +0 -486
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +0 -300
- package/templates/skills/business-analyse/steps/step-03b-ui.md +0 -405
- package/templates/skills/business-analyse/steps/step-03c-compile.md +0 -516
- package/templates/skills/business-analyse/steps/step-03d-validate.md +0 -691
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +0 -17
- package/templates/skills/business-analyse/steps/step-04a-collect.md +0 -415
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +0 -163
- package/templates/skills/business-analyse/steps/step-04c-decide.md +0 -186
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +0 -937
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +0 -522
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +0 -703
|
@@ -67,80 +67,11 @@ Verify:
|
|
|
67
67
|
- No orphan routes
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
### 3b. Frontend Page Completeness
|
|
70
|
+
### 3b. Frontend Page Completeness
|
|
71
71
|
|
|
72
|
-
>
|
|
73
|
-
>
|
|
74
|
-
>
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
PAGE_DIR=$(find . -path "*/src/pages" -not -path "*/node_modules/*" -type d 2>/dev/null | head -1)
|
|
78
|
-
APP_TSX=$(find . -name "App.tsx" -not -path "*/node_modules/*" 2>/dev/null | head -1)
|
|
79
|
-
|
|
80
|
-
if [ -n "$PAGE_DIR" ]; then
|
|
81
|
-
# Check each module's ListPage for dead navigation links
|
|
82
|
-
LIST_PAGES=$(find "$PAGE_DIR" -name "*ListPage.tsx" -o -name "*sPage.tsx" 2>/dev/null | grep -v test | grep -v node_modules)
|
|
83
|
-
FAIL=false
|
|
84
|
-
for LIST_PAGE in $LIST_PAGES; do
|
|
85
|
-
LP_DIR=$(dirname "$LIST_PAGE")
|
|
86
|
-
MOD=$(basename "$LP_DIR")
|
|
87
|
-
|
|
88
|
-
HAS_CREATE_NAV=$(grep -P "navigate\(.*['/]create" "$LIST_PAGE" 2>/dev/null)
|
|
89
|
-
HAS_EDIT_NAV=$(grep -P "navigate\(.*['/]edit" "$LIST_PAGE" 2>/dev/null)
|
|
90
|
-
|
|
91
|
-
CREATE_PAGE=$(find "$LP_DIR" -name "*CreatePage.tsx" 2>/dev/null | head -1)
|
|
92
|
-
EDIT_PAGE=$(find "$LP_DIR" -name "*EditPage.tsx" 2>/dev/null | head -1)
|
|
93
|
-
|
|
94
|
-
if [ -n "$HAS_CREATE_NAV" ] && [ -z "$CREATE_PAGE" ]; then
|
|
95
|
-
echo "BLOCKING: $MOD ListPage navigates to /create but CreatePage does NOT exist → dead link"
|
|
96
|
-
FAIL=true
|
|
97
|
-
fi
|
|
98
|
-
if [ -n "$HAS_EDIT_NAV" ] && [ -z "$EDIT_PAGE" ]; then
|
|
99
|
-
echo "BLOCKING: $MOD ListPage navigates to /:id/edit but EditPage does NOT exist → dead link"
|
|
100
|
-
FAIL=true
|
|
101
|
-
fi
|
|
102
|
-
done
|
|
103
|
-
|
|
104
|
-
# Check route wiring in App.tsx
|
|
105
|
-
if [ -n "$APP_TSX" ]; then
|
|
106
|
-
CREATE_PAGES=$(find "$PAGE_DIR" -name "*CreatePage.tsx" 2>/dev/null | grep -v test)
|
|
107
|
-
EDIT_PAGES=$(find "$PAGE_DIR" -name "*EditPage.tsx" 2>/dev/null | grep -v test)
|
|
108
|
-
if [ -n "$CREATE_PAGES" ] && ! grep -qP "path:.*create" "$APP_TSX"; then
|
|
109
|
-
echo "BLOCKING: CreatePage exists but no 'create' route in App.tsx"
|
|
110
|
-
FAIL=true
|
|
111
|
-
fi
|
|
112
|
-
if [ -n "$EDIT_PAGES" ] && ! grep -qP "path:.*:id/edit" "$APP_TSX"; then
|
|
113
|
-
echo "BLOCKING: EditPage exists but no ':id/edit' route in App.tsx"
|
|
114
|
-
FAIL=true
|
|
115
|
-
fi
|
|
116
|
-
fi
|
|
117
|
-
|
|
118
|
-
# Check test files exist for form pages
|
|
119
|
-
FORM_PAGES=$(find "$PAGE_DIR" -name "*CreatePage.tsx" -o -name "*EditPage.tsx" 2>/dev/null | grep -v test)
|
|
120
|
-
if [ -n "$FORM_PAGES" ]; then
|
|
121
|
-
for FP in $FORM_PAGES; do
|
|
122
|
-
TF="${FP%.tsx}.test.tsx"
|
|
123
|
-
if [ ! -f "$TF" ]; then
|
|
124
|
-
echo "BLOCKING: Form page missing test: $FP → expected $TF"
|
|
125
|
-
FAIL=true
|
|
126
|
-
fi
|
|
127
|
-
done
|
|
128
|
-
fi
|
|
129
|
-
|
|
130
|
-
# Check at least SOME tests exist when pages exist
|
|
131
|
-
PAGE_COUNT=$(find "$PAGE_DIR" -name "*.tsx" ! -name "*.test.tsx" 2>/dev/null | grep -v node_modules | wc -l)
|
|
132
|
-
TEST_COUNT=$(find "$PAGE_DIR" -name "*.test.tsx" 2>/dev/null | grep -v node_modules | wc -l)
|
|
133
|
-
if [ "$PAGE_COUNT" -gt 0 ] && [ "$TEST_COUNT" -eq 0 ]; then
|
|
134
|
-
echo "BLOCKING: $PAGE_COUNT pages but ZERO test files"
|
|
135
|
-
FAIL=true
|
|
136
|
-
fi
|
|
137
|
-
|
|
138
|
-
if [ "$FAIL" = true ]; then
|
|
139
|
-
echo "Fix: Go back to step-03 and generate missing pages/tests/routes"
|
|
140
|
-
# MUST fix before proceeding
|
|
141
|
-
fi
|
|
142
|
-
fi
|
|
143
|
-
```
|
|
72
|
+
> POST-CHECKs C4, C5, and C6 in `references/post-checks.md` cover this verification (dead navigation links, missing Create/Edit pages, missing test files). Executed in section 6b below.
|
|
73
|
+
>
|
|
74
|
+
> ROOT CAUSE (test-v4-015): Frontend generation created List + Detail pages but SKIPPED Create + Edit pages → white screen / 404.
|
|
144
75
|
|
|
145
76
|
**If ANY check fails → return to step-03 to generate the missing pages, tests, or routes.**
|
|
146
77
|
|
|
@@ -157,7 +88,7 @@ dotnet clean && dotnet restore && dotnet build
|
|
|
157
88
|
npm run typecheck
|
|
158
89
|
```
|
|
159
90
|
|
|
160
|
-
|
|
91
|
+
Both must pass. If failure, classify error per `references/error-classification.md` (categories A-F).
|
|
161
92
|
|
|
162
93
|
---
|
|
163
94
|
|
|
@@ -190,7 +121,7 @@ fi
|
|
|
190
121
|
sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "IF DB_ID('$DB_NAME') IS NOT NULL BEGIN ALTER DATABASE [$DB_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [$DB_NAME]; END" 2>/dev/null
|
|
191
122
|
```
|
|
192
123
|
|
|
193
|
-
|
|
124
|
+
If migration fails on SQL Server (common: SQLite-only syntax, column type mismatches, missing FK targets), fix the DbContext or migration first.
|
|
194
125
|
|
|
195
126
|
---
|
|
196
127
|
|
|
@@ -198,9 +129,9 @@ sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "IF DB_ID('$DB_NAME') IS NOT NULL BEGIN AL
|
|
|
198
129
|
|
|
199
130
|
| File | Checks |
|
|
200
131
|
|------|--------|
|
|
201
|
-
| NavigationApplicationSeedData | MUST be first,
|
|
202
|
-
| ApplicationRolesSeedData | 4 roles (admin, manager, contributor, viewer),
|
|
203
|
-
| NavigationModuleSeedData |
|
|
132
|
+
| NavigationApplicationSeedData | MUST be first, 4 lang translations |
|
|
133
|
+
| ApplicationRolesSeedData | 4 roles (admin, manager, contributor, viewer), references NavigationApplicationSeedData.ApplicationId |
|
|
134
|
+
| NavigationModuleSeedData | 4 languages (fr, en, it, de), GetModuleEntry + GetTranslationEntries |
|
|
204
135
|
| ↳ Section methods (same file) | (conditional: if sections exist) GetSectionEntries + GetSectionTranslationEntries, 4 languages, random GUIDs, query actual module from DB for FK |
|
|
205
136
|
| ↳ Resource methods (same file) | (conditional: if resources exist) GetResourceEntries + resource translations, 4 languages, random GUIDs, query actual section from DB for FK |
|
|
206
137
|
| Permissions.cs | Static constants class with `public static class {Module} { Read, Create, Update, Delete }`, paths match PermissionsSeedData |
|
|
@@ -211,14 +142,14 @@ sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "IF DB_ID('$DB_NAME') IS NOT NULL BEGIN AL
|
|
|
211
142
|
|
|
212
143
|
---
|
|
213
144
|
|
|
214
|
-
## 6b.
|
|
145
|
+
## 6b. POST-CHECKs
|
|
215
146
|
|
|
216
147
|
> **MCP FIRST:** Run `validate_conventions`, `validate_security`, and `validate_frontend_routes` before bash checks.
|
|
217
148
|
> These 3 MCP tools cover ~10 additional checks automatically.
|
|
218
149
|
|
|
219
|
-
Load and execute all checks from `references/post-checks.md` (
|
|
150
|
+
Load and execute all checks from `references/post-checks.md` (security + convention + architecture checks).
|
|
220
151
|
|
|
221
|
-
|
|
152
|
+
If any POST-CHECK fails, fix in step-03 and re-validate.
|
|
222
153
|
|
|
223
154
|
---
|
|
224
155
|
|
|
@@ -259,18 +190,18 @@ AC2: {criterion} → PASS / FAIL (evidence: {file:line or test})
|
|
|
259
190
|
| Security | TenantId filter, RequirePermission, no Guid.Empty, no !.Value | PASS / N/A |
|
|
260
191
|
| Seed data | completeness, random GUIDs (Guid.NewGuid()), no ContextId/RoleId constants | PASS / N/A |
|
|
261
192
|
| Code quality | PaginatedResult, EntityLookup (no FK select/input), CSS vars, search param | PASS / N/A |
|
|
262
|
-
| Migration completeness | ModelSnapshot covers ALL DbSet entities (POST-CHECK
|
|
263
|
-
| NavRoute kebab-case | NavRoute + permissions use kebab-case (POST-CHECK
|
|
264
|
-
| DateOnly DTOs | Date fields use DateOnly not string (POST-CHECK
|
|
265
|
-
| I18n registration | Namespaces registered in i18n config (POST-CHECK
|
|
266
|
-
| Validators DI | FluentValidation registered in DI (POST-CHECK
|
|
267
|
-
| Route/NavRoute conflict | No [Route] alongside [NavRoute] on controllers (POST-CHECK
|
|
268
|
-
| Role-permission matrix | Admin=wildcard, Manager=CRU, Contributor=CR, Viewer=R (POST-CHECK
|
|
269
|
-
| PermissionAction enum | No Enum.Parse, only typed enum values 0-10 (POST-CHECK
|
|
270
|
-
| Navigation translations | 4 langs per level, section/resource translations present (POST-CHECK
|
|
193
|
+
| Migration completeness | ModelSnapshot covers ALL DbSet entities (POST-CHECK C38, C42) | PASS / N/A |
|
|
194
|
+
| NavRoute kebab-case | NavRoute + permissions use kebab-case (POST-CHECK C34) | PASS / N/A |
|
|
195
|
+
| DateOnly DTOs | Date fields use DateOnly not string (POST-CHECK C41) | PASS / N/A |
|
|
196
|
+
| I18n registration | Namespaces registered in i18n config (POST-CHECK C39) | PASS / N/A |
|
|
197
|
+
| Validators DI | FluentValidation registered in DI (POST-CHECK C40) | PASS / N/A |
|
|
198
|
+
| Route/NavRoute conflict | No [Route] alongside [NavRoute] on controllers (POST-CHECK C43) | PASS / N/A |
|
|
199
|
+
| Role-permission matrix | Admin=wildcard, Manager=CRU, Contributor=CR, Viewer=R (POST-CHECK C44) | PASS / N/A |
|
|
200
|
+
| PermissionAction enum | No Enum.Parse, only typed enum values 0-10 (POST-CHECK C45) | PASS / N/A |
|
|
201
|
+
| Navigation translations | 4 langs per level, section/resource translations present (POST-CHECK C46) | PASS / N/A |
|
|
271
202
|
| Inline tests (Layer 2) | Backend unit + integration tests | PASS / N/A |
|
|
272
203
|
| Inline tests (Layer 3) | Frontend form tests | PASS / N/A |
|
|
273
|
-
| POST-CHECKs | 3 MCP tools +
|
|
204
|
+
| POST-CHECKs | 3 MCP tools + bash checks (security + convention + architecture) | PASS / N/A |
|
|
274
205
|
| Acceptance criteria | AC1..ACn | {X}/{Y} PASS |
|
|
275
206
|
```
|
|
276
207
|
|
|
@@ -290,14 +221,14 @@ Write to `{output_dir}/04-examine.md` with validation results.
|
|
|
290
221
|
```
|
|
291
222
|
IF examine_mode (-x flag):
|
|
292
223
|
→ Load steps/step-05-deep-review.md (adversarial review)
|
|
293
|
-
→ Then step-06 (resolve) if
|
|
224
|
+
→ Then step-06 (resolve) if findings need fixing
|
|
294
225
|
→ Then step-07 (Final Test Sweep) — ALWAYS
|
|
295
226
|
|
|
296
227
|
ELSE:
|
|
297
228
|
→ Load steps/step-07-tests.md — IMMEDIATELY after eXamine completes
|
|
298
229
|
```
|
|
299
230
|
|
|
300
|
-
**
|
|
231
|
+
**RULE:** The APEX workflow is NOT complete until steps 07-08 execute.
|
|
301
232
|
The success criteria require: "Tests: 100% pass, >= 80% coverage" — step-07 verifies coverage and adds security tests.
|
|
302
233
|
|
|
303
234
|
### eXamine Task Lifecycle — Completion
|
|
@@ -50,11 +50,11 @@ Call: mcp__smartstack__analyze_code_quality
|
|
|
50
50
|
For each changed file, check:
|
|
51
51
|
|
|
52
52
|
**Security (OWASP):**
|
|
53
|
-
- [ ] `[RequirePermission]` on every endpoint (not `[Authorize]`)
|
|
54
|
-
- [ ]
|
|
55
|
-
- [ ]
|
|
56
|
-
- [ ]
|
|
57
|
-
- [ ]
|
|
53
|
+
- [ ] Require `[RequirePermission]` on every endpoint (not `[Authorize]`)
|
|
54
|
+
- [ ] Verify no SQL injection (parameterized queries, EF Core only)
|
|
55
|
+
- [ ] Check no XSS (React auto-escapes, but verify dangerouslySetInnerHTML)
|
|
56
|
+
- [ ] Confirm multi-tenant isolation (IHasData filter applied)
|
|
57
|
+
- [ ] Ensure no secrets in code
|
|
58
58
|
|
|
59
59
|
**Architecture:**
|
|
60
60
|
- [ ] Entities in correct Domain folder
|
|
@@ -65,19 +65,19 @@ For each changed file, check:
|
|
|
65
65
|
- [ ] Frontend in correct hierarchy (App/Module)
|
|
66
66
|
|
|
67
67
|
**SmartStack conventions:**
|
|
68
|
-
- [ ]
|
|
68
|
+
- [ ] Seed data GUIDs via Guid.NewGuid() (see core-seed-data.md §1b)
|
|
69
69
|
- [ ] 4 languages in translations
|
|
70
|
-
- [ ] CSS variables (
|
|
70
|
+
- [ ] CSS variables only (see smartstack-frontend.md §4)
|
|
71
71
|
- [ ] DataTable (not raw HTML `<table>`) and concrete form markup (not non-existent SmartForm)
|
|
72
72
|
- [ ] Correct Layout wrapper per application
|
|
73
73
|
|
|
74
74
|
**FK Fields & Forms:**
|
|
75
|
-
- [ ] FK Guid fields use `EntityLookup` component (
|
|
76
|
-
- [ ]
|
|
77
|
-
- [ ]
|
|
78
|
-
- [ ]
|
|
79
|
-
- [ ]
|
|
80
|
-
- [ ]
|
|
75
|
+
- [ ] FK Guid fields use `EntityLookup` component (do not use `<input>` or `<select>`) (see smartstack-frontend.md §6)
|
|
76
|
+
- [ ] Verify no `<select>` with `<option>` elements for FK fields (even API-loaded options)
|
|
77
|
+
- [ ] Ensure no placeholder text asking user to "Enter ID", "Enter GUID", or "Select {Entity}..."
|
|
78
|
+
- [ ] Verify no inline forms in drawers/slide-overs; Create/Edit forms are full pages with own routes (zero modals/dialogs/drawers) (see smartstack-frontend.md §3b)
|
|
79
|
+
- [ ] Confirm backend GetAll endpoints support `?search=` param for EntityLookup
|
|
80
|
+
- [ ] Verify each EntityLookup has `apiEndpoint`, `mapOption`, `label` props
|
|
81
81
|
|
|
82
82
|
---
|
|
83
83
|
|
|
@@ -130,11 +130,11 @@ Write to `{output_dir}/05-deep-review.md` with all findings.
|
|
|
130
130
|
|
|
131
131
|
```
|
|
132
132
|
IF BLOCKING findings exist:
|
|
133
|
-
→ Load steps/step-06-resolve.md (fix
|
|
134
|
-
→ Then step-07-tests.md (tests are
|
|
133
|
+
→ Load steps/step-06-resolve.md (fix findings first)
|
|
134
|
+
→ Then step-07-tests.md (tests are required)
|
|
135
135
|
|
|
136
136
|
ELSE:
|
|
137
137
|
→ Load steps/step-07-tests.md — IMMEDIATELY
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
Tests are required. Do not stop after Deep Review — proceed to step-07.
|
|
@@ -44,10 +44,10 @@ TaskUpdate(taskId: finding_task_id, status: "completed")
|
|
|
44
44
|
|
|
45
45
|
**Fixing rules:**
|
|
46
46
|
- Use the SAME skill/MCP that created the original code
|
|
47
|
-
- If the finding is in a controller
|
|
48
|
-
- If the finding is in seed data
|
|
49
|
-
- If the finding is in frontend
|
|
50
|
-
-
|
|
47
|
+
- If the finding is in a controller, use /controller or MCP scaffold_extension
|
|
48
|
+
- If the finding is in seed data, use MCP generate_permissions
|
|
49
|
+
- If the finding is in frontend, use /ui-components or MCP scaffold_routes
|
|
50
|
+
- Do not fix by writing raw SmartStack code
|
|
51
51
|
|
|
52
52
|
---
|
|
53
53
|
|
|
@@ -66,7 +66,7 @@ For each finding:
|
|
|
66
66
|
|
|
67
67
|
## 3. Re-Validate
|
|
68
68
|
|
|
69
|
-
After all
|
|
69
|
+
After all findings are fixed:
|
|
70
70
|
|
|
71
71
|
```
|
|
72
72
|
1. MCP validate_conventions → 0 errors
|
|
@@ -89,7 +89,7 @@ fix({module}): resolve review findings {F01, F02, ...}
|
|
|
89
89
|
```
|
|
90
90
|
**APEX SmartStack - Resolve Complete**
|
|
91
91
|
|
|
92
|
-
**
|
|
92
|
+
**Findings:** {count}
|
|
93
93
|
**Resolved:** {count}
|
|
94
94
|
**Remaining:** {count} (should be 0)
|
|
95
95
|
|
|
@@ -110,11 +110,11 @@ Write to `{output_dir}/06-resolve.md` with resolution log.
|
|
|
110
110
|
## 7. Route to Next Step
|
|
111
111
|
|
|
112
112
|
```
|
|
113
|
-
IF remaining
|
|
113
|
+
IF remaining findings > 0:
|
|
114
114
|
→ Loop: fix remaining, re-validate (max 3 iterations)
|
|
115
115
|
→ If stuck, ask user before continuing
|
|
116
116
|
|
|
117
|
-
→ Load steps/step-07-tests.md —
|
|
117
|
+
→ Load steps/step-07-tests.md — required, do not skip
|
|
118
118
|
```
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
After resolving all findings, proceed to step-07 immediately.
|
|
@@ -12,7 +12,7 @@ next_step: steps/step-08-run-tests.md
|
|
|
12
12
|
> Backend and frontend tests were already scaffolded and run inline (Layer 2 and Layer 3).
|
|
13
13
|
> This step focuses on: security tests, coverage gaps, cross-layer scenarios, and remaining failures.
|
|
14
14
|
|
|
15
|
-
**Goal:** Ensure comprehensive test coverage. Target: >= 80% coverage, 100% pass rate.
|
|
15
|
+
**Goal:** Ensure comprehensive test coverage. Target: >= 80% coverage, 100% pass rate. Acceptable fallback: skip failing tests with TODO comment after 3 fix attempts — escalate to user rather than blocking indefinitely.
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -29,6 +29,8 @@ TaskUpdate(taskId: progress_tracker_id,
|
|
|
29
29
|
|
|
30
30
|
## 0. Ensure Test Infrastructure Exists
|
|
31
31
|
|
|
32
|
+
> **Note:** These infrastructure checks are idempotent safety nets. If inline tests (step-03 Layer 2/3) ran successfully, the infrastructure already exists. These checks guard against edge cases where inline test scaffolding was skipped or partially completed.
|
|
33
|
+
|
|
32
34
|
### 0a. Frontend Test Tooling (if frontend was generated)
|
|
33
35
|
|
|
34
36
|
> **Before scaffolding additional frontend tests, the test infrastructure must be in place.**
|
|
@@ -9,7 +9,7 @@ next_step: COMPLETE
|
|
|
9
9
|
# Step 8: Run Final Test Sweep
|
|
10
10
|
|
|
11
11
|
**CRITICAL:** Fix the CODE, not the tests. Tests represent expected behavior.
|
|
12
|
-
100% pass
|
|
12
|
+
Target 100% pass for Sonar quality gate. If stuck after max retries, skip with TODO and escalate.
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|