@atlashub/smartstack-cli 4.80.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.documentation/agents.html +124 -585
- package/.documentation/ba-develop.html +852 -0
- package/.documentation/ba-skills.html +465 -0
- package/.documentation/business-analyse.html +385 -1570
- package/.documentation/cli-commands.html +162 -799
- package/.documentation/commands.html +902 -1338
- package/.documentation/css/styles.css +34 -1
- package/.documentation/efcore.html +161 -2599
- package/.documentation/gitflow.html +62 -105
- package/.documentation/hooks.html +94 -343
- package/.documentation/index.html +116 -385
- package/.documentation/init.html +217 -1566
- package/.documentation/installation.html +121 -1470
- package/.documentation/license.html +90 -450
- package/.documentation/ralph-loop.html +105 -602
- package/dist/index.js +9421 -79036
- package/dist/index.js.map +1 -1
- package/package.json +5 -20
- package/scripts/generate-docs/README.md +87 -0
- package/scripts/generate-docs/index.ts +175 -0
- package/scripts/generate-docs/lib/context-builder.ts +81 -0
- package/scripts/generate-docs/lib/handlebars-setup.ts +162 -0
- package/scripts/generate-docs/lib/markdown-parser.ts +86 -0
- package/scripts/generate-docs/lib/sidebar-builder.ts +80 -0
- package/scripts/generate-docs/lib/skill-parser.ts +171 -0
- package/scripts/generate-docs/lib/stats.ts +32 -0
- package/scripts/generate-docs/lib/version.ts +17 -0
- package/scripts/generate-docs/templates/layout.hbs +33 -0
- package/scripts/generate-docs/templates/pages/_generic.hbs +12 -0
- package/scripts/generate-docs/templates/pages/ba-develop.hbs +10 -0
- package/scripts/generate-docs/templates/pages/ba-skills.hbs +8 -0
- package/scripts/generate-docs/templates/pages/business-analyse.hbs +1 -0
- package/scripts/generate-docs/templates/pages/commands.hbs +13 -0
- package/scripts/generate-docs/templates/pages/gitflow.hbs +2164 -0
- package/scripts/generate-docs/templates/pages/index.hbs +5 -0
- package/scripts/generate-docs/templates/partials/breadcrumb.hbs +6 -0
- package/scripts/generate-docs/templates/partials/header.hbs +22 -0
- package/scripts/generate-docs/templates/partials/sidebar.hbs +32 -0
- package/scripts/generate-docs/templates/partials/skill-card.hbs +22 -0
- package/scripts/generate-docs/templates/partials/skill-grid.hbs +5 -0
- package/scripts/generate-docs/templates/partials/skill-table.hbs +18 -0
- package/scripts/generate-docs/templates/partials/stats-bar.hbs +20 -0
- package/scripts/test-migration-program-cs.mts +94 -0
- package/templates/agents/explore-codebase.md +2 -3
- package/templates/agents/explore-docs.md +5 -5
- package/templates/hooks/hooks.json +0 -9
- package/templates/project/Program.cs.template +17 -5
- package/templates/project/appsettings.json.template +208 -195
- package/templates/project/claude-md/api.CLAUDE.md.template +27 -2
- package/templates/project/patch-smartstack-theme.cjs.template +42 -0
- package/templates/scripts/statusline/README.md +47 -0
- package/templates/scripts/statusline/index.js +224 -0
- package/templates/skills/CLAUDE.md +235 -0
- package/templates/skills/ba-develop/SKILL.md +310 -0
- package/templates/skills/ba-develop/cli/compute-page-diff/__tests__/compute-page-diff.test.ts +177 -0
- package/templates/skills/ba-develop/cli/compute-page-diff/compute-diff.ts +51 -0
- package/templates/skills/ba-develop/cli/compute-page-diff/disk-drift.ts +55 -0
- package/templates/skills/ba-develop/cli/compute-page-diff/index.ts +89 -0
- package/templates/skills/ba-develop/cli/compute-page-diff/scan-pagespecs.ts +115 -0
- package/templates/skills/ba-develop/cli/compute-page-diff/types.ts +63 -0
- package/templates/skills/ba-develop/cli/compute-page-diff/validate.ts +20 -0
- package/templates/skills/ba-develop/cli/update-snapshot/__tests__/update-snapshot.test.ts +73 -0
- package/templates/skills/ba-develop/cli/update-snapshot/execute.ts +24 -0
- package/templates/skills/ba-develop/cli/update-snapshot/index.ts +61 -0
- package/templates/skills/ba-develop/cli/update-snapshot/types.ts +40 -0
- package/templates/skills/ba-develop/cli/update-snapshot/validate.ts +17 -0
- package/templates/skills/ba-develop/references/anti-patterns.md +101 -0
- package/templates/skills/ba-develop/references/auto-healing.md +191 -0
- package/templates/skills/ba-develop/references/commit-checkpoints.md +79 -0
- package/templates/skills/ba-develop/references/gates.md +380 -0
- package/templates/skills/ba-develop/references/output-contract.md +95 -0
- package/templates/skills/ba-develop/references/phases-detail.md +592 -0
- package/templates/skills/ba-develop-plan/SKILL.md +239 -0
- package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/__tests__/validate.test.ts +225 -0
- package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/index.ts +102 -0
- package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/types.ts +121 -0
- package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/validate.ts +261 -0
- package/templates/skills/business-analyse/_workflow/README.md +34 -0
- package/templates/skills/business-analyse/_workflow/ba-files.md +174 -0
- package/templates/skills/business-analyse/_workflow/code-discipline.md +104 -0
- package/templates/skills/business-analyse/_workflow/communication.md +63 -0
- package/templates/skills/business-analyse/_workflow/completeAuto-discipline.md +79 -0
- package/templates/skills/business-analyse/_workflow/context-documents.md +45 -0
- package/templates/skills/business-analyse/_workflow/doc-templates.md +318 -0
- package/templates/skills/business-analyse/audit-actors/SKILL.md +97 -0
- package/templates/skills/business-analyse/audit-cross-dimension/SKILL.md +127 -0
- package/templates/skills/business-analyse/audit-cross-ref-code/SKILL.md +119 -0
- package/templates/skills/business-analyse/audit-data-model/SKILL.md +343 -0
- package/templates/skills/business-analyse/audit-menu/SKILL.md +97 -0
- package/templates/skills/business-analyse/audit-prd/SKILL.md +479 -0
- package/templates/skills/business-analyse/audit-pre-dev/SKILL.md +135 -0
- package/templates/skills/business-analyse/audit-rbac/SKILL.md +93 -0
- package/templates/skills/business-analyse/audit-rules/SKILL.md +182 -0
- package/templates/skills/business-analyse/audit-screens/SKILL.md +169 -0
- package/templates/skills/business-analyse/audit-sections/SKILL.md +174 -0
- package/templates/skills/business-analyse/audit-use-cases/SKILL.md +245 -0
- package/templates/skills/business-analyse/create-actors/SKILL.md +129 -0
- package/templates/skills/business-analyse/create-ba-order/SKILL.md +182 -0
- package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/__tests__/generate.test.ts +151 -0
- package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/__tests__/graph.test.ts +173 -0
- package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/generate.ts +273 -0
- package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/graph.ts +193 -0
- package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/index.ts +108 -0
- package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/types.ts +106 -0
- package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/validate.ts +79 -0
- package/templates/skills/business-analyse/create-business-rules/SKILL.md +302 -0
- package/templates/skills/business-analyse/create-business-rules/levels/access-rules.md +105 -0
- package/templates/skills/business-analyse/create-business-rules/levels/elaborate.md +193 -0
- package/templates/skills/business-analyse/create-business-rules/levels/identify.md +157 -0
- package/templates/skills/business-analyse/create-business-rules/levels/link.md +86 -0
- package/templates/skills/business-analyse/create-data-model/SKILL.md +319 -0
- package/templates/skills/business-analyse/create-data-model/levels/attributes.md +130 -0
- package/templates/skills/business-analyse/create-data-model/levels/identify.md +100 -0
- package/templates/skills/business-analyse/create-data-model/levels/relationships.md +97 -0
- package/templates/skills/business-analyse/create-menu/SKILL.md +191 -0
- package/templates/skills/business-analyse/create-menu/levels/applications.md +85 -0
- package/templates/skills/business-analyse/create-menu/levels/modules.md +81 -0
- package/templates/skills/business-analyse/create-menu/levels/resources.md +75 -0
- package/templates/skills/business-analyse/create-menu/levels/sections.md +82 -0
- package/templates/skills/business-analyse/create-plan-development/SKILL.md +93 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/__tests__/graph.test.ts +271 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/__tests__/parse.test.ts +177 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/generate.ts +317 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/graph.ts +233 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/index.ts +106 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/parse.ts +346 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/types.ts +160 -0
- package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/validate.ts +118 -0
- package/templates/skills/business-analyse/create-prd/SKILL.md +228 -0
- package/templates/skills/business-analyse/create-rbac/SKILL.md +255 -0
- package/templates/skills/business-analyse/create-rbac/levels/detail.md +86 -0
- package/templates/skills/business-analyse/create-rbac/levels/discovery.md +63 -0
- package/templates/skills/business-analyse/create-rbac/levels/review.md +66 -0
- package/templates/skills/business-analyse/create-screen/SKILL.md +386 -0
- package/templates/skills/business-analyse/create-screen/levels/dashboard-screens.md +94 -0
- package/templates/skills/business-analyse/create-screen/levels/form-screens.md +142 -0
- package/templates/skills/business-analyse/create-screen/levels/home-screens.md +151 -0
- package/templates/skills/business-analyse/create-screen/levels/kanban-screens.md +86 -0
- package/templates/skills/business-analyse/create-screen/levels/list-screens.md +134 -0
- package/templates/skills/business-analyse/create-screen/references/post-check.md +101 -0
- package/templates/skills/business-analyse/create-screen/references/react-templates.md +252 -0
- package/templates/skills/business-analyse/create-screen/references/smartcomponents.md +419 -0
- package/templates/skills/business-analyse/create-screen/references/type-mapping.md +150 -0
- package/templates/skills/business-analyse/create-use-case/SKILL.md +347 -0
- package/templates/skills/business-analyse/create-use-case/levels/detail.md +136 -0
- package/templates/skills/business-analyse/create-use-case/levels/discovery.md +110 -0
- package/templates/skills/business-analyse/loop/SKILL.md +401 -0
- package/templates/skills/business-analyse/modeling-detail/SKILL.md +241 -0
- package/templates/skills/business-analyse/modeling-inventory/SKILL.md +174 -0
- package/templates/skills/business-analyse/reconcile-menu/SKILL.md +180 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/clean.test.ts +266 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/detect.test.ts +231 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/scan.test.ts +154 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/clean.ts +319 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/detect.ts +256 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/index.ts +126 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/scan.ts +175 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/types.ts +136 -0
- package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/validate.ts +32 -0
- package/templates/skills/check-version/SKILL.md +196 -196
- package/templates/skills/cli-app-sync/SKILL.md +9 -9
- package/templates/skills/cli-app-sync/references/comparison-map.md +4 -4
- package/templates/skills/cli-app-sync/references/diff-entities.md +6 -6
- package/templates/skills/conventions/SKILL.md +64 -0
- package/templates/skills/dev-start/SKILL.md +190 -237
- package/templates/skills/development/SKILL.md +87 -0
- package/templates/skills/development/audit/SKILL.md +156 -0
- package/templates/skills/development/audit/routing-dynamic/SKILL.md +196 -0
- package/templates/skills/development/audit-dev-api/SKILL.md +331 -0
- package/templates/skills/development/audit-dev-api/cli/audit-dev-api/__tests__/end-to-end.test.ts +364 -0
- package/templates/skills/development/audit-dev-api/cli/audit-dev-api/audit.ts +646 -0
- package/templates/skills/development/audit-dev-api/cli/audit-dev-api/index.ts +140 -0
- package/templates/skills/development/audit-dev-api/cli/audit-dev-api/types.ts +158 -0
- package/templates/skills/development/audit-dev-api/cli/audit-dev-api/validate.ts +45 -0
- package/templates/skills/development/audit-dev-core/SKILL.md +182 -0
- package/templates/skills/development/audit-dev-data/SKILL.md +195 -0
- package/templates/skills/development/audit-dev-domain/SKILL.md +184 -0
- package/templates/skills/development/audit-dev-frontend/SKILL.md +530 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/__tests__/end-to-end.test.ts +202 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/apply.ts +31 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/audit.ts +734 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/index.ts +125 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/types.ts +165 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/validate.ts +36 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/__tests__/dev-ui-022.test.ts +193 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/apply.ts +374 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/audit.ts +1126 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/index.ts +141 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/types.ts +218 -0
- package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/validate.ts +80 -0
- package/templates/skills/development/audit-dev-tests/SKILL.md +82 -0
- package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/__tests__/audit.test.ts +220 -0
- package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/audit.ts +185 -0
- package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/index.ts +84 -0
- package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/types.ts +48 -0
- package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/validate.ts +36 -0
- package/templates/skills/development/audit-dev-wire/SKILL.md +144 -0
- package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/__tests__/audit.test.ts +171 -0
- package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/audit.ts +307 -0
- package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/index.ts +139 -0
- package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/types.ts +110 -0
- package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/validate.ts +16 -0
- package/templates/skills/development/backend/business-layer/SKILL.md +255 -0
- package/templates/skills/development/backend/business-layer/cli/scaffold-business/__tests__/generate.test.ts +254 -0
- package/templates/skills/development/backend/business-layer/cli/scaffold-business/generate.ts +842 -0
- package/templates/skills/development/backend/business-layer/cli/scaffold-business/index.ts +56 -0
- package/templates/skills/development/backend/business-layer/cli/scaffold-business/types.ts +112 -0
- package/templates/skills/development/backend/business-layer/cli/scaffold-business/validate.ts +24 -0
- package/templates/skills/development/backend/controller/SKILL.md +154 -0
- package/templates/skills/development/backend/controller/cli/scaffold-controller/__tests__/generate.test.ts +345 -0
- package/templates/skills/development/backend/controller/cli/scaffold-controller/generate.ts +280 -0
- package/templates/skills/development/backend/controller/cli/scaffold-controller/index.ts +49 -0
- package/templates/skills/development/backend/controller/cli/scaffold-controller/types.ts +72 -0
- package/templates/skills/development/backend/controller/cli/scaffold-controller/validate.ts +14 -0
- package/templates/skills/development/backend/core-seed/SKILL.md +177 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/build-spec.test.ts +163 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/generate.test.ts +330 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/validate.test.ts +126 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/build-spec.ts +287 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/generate.ts +826 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/index.ts +188 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/types.ts +163 -0
- package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/validate.ts +129 -0
- package/templates/skills/development/backend/data-layer/SKILL.md +163 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-entity/__tests__/generate.test.ts +155 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-entity/generate.ts +232 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-entity/index.ts +34 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-entity/types.ts +60 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-entity/validate.ts +42 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-migration/execute.ts +13 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-migration/index.ts +25 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-migration/types.ts +11 -0
- package/templates/skills/development/backend/data-layer/cli/scaffold-migration/validate.ts +9 -0
- package/templates/skills/development/backend/screen-controller/SKILL.md +169 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/generate.test.ts +329 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/hub-views.test.ts +105 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/parse-pagespec.test.ts +137 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/generate.ts +437 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/index.ts +108 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/parse-pagespec.ts +104 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/types.ts +101 -0
- package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/validate.ts +26 -0
- package/templates/skills/development/backend/seed-data/SKILL.md +91 -0
- package/templates/skills/development/backend/seed-data/cli/scaffold-seed/generate.ts +471 -0
- package/templates/skills/development/backend/seed-data/cli/scaffold-seed/index.ts +74 -0
- package/templates/skills/development/backend/seed-data/cli/scaffold-seed/types.ts +104 -0
- package/templates/skills/development/backend/seed-data/cli/scaffold-seed/validate.ts +63 -0
- package/templates/skills/development/backend/structure/SKILL.md +47 -0
- package/templates/skills/development/debug/SKILL.md +62 -0
- package/templates/skills/development/debug/audit-bug/SKILL.md +185 -0
- package/templates/skills/development/debug/backend/SKILL.md +114 -0
- package/templates/skills/development/debug/discuss-bug/SKILL.md +193 -0
- package/templates/skills/development/debug/fix-bug/SKILL.md +172 -0
- package/templates/skills/development/debug/frontend/SKILL.md +215 -0
- package/templates/skills/development/frontend/api-client/SKILL.md +158 -0
- package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/generate.test.ts +1180 -0
- package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/screen-strata-contract.test.ts +261 -0
- package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/url-parity.test.ts +201 -0
- package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/generate.ts +875 -0
- package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/index.ts +36 -0
- package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/types.ts +251 -0
- package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/validate.ts +10 -0
- package/templates/skills/development/frontend/auth/SKILL.md +77 -0
- package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/generate.ts +306 -0
- package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/index.ts +179 -0
- package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/types.ts +22 -0
- package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/validate.ts +37 -0
- package/templates/skills/development/frontend/component/SKILL.md +347 -0
- package/templates/skills/development/frontend/component/cli/scaffold-component/__tests__/generate.test.ts +1237 -0
- package/templates/skills/development/frontend/component/cli/scaffold-component/generate.ts +1923 -0
- package/templates/skills/development/frontend/component/cli/scaffold-component/index.ts +155 -0
- package/templates/skills/development/frontend/component/cli/scaffold-component/types.ts +290 -0
- package/templates/skills/development/frontend/component/cli/scaffold-component/validate.ts +16 -0
- package/templates/skills/development/frontend/component/cli/validate-page/__tests__/execute.test.ts +231 -0
- package/templates/skills/development/frontend/component/cli/validate-page/execute.ts +598 -0
- package/templates/skills/development/frontend/component/cli/validate-page/index.ts +88 -0
- package/templates/skills/development/frontend/component/cli/validate-page/types.ts +58 -0
- package/templates/skills/development/frontend/component/cli/validate-page/validate.ts +28 -0
- package/templates/skills/development/frontend/component/patterns/README.md +42 -0
- package/templates/skills/development/frontend/component/patterns/detail-page.md +133 -0
- package/templates/skills/development/frontend/component/patterns/entity-card.md +148 -0
- package/templates/skills/development/frontend/component/patterns/form-page.md +191 -0
- package/templates/skills/development/frontend/component/patterns/kanban-board.md +195 -0
- package/templates/skills/development/frontend/component/patterns/list-page.md +175 -0
- package/templates/skills/development/frontend/extension-config/SKILL.md +108 -0
- package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/generate.ts +64 -0
- package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/index.ts +70 -0
- package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/types.ts +27 -0
- package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/validate.ts +16 -0
- package/templates/skills/development/frontend/layout/SKILL.md +52 -0
- package/templates/skills/development/frontend/layout/cli/scaffold-layout/__tests__/generate.test.ts +66 -0
- package/templates/skills/development/frontend/layout/cli/scaffold-layout/generate.ts +175 -0
- package/templates/skills/development/frontend/layout/cli/scaffold-layout/index.ts +104 -0
- package/templates/skills/development/frontend/layout/cli/scaffold-layout/types.ts +17 -0
- package/templates/skills/development/frontend/layout/cli/scaffold-layout/validate.ts +37 -0
- package/templates/skills/development/frontend/routes/SKILL.md +152 -0
- package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/generate.ts +216 -0
- package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/index.ts +121 -0
- package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/types.ts +69 -0
- package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/validate.ts +23 -0
- package/templates/skills/development/frontend/routes/cli/scaffold-routes/__tests__/generate.test.ts +292 -0
- package/templates/skills/development/frontend/routes/cli/scaffold-routes/generate.ts +270 -0
- package/templates/skills/development/frontend/routes/cli/scaffold-routes/index.ts +42 -0
- package/templates/skills/development/frontend/routes/cli/scaffold-routes/types.ts +114 -0
- package/templates/skills/development/frontend/routes/cli/scaffold-routes/validate.ts +68 -0
- package/templates/skills/development/frontend/structure/SKILL.md +119 -0
- package/templates/skills/development/frontend/theme/SKILL.md +48 -0
- package/templates/skills/development/frontend/theme/cli/scaffold-theme/__tests__/generate.test.ts +53 -0
- package/templates/skills/development/frontend/theme/cli/scaffold-theme/generate.ts +129 -0
- package/templates/skills/development/frontend/theme/cli/scaffold-theme/index.ts +102 -0
- package/templates/skills/development/frontend/theme/cli/scaffold-theme/types.ts +48 -0
- package/templates/skills/development/frontend/theme/cli/scaffold-theme/validate.ts +37 -0
- package/templates/skills/development/frontend/ui-polish/SKILL.md +192 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r18.test.ts +153 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r19.test.ts +307 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r20.test.ts +167 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/shared-scan.test.ts +262 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/apply.ts +580 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/audit.ts +825 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/index.ts +133 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/types.ts +121 -0
- package/templates/skills/development/frontend/ui-polish/cli/ui-polish/validate.ts +73 -0
- package/templates/skills/development/frontend/ui-polish/tokens.json +292 -0
- package/templates/skills/development/frontend/ui-primitives/SKILL.md +88 -0
- package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/__tests__/generate.test.ts +158 -0
- package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/generate.ts +345 -0
- package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/index.ts +142 -0
- package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/types.ts +27 -0
- package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/validate.ts +37 -0
- package/templates/skills/development/run/SKILL.md +61 -0
- package/templates/skills/development/run/backend/SKILL.md +106 -0
- package/templates/skills/development/run/frontend/SKILL.md +116 -0
- package/templates/skills/development/smoke-test/SKILL.md +99 -0
- package/templates/skills/development/smoke-test/cli/run-smoke/execute.ts +424 -0
- package/templates/skills/development/smoke-test/cli/run-smoke/index.ts +75 -0
- package/templates/skills/development/smoke-test/cli/run-smoke/types.ts +100 -0
- package/templates/skills/development/testing/SKILL.md +148 -0
- package/templates/skills/development/testing/cli/scaffold-tests/generate.ts +530 -0
- package/templates/skills/development/testing/cli/scaffold-tests/index.ts +83 -0
- package/templates/skills/development/testing/cli/scaffold-tests/types.ts +51 -0
- package/templates/skills/development/testing/cli/scaffold-tests/validate.ts +33 -0
- package/templates/skills/development/testing/cli/scaffold-tests-from-ac/__tests__/generate.test.ts +188 -0
- package/templates/skills/development/testing/cli/scaffold-tests-from-ac/__tests__/parse-ac.test.ts +191 -0
- package/templates/skills/development/testing/cli/scaffold-tests-from-ac/generate.ts +190 -0
- package/templates/skills/development/testing/cli/scaffold-tests-from-ac/index.ts +138 -0
- package/templates/skills/development/testing/cli/scaffold-tests-from-ac/parse-ac.ts +172 -0
- package/templates/skills/development/testing/cli/scaffold-tests-from-ac/types.ts +104 -0
- package/templates/skills/development/testing/cli/scaffold-tests-from-ac/validate.ts +57 -0
- package/templates/skills/development/testing/cli/test-report/execute.ts +140 -0
- package/templates/skills/development/testing/cli/test-report/index.ts +96 -0
- package/templates/skills/development/testing/cli/test-report/types.ts +52 -0
- package/templates/skills/development/testing/cli/test-report/validate.ts +26 -0
- package/templates/skills/development/testing/fix-build/SKILL.md +81 -0
- package/templates/skills/development/testing/smoke-http/SKILL.md +123 -0
- package/templates/skills/development/testing/smoke-http/cli/smoke-http/execute.ts +129 -0
- package/templates/skills/development/testing/smoke-http/cli/smoke-http/index.ts +113 -0
- package/templates/skills/development/testing/smoke-http/cli/smoke-http/types.ts +62 -0
- package/templates/skills/development/testing/smoke-http/cli/smoke-http/validate.ts +36 -0
- package/templates/skills/development/testing/ui-test/SKILL.md +128 -0
- package/templates/skills/development/testing/ui-test/cli/build-manifest/generate.ts +129 -0
- package/templates/skills/development/testing/ui-test/cli/build-manifest/index.ts +80 -0
- package/templates/skills/development/testing/ui-test/cli/build-manifest/types.ts +72 -0
- package/templates/skills/development/testing/ui-test/cli/build-manifest/validate.ts +44 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/execute.ts +136 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/index.ts +75 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/lib/dev-browser-driver.ts +250 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/delete.js.hbs +83 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/detail.js.hbs +87 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/edit.js.hbs +91 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/form-submit.js.hbs +82 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/list.js.hbs +125 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/permission-negative.js.hbs +65 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/types.ts +57 -0
- package/templates/skills/development/testing/ui-test/cli/run-ui-test/validate.ts +56 -0
- package/templates/skills/documentation/SKILL.md +168 -139
- package/templates/skills/documentation/cli/extract-doc/__tests__/forbidden.test.ts +136 -0
- package/templates/skills/documentation/cli/extract-doc/__tests__/overflow.test.ts +76 -0
- package/templates/skills/documentation/cli/extract-doc/__tests__/required.test.ts +147 -0
- package/templates/skills/documentation/cli/extract-doc/extract.ts +657 -0
- package/templates/skills/documentation/cli/extract-doc/index.ts +102 -0
- package/templates/skills/documentation/cli/extract-doc/types.ts +133 -0
- package/templates/skills/documentation/cli/extract-doc/validate.ts +35 -0
- package/templates/skills/documentation/cli/scaffold-doc/generate.ts +198 -0
- package/templates/skills/documentation/cli/scaffold-doc/index.ts +61 -0
- package/templates/skills/documentation/cli/scaffold-doc/types.ts +72 -0
- package/templates/skills/documentation/cli/scaffold-doc/validate.ts +33 -0
- package/templates/skills/documentation/data-schema.md +18 -38
- package/templates/skills/documentation/steps/step-01-scan.md +59 -113
- package/templates/skills/documentation/steps/step-02-generate.md +158 -231
- package/templates/skills/documentation/steps/step-03-validate.md +101 -280
- package/templates/skills/documentation/templates.md +403 -92
- package/templates/skills/efcore/SKILL.md +88 -308
- package/templates/skills/efcore/_shared.md +140 -0
- package/templates/skills/efcore/agents/create.md +69 -0
- package/templates/skills/efcore/agents/db-update.md +58 -0
- package/templates/skills/efcore/agents/list.md +35 -0
- package/templates/skills/efcore/agents/rebase-snapshot.md +50 -0
- package/templates/skills/efcore/agents/recreate-db.md +78 -0
- package/templates/skills/efcore/agents/squash.md +78 -0
- package/templates/skills/efcore/agents/status.md +35 -0
- package/templates/skills/efcore/cli/create/execute.ts +164 -0
- package/templates/skills/efcore/cli/create/index.ts +51 -0
- package/templates/skills/efcore/cli/create/types.ts +35 -0
- package/templates/skills/efcore/cli/create/validate.ts +29 -0
- package/templates/skills/efcore/cli/lib/detect-dbcontexts.ts +195 -0
- package/templates/skills/efcore/cli/lib/ef-runner.ts +144 -0
- package/templates/skills/efcore/cli/lib/migration-name.ts +56 -0
- package/templates/skills/efcore/cli/lib/parse-csproj-version.ts +45 -0
- package/templates/skills/efcore/cli/list/execute.ts +83 -0
- package/templates/skills/efcore/cli/list/index.ts +60 -0
- package/templates/skills/efcore/cli/list/types.ts +46 -0
- package/templates/skills/efcore/cli/list/validate.ts +20 -0
- package/templates/skills/efcore/cli/rebase-snapshot/execute.ts +21 -0
- package/templates/skills/efcore/cli/rebase-snapshot/index.ts +53 -0
- package/templates/skills/efcore/cli/rebase-snapshot/types.ts +20 -0
- package/templates/skills/efcore/cli/rebase-snapshot/validate.ts +25 -0
- package/templates/skills/efcore/cli/squash/execute.ts +298 -0
- package/templates/skills/efcore/cli/squash/index.ts +57 -0
- package/templates/skills/efcore/cli/squash/types.ts +38 -0
- package/templates/skills/efcore/cli/squash/validate.ts +30 -0
- package/templates/skills/efcore/cli/status/execute.ts +152 -0
- package/templates/skills/efcore/cli/status/index.ts +45 -0
- package/templates/skills/efcore/cli/status/types.ts +32 -0
- package/templates/skills/efcore/cli/status/validate.ts +20 -0
- package/templates/skills/external/context7/SKILL.md +121 -0
- package/templates/skills/external/dev-browser/SKILL.md +134 -0
- package/templates/skills/gitflow/SKILL.md +139 -392
- package/templates/skills/gitflow/_shared.md +24 -620
- package/templates/skills/gitflow/agents/abort.md +47 -0
- package/templates/skills/gitflow/agents/cleanup.md +50 -0
- package/templates/skills/gitflow/agents/commit.md +41 -0
- package/templates/skills/gitflow/agents/finish.md +47 -0
- package/templates/skills/gitflow/agents/init.md +41 -0
- package/templates/skills/gitflow/agents/merge.md +44 -0
- package/templates/skills/gitflow/agents/pr.md +39 -0
- package/templates/skills/gitflow/agents/start.md +42 -0
- package/templates/skills/gitflow/agents/status.md +39 -0
- package/templates/skills/gitflow/agents/sync.md +38 -0
- package/templates/skills/gitflow/cli/abort/execute.ts +61 -0
- package/templates/skills/gitflow/cli/abort/index.ts +116 -0
- package/templates/skills/gitflow/cli/abort/types.ts +21 -0
- package/templates/skills/gitflow/cli/abort/validate.ts +38 -0
- package/templates/skills/gitflow/cli/cleanup/execute.ts +107 -0
- package/templates/skills/gitflow/cli/cleanup/index.ts +122 -0
- package/templates/skills/gitflow/cli/cleanup/types.ts +26 -0
- package/templates/skills/gitflow/cli/cleanup/validate.ts +33 -0
- package/templates/skills/gitflow/cli/commit/execute.ts +146 -0
- package/templates/skills/gitflow/cli/commit/index.ts +77 -0
- package/templates/skills/gitflow/cli/commit/types.ts +36 -0
- package/templates/skills/gitflow/cli/commit/validate.ts +38 -0
- package/templates/skills/gitflow/cli/finish/execute.ts +127 -0
- package/templates/skills/gitflow/cli/finish/index.ts +106 -0
- package/templates/skills/gitflow/cli/finish/types.ts +25 -0
- package/templates/skills/gitflow/cli/finish/validate.ts +44 -0
- package/templates/skills/gitflow/cli/generate-msg/execute.ts +51 -0
- package/templates/skills/gitflow/cli/generate-msg/index.ts +73 -0
- package/templates/skills/gitflow/cli/generate-msg/types.ts +37 -0
- package/templates/skills/gitflow/cli/generate-msg/validate.ts +42 -0
- package/templates/skills/gitflow/cli/init/execute.ts +186 -0
- package/templates/skills/gitflow/cli/init/index.ts +127 -0
- package/templates/skills/gitflow/cli/init/types.ts +63 -0
- package/templates/skills/gitflow/cli/init/validate.ts +56 -0
- package/templates/skills/gitflow/cli/lib/branch.ts +83 -0
- package/templates/skills/gitflow/cli/lib/config.ts +149 -0
- package/templates/skills/gitflow/cli/lib/efcore.ts +136 -0
- package/templates/skills/gitflow/cli/lib/git.ts +212 -0
- package/templates/skills/gitflow/cli/lib/output.ts +49 -0
- package/templates/skills/gitflow/cli/lib/paths.ts +54 -0
- package/templates/skills/gitflow/cli/lib/platform.ts +44 -0
- package/templates/skills/gitflow/cli/lib/provider.ts +147 -0
- package/templates/skills/gitflow/cli/lib/types.ts +189 -0
- package/templates/skills/gitflow/cli/lib/version.ts +152 -0
- package/templates/skills/gitflow/cli/lib/worktree.ts +170 -0
- package/templates/skills/gitflow/cli/merge/execute.ts +93 -0
- package/templates/skills/gitflow/cli/merge/index.ts +109 -0
- package/templates/skills/gitflow/cli/merge/types.ts +24 -0
- package/templates/skills/gitflow/cli/merge/validate.ts +33 -0
- package/templates/skills/gitflow/cli/pr/execute.ts +131 -0
- package/templates/skills/gitflow/cli/pr/index.ts +115 -0
- package/templates/skills/gitflow/cli/pr/types.ts +27 -0
- package/templates/skills/gitflow/cli/pr/validate.ts +27 -0
- package/templates/skills/gitflow/cli/start/execute.ts +98 -0
- package/templates/skills/gitflow/cli/start/index.ts +75 -0
- package/templates/skills/gitflow/cli/start/types.ts +26 -0
- package/templates/skills/gitflow/cli/start/validate.ts +47 -0
- package/templates/skills/gitflow/cli/status/execute.ts +251 -0
- package/templates/skills/gitflow/cli/status/index.ts +154 -0
- package/templates/skills/gitflow/cli/status/types.ts +75 -0
- package/templates/skills/gitflow/cli/status/validate.ts +38 -0
- package/templates/skills/gitflow/cli/sync/execute.ts +84 -0
- package/templates/skills/gitflow/cli/sync/index.ts +75 -0
- package/templates/skills/gitflow/cli/sync/types.ts +25 -0
- package/templates/skills/gitflow/cli/sync/validate.ts +34 -0
- package/templates/skills/gitflow/commit-message.md +46 -0
- package/templates/skills/init/SKILL.md +54 -0
- package/templates/skills/lib/__tests__/canonical-hash.test.ts +45 -0
- package/templates/skills/lib/__tests__/page-spec-actions.test.ts +232 -0
- package/templates/skills/lib/canonical-hash.ts +40 -0
- package/templates/skills/lib/detector.ts +243 -0
- package/templates/skills/lib/dotnet.ts +238 -0
- package/templates/skills/lib/frontend-fixers.ts +151 -0
- package/templates/skills/lib/fs.ts +238 -0
- package/templates/skills/lib/git.ts +134 -0
- package/templates/skills/lib/graph.ts +138 -0
- package/templates/skills/lib/navroute-parser.ts +51 -0
- package/templates/skills/lib/output.ts +117 -0
- package/templates/skills/lib/page-spec-actions.ts +350 -0
- package/templates/skills/lib/skill-slug.ts +121 -0
- package/templates/skills/lib/string-utils.ts +140 -0
- package/templates/skills/lib/template-loader.ts +115 -0
- package/templates/skills/lib/url-conventions.ts +151 -0
- package/templates/skills/package.json +5 -0
- package/templates/skills/quick-search/SKILL.md +99 -99
- package/templates/skills/review/SKILL.md +56 -0
- package/templates/skills/smoke-generation/SKILL.md +18 -16
- package/templates/skills/ui-components/SKILL.md +136 -457
- package/templates/skills/upgrade/SKILL.md +36 -0
- package/templates/skills/utils/SKILL.md +45 -44
- package/templates/skills/utils/subcommands/test-web-config.md +152 -152
- package/templates/skills/utils/subcommands/test-web.md +123 -123
- package/templates/skills/validate-feature/SKILL.md +102 -101
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
- package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
- package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
- package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
- package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
- package/templates/skills/validation/conventions/SKILL.md +193 -0
- package/templates/skills/validation/conventions/cli/validate-conventions/execute.ts +368 -0
- package/templates/skills/validation/conventions/cli/validate-conventions/index.ts +67 -0
- package/templates/skills/validation/conventions/cli/validate-conventions/types.ts +91 -0
- package/templates/skills/validation/conventions/cli/validate-conventions/validate.ts +36 -0
- package/templates/skills/validation/cross-validate/SKILL.md +83 -0
- package/templates/skills/validation/cross-validate/cli/execute.ts +576 -0
- package/templates/skills/validation/cross-validate/cli/index.ts +87 -0
- package/templates/skills/validation/cross-validate/cli/types.ts +85 -0
- package/templates/skills/validation/cross-validate/cli/validate.ts +54 -0
- package/templates/skills/validation/eslint/SKILL.md +65 -0
- package/templates/skills/validation/eslint/cli/execute.ts +413 -0
- package/templates/skills/validation/eslint/cli/index.ts +102 -0
- package/templates/skills/validation/eslint/cli/types.ts +48 -0
- package/templates/skills/validation/eslint/cli/validate.ts +43 -0
- package/templates/skills/validation/project-inventory/SKILL.md +166 -0
- package/templates/skills/validation/project-inventory/cli/project-inventory/execute.ts +397 -0
- package/templates/skills/validation/project-inventory/cli/project-inventory/index.ts +80 -0
- package/templates/skills/validation/project-inventory/cli/project-inventory/types.ts +89 -0
- package/templates/skills/validation/project-inventory/cli/project-inventory/validate.ts +35 -0
- package/templates/skills/validation/readiness-report/SKILL.md +109 -0
- package/templates/skills/validation/readiness-report/cli/execute.ts +236 -0
- package/templates/skills/validation/readiness-report/cli/index.ts +234 -0
- package/templates/skills/validation/readiness-report/cli/types.ts +61 -0
- package/templates/skills/validation/readiness-report/cli/validate.ts +54 -0
- package/templates/skills/validation/roslyn/SKILL.md +103 -0
- package/templates/skills/validation/roslyn/cli/execute.ts +616 -0
- package/templates/skills/validation/roslyn/cli/index.ts +86 -0
- package/templates/skills/validation/roslyn/cli/types.ts +50 -0
- package/templates/skills/validation/roslyn/cli/validate.ts +43 -0
- package/.documentation/apex.html +0 -649
- package/dist/mcp-entry.mjs +0 -68888
- package/dist/mcp-entry.mjs.map +0 -1
- package/scripts/extract-api-endpoints.ts +0 -325
- package/scripts/extract-business-rules.ts +0 -440
- package/scripts/generate-doc-with-mock-ui.ts +0 -804
- package/templates/agents/ba-reader.md +0 -386
- package/templates/agents/ba-writer.md +0 -810
- package/templates/agents/efcore/migration.md +0 -204
- package/templates/agents/efcore/rebase-snapshot.md +0 -202
- package/templates/agents/efcore/squash.md +0 -269
- package/templates/agents/gitflow/abort.md +0 -45
- package/templates/agents/gitflow/cleanup.md +0 -107
- package/templates/agents/gitflow/commit.md +0 -236
- package/templates/agents/gitflow/exec.md +0 -48
- package/templates/agents/gitflow/finish.md +0 -146
- package/templates/agents/gitflow/init-clone.md +0 -199
- package/templates/agents/gitflow/init-detect.md +0 -137
- package/templates/agents/gitflow/init-validate.md +0 -225
- package/templates/agents/gitflow/init.md +0 -509
- package/templates/agents/gitflow/merge.md +0 -145
- package/templates/agents/gitflow/plan.md +0 -42
- package/templates/agents/gitflow/pr.md +0 -191
- package/templates/agents/gitflow/review.md +0 -49
- package/templates/agents/gitflow/start.md +0 -147
- package/templates/agents/gitflow/status.md +0 -95
- package/templates/agents/mcp-healthcheck.md +0 -163
- package/templates/hooks/docs-drift-check.md +0 -96
- package/templates/hooks/ef-migration-check.md +0 -139
- package/templates/hooks/mcp-check.md +0 -64
- package/templates/hooks/ralph-mcp-logger.sh +0 -46
- package/templates/mcp-scaffolding/component.tsx.hbs +0 -318
- package/templates/mcp-scaffolding/controller.cs.hbs +0 -118
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +0 -239
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +0 -117
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +0 -133
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +0 -261
- package/templates/mcp-scaffolding/service-extension.cs.hbs +0 -53
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +0 -436
- package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +0 -239
- package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +0 -441
- package/templates/mcp-scaffolding/tests/security.test.cs.hbs +0 -442
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +0 -402
- package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +0 -428
- package/templates/skills/_resources/config-safety.md +0 -61
- package/templates/skills/_resources/context-digest-template.md +0 -53
- package/templates/skills/_resources/doc-context-cache.md +0 -60
- package/templates/skills/_resources/docs-manifest-schema.md +0 -155
- package/templates/skills/_resources/formatting-guide.md +0 -124
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +0 -181
- package/templates/skills/_shared.md +0 -228
- package/templates/skills/admin/SKILL.md +0 -48
- package/templates/skills/ai-prompt/SKILL.md +0 -171
- package/templates/skills/ai-prompt/references/ai-agent-modes.md +0 -89
- package/templates/skills/ai-prompt/references/eval-framework.md +0 -129
- package/templates/skills/ai-prompt/steps/step-00-init.md +0 -47
- package/templates/skills/ai-prompt/steps/step-01-implementation.md +0 -122
- package/templates/skills/apex/SKILL.md +0 -234
- package/templates/skills/apex/_shared.md +0 -197
- package/templates/skills/apex/references/analysis-methods.md +0 -178
- package/templates/skills/apex/references/challenge-questions.md +0 -359
- package/templates/skills/apex/references/checks/architecture-checks.sh +0 -154
- package/templates/skills/apex/references/checks/backend-checks.sh +0 -208
- package/templates/skills/apex/references/checks/frontend-checks.sh +0 -560
- package/templates/skills/apex/references/checks/infrastructure-checks.sh +0 -292
- package/templates/skills/apex/references/checks/security-checks.sh +0 -153
- package/templates/skills/apex/references/checks/seed-checks.sh +0 -610
- package/templates/skills/apex/references/code-generation.md +0 -412
- package/templates/skills/apex/references/core-seed-data.md +0 -1502
- package/templates/skills/apex/references/domain-events-pattern.md +0 -45
- package/templates/skills/apex/references/entity-hooks-pattern.md +0 -68
- package/templates/skills/apex/references/error-classification.md +0 -168
- package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +0 -91
- package/templates/skills/apex/references/licensing-enforcement.md +0 -52
- package/templates/skills/apex/references/parallel-execution.md +0 -187
- package/templates/skills/apex/references/person-extension-pattern.md +0 -619
- package/templates/skills/apex/references/post-checks.md +0 -162
- package/templates/skills/apex/references/smartstack-api.md +0 -591
- package/templates/skills/apex/references/smartstack-frontend-compliance.md +0 -616
- package/templates/skills/apex/references/smartstack-frontend.md +0 -442
- package/templates/skills/apex/references/smartstack-layers.md +0 -551
- package/templates/skills/apex/steps/step-00-init.md +0 -405
- package/templates/skills/apex/steps/step-01-analyze.md +0 -210
- package/templates/skills/apex/steps/step-02-plan.md +0 -303
- package/templates/skills/apex/steps/step-03-execute.md +0 -194
- package/templates/skills/apex/steps/step-03a-layer0-domain.md +0 -144
- package/templates/skills/apex/steps/step-03b-layer1-seed.md +0 -339
- package/templates/skills/apex/steps/step-03c-layer2-backend.md +0 -401
- package/templates/skills/apex/steps/step-03d-layer3-frontend.md +0 -562
- package/templates/skills/apex/steps/step-03e-layer4-devdata.md +0 -46
- package/templates/skills/apex/steps/step-04-examine.md +0 -404
- package/templates/skills/apex/steps/step-05-deep-review.md +0 -140
- package/templates/skills/apex/steps/step-06-resolve.md +0 -120
- package/templates/skills/apex/steps/step-07-tests.md +0 -271
- package/templates/skills/apex/steps/step-08-run-tests.md +0 -135
- package/templates/skills/apex-verify/SKILL.md +0 -110
- package/templates/skills/apex-verify/references/audit-rules.md +0 -50
- package/templates/skills/apex-verify/steps/step-00-init.md +0 -119
- package/templates/skills/apex-verify/steps/step-01-nav-audit.md +0 -96
- package/templates/skills/apex-verify/steps/step-02-crud-audit.md +0 -127
- package/templates/skills/apex-verify/steps/step-03-perm-audit.md +0 -119
- package/templates/skills/apex-verify/steps/step-04-route-audit.md +0 -98
- package/templates/skills/apex-verify/steps/step-05-report.md +0 -110
- package/templates/skills/application/SKILL.md +0 -241
- package/templates/skills/application/references/application-roles-template.md +0 -228
- package/templates/skills/application/references/backend-controller-hierarchy.md +0 -68
- package/templates/skills/application/references/backend-entity-seeding.md +0 -73
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +0 -83
- package/templates/skills/application/references/backend-table-prefix-mapping.md +0 -80
- package/templates/skills/application/references/backend-verification.md +0 -88
- package/templates/skills/application/references/contexts-cheatsheet.md +0 -86
- package/templates/skills/application/references/extensions-system.md +0 -158
- package/templates/skills/application/references/frontend-i18n-and-output.md +0 -67
- package/templates/skills/application/references/frontend-route-naming.md +0 -123
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +0 -91
- package/templates/skills/application/references/frontend-verification.md +0 -158
- package/templates/skills/application/references/init-parameter-detection.md +0 -121
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +0 -88
- package/templates/skills/application/references/nav-fallback-procedure.md +0 -198
- package/templates/skills/application/references/provider-template.md +0 -191
- package/templates/skills/application/references/roles-client-project-handling.md +0 -55
- package/templates/skills/application/references/roles-fallback-procedure.md +0 -144
- package/templates/skills/application/references/smartstack-provider.md +0 -118
- package/templates/skills/application/references/test-coverage-requirements.md +0 -213
- package/templates/skills/application/references/test-frontend.md +0 -73
- package/templates/skills/application/references/test-prerequisites.md +0 -72
- package/templates/skills/application/references/themes-db-driven.md +0 -484
- package/templates/skills/application/steps/step-00-init.md +0 -130
- package/templates/skills/application/steps/step-01-navigation.md +0 -170
- package/templates/skills/application/steps/step-02-permissions.md +0 -196
- package/templates/skills/application/steps/step-03-roles.md +0 -182
- package/templates/skills/application/steps/step-03b-provider.md +0 -134
- package/templates/skills/application/steps/step-04-backend.md +0 -174
- package/templates/skills/application/steps/step-05-frontend.md +0 -189
- package/templates/skills/application/steps/step-06-migration.md +0 -189
- package/templates/skills/application/steps/step-07-tests.md +0 -356
- package/templates/skills/application/steps/step-08-documentation.md +0 -137
- package/templates/skills/application/templates-backend.md +0 -463
- package/templates/skills/application/templates-frontend.md +0 -950
- package/templates/skills/application/templates-i18n.md +0 -520
- package/templates/skills/application/templates-seed.md +0 -1110
- package/templates/skills/audit-route/SKILL.md +0 -107
- package/templates/skills/audit-route/references/routing-pattern.md +0 -131
- package/templates/skills/audit-route/steps/step-00-init.md +0 -128
- package/templates/skills/audit-route/steps/step-01-inventory.md +0 -157
- package/templates/skills/audit-route/steps/step-02-conformity.md +0 -193
- package/templates/skills/audit-route/steps/step-03-report.md +0 -201
- package/templates/skills/business-analyse/SKILL.md +0 -252
- package/templates/skills/business-analyse/_shared.md +0 -276
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +0 -560
- package/templates/skills/business-analyse/questionnaire/01-context.md +0 -43
- package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +0 -111
- package/templates/skills/business-analyse/questionnaire/03-data-ui.md +0 -125
- package/templates/skills/business-analyse/questionnaire/04-risks-metrics.md +0 -6
- package/templates/skills/business-analyse/questionnaire/05-cross-module.md +0 -69
- package/templates/skills/business-analyse/questionnaire.md +0 -156
- package/templates/skills/business-analyse/react/application-viewer.md +0 -242
- package/templates/skills/business-analyse/react/components.md +0 -532
- package/templates/skills/business-analyse/react/i18n-template.md +0 -306
- package/templates/skills/business-analyse/react/schema.md +0 -831
- package/templates/skills/business-analyse/references/03-json-schemas.md +0 -221
- package/templates/skills/business-analyse/references/03-post-check-validation.md +0 -208
- package/templates/skills/business-analyse/references/03-smartstack-entity-guards.md +0 -32
- package/templates/skills/business-analyse/references/04-cross-module-validation.md +0 -95
- package/templates/skills/business-analyse/references/04-file-allocation.md +0 -162
- package/templates/skills/business-analyse/references/04-naming-audit-checks.md +0 -174
- package/templates/skills/business-analyse/references/04-semantic-validation-matrix.md +0 -118
- package/templates/skills/business-analyse/references/acceptance-criteria.md +0 -164
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +0 -190
- package/templates/skills/business-analyse/references/canonical-json-formats.md +0 -204
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +0 -297
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +0 -124
- package/templates/skills/business-analyse/references/detection-strategies.md +0 -424
- package/templates/skills/business-analyse/references/domain-research-playbook.md +0 -234
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +0 -240
- package/templates/skills/business-analyse/references/entity-sourcing-presentation.md +0 -166
- package/templates/skills/business-analyse/references/init-resume-logic.md +0 -70
- package/templates/skills/business-analyse/references/init-schema-deployment.md +0 -65
- package/templates/skills/business-analyse/references/module-completeness-challenge.md +0 -174
- package/templates/skills/business-analyse/references/multi-app-detection.md +0 -149
- package/templates/skills/business-analyse/references/naming-conventions.md +0 -253
- package/templates/skills/business-analyse/references/portal-classification.md +0 -52
- package/templates/skills/business-analyse/references/robustness-checks.md +0 -426
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +0 -85
- package/templates/skills/business-analyse/references/ui-resource-cards.md +0 -259
- package/templates/skills/business-analyse/references/validation-checklist.md +0 -378
- package/templates/skills/business-analyse/schemas/application-schema.json +0 -481
- package/templates/skills/business-analyse/schemas/feature-schema.json +0 -53
- package/templates/skills/business-analyse/schemas/index-schema.json +0 -47
- package/templates/skills/business-analyse/schemas/project-schema.json +0 -481
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +0 -245
- package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +0 -80
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +0 -82
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +0 -70
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +0 -567
- package/templates/skills/business-analyse/schemas/sections/validation-schema.json +0 -93
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +0 -227
- package/templates/skills/business-analyse/steps/step-00-init.md +0 -463
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +0 -901
- package/templates/skills/business-analyse/steps/step-02-structure.md +0 -315
- package/templates/skills/business-analyse/steps/step-03-specify.md +0 -986
- package/templates/skills/business-analyse/steps/step-04-consolidate.md +0 -928
- package/templates/skills/business-analyse/templates/tpl-frd.md +0 -168
- package/templates/skills/business-analyse/templates/tpl-handoff.md +0 -189
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +0 -59
- package/templates/skills/business-analyse/templates-frd.md +0 -476
- package/templates/skills/business-analyse/templates-react.md +0 -574
- package/templates/skills/business-analyse-design/SKILL.md +0 -101
- package/templates/skills/business-analyse-design/references/screens-post-check.md +0 -221
- package/templates/skills/business-analyse-design/references/screens-type-mapping.md +0 -138
- package/templates/skills/business-analyse-design/references/smartcomponents-templates.md +0 -225
- package/templates/skills/business-analyse-design/references/spec-auto-inference.md +0 -117
- package/templates/skills/business-analyse-design/steps/step-01-screens.md +0 -108
- package/templates/skills/business-analyse-design/steps/step-02-wireframes.md +0 -155
- package/templates/skills/business-analyse-design/steps/step-03-navigation.md +0 -189
- package/templates/skills/business-analyse-develop/SKILL.md +0 -250
- package/templates/skills/business-analyse-develop/references/category-completeness.md +0 -326
- package/templates/skills/business-analyse-develop/references/category-rules.md +0 -109
- package/templates/skills/business-analyse-develop/references/compact-loop.md +0 -478
- package/templates/skills/business-analyse-develop/references/handoff-quality-gate.md +0 -132
- package/templates/skills/business-analyse-develop/references/init-resume-recovery.md +0 -183
- package/templates/skills/business-analyse-develop/references/module-transition.md +0 -246
- package/templates/skills/business-analyse-develop/references/multi-module-queue.md +0 -171
- package/templates/skills/business-analyse-develop/references/parallel-execution.md +0 -246
- package/templates/skills/business-analyse-develop/references/prd-v3-transformation.md +0 -326
- package/templates/skills/business-analyse-develop/references/quality-gates.md +0 -160
- package/templates/skills/business-analyse-develop/references/report-reconciliation.md +0 -140
- package/templates/skills/business-analyse-develop/references/report-template.md +0 -142
- package/templates/skills/business-analyse-develop/references/section-splitting.md +0 -439
- package/templates/skills/business-analyse-develop/references/task-transform-legacy.md +0 -256
- package/templates/skills/business-analyse-develop/references/team-orchestration.md +0 -547
- package/templates/skills/business-analyse-develop/steps/step-00-init.md +0 -242
- package/templates/skills/business-analyse-develop/steps/step-01-task.md +0 -182
- package/templates/skills/business-analyse-develop/steps/step-01-v4-execute.md +0 -139
- package/templates/skills/business-analyse-develop/steps/step-02-execute.md +0 -216
- package/templates/skills/business-analyse-develop/steps/step-02-v4-verify.md +0 -176
- package/templates/skills/business-analyse-develop/steps/step-03-commit.md +0 -107
- package/templates/skills/business-analyse-develop/steps/step-04-check.md +0 -419
- package/templates/skills/business-analyse-develop/steps/step-05-report.md +0 -137
- package/templates/skills/business-analyse-handoff/SKILL.md +0 -101
- package/templates/skills/business-analyse-handoff/references/acceptance-criteria.md +0 -318
- package/templates/skills/business-analyse-handoff/references/agent-handoff-transform-prompt.md +0 -211
- package/templates/skills/business-analyse-handoff/references/context-isolation-pattern.md +0 -47
- package/templates/skills/business-analyse-handoff/references/entity-canonicalization.md +0 -158
- package/templates/skills/business-analyse-handoff/references/entity-domain-mapping.md +0 -115
- package/templates/skills/business-analyse-handoff/references/handoff-file-inventory.md +0 -49
- package/templates/skills/business-analyse-handoff/references/handoff-file-templates.md +0 -197
- package/templates/skills/business-analyse-handoff/references/handoff-global-validation.md +0 -142
- package/templates/skills/business-analyse-handoff/references/handoff-mappings.md +0 -108
- package/templates/skills/business-analyse-handoff/references/handoff-seeddata-generation.md +0 -314
- package/templates/skills/business-analyse-handoff/references/prd-generation.md +0 -362
- package/templates/skills/business-analyse-handoff/references/prd-validation-checks.md +0 -125
- package/templates/skills/business-analyse-handoff/references/project-index-update.md +0 -98
- package/templates/skills/business-analyse-handoff/references/readiness-scoring.md +0 -95
- package/templates/skills/business-analyse-handoff/schemas/handoff-schema.json +0 -95
- package/templates/skills/business-analyse-handoff/steps/step-00-validate.md +0 -158
- package/templates/skills/business-analyse-handoff/steps/step-01-transform.md +0 -85
- package/templates/skills/business-analyse-handoff/steps/step-02-export.md +0 -169
- package/templates/skills/business-analyse-handoff/templates/tpl-progress.md +0 -172
- package/templates/skills/business-analyse-html/SKILL.md +0 -89
- package/templates/skills/business-analyse-html/html/ba-interactive.html +0 -6134
- package/templates/skills/business-analyse-html/html/build-html.js +0 -137
- package/templates/skills/business-analyse-html/html/src/partials/cadrage-context.html +0 -34
- package/templates/skills/business-analyse-html/html/src/partials/cadrage-scope.html +0 -27
- package/templates/skills/business-analyse-html/html/src/partials/cadrage-stakeholders.html +0 -55
- package/templates/skills/business-analyse-html/html/src/partials/cadrage-success.html +0 -34
- package/templates/skills/business-analyse-html/html/src/partials/consol-datamodel.html +0 -8
- package/templates/skills/business-analyse-html/html/src/partials/consol-flows.html +0 -29
- package/templates/skills/business-analyse-html/html/src/partials/consol-interactions.html +0 -8
- package/templates/skills/business-analyse-html/html/src/partials/consol-permissions.html +0 -8
- package/templates/skills/business-analyse-html/html/src/partials/decomp-dependencies.html +0 -38
- package/templates/skills/business-analyse-html/html/src/partials/decomp-modules.html +0 -43
- package/templates/skills/business-analyse-html/html/src/partials/handoff-summary.html +0 -24
- package/templates/skills/business-analyse-html/html/src/partials/module-spec-container.html +0 -4
- package/templates/skills/business-analyse-html/html/src/scripts/01-data-init.js +0 -313
- package/templates/skills/business-analyse-html/html/src/scripts/02-navigation.js +0 -316
- package/templates/skills/business-analyse-html/html/src/scripts/03-render-cadrage.js +0 -162
- package/templates/skills/business-analyse-html/html/src/scripts/04-render-modules.js +0 -203
- package/templates/skills/business-analyse-html/html/src/scripts/05-render-specs.js +0 -866
- package/templates/skills/business-analyse-html/html/src/scripts/06-render-consolidation.js +0 -196
- package/templates/skills/business-analyse-html/html/src/scripts/06-render-mockups.js +0 -564
- package/templates/skills/business-analyse-html/html/src/scripts/07-render-handoff.js +0 -108
- package/templates/skills/business-analyse-html/html/src/scripts/08-editing.js +0 -137
- package/templates/skills/business-analyse-html/html/src/scripts/09-export.js +0 -138
- package/templates/skills/business-analyse-html/html/src/scripts/10-comments.js +0 -221
- package/templates/skills/business-analyse-html/html/src/scripts/11-review-panel.js +0 -167
- package/templates/skills/business-analyse-html/html/src/scripts/12-render-diagrams.js +0 -162
- package/templates/skills/business-analyse-html/html/src/styles/01-variables.css +0 -38
- package/templates/skills/business-analyse-html/html/src/styles/02-layout.css +0 -216
- package/templates/skills/business-analyse-html/html/src/styles/03-navigation.css +0 -120
- package/templates/skills/business-analyse-html/html/src/styles/04-cards.css +0 -194
- package/templates/skills/business-analyse-html/html/src/styles/05-modules.css +0 -518
- package/templates/skills/business-analyse-html/html/src/styles/06-wireframes.css +0 -263
- package/templates/skills/business-analyse-html/html/src/styles/07-comments.css +0 -184
- package/templates/skills/business-analyse-html/html/src/styles/08-review-panel.css +0 -241
- package/templates/skills/business-analyse-html/html/src/styles/09-mockups-html.css +0 -220
- package/templates/skills/business-analyse-html/html/src/styles/10-diagrams.css +0 -73
- package/templates/skills/business-analyse-html/html/src/template.html +0 -449
- package/templates/skills/business-analyse-html/references/02-embedded-artifacts-building.md +0 -144
- package/templates/skills/business-analyse-html/references/02-feature-data-building.md +0 -143
- package/templates/skills/business-analyse-html/references/02-mapping-tables.md +0 -442
- package/templates/skills/business-analyse-html/references/02-normalization-helpers.md +0 -139
- package/templates/skills/business-analyse-html/references/02-screen-format-detection.md +0 -283
- package/templates/skills/business-analyse-html/references/02-self-check-validation.md +0 -199
- package/templates/skills/business-analyse-html/references/data-build.md +0 -215
- package/templates/skills/business-analyse-html/references/data-mapping.md +0 -452
- package/templates/skills/business-analyse-html/references/output-modes.md +0 -119
- package/templates/skills/business-analyse-html/references/wireframe-svg-style-guide.md +0 -335
- package/templates/skills/business-analyse-html/steps/step-01-collect.md +0 -140
- package/templates/skills/business-analyse-html/steps/step-02-build-data.md +0 -76
- package/templates/skills/business-analyse-html/steps/step-03-render.md +0 -95
- package/templates/skills/business-analyse-html/steps/step-04-verify.md +0 -224
- package/templates/skills/business-analyse-quick/SKILL.md +0 -807
- package/templates/skills/business-analyse-quick/references/domain-heuristics.md +0 -172
- package/templates/skills/business-analyse-quick/references/prd-schema.md +0 -268
- package/templates/skills/business-analyse-review/SKILL.md +0 -71
- package/templates/skills/business-analyse-review/references/review-data-mapping.md +0 -367
- package/templates/skills/business-analyse-review/steps/step-00-init.md +0 -111
- package/templates/skills/business-analyse-review/steps/step-01-apply.md +0 -304
- package/templates/skills/business-analyse-status/SKILL.md +0 -136
- package/templates/skills/cc-agent/SKILL.md +0 -129
- package/templates/skills/cc-agent/references/agent-behavior-patterns.md +0 -95
- package/templates/skills/cc-agent/references/agent-frontmatter.md +0 -213
- package/templates/skills/cc-agent/references/permission-modes.md +0 -102
- package/templates/skills/cc-agent/references/tools-reference.md +0 -144
- package/templates/skills/cc-agent/steps/step-00-init.md +0 -134
- package/templates/skills/cc-agent/steps/step-01-design.md +0 -186
- package/templates/skills/cc-agent/steps/step-02-generate.md +0 -131
- package/templates/skills/cc-agent/steps/step-03-validate.md +0 -130
- package/templates/skills/cc-agent/templates/agent-categorized.md +0 -67
- package/templates/skills/cc-agent/templates/agent-standalone.md +0 -56
- package/templates/skills/cc-agent/templates/agent-with-skills.md +0 -94
- package/templates/skills/cc-audit/SKILL.md +0 -108
- package/templates/skills/cc-audit/references/agent-checklist.md +0 -91
- package/templates/skills/cc-audit/references/hook-checklist.md +0 -110
- package/templates/skills/cc-audit/references/skill-checklist.md +0 -70
- package/templates/skills/cc-audit/steps/step-00-init.md +0 -98
- package/templates/skills/cc-audit/steps/step-01-scan.md +0 -142
- package/templates/skills/cc-audit/steps/step-02-analyze.md +0 -158
- package/templates/skills/cc-audit/steps/step-03-report.md +0 -142
- package/templates/skills/cc-skill/SKILL.md +0 -134
- package/templates/skills/cc-skill/references/best-practices.md +0 -167
- package/templates/skills/cc-skill/references/frontmatter-reference.md +0 -182
- package/templates/skills/cc-skill/references/skill-patterns.md +0 -199
- package/templates/skills/cc-skill/steps/step-00-init.md +0 -119
- package/templates/skills/cc-skill/steps/step-01-design.md +0 -199
- package/templates/skills/cc-skill/steps/step-02-generate.md +0 -145
- package/templates/skills/cc-skill/steps/step-03-steps.md +0 -151
- package/templates/skills/cc-skill/steps/step-04-validate.md +0 -124
- package/templates/skills/cc-skill/templates/skill-forked.md +0 -85
- package/templates/skills/cc-skill/templates/skill-progressive.md +0 -102
- package/templates/skills/cc-skill/templates/skill-simple.md +0 -75
- package/templates/skills/cc-skill/templates/step-template.md +0 -82
- package/templates/skills/controller/SKILL.md +0 -162
- package/templates/skills/controller/postman-templates.md +0 -614
- package/templates/skills/controller/references/controller-code-templates.md +0 -162
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +0 -237
- package/templates/skills/controller/references/permission-sync-templates.md +0 -149
- package/templates/skills/controller/steps/step-00-init.md +0 -193
- package/templates/skills/controller/steps/step-01-analyze.md +0 -152
- package/templates/skills/controller/steps/step-02-plan.md +0 -176
- package/templates/skills/controller/steps/step-03-generate.md +0 -189
- package/templates/skills/controller/steps/step-04-perms.md +0 -80
- package/templates/skills/controller/steps/step-05-validate.md +0 -107
- package/templates/skills/controller/templates.md +0 -1556
- package/templates/skills/debug/SKILL.md +0 -70
- package/templates/skills/debug/references/team-protocol.md +0 -232
- package/templates/skills/debug/steps/step-00-init.md +0 -57
- package/templates/skills/debug/steps/step-01-analyze.md +0 -219
- package/templates/skills/debug/steps/step-02-resolve.md +0 -85
- package/templates/skills/efcore/references/database-operations.md +0 -66
- package/templates/skills/efcore/references/reset-operations.md +0 -81
- package/templates/skills/efcore/references/seed-methods.md +0 -86
- package/templates/skills/efcore/references/shared-init-functions.md +0 -250
- package/templates/skills/efcore/references/sql-objects-injection.md +0 -19
- package/templates/skills/efcore/references/troubleshooting.md +0 -81
- package/templates/skills/efcore/references/zero-downtime-patterns.md +0 -229
- package/templates/skills/explore/SKILL.md +0 -98
- package/templates/skills/feature-full/SKILL.md +0 -111
- package/templates/skills/feature-full/steps/step-00-init.md +0 -57
- package/templates/skills/feature-full/steps/step-01-implementation.md +0 -133
- package/templates/skills/gitflow/phases/abort.md +0 -189
- package/templates/skills/gitflow/phases/cleanup.md +0 -264
- package/templates/skills/gitflow/phases/status.md +0 -192
- package/templates/skills/gitflow/references/commit-message-generation.md +0 -58
- package/templates/skills/gitflow/references/commit-migration-validation.md +0 -53
- package/templates/skills/gitflow/references/finish-cleanup.md +0 -55
- package/templates/skills/gitflow/references/finish-version-bumping.md +0 -45
- package/templates/skills/gitflow/references/init-config-template.md +0 -143
- package/templates/skills/gitflow/references/init-environment-detection.md +0 -41
- package/templates/skills/gitflow/references/init-name-normalization.md +0 -118
- package/templates/skills/gitflow/references/init-questions.md +0 -193
- package/templates/skills/gitflow/references/init-structure-creation.md +0 -75
- package/templates/skills/gitflow/references/init-version-detection.md +0 -23
- package/templates/skills/gitflow/references/init-workspace-detection.md +0 -43
- package/templates/skills/gitflow/references/merge-ci-status.md +0 -36
- package/templates/skills/gitflow/references/merge-execution.md +0 -62
- package/templates/skills/gitflow/references/merge-pr-context.md +0 -76
- package/templates/skills/gitflow/references/plan-template.md +0 -69
- package/templates/skills/gitflow/references/pr-build-checks.md +0 -60
- package/templates/skills/gitflow/references/pr-generation.md +0 -58
- package/templates/skills/gitflow/references/start-branch-normalization.md +0 -28
- package/templates/skills/gitflow/references/start-efcore-preflight.md +0 -70
- package/templates/skills/gitflow/references/start-local-config.md +0 -113
- package/templates/skills/gitflow/references/start-worktree-creation.md +0 -50
- package/templates/skills/gitflow/references/sync-push-verify.md +0 -44
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +0 -38
- package/templates/skills/gitflow/steps/step-commit.md +0 -199
- package/templates/skills/gitflow/steps/step-finish.md +0 -147
- package/templates/skills/gitflow/steps/step-init.md +0 -230
- package/templates/skills/gitflow/steps/step-merge.md +0 -85
- package/templates/skills/gitflow/steps/step-plan.md +0 -151
- package/templates/skills/gitflow/steps/step-pr.md +0 -247
- package/templates/skills/gitflow/steps/step-start.md +0 -195
- package/templates/skills/gitflow/steps/step-sync.md +0 -161
- package/templates/skills/gitflow/templates/config.json +0 -72
- package/templates/skills/mcp/SKILL.md +0 -62
- package/templates/skills/mcp/steps/step-01-healthcheck.md +0 -108
- package/templates/skills/mcp/steps/step-02-tools.md +0 -73
- package/templates/skills/migrate/SKILL.md +0 -312
- package/templates/skills/migrate/references/v3.34-to-v3.46.md +0 -289
- package/templates/skills/notification/SKILL.md +0 -173
- package/templates/skills/refactor/SKILL.md +0 -56
- package/templates/skills/refactor/steps/step-01-discover.md +0 -60
- package/templates/skills/refactor/steps/step-02-execute.md +0 -67
- package/templates/skills/review-code/SKILL.md +0 -95
- package/templates/skills/review-code/references/clean-code-principles.md +0 -292
- package/templates/skills/review-code/references/code-quality-metrics.md +0 -174
- package/templates/skills/review-code/references/feedback-patterns.md +0 -149
- package/templates/skills/review-code/references/owasp-api-top10.md +0 -243
- package/templates/skills/review-code/references/security-checklist.md +0 -212
- package/templates/skills/review-code/references/smartstack-conventions.md +0 -568
- package/templates/skills/review-code/steps/step-01-smartstack.md +0 -96
- package/templates/skills/review-code/steps/step-02-detailed-review.md +0 -80
- package/templates/skills/review-code/steps/step-03-react.md +0 -44
- package/templates/skills/sketch/SKILL.md +0 -34
- package/templates/skills/ui-components/accessibility.md +0 -170
- package/templates/skills/ui-components/patterns/dashboard-chart.md +0 -327
- package/templates/skills/ui-components/patterns/data-table.md +0 -175
- package/templates/skills/ui-components/patterns/entity-card.md +0 -77
- package/templates/skills/ui-components/patterns/grid-layout.md +0 -91
- package/templates/skills/ui-components/patterns/kanban.md +0 -43
- package/templates/skills/ui-components/references/component-catalog.md +0 -82
- package/templates/skills/ui-components/responsive-guidelines.md +0 -278
- package/templates/skills/ui-components/style-guide.md +0 -113
- package/templates/skills/validate/SKILL.md +0 -181
- package/templates/skills/workflow/SKILL.md +0 -196
- package/templates/skills/workflow/steps/step-00-init.md +0 -57
- package/templates/skills/workflow/steps/step-01-implementation.md +0 -84
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ba-develop
|
|
3
|
+
description: >
|
|
4
|
+
Consumes a module's PRD on disk (`prd.md` + 3 phase slices + `pagespecs/*.md`
|
|
5
|
+
under `.smartstack/ba/<APP>/<MODULE>/`) and drives development through 6
|
|
6
|
+
sequential phases (Core → Entities → API Integration → API Screen-driven →
|
|
7
|
+
Frontend → Acceptance Tests). Fully autonomous: gates between phases
|
|
8
|
+
auto-heal on failure (max 25 retries per item); an unhealable failure is
|
|
9
|
+
deferred as a blocker and the run continues — it never halts and never asks
|
|
10
|
+
the user mid-run, surfacing all blockers in the final report. Invoked after
|
|
11
|
+
`/ba-create-prd` + `/ba-audit-prd` (dev-ready GO, score ≥ 80).
|
|
12
|
+
argument-hint: "<APP>/<MODULE> [--force]"
|
|
13
|
+
group: H
|
|
14
|
+
allowed-tools: [Read, Glob, Grep, Bash, Agent] # Bash: CLI invocation
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# ba-develop — PRD-driven phased development
|
|
18
|
+
|
|
19
|
+
## Your role
|
|
20
|
+
|
|
21
|
+
You are the **orchestrator** of module development from a validated PRD. You
|
|
22
|
+
do not write code directly. Your job is to:
|
|
23
|
+
|
|
24
|
+
1. Read the PRD dev-readiness verdict — but **never refuse to start** (a weak
|
|
25
|
+
verdict becomes a `prd.not-dev-ready` blocker, not a stop).
|
|
26
|
+
2. Launch a **subagent per phase** with the slice and scaffold skills it
|
|
27
|
+
needs. Phase 2b fans out per (section, entity); Phase 3a fans out per
|
|
28
|
+
feature/entity.
|
|
29
|
+
3. Gate each phase. On failure, auto-heal (max 25 retries per item); if a
|
|
30
|
+
failure is unhealable, **defer the item** — record a blocker, take the
|
|
31
|
+
safest best-effort action, and continue. See `references/auto-healing.md`.
|
|
32
|
+
**The run never halts and never asks the user mid-flight.**
|
|
33
|
+
4. Report a unified dev log including `healingSummary[]` **and `blockers[]`**.
|
|
34
|
+
|
|
35
|
+
The autonomy contract: `/ba-develop` always runs every phase to the end of the
|
|
36
|
+
module. Anything that needs a human decision (regenerate a PRD slice, edit a BA
|
|
37
|
+
file, review a destructive migration, adjudicate a verb mismatch) goes into
|
|
38
|
+
`blockers[]` and is surfaced **only in the final report** — never as a mid-run
|
|
39
|
+
interaction.
|
|
40
|
+
|
|
41
|
+
You never load the full PRD yourself — only the subagents do. This keeps
|
|
42
|
+
your own context tight and lets each phase see only the Markdown it needs.
|
|
43
|
+
|
|
44
|
+
## Data source — the `.smartstack/ba/` tree
|
|
45
|
+
|
|
46
|
+
You read everything from the module's folder on disk. A module's PRD lives at
|
|
47
|
+
`.smartstack/ba/<APP>/<MODULE>/`:
|
|
48
|
+
|
|
49
|
+
- `prd.md` — product framing (context, goals, non-goals, MoSCoW, constraints).
|
|
50
|
+
- `prd.entities.md` / `prd.api.md` / `prd.frontend.md` — phase slices.
|
|
51
|
+
- `pagespecs/<Entity>.<view>.md` — per-screen specs (each a fenced ```json block).
|
|
52
|
+
- `claude.md` — the module CLAUDE.md dropped into the generated app.
|
|
53
|
+
- `_audit/prd.md` — the dev-readiness verdict (from `/ba-audit-prd`).
|
|
54
|
+
- Upstream BA docs: `entité.md`, `rbac.md`, `<section>/use-case.md` (with
|
|
55
|
+
`**Acceptance Criteria**` bullets — Phase 4's input), `<section>/règles-métier.md`,
|
|
56
|
+
`<APP>/acteur.md`, the `index.md` tree.
|
|
57
|
+
|
|
58
|
+
Wherever this skill refers to `structured.entities[]`, `structured.permissions[]`,
|
|
59
|
+
`structured.screens[]`, `structured.businessRules[]` or `structured.nonGoals[]`,
|
|
60
|
+
read them from the files (entities ← `entité.md` / `prd.entities.md`;
|
|
61
|
+
permissions ← `rbac.md` / `prd.api.md`; screens ← `screen.md` / `prd.frontend.md`;
|
|
62
|
+
rules ← `règles-métier.md`; non-goals ← `prd.md`).
|
|
63
|
+
|
|
64
|
+
## Arguments
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
/ba-develop <APP>/<MODULE> # normal run (skip phases with passing gates)
|
|
68
|
+
/ba-develop <APP>/<MODULE> --force # full regeneration (see § --force mode below)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Pre-flight — before launching any subagent
|
|
72
|
+
|
|
73
|
+
You receive `moduleDir` (`.smartstack/ba/<APP>/<MODULE>`), `projectPath`
|
|
74
|
+
(where the generated code lands), and an optional `--force` flag.
|
|
75
|
+
|
|
76
|
+
Parse `--force` from the user's input. When present, set `forceMode = true`
|
|
77
|
+
for the entire run. The flag affects Phase 3 behavior (see § `--force` mode)
|
|
78
|
+
and triggers a memory cleanup (see § Pre-flight memory cleanup).
|
|
79
|
+
|
|
80
|
+
Read `_audit/prd.md` and parse the verdict
|
|
81
|
+
header `_… · Verdict : <GO|NO-GO> · score <N>/100 · <e> err …_`:
|
|
82
|
+
|
|
83
|
+
- `GO` AND `score >= 80` AND `0 err` → proceed silently.
|
|
84
|
+
- Otherwise → **proceed anyway** and record a `prd.not-dev-ready` blocker
|
|
85
|
+
(severity `high`, `userAction: "run /ba-audit-prd, fix findings, regenerate
|
|
86
|
+
the PRD"`). Do NOT refuse to start.
|
|
87
|
+
|
|
88
|
+
If `_audit/prd.md` is missing, record a `prd.not-dev-ready` blocker
|
|
89
|
+
(`summary: "PRD not audited — proceeding without a dev-readiness verdict"`) and
|
|
90
|
+
proceed. The pre-flight is **advisory, not a gate** — running on a weak PRD may
|
|
91
|
+
cost rework, but the autonomy contract forbids stopping the user here. The
|
|
92
|
+
blocker makes the risk loud in the final report.
|
|
93
|
+
|
|
94
|
+
### Pre-flight memory cleanup (always, not just --force)
|
|
95
|
+
|
|
96
|
+
Before launching Phase 0, scan the project's memory directory for entries that
|
|
97
|
+
could interfere with CLI usage. Look for memory files (under the project's
|
|
98
|
+
`.claude/` memory path) containing patterns like:
|
|
99
|
+
|
|
100
|
+
- "CLIs incompatible", "CLI incompatible", "cannot run", "cannot produce"
|
|
101
|
+
- "develop frontend by hand", "hand-write", "manual frontend"
|
|
102
|
+
- "do NOT re-run Phase 3 CLIs", "scaffold-component" + "incompatible"
|
|
103
|
+
|
|
104
|
+
For each matching memory: if the memory's `description` or body references
|
|
105
|
+
scaffold-component, scaffold-api-client, scaffold-routes, or Phase 3
|
|
106
|
+
compatibility, **rewrite it** with `STATUS: RESOLVED` and a note that the
|
|
107
|
+
CLIs now support configurable options (`webRoot`, `httpClient`, `useScreens`).
|
|
108
|
+
Update the `description` field to start with `[RESOLVED]`.
|
|
109
|
+
|
|
110
|
+
This cleanup is non-destructive — it preserves the memory (useful history)
|
|
111
|
+
but neutralizes the directive. Log each rewritten memory in the run output.
|
|
112
|
+
|
|
113
|
+
## The phases — overview
|
|
114
|
+
|
|
115
|
+
| Phase | Subagent reads | Subagent writes | Detail |
|
|
116
|
+
|-------|----------------|------------------|--------|
|
|
117
|
+
| 0. Core Foundation Seed | `index.md`, `acteur.md`, `rbac.md` | `Persistence/Seeding/Core/*.cs` × 5 | `references/phases-detail.md` |
|
|
118
|
+
| 1. Entities | `prd.entities.md` + `entité.md` | `Domain/{Module}/*.cs`, EF Configs, migration | same |
|
|
119
|
+
| 2a. API Integration | `prd.api.md` + `règles-métier.md` + `use-case.md` | `Controllers/{Module}/*.cs` (`/api/v1/integration/`), `Application/{Module}/{DTOs,Commands,Validators,Services}/*.cs` | same |
|
|
120
|
+
| 2b. API Screen-driven | `pagespecs/<Entity>.*.md` + `rbac.md` + Phase 2a interfaces (read-only) | `Controllers/{Module}/Screens/*ScreenController.cs` (`/api/screens/{plural}/`), `Application/{Module}/DTOs/Screens/*ScreenDto.cs` | same |
|
|
121
|
+
| 3. Frontend | `prd.frontend.md` + pagespecs (per entity) | `src/features/{module}/{entity}/`, `src/pages/`, `src/extensions/`, `src/i18n/locales/` | same |
|
|
122
|
+
| 3e. Wire-up gate | generated `*Service.ts` + `*Controller.cs` | `_audit/dev-wire-{module}.md`, smoke probe report | `references/gates.md` § "After Phase 3e" |
|
|
123
|
+
| 4. Acceptance Tests | every `<section>/use-case.md` + Phase 2 controllers + DTOs | `Tests/{Module}/Acceptance/*.cs` | same |
|
|
124
|
+
|
|
125
|
+
Phase 3 has seven sub-phases (3.0 theme/layout/primitives → 3a pages → 3b routes
|
|
126
|
+
→ 3c registry aggregator → 3.5 audit-apply → 3d build gate → 3e wire-up gate).
|
|
127
|
+
Phase 3e runs `audit-dev-wire` (static URL parity, ~1 s) then `run-smoke`
|
|
128
|
+
(runtime probe, ~30-120 s) — both BLOCKING. Phase 3a fans out
|
|
129
|
+
one subagent per feature/entity — **each 3a subagent MUST be launched with
|
|
130
|
+
`allowed-tools: [Read, Glob, Grep, Bash]`** (no Edit, no Write) to physically
|
|
131
|
+
prevent hand-writing .tsx files. `validate-page` enforces the
|
|
132
|
+
`@generated-by scaffold-component` marker. Full sub-phase walkthrough +
|
|
133
|
+
audit-or-regenerate loop in `references/phases-detail.md`.
|
|
134
|
+
|
|
135
|
+
## Phase → scaffold-skill routing
|
|
136
|
+
|
|
137
|
+
| Phase | Scaffold skills the subagent loads |
|
|
138
|
+
|-------|------------------------------------|
|
|
139
|
+
| 0 | `development/backend/core-seed` |
|
|
140
|
+
| 1 | `development/backend/{data-layer, dotnet-structure, seed-data}` |
|
|
141
|
+
| 2a | `development/backend/{dto, business-layer, controller}`, `development/testing` |
|
|
142
|
+
| 2b | `development/backend/screen-controller`, `development/testing` |
|
|
143
|
+
| 3 | `development/frontend/{theme, layout, ui-primitives, routes, component, api-client}`, `development/frontend/ui-polish`, `development/audit-dev-frontend`, `development/testing` |
|
|
144
|
+
| 3e | `development/audit-dev-wire`, `development/smoke-test` |
|
|
145
|
+
| 4 | `development/testing` (scaffold-tests-from-ac) |
|
|
146
|
+
|
|
147
|
+
Each subagent gets: its slice Markdown in context, the scaffold-skill SKILL.md
|
|
148
|
+
content, `projectPath` (cwd for Read/Glob/Grep/Bash), `moduleCode`. Returns
|
|
149
|
+
`{ artifacts, testsRun, testsPassed, compileOk }` (Phase 4 also
|
|
150
|
+
`{ factsEmitted, acsParsed }`).
|
|
151
|
+
|
|
152
|
+
## Re-run semantics — NEVER skip Phase 3
|
|
153
|
+
|
|
154
|
+
When re-running a module that was previously developed:
|
|
155
|
+
|
|
156
|
+
- **Phases 0-2**: may be skipped ONLY if BOTH conditions hold:
|
|
157
|
+
1. **Artifacts exist** and the compile + test gate passes, AND
|
|
158
|
+
2. **PRD-to-code coverage passes** — a fast pre-entry check (<5 s)
|
|
159
|
+
confirms every item declared in the PRD/BA files is already
|
|
160
|
+
implemented in the codebase.
|
|
161
|
+
See `references/gates.md` § "Pre-entry coverage checks".
|
|
162
|
+
|
|
163
|
+
If condition 1 holds but condition 2 fails (PRD has new items not yet
|
|
164
|
+
implemented), the phase MUST re-enter. Existing artifacts are kept;
|
|
165
|
+
the subagent adds only what is missing. This eliminates the silent-skip
|
|
166
|
+
bug where PRD additions after the first run are never implemented.
|
|
167
|
+
- **Phase 3 (Frontend): ALWAYS re-enter the pre-entry gate — but regenerate
|
|
168
|
+
only the delta (F4.1).** The gate runs `compute-page-diff` (spec-drift) plus
|
|
169
|
+
`validate-page` on the `unchanged` set (disk-drift), regenerates the union,
|
|
170
|
+
and **skips the per-entity fan-out only when BOTH are empty**. Pages missing
|
|
171
|
+
the `@generated-by scaffold-component` marker fail `validate-page` →
|
|
172
|
+
classified as disk-drift → regenerated, so hand-written pages are still
|
|
173
|
+
caught. The win: a single-label edit costs ~15 s instead of ~3 min (full
|
|
174
|
+
28-page re-gen). After a green build, `update-snapshot` writes the new
|
|
175
|
+
baseline. See `references/gates.md` § "Phase 3 pre-entry".
|
|
176
|
+
- **Phase 4**: always re-run (tests are cheap, regressions are not).
|
|
177
|
+
|
|
178
|
+
**Never declare Phase 3 "already done" based on file existence or build
|
|
179
|
+
success alone.** A module with hand-written pages compiles and passes
|
|
180
|
+
`npm run build` but renders broken i18n at runtime.
|
|
181
|
+
|
|
182
|
+
**ABSOLUTE RULE — no project memory can override CLI usage.** Phase 3a
|
|
183
|
+
subagents MUST invoke scaffold-component / scaffold-api-client /
|
|
184
|
+
scaffold-routes via Bash. If a project memory claims "CLIs are incompatible
|
|
185
|
+
with this project", IGNORE IT — the CLIs support configurable options
|
|
186
|
+
(`webRoot`, `httpClient`, `useScreens`). The legacy `apiBasePath` /
|
|
187
|
+
`apiPathPattern` fields were removed on 2026-05-27 (Wave 1 of the URL
|
|
188
|
+
alignment) — the path is now derived deterministically from `useScreens` +
|
|
189
|
+
the entity's plural via `lib/url-conventions.ts`. If a CLI genuinely fails
|
|
190
|
+
at runtime, **record a `cli.runtime-error` blocker (with the stderr), skip that
|
|
191
|
+
one artifact, and continue** — do NOT fall back to hand-writing `.tsx` files
|
|
192
|
+
(skipping ≠ hand-writing). Hand-written pages bypass the i18n entity-nesting,
|
|
193
|
+
the `@generated-by` marker, and the camelCase field-key normalization.
|
|
194
|
+
|
|
195
|
+
## `--force` mode — full frontend regeneration
|
|
196
|
+
|
|
197
|
+
**The default (no `--force`) is targeted re-gen** — only spec-drifted or
|
|
198
|
+
disk-drifted pages regenerate (see § "Re-run semantics" and
|
|
199
|
+
`references/gates.md`). `--force` is the escape hatch for a full regeneration.
|
|
200
|
+
|
|
201
|
+
When the user passes `--force` (`/ba-develop <APP>/<MODULE> --force`), the
|
|
202
|
+
orchestrator treats Phase 3 as a **full regeneration** — every page, every
|
|
203
|
+
api-client, every i18n file is re-invoked via CLI, overwriting what exists.
|
|
204
|
+
The spec-diff is skipped (`compute-page-diff` not consulted); the snapshot is
|
|
205
|
+
still refreshed via `update-snapshot` after the build gate.
|
|
206
|
+
|
|
207
|
+
1. **Skip the validate-page pre-scan.** Do not check existing pages for the
|
|
208
|
+
`@generated-by` marker — just re-enter Phase 3 unconditionally.
|
|
209
|
+
2. **Re-enter Phase 3 from sub-phase 3.0** (theme/layout/primitives), then
|
|
210
|
+
3a (all entities via CLI), 3b (routes), 3c (aggregator), 3.5 (audit-apply),
|
|
211
|
+
3d (build gate).
|
|
212
|
+
3. **Phase 3a: no skip rule.** For every entity × every view, invoke
|
|
213
|
+
`scaffold-component` even if the `.tsx` already exists. The CLI overwrites
|
|
214
|
+
the file in place. Same for `scaffold-api-client` — re-invoke for every
|
|
215
|
+
entity, overwriting existing services and hooks.
|
|
216
|
+
4. **Phases 0-2** are NOT affected by `--force` — they follow normal re-run
|
|
217
|
+
semantics (skip if gates pass). Backend code is untouched.
|
|
218
|
+
5. **Phase 4** always re-runs regardless of `--force`.
|
|
219
|
+
|
|
220
|
+
No files are deleted. The CLIs overwrite existing files with freshly generated
|
|
221
|
+
content. Files outside the module's scope (custom components, other modules)
|
|
222
|
+
are never touched.
|
|
223
|
+
|
|
224
|
+
**When to use `--force`:**
|
|
225
|
+
- After fixing CLI bugs that affected previous generation
|
|
226
|
+
- When pages were hand-written by a subagent that bypassed the CLIs
|
|
227
|
+
- When i18n structure is corrupted (flat keys instead of entity-nested)
|
|
228
|
+
- When the user modified pagespecs and wants a full regeneration
|
|
229
|
+
|
|
230
|
+
**Output**: the run report includes `"forceMode": true` and
|
|
231
|
+
`"phase3.regeneratedFiles": [<list of overwritten files>]`.
|
|
232
|
+
|
|
233
|
+
## Auto-healing — the short version
|
|
234
|
+
|
|
235
|
+
When a phase's gate fails, the orchestrator **never halts** and never asks the
|
|
236
|
+
user. It classifies the failure, applies a targeted fix, and re-runs the gate —
|
|
237
|
+
up to **25 retries per item**, with fingerprint dedup (same hash 3× → stop
|
|
238
|
+
retrying THIS item early).
|
|
239
|
+
|
|
240
|
+
The 29 failure-kind classification table (22 original + 6 wire/smoke kinds
|
|
241
|
+
added in Wave 2 of the URL alignment, 2026-05-27 + 1 cross-module FK kind
|
|
242
|
+
added in Bug 6 fix, 2026-05-28), the defer conditions, and the heal-log +
|
|
243
|
+
blocker-log schemas all live in **`references/auto-healing.md`**. Load that
|
|
244
|
+
file when a gate fails for the first time in a run.
|
|
245
|
+
|
|
246
|
+
When a failure is genuinely unhealable (the retry budget exhausts, a fingerprint
|
|
247
|
+
loops, or the failure is structural), the orchestrator **defers the item**: it
|
|
248
|
+
takes the safest best-effort action (skip the item, keep existing code, generate
|
|
249
|
+
without applying, preserve `@customised` files), records a **blocker**, and
|
|
250
|
+
continues. Blockers (never halts) are recorded for: PRD-not-dev-ready, PRD/BA
|
|
251
|
+
gaps, destructive migration, real business-logic / acceptance disagreement,
|
|
252
|
+
registry collision, wire verb-mismatch, smoke 5xx, smoke boot timeout,
|
|
253
|
+
cross-module FK missing, customised-file conflict, missing scaffolder, and CLI
|
|
254
|
+
runtime errors. **Halt is never the outcome — the run always reaches the end of
|
|
255
|
+
the module and reports `blockers[]`.**
|
|
256
|
+
|
|
257
|
+
## Commits
|
|
258
|
+
|
|
259
|
+
After each phase whose gate passes, run from `projectPath`:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
git add -A && git commit -m "<per-phase message>"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Per-phase message templates + auto-healed body line + failure handling →
|
|
266
|
+
**`references/commit-checkpoints.md`**.
|
|
267
|
+
|
|
268
|
+
Never push from this orchestrator; pushing is a separate user action
|
|
269
|
+
(`/gitflow pr` or `/gitflow sync`).
|
|
270
|
+
|
|
271
|
+
## Self-verification before reporting completion
|
|
272
|
+
|
|
273
|
+
1. **AC coverage** — Phase 4 emits `acCoverage = { total, covered, missing[] }`
|
|
274
|
+
from BA `use-case.md` × generated `[Trait("AC", ...)]` Facts. Phase 4's
|
|
275
|
+
gate already enforces `missing == []`; this is a post-hoc safety check.
|
|
276
|
+
2. **Non-goal adherence** — grep generated code for keywords from
|
|
277
|
+
`structured.nonGoals[]`. Any match is a potential scope violation.
|
|
278
|
+
3. **Slice boundary respect** — no entity path in a frontend file, no DTO
|
|
279
|
+
in a domain file. Quick Grep sanity check.
|
|
280
|
+
|
|
281
|
+
## Output
|
|
282
|
+
|
|
283
|
+
Emit one JSON object describing the entire run. Full schema (with `phases[]`,
|
|
284
|
+
`healingSummary[]`, `acCoverage`, `overallStatus`) lives in
|
|
285
|
+
**`references/output-contract.md`**.
|
|
286
|
+
|
|
287
|
+
## Detailed references
|
|
288
|
+
|
|
289
|
+
The full mechanics live in `references/`:
|
|
290
|
+
|
|
291
|
+
| File | When to load |
|
|
292
|
+
|------|--------------|
|
|
293
|
+
| [`references/phases-detail.md`](references/phases-detail.md) | Phase-by-phase walkthrough (sub-phases, derivation, per-entity loop, cross-checks). Load at the start of each phase. |
|
|
294
|
+
| [`references/auto-healing.md`](references/auto-healing.md) | Retry loop + failure classification + defer conditions (never aborts the run) + heal log + blocker log. Load the first time a gate fails. |
|
|
295
|
+
| [`references/gates.md`](references/gates.md) | Per-phase BLOCKING gate conditions (build, tests, audit, ComponentKey shape, etc.). Load when running a gate. |
|
|
296
|
+
| [`references/commit-checkpoints.md`](references/commit-checkpoints.md) | Commit command, per-phase messages, auto-healed body line, failure handling. Load before each commit. |
|
|
297
|
+
| [`references/anti-patterns.md`](references/anti-patterns.md) | Failure modes the design forbids — orchestrator, auto-healing, Phase 2, Phase 3. Load when uncertain about a design decision. |
|
|
298
|
+
| [`references/output-contract.md`](references/output-contract.md) | Final JSON schema with `phases[]`, `healingSummary[]`, `overallStatus`. Load before emitting the report. |
|
|
299
|
+
|
|
300
|
+
## Non-goals
|
|
301
|
+
|
|
302
|
+
- Not a generic orchestrator. PRD-driven only. Ad-hoc feature work uses direct
|
|
303
|
+
scaffold skills.
|
|
304
|
+
- Does not deploy. Generates code locally against `projectPath`; deployment
|
|
305
|
+
is separate.
|
|
306
|
+
- Does not modify the PRD. Real gaps → implement what the PRD does specify,
|
|
307
|
+
then **defer the gap as a `prd.gap` blocker** (`userAction` names the slice to
|
|
308
|
+
regenerate). Never patch the PRD locally; never halt to ask for a regeneration.
|
|
309
|
+
- Does not invent scaffold skills. Missing scaffolder → record a
|
|
310
|
+
`scaffolder.missing` blocker, skip that artifact, continue. Never improvise.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* compute-page-diff — unit + guard tests.
|
|
3
|
+
*
|
|
4
|
+
* Covers the F4.1 test matrix:
|
|
5
|
+
* - canonical-hash determinism is tested in lib/__tests__/canonical-hash.test.ts
|
|
6
|
+
* - tests 4-9 : computeDiff spec-diff scenarios + extractFencedJson
|
|
7
|
+
* - test 10 : toRegenerate empty when nothing changed (skip signal)
|
|
8
|
+
* - tests 11-14 : disk-drift guard (silent-skip class) — these pin the
|
|
9
|
+
* orchestrator's Phase 3a union contract using INJECTED
|
|
10
|
+
* exists/errCount deps, so the union logic is unit-testable
|
|
11
|
+
* without a real web project.
|
|
12
|
+
*/
|
|
13
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs'
|
|
14
|
+
import { tmpdir } from 'node:os'
|
|
15
|
+
import { join } from 'node:path'
|
|
16
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
17
|
+
import { canonicalHash } from '../../../../lib/canonical-hash.js'
|
|
18
|
+
import { computeDiff } from '../compute-diff.js'
|
|
19
|
+
import { extractFencedJson, scanPagespecs, loadSnapshot, SNAPSHOT_FILENAME } from '../scan-pagespecs.js'
|
|
20
|
+
import { computeDiskDrift, selectPagesToRegenerate } from '../disk-drift.js'
|
|
21
|
+
|
|
22
|
+
const SPEC_A = { screenCode: 'SCR-A-001', entity: 'TypeAffaire', view: 'list', columns: [{ key: 'code' }] }
|
|
23
|
+
const SPEC_B = { screenCode: 'SCR-B-001', entity: 'TypeAffaire', view: 'form', fields: ['code', 'libelle'] }
|
|
24
|
+
|
|
25
|
+
describe('extractFencedJson (compute-page-diff copy)', () => {
|
|
26
|
+
it('extracts the first fenced json block (test 9)', () => {
|
|
27
|
+
expect(extractFencedJson('# T\n\n```json\n{"x":1}\n```\n')).toBe('{"x":1}')
|
|
28
|
+
})
|
|
29
|
+
it('returns null when the json tag is absent', () => {
|
|
30
|
+
expect(extractFencedJson('```\n{"x":1}\n```')).toBeNull()
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
describe('computeDiff', () => {
|
|
35
|
+
let moduleRoot: string
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
moduleRoot = mkdtempSync(join(tmpdir(), 'compute-page-diff-'))
|
|
38
|
+
mkdirSync(join(moduleRoot, 'pagespecs'), { recursive: true })
|
|
39
|
+
})
|
|
40
|
+
afterEach(() => rmSync(moduleRoot, { recursive: true, force: true }))
|
|
41
|
+
|
|
42
|
+
function writePagespec(name: string, spec: object): void {
|
|
43
|
+
writeFileSync(join(moduleRoot, 'pagespecs', name), '```json\n' + JSON.stringify(spec) + '\n```\n', 'utf8')
|
|
44
|
+
}
|
|
45
|
+
function writeSnapshot(pages: Record<string, string>): void {
|
|
46
|
+
writeFileSync(join(moduleRoot, SNAPSHOT_FILENAME), JSON.stringify({ lastRun: '2026-05-28T00:00:00Z', pages }), 'utf8')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
it('treats every page as added when no snapshot exists (test 4)', () => {
|
|
50
|
+
writePagespec('TypeAffaire.list.md', SPEC_A)
|
|
51
|
+
writePagespec('TypeAffaire.form.md', SPEC_B)
|
|
52
|
+
const r = computeDiff({ moduleRoot })
|
|
53
|
+
expect(r.snapshotFound).toBe(false)
|
|
54
|
+
expect(r.diff.added).toEqual(['TypeAffaire.form', 'TypeAffaire.list'])
|
|
55
|
+
expect(r.diff.modified).toEqual([])
|
|
56
|
+
expect(r.diff.unchanged).toEqual([])
|
|
57
|
+
expect(r.toRegenerate).toEqual(['TypeAffaire.form', 'TypeAffaire.list'])
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it('treats every page as unchanged when the snapshot matches (test 5 + test 10)', () => {
|
|
61
|
+
writePagespec('TypeAffaire.list.md', SPEC_A)
|
|
62
|
+
writePagespec('TypeAffaire.form.md', SPEC_B)
|
|
63
|
+
writeSnapshot({ 'TypeAffaire.list': canonicalHash(SPEC_A), 'TypeAffaire.form': canonicalHash(SPEC_B) })
|
|
64
|
+
const r = computeDiff({ moduleRoot })
|
|
65
|
+
expect(r.snapshotFound).toBe(true)
|
|
66
|
+
expect(r.diff.unchanged).toEqual(['TypeAffaire.form', 'TypeAffaire.list'])
|
|
67
|
+
expect(r.diff.added).toEqual([])
|
|
68
|
+
// test 10: spec-side regenerate set is empty → the orchestrator's skip signal
|
|
69
|
+
expect(r.toRegenerate).toEqual([])
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('detects a single modified page (test 6)', () => {
|
|
73
|
+
writePagespec('TypeAffaire.list.md', SPEC_A)
|
|
74
|
+
writeSnapshot({ 'TypeAffaire.list': 'sha256-STALE' })
|
|
75
|
+
const r = computeDiff({ moduleRoot })
|
|
76
|
+
expect(r.diff.modified).toHaveLength(1)
|
|
77
|
+
expect(r.diff.modified[0]).toMatchObject({ key: 'TypeAffaire.list', previousHash: 'sha256-STALE' })
|
|
78
|
+
expect(r.diff.modified[0].currentHash).toBe(canonicalHash(SPEC_A))
|
|
79
|
+
expect(r.toRegenerate).toEqual(['TypeAffaire.list'])
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
it('detects a single added page alongside an unchanged one (test 7)', () => {
|
|
83
|
+
writePagespec('TypeAffaire.list.md', SPEC_A)
|
|
84
|
+
writePagespec('TypeAffaire.form.md', SPEC_B)
|
|
85
|
+
writeSnapshot({ 'TypeAffaire.list': canonicalHash(SPEC_A) })
|
|
86
|
+
const r = computeDiff({ moduleRoot })
|
|
87
|
+
expect(r.diff.added).toEqual(['TypeAffaire.form'])
|
|
88
|
+
expect(r.diff.unchanged).toEqual(['TypeAffaire.list'])
|
|
89
|
+
expect(r.toRegenerate).toEqual(['TypeAffaire.form'])
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('detects a removed page (in snapshot, no longer on disk) (test 8)', () => {
|
|
93
|
+
writePagespec('TypeAffaire.list.md', SPEC_A)
|
|
94
|
+
writeSnapshot({ 'TypeAffaire.list': canonicalHash(SPEC_A), 'TypeAffaire.detail': 'sha256-OLD' })
|
|
95
|
+
const r = computeDiff({ moduleRoot })
|
|
96
|
+
expect(r.diff.removed).toEqual(['TypeAffaire.detail'])
|
|
97
|
+
expect(r.diff.unchanged).toEqual(['TypeAffaire.list'])
|
|
98
|
+
expect(r.toRegenerate).toEqual([]) // removed pages are not regenerated
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it('handles a mixed add/modify/unchanged/remove diff', () => {
|
|
102
|
+
writePagespec('TypeAffaire.list.md', SPEC_A) // unchanged
|
|
103
|
+
writePagespec('TypeAffaire.form.md', SPEC_B) // modified
|
|
104
|
+
writePagespec('TypeAffaire.detail.md', { v: 1 }) // added
|
|
105
|
+
writeSnapshot({
|
|
106
|
+
'TypeAffaire.list': canonicalHash(SPEC_A),
|
|
107
|
+
'TypeAffaire.form': 'sha256-STALE',
|
|
108
|
+
'TypeAffaire.kanban': 'sha256-GONE',
|
|
109
|
+
})
|
|
110
|
+
const r = computeDiff({ moduleRoot })
|
|
111
|
+
expect(r.diff.added).toEqual(['TypeAffaire.detail'])
|
|
112
|
+
expect(r.diff.modified.map((m) => m.key)).toEqual(['TypeAffaire.form'])
|
|
113
|
+
expect(r.diff.unchanged).toEqual(['TypeAffaire.list'])
|
|
114
|
+
expect(r.diff.removed).toEqual(['TypeAffaire.kanban'])
|
|
115
|
+
expect(r.toRegenerate).toEqual(['TypeAffaire.detail', 'TypeAffaire.form'])
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
it('warns and skips a malformed pagespec without aborting the diff', () => {
|
|
119
|
+
writePagespec('TypeAffaire.list.md', SPEC_A)
|
|
120
|
+
writeFileSync(join(moduleRoot, 'pagespecs', 'Broken.list.md'), '# no fenced block', 'utf8')
|
|
121
|
+
const r = computeDiff({ moduleRoot })
|
|
122
|
+
expect(r.diff.added).toEqual(['TypeAffaire.list'])
|
|
123
|
+
expect(r.warnings.some((w) => w.includes('Broken.list.md'))).toBe(true)
|
|
124
|
+
})
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
describe('scanPagespecs / loadSnapshot', () => {
|
|
128
|
+
it('returns empty (no warning) when pagespecs/ is absent', () => {
|
|
129
|
+
const empty = mkdtempSync(join(tmpdir(), 'cpd-empty-'))
|
|
130
|
+
try {
|
|
131
|
+
expect(scanPagespecs(empty)).toEqual({ pages: [], warnings: [] })
|
|
132
|
+
expect(loadSnapshot(empty)).toEqual({ snapshot: { pages: {} }, found: false })
|
|
133
|
+
} finally {
|
|
134
|
+
rmSync(empty, { recursive: true, force: true })
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
describe('disk-drift guard (orchestrator Phase 3a union contract)', () => {
|
|
140
|
+
it('flags an unchanged page whose .tsx is missing (test 11)', () => {
|
|
141
|
+
const drift = computeDiskDrift(['TypeAffaire.list'], {
|
|
142
|
+
exists: () => false,
|
|
143
|
+
errCount: () => 0,
|
|
144
|
+
})
|
|
145
|
+
expect(drift).toEqual(['TypeAffaire.list'])
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('flags an unchanged page whose .tsx has err violations (test 12)', () => {
|
|
149
|
+
const drift = computeDiskDrift(['TypeAffaire.list'], {
|
|
150
|
+
exists: () => true,
|
|
151
|
+
errCount: (k) => (k === 'TypeAffaire.list' ? 3 : 0),
|
|
152
|
+
})
|
|
153
|
+
expect(drift).toEqual(['TypeAffaire.list'])
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
it('does NOT flag an unchanged page that is present and valid (test 13)', () => {
|
|
157
|
+
const drift = computeDiskDrift(['TypeAffaire.list', 'TypeAffaire.form'], {
|
|
158
|
+
exists: () => true,
|
|
159
|
+
errCount: () => 0,
|
|
160
|
+
})
|
|
161
|
+
expect(drift).toEqual([])
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
it('skips Phase 3a when spec-diff AND disk-drift are both empty (test 14)', () => {
|
|
165
|
+
// all unchanged + all valid on disk → nothing to regenerate → Phase 3a skipped
|
|
166
|
+
const diskDrift = computeDiskDrift(['A.list', 'B.form'], { exists: () => true, errCount: () => 0 })
|
|
167
|
+
expect(selectPagesToRegenerate([], diskDrift)).toEqual([])
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
it('unions spec-diff with disk-drift, de-duplicated and sorted', () => {
|
|
171
|
+
expect(selectPagesToRegenerate(['B.form', 'A.list'], ['A.list', 'C.detail'])).toEqual([
|
|
172
|
+
'A.list',
|
|
173
|
+
'B.form',
|
|
174
|
+
'C.detail',
|
|
175
|
+
])
|
|
176
|
+
})
|
|
177
|
+
})
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli:compute-page-diff — compute-diff.ts
|
|
3
|
+
*
|
|
4
|
+
* The pure spec-diff core. Loads the previous snapshot, scans the current
|
|
5
|
+
* pagespecs, and categorises each page. `toRegenerate = added ∪ modified` —
|
|
6
|
+
* the disk-drift union is the orchestrator's job (see `disk-drift.ts`).
|
|
7
|
+
*/
|
|
8
|
+
import { scanPagespecs, loadSnapshot } from './scan-pagespecs.js'
|
|
9
|
+
import type { ComputePageDiffInput, ComputePageDiffReport, ModifiedPage } from './types.js'
|
|
10
|
+
|
|
11
|
+
export function computeDiff(input: ComputePageDiffInput): ComputePageDiffReport {
|
|
12
|
+
const { snapshot, found } = loadSnapshot(input.moduleRoot)
|
|
13
|
+
const scan = scanPagespecs(input.moduleRoot)
|
|
14
|
+
|
|
15
|
+
const added: string[] = []
|
|
16
|
+
const modified: ModifiedPage[] = []
|
|
17
|
+
const unchanged: string[] = []
|
|
18
|
+
const removed: string[] = []
|
|
19
|
+
|
|
20
|
+
const currentKeys = new Set<string>()
|
|
21
|
+
for (const { key, hash } of scan.pages) {
|
|
22
|
+
currentKeys.add(key)
|
|
23
|
+
const previousHash = snapshot.pages[key]
|
|
24
|
+
if (previousHash === undefined) {
|
|
25
|
+
added.push(key)
|
|
26
|
+
} else if (previousHash !== hash) {
|
|
27
|
+
modified.push({ key, previousHash, currentHash: hash })
|
|
28
|
+
} else {
|
|
29
|
+
unchanged.push(key)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
for (const key of Object.keys(snapshot.pages)) {
|
|
34
|
+
if (!currentKeys.has(key)) removed.push(key)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const toRegenerate = [...added, ...modified.map((m) => m.key)].sort()
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
moduleRoot: input.moduleRoot,
|
|
41
|
+
snapshotFound: found,
|
|
42
|
+
diff: {
|
|
43
|
+
added: [...added].sort(),
|
|
44
|
+
modified,
|
|
45
|
+
removed: removed.sort(),
|
|
46
|
+
unchanged: [...unchanged].sort(),
|
|
47
|
+
},
|
|
48
|
+
toRegenerate,
|
|
49
|
+
warnings: scan.warnings,
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli:compute-page-diff — disk-drift.ts (Phase 3a orchestrator guard)
|
|
3
|
+
*
|
|
4
|
+
* `compute-page-diff` stays a PURE spec-diff CLI (AC-F4.1-011). This module is
|
|
5
|
+
* the orchestrator-side guard that closes the **silent-skip class**: a pagespec
|
|
6
|
+
* whose hash is unchanged can still have a drifted `.tsx` on disk — deleted,
|
|
7
|
+
* hand-edited into an error state, broken i18n / import. Left alone, an empty
|
|
8
|
+
* spec-diff would skip Phase 3a and let a broken page through, exactly the
|
|
9
|
+
* failure the backend `pre_entry_coverage_check` closes for Phases 0-2
|
|
10
|
+
* (`references/gates.md`).
|
|
11
|
+
*
|
|
12
|
+
* The orchestrator (model-driven, no `orchestrator.ts`) executes this contract
|
|
13
|
+
* by running `compute-page-diff` then `validate-page` on each `unchanged` page.
|
|
14
|
+
* These pure helpers are the tested reference of that union — the file
|
|
15
|
+
* existence + `validate-page` err-count are INJECTED, so the union logic is
|
|
16
|
+
* unit-testable without a real web project.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export interface DiskDriftDeps {
|
|
20
|
+
/** True when the page's generated `.tsx` exists on disk. */
|
|
21
|
+
exists: (key: string) => boolean
|
|
22
|
+
/** Count of `err`-severity violations `validate-page` reports for the page. */
|
|
23
|
+
errCount: (key: string) => number
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Given the `unchanged` set from `compute-page-diff`, return the subset whose
|
|
28
|
+
* `.tsx` is **missing or invalid** on disk. Only `unchanged` pages are checked:
|
|
29
|
+
* `added` / `modified` already regenerate, and `removed` pages no longer exist.
|
|
30
|
+
*
|
|
31
|
+
* Note: `validate-page` itself returns an `err` for a missing file, so the
|
|
32
|
+
* `exists` check is belt-and-suspenders — it lets a caller short-circuit
|
|
33
|
+
* `validate-page` for pages it already knows are gone.
|
|
34
|
+
*/
|
|
35
|
+
export function computeDiskDrift(unchanged: string[], deps: DiskDriftDeps): string[] {
|
|
36
|
+
const drift: string[] = []
|
|
37
|
+
for (const key of unchanged) {
|
|
38
|
+
if (!deps.exists(key)) {
|
|
39
|
+
drift.push(key) // missing
|
|
40
|
+
continue
|
|
41
|
+
}
|
|
42
|
+
if (deps.errCount(key) > 0) drift.push(key) // invalid on disk
|
|
43
|
+
}
|
|
44
|
+
return drift
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Final Phase 3a regeneration set = spec-diff (`added ∪ modified`) ∪ disk-drift.
|
|
49
|
+
* Disk-drift keys outside the spec-diff are folded in; the result is sorted and
|
|
50
|
+
* de-duplicated. Phase 3a is skipped **only** when this is empty — i.e. spec
|
|
51
|
+
* AND disk are both clean.
|
|
52
|
+
*/
|
|
53
|
+
export function selectPagesToRegenerate(specToRegenerate: string[], diskDrift: string[]): string[] {
|
|
54
|
+
return [...new Set([...specToRegenerate, ...diskDrift])].sort()
|
|
55
|
+
}
|