@atlashub/smartstack-cli 4.17.1 → 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 +321 -413
- 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 +25 -25
- 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 +7 -7
- package/templates/skills/business-analyse/references/deploy-data-build.md +14 -12
- 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 -33
- 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 +9 -6
- 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 -3
- package/templates/skills/business-analyse/steps/step-00-init.md +93 -134
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +136 -172
- 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 -258
- 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 +10 -4
- package/templates/skills/ralph-loop/references/category-completeness.md +20 -4
- package/templates/skills/ralph-loop/references/compact-loop.md +80 -48
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +4 -2
- package/templates/skills/ralph-loop/references/parallel-execution.md +27 -27
- package/templates/skills/ralph-loop/steps/step-00-init.md +19 -9
- package/templates/skills/ralph-loop/steps/step-01-task.md +12 -4
- package/templates/skills/ralph-loop/steps/step-02-execute.md +9 -4
- package/templates/skills/ralph-loop/steps/step-03-commit.md +1 -1
- package/templates/skills/ralph-loop/steps/step-04-check.md +5 -21
- package/templates/skills/ralph-loop/steps/step-05-report.md +6 -1
- 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/_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 -43
- 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 -362
- 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 -1022
- 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 -506
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +0 -301
- package/templates/skills/business-analyse/steps/step-03b-ui.md +0 -425
- package/templates/skills/business-analyse/steps/step-03c-compile.md +0 -611
- package/templates/skills/business-analyse/steps/step-03d-validate.md +0 -783
- 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 -840
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs-context-reader
|
|
3
|
-
description: Reads project documentation (docs/business/**/
|
|
3
|
+
description: Reads project documentation (docs/business/**/index.json, web docs, docs-manifest.json) and produces a structured summary for context injection into skills and agents
|
|
4
4
|
color: green
|
|
5
5
|
tools: Read, Glob, Grep
|
|
6
6
|
model: haiku
|
|
@@ -24,10 +24,10 @@ If absent, fall back to directory scanning.
|
|
|
24
24
|
|
|
25
25
|
**Business Analysis outputs (v3.0 - JSON format):**
|
|
26
26
|
```
|
|
27
|
-
Glob: docs/business/**/business-analyse/v*/
|
|
27
|
+
Glob: docs/business/**/business-analyse/v*/index.json
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
For each
|
|
30
|
+
For each index.json found, read the JSON and extract:
|
|
31
31
|
- `id` (FEAT-XXX)
|
|
32
32
|
- `status` (draft/analysed/specified/approved/handed-off)
|
|
33
33
|
- `metadata` (application, module, version, dates)
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
{{!-- SmartStack NavRoute Registry Template --}}
|
|
2
|
+
{{!-- Generates centralized route registry for frontend --}}
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* NavRoute Registry
|
|
6
|
+
*
|
|
7
|
+
* Auto-generated by SmartStack MCP - DO NOT EDIT MANUALLY
|
|
8
|
+
* Generated: {{generatedAt}}
|
|
9
|
+
* Source: {{source}}
|
|
10
|
+
* Routes: {{routeCount}}
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export interface NavRoute {
|
|
14
|
+
/** NavRoute path (e.g., "administration.users") */
|
|
15
|
+
navRoute: string;
|
|
16
|
+
/** API endpoint path (e.g., "/api/administration/users") */
|
|
17
|
+
api: string;
|
|
18
|
+
/** Frontend route path (e.g., "/administration/users") */
|
|
19
|
+
web: string;
|
|
20
|
+
/** Required permissions to access this route */
|
|
21
|
+
permissions: string[];
|
|
22
|
+
/** Backend controller name */
|
|
23
|
+
controller?: string;
|
|
24
|
+
/** Supported HTTP methods */
|
|
25
|
+
methods: string[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* All registered NavRoutes
|
|
30
|
+
*/
|
|
31
|
+
export const ROUTES: Record<string, NavRoute> = {
|
|
32
|
+
{{#each routes}}
|
|
33
|
+
'{{this.navRoute}}': {
|
|
34
|
+
navRoute: '{{this.navRoute}}',
|
|
35
|
+
api: '{{this.apiPath}}',
|
|
36
|
+
web: '{{this.webPath}}',
|
|
37
|
+
permissions: [{{#each this.permissions}}'{{this}}'{{#unless @last}}, {{/unless}}{{/each}}],
|
|
38
|
+
{{#if this.controller}}
|
|
39
|
+
controller: '{{this.controller}}',
|
|
40
|
+
{{/if}}
|
|
41
|
+
methods: [{{#each this.methods}}'{{this}}'{{#unless @last}}, {{/unless}}{{/each}}],
|
|
42
|
+
},
|
|
43
|
+
{{/each}}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get route configuration by NavRoute path
|
|
48
|
+
* @throws Error if route not found
|
|
49
|
+
*/
|
|
50
|
+
export function getRoute(navRoute: string): NavRoute {
|
|
51
|
+
const route = ROUTES[navRoute];
|
|
52
|
+
if (!route) {
|
|
53
|
+
throw new Error(`Route not found: ${navRoute}. Run scaffold_routes to regenerate.`);
|
|
54
|
+
}
|
|
55
|
+
return route;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Safely get route configuration, returns undefined if not found
|
|
60
|
+
*/
|
|
61
|
+
export function tryGetRoute(navRoute: string): NavRoute | undefined {
|
|
62
|
+
return ROUTES[navRoute];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Check if user has permission for route
|
|
67
|
+
*/
|
|
68
|
+
export function hasRoutePermission(navRoute: string, userPermissions: string[]): boolean {
|
|
69
|
+
const route = ROUTES[navRoute];
|
|
70
|
+
if (!route || route.permissions.length === 0) return true;
|
|
71
|
+
return route.permissions.some(p => userPermissions.includes(p));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get all routes for an application (e.g., "administration")
|
|
76
|
+
*/
|
|
77
|
+
export function getRoutesByApplication(application: string): NavRoute[] {
|
|
78
|
+
return Object.values(ROUTES).filter(r => r.navRoute.startsWith(`${application}.`));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Get all routes for an application and module (e.g., "administration.users")
|
|
83
|
+
*/
|
|
84
|
+
export function getRoutesByModule(application: string, module: string): NavRoute[] {
|
|
85
|
+
const prefix = `${application}.${module}`;
|
|
86
|
+
return Object.values(ROUTES).filter(r => r.navRoute.startsWith(`${prefix}.`) || r.navRoute === prefix);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Get all unique applications
|
|
91
|
+
*/
|
|
92
|
+
export function getApplications(): string[] {
|
|
93
|
+
const applications = new Set<string>();
|
|
94
|
+
for (const route of Object.values(ROUTES)) {
|
|
95
|
+
applications.add(route.navRoute.split('.')[0]);
|
|
96
|
+
}
|
|
97
|
+
return Array.from(applications);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Get all unique modules within an application
|
|
102
|
+
*/
|
|
103
|
+
export function getModules(application: string): string[] {
|
|
104
|
+
const modules = new Set<string>();
|
|
105
|
+
for (const route of Object.values(ROUTES)) {
|
|
106
|
+
const parts = route.navRoute.split('.');
|
|
107
|
+
if (parts[0] === application && parts.length >= 2) {
|
|
108
|
+
modules.add(parts[1]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return Array.from(modules);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Build API URL from NavRoute with optional path segments
|
|
116
|
+
*/
|
|
117
|
+
export function buildApiUrl(navRoute: string, ...segments: string[]): string {
|
|
118
|
+
const route = getRoute(navRoute);
|
|
119
|
+
if (segments.length === 0) return route.api;
|
|
120
|
+
return `${route.api}/${segments.join('/')}`;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Build frontend URL from NavRoute with optional path segments
|
|
125
|
+
*/
|
|
126
|
+
export function buildWebUrl(navRoute: string, ...segments: string[]): string {
|
|
127
|
+
const route = getRoute(navRoute);
|
|
128
|
+
if (segments.length === 0) return route.web;
|
|
129
|
+
return `${route.web}/${segments.join('/')}`;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Route count for debugging
|
|
133
|
+
export const ROUTE_COUNT = {{routeCount}};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
{{!-- SmartStack React Router Configuration Template --}}
|
|
2
|
+
{{!-- Generates router configuration from NavRoute registry --}}
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* React Router Configuration
|
|
6
|
+
*
|
|
7
|
+
* Auto-generated by SmartStack MCP - DO NOT EDIT MANUALLY
|
|
8
|
+
* Generated: {{generatedAt}}
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React, { Suspense, lazy } from 'react';
|
|
12
|
+
import { createBrowserRouter, RouteObject, Navigate } from 'react-router-dom';
|
|
13
|
+
import { ROUTES } from './navRoutes.generated';
|
|
14
|
+
{{#if includeGuards}}
|
|
15
|
+
import { ProtectedRoute, PermissionGuard } from './guards';
|
|
16
|
+
{{/if}}
|
|
17
|
+
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Layouts
|
|
20
|
+
// ============================================================================
|
|
21
|
+
|
|
22
|
+
{{#each applications}}
|
|
23
|
+
import { {{capitalize this}}Layout } from '../layouts/{{capitalize this}}Layout';
|
|
24
|
+
{{/each}}
|
|
25
|
+
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Pages (lazy loaded for code splitting)
|
|
28
|
+
// ============================================================================
|
|
29
|
+
|
|
30
|
+
{{#each routes}}
|
|
31
|
+
const {{pageName this.navRoute}}Page = lazy(() => import('../pages/{{pagePath this.navRoute}}'));
|
|
32
|
+
{{/each}}
|
|
33
|
+
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// Loading Component
|
|
36
|
+
// ============================================================================
|
|
37
|
+
|
|
38
|
+
const PageLoader: React.FC = () => (
|
|
39
|
+
<div className="flex items-center justify-center h-64">
|
|
40
|
+
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500" />
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Route Configuration
|
|
46
|
+
// ============================================================================
|
|
47
|
+
|
|
48
|
+
const routes: RouteObject[] = [
|
|
49
|
+
// Root redirect
|
|
50
|
+
{
|
|
51
|
+
path: '/',
|
|
52
|
+
element: <Navigate to="{{defaultPath}}" replace />,
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
{{#each applicationTree}}
|
|
56
|
+
// {{uppercase @key}} Application
|
|
57
|
+
{
|
|
58
|
+
path: '{{@key}}',
|
|
59
|
+
element: <{{capitalize @key}}Layout />,
|
|
60
|
+
children: [
|
|
61
|
+
{{#each this}}
|
|
62
|
+
{
|
|
63
|
+
path: '{{modulePath this.navRoute}}',
|
|
64
|
+
{{#if this.permissions.length}}
|
|
65
|
+
element: (
|
|
66
|
+
<PermissionGuard permissions={ROUTES['{{this.navRoute}}'].permissions}>
|
|
67
|
+
<Suspense fallback={<PageLoader />}>
|
|
68
|
+
<{{pageName this.navRoute}}Page />
|
|
69
|
+
</Suspense>
|
|
70
|
+
</PermissionGuard>
|
|
71
|
+
),
|
|
72
|
+
{{else}}
|
|
73
|
+
element: (
|
|
74
|
+
<Suspense fallback={<PageLoader />}>
|
|
75
|
+
<{{pageName this.navRoute}}Page />
|
|
76
|
+
</Suspense>
|
|
77
|
+
),
|
|
78
|
+
{{/if}}
|
|
79
|
+
},
|
|
80
|
+
{{/each}}
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
{{/each}}
|
|
84
|
+
|
|
85
|
+
// 404 Not Found
|
|
86
|
+
{
|
|
87
|
+
path: '*',
|
|
88
|
+
element: (
|
|
89
|
+
<div className="flex flex-col items-center justify-center h-screen">
|
|
90
|
+
<h1 className="text-4xl font-bold text-gray-900">404</h1>
|
|
91
|
+
<p className="mt-2 text-gray-600">Page not found</p>
|
|
92
|
+
<a href="{{defaultPath}}" className="mt-4 text-blue-600 hover:underline">
|
|
93
|
+
Return to home
|
|
94
|
+
</a>
|
|
95
|
+
</div>
|
|
96
|
+
),
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Router Export
|
|
102
|
+
// ============================================================================
|
|
103
|
+
|
|
104
|
+
{{#if includeGuards}}
|
|
105
|
+
export const router = createBrowserRouter([
|
|
106
|
+
{
|
|
107
|
+
element: <ProtectedRoute />,
|
|
108
|
+
children: routes,
|
|
109
|
+
},
|
|
110
|
+
]);
|
|
111
|
+
{{else}}
|
|
112
|
+
export const router = createBrowserRouter(routes);
|
|
113
|
+
{{/if}}
|
|
114
|
+
|
|
115
|
+
export default router;
|
|
116
|
+
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Type Exports
|
|
119
|
+
// ============================================================================
|
|
120
|
+
|
|
121
|
+
export type { RouteObject };
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Get route configuration by NavRoute path
|
|
125
|
+
*/
|
|
126
|
+
export const getRouteConfig = (navRoute: string) => ROUTES[navRoute];
|
|
@@ -59,7 +59,7 @@ Execute incremental SmartStack development using the APEX methodology. This skil
|
|
|
59
59
|
| `{foundation_mode}` | boolean | Foundation mode: entities-only (no services/controllers/frontend). Used by ralph-loop Phase 0. |
|
|
60
60
|
| `{app_name}` | string | Application name |
|
|
61
61
|
| `{module_code}` | string | Module code |
|
|
62
|
-
| `{sections}` | object[] | Sections (
|
|
62
|
+
| `{sections}` | object[] | Sections (required, min 1) with code/labels/icon/displayOrder |
|
|
63
63
|
| `{entities}` | string[] | Main entities to manage (from need-challenge) |
|
|
64
64
|
| `{module_complexity}` | string | "simple-crud", "crud-rules", "crud-workflow", "complex" |
|
|
65
65
|
| `{has_dependencies}` | string | "none", "references", "unknown" |
|
|
@@ -73,6 +73,17 @@ Execute incremental SmartStack development using the APEX methodology. This skil
|
|
|
73
73
|
| `{needs_notification}` | boolean | Notification integration required |
|
|
74
74
|
</state_variables>
|
|
75
75
|
|
|
76
|
+
<state_persistence>
|
|
77
|
+
|
|
78
|
+
**These variables exist only in the conversation context.** There is no file-based persistence between sessions.
|
|
79
|
+
|
|
80
|
+
- Variables are set in step-00 (init) and propagated through subsequent steps via conversation context
|
|
81
|
+
- If the conversation is interrupted, use `-r` (resume) — the model will re-derive state from existing files and git history
|
|
82
|
+
- The `save_mode` (`-s`) flag writes step outputs to `.claude/output/apex/` but this is documentation, not resumable state
|
|
83
|
+
- Delegate mode (`-d`) reads initial state from the PRD file, making it more resilient to interruptions
|
|
84
|
+
|
|
85
|
+
</state_persistence>
|
|
86
|
+
|
|
76
87
|
<entry_point>
|
|
77
88
|
|
|
78
89
|
**FIRST ACTION:** Load `steps/step-00-init.md`
|
|
@@ -84,11 +95,11 @@ Execute incremental SmartStack development using the APEX methodology. This skil
|
|
|
84
95
|
|
|
85
96
|
| Step | File | Model | Purpose |
|
|
86
97
|
|------|------|-------|---------|
|
|
87
|
-
| 00 | `steps/step-00-init.md` | Sonnet | Parse flags, detect application, verify MCP, define hierarchy (4 levels),
|
|
88
|
-
| 01 | `steps/step-01-analyze.md` | Opus | Explore existing code (Agent
|
|
98
|
+
| 00 | `steps/step-00-init.md` | Sonnet | Parse flags, detect application, verify MCP, define hierarchy (4 levels), scope validation |
|
|
99
|
+
| 01 | `steps/step-01-analyze.md` | Opus | Explore existing code (parallel Agent tool or sequential) |
|
|
89
100
|
| 02 | `steps/step-02-plan.md` | Opus | Layer-by-layer plan with skill/MCP mapping |
|
|
90
101
|
| 03 | `steps/step-03-execute.md` | Opus | Orchestrate execution via skills and MCP |
|
|
91
|
-
| 04 | `steps/step-04-examine.md` | Opus | eXamine: MCP validation, build,
|
|
102
|
+
| 04 | `steps/step-04-examine.md` | Opus | eXamine: MCP validation, build, POST-CHECKs, acceptance criteria |
|
|
92
103
|
| 05 | `steps/step-05-deep-review.md` | Opus | Deep Review: adversarial code review (if -x) |
|
|
93
104
|
| 06 | `steps/step-06-resolve.md` | Opus | Fix BLOCKING findings (if any) |
|
|
94
105
|
| 07 | `steps/step-07-tests.md` | Opus | Final Test Sweep: security tests, coverage, remaining failures |
|
|
@@ -98,13 +109,13 @@ Execute incremental SmartStack development using the APEX methodology. This skil
|
|
|
98
109
|
<apex_phases>
|
|
99
110
|
**APEX = Analyze → Plan → Execute → eXamine**
|
|
100
111
|
|
|
101
|
-
| Phase | Step |
|
|
102
|
-
|
|
103
|
-
| *Init* | 00 | Yes | Setup, hierarchy,
|
|
112
|
+
| Phase | Step | Required | Description |
|
|
113
|
+
|-------|------|----------|-------------|
|
|
114
|
+
| *Init* | 00 | Yes | Setup, hierarchy, scope validation, **scope guard** (skipped in `-d` delegate mode) |
|
|
104
115
|
| **A** — Analyze | 01 | Yes | Explore existing code |
|
|
105
116
|
| **P** — Plan | 02 | Yes | File-by-file plan with skill/MCP mapping |
|
|
106
117
|
| **E** — Execute | 03 | Yes | Orchestrate creation via skills and MCP (5 layers: domain, seed, backend, frontend, devdata) |
|
|
107
|
-
| **X** — eXamine | 04 | Yes | 3 MCP tools +
|
|
118
|
+
| **X** — eXamine | 04 | Yes | 3 MCP tools + POST-CHECKs (security + convention + architecture, see post-checks.md), build, acceptance criteria |
|
|
108
119
|
| *Deep Review* | 05 (if -x) | No | Adversarial code review beyond automated checks |
|
|
109
120
|
| *Resolve* | 06 (if BLOCKING) | No | Fix BLOCKING findings |
|
|
110
121
|
| *Final Test Sweep* | 07-08 | **Yes** | Security tests, coverage sweep, remaining failures |
|
|
@@ -115,14 +126,15 @@ Execute incremental SmartStack development using the APEX methodology. This skil
|
|
|
115
126
|
|
|
116
127
|
| File | Purpose | Loaded by | Stays in context for |
|
|
117
128
|
|------|---------|-----------|---------------------|
|
|
118
|
-
| `references/smartstack-api.md` | BaseEntity, interfaces, entity/config/controller patterns | step-01 | step-03 (
|
|
119
|
-
| `references/smartstack-layers.md` | Layer rules, skill/MCP mapping, planning templates, delegate fast path | step-02 | step-03 (
|
|
120
|
-
| `references/
|
|
129
|
+
| `references/smartstack-api.md` | BaseEntity, interfaces, entity/config/controller patterns | step-01 | step-03 L0-L2 (released after L2) |
|
|
130
|
+
| `references/smartstack-layers.md` | Layer rules, skill/MCP mapping, planning templates, delegate fast path | step-02 | step-03 L0-L2 (released after L2) |
|
|
131
|
+
| `references/core-seed-data.md` | Comprehensive seed data templates (navigation, permissions, roles) | step-03 Layer 1 | released after Layer 1 |
|
|
132
|
+
| `references/smartstack-frontend.md` | Frontend patterns, EntityLookup, i18n (sections 1-6) | step-03 Layer 3 (deferred) | step-04 |
|
|
133
|
+
| `references/smartstack-frontend-compliance.md` | Documentation, form testing, compliance gates (sections 7-9) | step-03 Layer 3 (deferred) | step-04 |
|
|
121
134
|
| `references/challenge-questions.md` | Hierarchy rules, challenge questions, delegate mode skip | step-00 | — |
|
|
122
|
-
| `references/core-seed-data.md` | Comprehensive seed data templates (navigation, permissions, roles) | step-03 (ALWAYS for Layer 1) | — |
|
|
123
135
|
| `references/error-classification.md` | Build error diagnosis categories A-F | step-03 (build failure), step-04 | — |
|
|
124
|
-
| `references/
|
|
125
|
-
| `references/post-checks.md` |
|
|
136
|
+
| `references/parallel-execution.md` | Agent tool launch patterns, task coordination, decision matrix | step-01, step-03 (if NOT economy_mode) | — |
|
|
137
|
+
| `references/post-checks.md` | Security + convention + architecture bash checks (MCP tools run first) | step-04 | — |
|
|
126
138
|
|
|
127
139
|
**Context propagation rule:** Files loaded in step N remain in conversation context for step N+1. Steps mark "do NOT re-read" to avoid duplicate reads.
|
|
128
140
|
</reference_files>
|
|
@@ -134,8 +146,9 @@ Execute incremental SmartStack development using the APEX methodology. This skil
|
|
|
134
146
|
- **MCP-first** - Use MCP scaffold/validate tools before manual approaches
|
|
135
147
|
- **Verify MCP at startup** - step-00 checks MCP availability
|
|
136
148
|
- **Layer order** - Layer 0 (domain+infra+migration) → Layer 1 (seed data) → Layer 2 (backend+tests) → Layer 3 (frontend+tests) → Layer 4 (devdata)
|
|
137
|
-
- **Agent
|
|
149
|
+
- **Parallel Agent tool** - Parallel execution for scan (step-01) and within Layer 2/3 (step-03) for multi-entity, unless economy_mode
|
|
138
150
|
- **Tests inline** - Backend tests run after Layer 2, frontend tests run after Layer 3 (max 3 fix iterations each). Step-07 = final sweep (security + coverage).
|
|
151
|
+
- **Exception: seed data** — The templates in core-seed-data.md and person-extension-pattern.md are generated directly because no MCP tool covers seed data creation. This is a documented exception to the "orchestrate, never generate" rule.
|
|
139
152
|
- **Save outputs** if `{save_mode}` = true
|
|
140
153
|
- **Commits per layer** - Atomic commits after each execution layer
|
|
141
154
|
- **Delegate mode** (`-d`): Read PRD context, skip challenge questions, auto+economy mode implied. Used when `/ralph-loop` delegates code generation to `/apex`.
|
|
@@ -171,6 +184,6 @@ Execute incremental SmartStack development using the APEX methodology. This skil
|
|
|
171
184
|
- Build: dotnet build PASS + npm run typecheck PASS (if frontend)
|
|
172
185
|
- Seed data complete as dedicated Layer 1 (navigation, permissions, roles, provider) — impossible to skip
|
|
173
186
|
- Tests inline: backend tests after Layer 2, frontend tests after Layer 3
|
|
174
|
-
- Final test sweep: security tests + coverage >= 80% + 100% pass rate
|
|
187
|
+
- Final test sweep: security tests + coverage >= 80% + target 100% pass rate (acceptable fallback: skip with TODO after max retries)
|
|
175
188
|
- Commits atomic per layer
|
|
176
189
|
</success_criteria>
|
|
@@ -52,7 +52,7 @@ Write back to {delegate_prd_path}
|
|
|
52
52
|
|
|
53
53
|
## MCP Tools Reference
|
|
54
54
|
|
|
55
|
-
###
|
|
55
|
+
### Required (every execution)
|
|
56
56
|
|
|
57
57
|
| Tool | Purpose | Step |
|
|
58
58
|
|------|---------|------|
|
|
@@ -74,14 +74,14 @@ Write back to {delegate_prd_path}
|
|
|
74
74
|
- Section: `human-resources.employees.departments.read` (3+1)
|
|
75
75
|
- Resource: `human-resources.employees.departments.export.execute` (4+1)
|
|
76
76
|
|
|
77
|
-
>
|
|
77
|
+
> Permission codes use the SAME kebab-case segments as NavRoute codes.
|
|
78
78
|
> Every dot-separated segment in a permission path is a navigation entity code.
|
|
79
|
-
> Multi-word codes
|
|
79
|
+
> Multi-word codes must use kebab-case: `human-resources`, NOT `humanresources`.
|
|
80
80
|
>
|
|
81
81
|
> SmartStack.app reference: `support-client.my-tickets.read`, `administration.email-templates.read`
|
|
82
82
|
>
|
|
83
|
-
>
|
|
84
|
-
>
|
|
83
|
+
> Do not use: `humanresources.employees.read` (concatenated — no kebab-case)
|
|
84
|
+
> Correct: `human-resources.employees.read` (kebab-case — matches NavRoute)
|
|
85
85
|
|
|
86
86
|
### Generation (step-03)
|
|
87
87
|
|
|
@@ -93,7 +93,7 @@ Write back to {delegate_prd_path}
|
|
|
93
93
|
| `scaffold_api_client` | Generate TypeScript API client | Frontend changes |
|
|
94
94
|
| `scaffold_routes` | Generate React Router routes | Frontend changes |
|
|
95
95
|
|
|
96
|
-
### eXamine (step-04) —
|
|
96
|
+
### eXamine (step-04) — POST-CHECKs (see post-checks.md)
|
|
97
97
|
|
|
98
98
|
| Tool | Purpose | Condition |
|
|
99
99
|
|------|---------|-----------|
|
|
@@ -101,10 +101,10 @@ Write back to {delegate_prd_path}
|
|
|
101
101
|
| `validate_frontend_routes` | Validate route/layout alignment | Frontend changes |
|
|
102
102
|
| `validate_security` | Check security patterns | API changes |
|
|
103
103
|
|
|
104
|
-
**Key
|
|
105
|
-
- **#8:** Forms must be full pages —
|
|
104
|
+
**Key POST-CHECKs (most common failures):**
|
|
105
|
+
- **#8:** Forms must be full pages — no modals/dialogs
|
|
106
106
|
- **#13:** No hardcoded Tailwind colors — use CSS variables only
|
|
107
|
-
- **#6+27:** i18n in separate `locales/{lang}/{module}.json` —
|
|
107
|
+
- **#6+27:** i18n in separate `locales/{lang}/{module}.json` — not embedded in .ts
|
|
108
108
|
- **#10:** Form pages must have `.test.tsx` companion files
|
|
109
109
|
- **#28:** Pages must use `useTranslation` — no hardcoded strings
|
|
110
110
|
|
|
@@ -132,6 +132,59 @@ Write back to {delegate_prd_path}
|
|
|
132
132
|
|
|
133
133
|
---
|
|
134
134
|
|
|
135
|
+
## Severity Labels
|
|
136
|
+
|
|
137
|
+
| Label | Meaning | When to use |
|
|
138
|
+
|-------|---------|-------------|
|
|
139
|
+
| **BLOCKING** | Build fails or security vulnerability. Cannot proceed. | `dotnet build` / `npm typecheck` failure, OWASP violation, tenant isolation bypass |
|
|
140
|
+
| **CRITICAL** | Functionally broken at runtime but compiles. | Missing DI registration, wrong route, empty translations at runtime |
|
|
141
|
+
| **WARNING** | Suboptimal but works. Should fix before merge. | Missing tests, non-canonical naming, cosmetic issues |
|
|
142
|
+
| **INFO** | Suggestion or best practice. Non-blocking. | Performance tips, alternative patterns |
|
|
143
|
+
|
|
144
|
+
> **Rule:** Only use BLOCKING for issues that prevent compilation or create security vulnerabilities.
|
|
145
|
+
> CRITICAL is for runtime failures. Everything else is WARNING or INFO.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## MCP Degraded Mode
|
|
150
|
+
|
|
151
|
+
> When MCP is unavailable, fall back to manual patterns from reference files.
|
|
152
|
+
|
|
153
|
+
| MCP Tool | Fallback |
|
|
154
|
+
|----------|----------|
|
|
155
|
+
| `validate_conventions` | Manual review against `smartstack-api.md` patterns |
|
|
156
|
+
| `scaffold_extension` | Create files manually following `smartstack-api.md` entity/service/controller patterns |
|
|
157
|
+
| `suggest_migration` | Name format: `{context}_v{version}_{sequence}_{Description}` (see existing migrations for version) |
|
|
158
|
+
| `generate_permissions` | Write `HasData()` code manually following `core-seed-data.md` permission section |
|
|
159
|
+
| `scaffold_routes` | Create `applicationRoutes` array manually following `smartstack-frontend.md` §1 |
|
|
160
|
+
| `validate_frontend_routes` | Run POST-CHECK bash scripts from `post-checks.md` |
|
|
161
|
+
| `validate_security` | Run security POST-CHECKs S1-S6 from `post-checks.md` |
|
|
162
|
+
| `check_migrations` | Run `dotnet ef migrations has-pending-model-changes` manually |
|
|
163
|
+
| `scaffold_tests` | Create test files manually following `smartstack-frontend-compliance.md` §8 patterns |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Context Bridge for Skill Delegation
|
|
168
|
+
|
|
169
|
+
> When delegating to `/controller`, `/ui-components`, `/application`, etc., pass this context block to ensure the skill has enough information.
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
Context for {skill_name}:
|
|
173
|
+
- Application: {app_name}
|
|
174
|
+
- Module: {module_code}
|
|
175
|
+
- NavRoute: {navRoute} (e.g., "human-resources.employees")
|
|
176
|
+
- Entity: {entity_name} with properties: {key_properties}
|
|
177
|
+
- Tenant mode: {strict|optional|scoped|none}
|
|
178
|
+
- CSS: Use CSS variables ONLY (see smartstack-frontend.md §4)
|
|
179
|
+
- I18n: 4 languages (fr, en, it, de), namespace: {module-kebab}
|
|
180
|
+
- Forms: Full pages with own routes, ZERO modals/drawers
|
|
181
|
+
- FK fields: Use EntityLookup component (see smartstack-frontend.md §6)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
> Adjust the template based on the skill: backend skills don't need CSS/i18n context, frontend skills don't need tenant mode details.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
135
188
|
## Existing Skills Delegation
|
|
136
189
|
|
|
137
190
|
| Skill | When to delegate |
|
|
@@ -12,7 +12,7 @@ For each entity found (or to be created), identify FK relationships:
|
|
|
12
12
|
- Record: `{ entity, fkProperty, targetEntity, isRequired }`
|
|
13
13
|
|
|
14
14
|
**Why:** FK fields drive two critical requirements:
|
|
15
|
-
1. **Frontend:** Each FK field MUST use `<EntityLookup />` (
|
|
15
|
+
1. **Frontend:** Each FK field MUST use `<EntityLookup />` (not `<input>`, not `<select>`)
|
|
16
16
|
2. **Backend:** Each target entity's GetAll MUST support `?search=` parameter + return `PaginatedResult<T>`
|
|
17
17
|
|
|
18
18
|
See `references/smartstack-frontend.md` section 6 for EntityLookup patterns.
|
|
@@ -28,7 +28,7 @@ For each entity found (or to be created), determine the `tenantMode`:
|
|
|
28
28
|
| `strict` | Data belongs to one tenant | Employee, Order, Invoice | `TenantId == current` |
|
|
29
29
|
| `optional` | Can be shared or tenant-specific | Department, Currency, JobTitle | `TenantId == current OR TenantId == null` |
|
|
30
30
|
| `scoped` | Explicit scope rules | Settings, Workflow, EmailTemplate | `TenantId == current AND Scope == current` |
|
|
31
|
-
| `none` |
|
|
31
|
+
| `none` | Shared across all tenants (not filtered) | Navigation, Permission, User | No TenantId |
|
|
32
32
|
|
|
33
33
|
**Why:** Tenant mode drives EF query filters, seed data generation, and API access control.
|
|
34
34
|
|
|
@@ -41,7 +41,7 @@ For each entity found (or to be created), determine the `tenantMode`:
|
|
|
41
41
|
For each entity found (or to be created), identify code generation needs using the following **priority order**:
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
PRIORITY 1 — User choice from
|
|
44
|
+
PRIORITY 1 — User choice from scope validation (step-00):
|
|
45
45
|
IF {code_patterns} is set (from step-00 section 5c):
|
|
46
46
|
→ Use {code_patterns} for each entity
|
|
47
47
|
→ This is the user's explicit choice — always takes precedence
|
|
@@ -51,7 +51,7 @@ PRIORITY 2 — feature.json (from /business-analyse):
|
|
|
51
51
|
→ Use codePattern config from feature.json (strategy, prefix, digits, etc.)
|
|
52
52
|
→ Record in analysis: entity has auto-generated code
|
|
53
53
|
|
|
54
|
-
PRIORITY 3 — Heuristic fallback (delegate mode
|
|
54
|
+
PRIORITY 3 — Heuristic fallback (delegate mode only):
|
|
55
55
|
IF delegate_mode AND no code pattern from Priority 1 or 2:
|
|
56
56
|
→ Apply heuristic default based on entity name:
|
|
57
57
|
Invoice/Order/Receipt/PurchaseOrder → timestamp-daily
|
|
@@ -59,7 +59,7 @@ PRIORITY 3 — Heuristic fallback (delegate mode ONLY):
|
|
|
59
59
|
Contract/Policy/Agreement → year-sequential
|
|
60
60
|
Category/Status/Type (reference data) → uuid-short
|
|
61
61
|
Employee/Customer/Project → sequential
|
|
62
|
-
→
|
|
62
|
+
→ Note: heuristic applied — PRD was incomplete
|
|
63
63
|
|
|
64
64
|
FALLBACK — Manual (safest default):
|
|
65
65
|
IF none of the above apply:
|
|
@@ -67,12 +67,14 @@ FALLBACK — Manual (safest default):
|
|
|
67
67
|
→ No auto-generation, no ICodeGenerator injection
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
**
|
|
70
|
+
**Important:** In interactive mode (no `-d` flag), heuristics are never applied silently. The user is always asked via scope validation (step-00 section 5c). Heuristics only serve as fallback in delegate mode when the PRD is incomplete.
|
|
71
71
|
|
|
72
72
|
**Why:** Code generation strategy drives CreateDto structure, service injection (ICodeGenerator<T>), and DI registration.
|
|
73
73
|
|
|
74
74
|
**Reference:** See `references/code-generation.md` for strategy table, volume-to-digits calculation, and backend patterns.
|
|
75
75
|
|
|
76
|
+
|
|
77
|
+
|
|
76
78
|
---
|
|
77
79
|
|
|
78
80
|
## Gap Analysis
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
> **Referenced by:** step-00-init.md
|
|
4
4
|
> Question templates for context detection, hierarchy validation, and need challenging.
|
|
5
|
-
>
|
|
5
|
+
> Consolidates all challenge questions and hierarchy validation in a single file.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 4-Level Navigation Hierarchy (
|
|
9
|
+
## 4-Level Navigation Hierarchy (MANDATORY)
|
|
10
10
|
|
|
11
11
|
SmartStack uses a **4-level navigation hierarchy:**
|
|
12
12
|
- **Level 1: Application** — e.g., "HumanResources", "ProjectManagement"
|
|
@@ -14,7 +14,7 @@ SmartStack uses a **4-level navigation hierarchy:**
|
|
|
14
14
|
- **Level 3: Section** — e.g., "List", "Dashboard", "Approval"
|
|
15
15
|
- **Level 4: Resource** — e.g., "Export", "Settings" (optional)
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Every module MUST have at least one section. A module without sections produces an incomplete navigation tree, broken seed data, and missing frontend routes.
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -61,7 +61,7 @@ questions:
|
|
|
61
61
|
|
|
62
62
|
## 4c. Section Selection
|
|
63
63
|
|
|
64
|
-
>
|
|
64
|
+
> This question MUST be asked. `{sections}` MUST contain at least one entry before proceeding.
|
|
65
65
|
|
|
66
66
|
Infer section suggestions from:
|
|
67
67
|
1. Task description (extract nouns/concepts that suggest functional sub-areas)
|
|
@@ -82,7 +82,7 @@ questions:
|
|
|
82
82
|
multiSelect: true
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
**Validation
|
|
85
|
+
**Validation:**
|
|
86
86
|
```
|
|
87
87
|
IF {sections}.length == 0:
|
|
88
88
|
DISPLAY: "Every module must have at least one section. Please select or define at least one."
|