@atlashub/smartstack-cli 3.39.0 → 3.41.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/apex.html +644 -644
- package/.documentation/css/styles.css +2320 -2320
- package/.documentation/init.html +1377 -1377
- package/.documentation/js/app.js +780 -780
- package/.documentation/prd-json-v2.0.0.md +396 -396
- package/.documentation/testing-ba-e2e.md +462 -462
- package/config/default-config.json +95 -95
- package/config/mcp-defaults.json +62 -62
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +6 -4
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +115 -115
- package/scripts/extract-api-endpoints.ts +325 -325
- package/scripts/extract-business-rules.ts +440 -440
- package/scripts/generate-doc-with-mock-ui.ts +804 -804
- package/scripts/health-check.sh +168 -168
- package/scripts/postinstall.js +18 -18
- package/templates/agents/action.md +37 -37
- package/templates/agents/ba-reader.md +378 -378
- package/templates/agents/ba-writer.md +861 -861
- package/templates/agents/code-reviewer.md +163 -163
- package/templates/agents/db-reader.md +149 -149
- package/templates/agents/docs-context-reader.md +143 -143
- package/templates/agents/docs-sync-checker.md +122 -122
- package/templates/agents/efcore/conflicts.md +95 -84
- package/templates/agents/efcore/db-deploy.md +85 -74
- package/templates/agents/efcore/db-reset.md +96 -85
- package/templates/agents/efcore/db-seed.md +72 -61
- package/templates/agents/efcore/db-status.md +97 -86
- package/templates/agents/efcore/migration.md +197 -186
- package/templates/agents/efcore/rebase-snapshot.md +119 -108
- package/templates/agents/efcore/scan.md +103 -92
- package/templates/agents/efcore/squash.md +172 -161
- package/templates/agents/explore-codebase.md +66 -66
- package/templates/agents/explore-docs.md +98 -98
- package/templates/agents/fix-grammar.md +50 -50
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +96 -96
- package/templates/agents/gitflow/commit.md +236 -236
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +146 -146
- package/templates/agents/gitflow/init-clone.md +199 -199
- package/templates/agents/gitflow/init-detect.md +137 -137
- package/templates/agents/gitflow/init-validate.md +225 -225
- package/templates/agents/gitflow/init.md +340 -340
- package/templates/agents/gitflow/merge.md +145 -145
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +191 -191
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +147 -147
- package/templates/agents/gitflow/status.md +95 -95
- package/templates/agents/mcp-healthcheck.md +163 -163
- package/templates/agents/snipper.md +37 -37
- package/templates/agents/websearch.md +46 -46
- package/templates/hooks/appsettings-guard.sh +76 -76
- package/templates/hooks/docs-drift-check.md +96 -96
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +58 -58
- package/templates/hooks/mcp-check.md +64 -64
- package/templates/hooks/ralph-mcp-logger.sh +46 -46
- package/templates/hooks/ralph-session-end.sh +69 -69
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/hooks/wsl-dotnet-cleanup.sh +24 -24
- package/templates/mcp-scaffolding/component.tsx.hbs +318 -318
- package/templates/mcp-scaffolding/controller.cs.hbs +192 -192
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +239 -239
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -116
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -133
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -126
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -261
- package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -53
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +436 -436
- package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -239
- package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -441
- package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -442
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +402 -402
- package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -428
- package/templates/project/DependencyInjection.Application.cs.template +25 -25
- package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -61
- package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -70
- package/templates/project/ExampleEntity.cs.template +116 -116
- package/templates/project/ExampleEntityConfiguration.cs.template +64 -64
- package/templates/project/ExampleService.cs.template +146 -146
- package/templates/project/ExtensionsDbContext.cs.template +41 -41
- package/templates/project/IExtensionsDbContext.cs.template +22 -22
- package/templates/project/Program.cs.template +47 -47
- package/templates/project/README.md +79 -79
- package/templates/project/api.ts.template +12 -12
- package/templates/project/appsettings.json.template +170 -170
- package/templates/project/claude-settings.json.template +5 -5
- package/templates/project/test-frontend/msw/handlers.ts +58 -58
- package/templates/project/test-frontend/msw/server.ts +25 -25
- package/templates/project/test-frontend/setup.ts +16 -16
- package/templates/project/test-frontend/test-utils.tsx +59 -59
- package/templates/project/test-frontend/vitest.config.ts +31 -31
- package/templates/ralph/README.md +93 -93
- package/templates/ralph/ralph.config.yaml +113 -113
- package/templates/scripts/setup-ralph-loop.sh +173 -173
- package/templates/skills/_resources/config-safety.md +61 -61
- package/templates/skills/_resources/context-digest-template.md +53 -53
- package/templates/skills/_resources/doc-context-cache.md +60 -60
- package/templates/skills/_resources/docs-manifest-schema.md +155 -155
- package/templates/skills/_resources/formatting-guide.md +124 -124
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +181 -181
- package/templates/skills/_shared.md +228 -228
- package/templates/skills/admin/SKILL.md +48 -48
- package/templates/skills/ai-prompt/SKILL.md +107 -107
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -47
- package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -122
- package/templates/skills/apex/SKILL.md +168 -168
- package/templates/skills/apex/_shared.md +141 -141
- package/templates/skills/apex/references/agent-teams-protocol.md +164 -164
- package/templates/skills/apex/references/analysis-methods.md +141 -141
- package/templates/skills/apex/references/challenge-questions.md +145 -145
- package/templates/skills/apex/references/code-generation.md +412 -412
- package/templates/skills/apex/references/core-seed-data.md +1437 -1437
- package/templates/skills/apex/references/error-classification.md +144 -144
- package/templates/skills/apex/references/examine-build-validation.md +82 -82
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -177
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -105
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -96
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -110
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -151
- package/templates/skills/apex/references/post-checks.md +1584 -1584
- package/templates/skills/apex/references/smartstack-api.md +1053 -1053
- package/templates/skills/apex/references/smartstack-frontend.md +1571 -1571
- package/templates/skills/apex/references/smartstack-layers.md +402 -402
- package/templates/skills/apex/steps/step-00-init.md +307 -307
- package/templates/skills/apex/steps/step-01-analyze.md +165 -165
- package/templates/skills/apex/steps/step-02-plan.md +144 -144
- package/templates/skills/apex/steps/step-03-execute.md +328 -328
- package/templates/skills/apex/steps/step-04-examine.md +263 -263
- package/templates/skills/apex/steps/step-05-deep-review.md +129 -129
- package/templates/skills/apex/steps/step-06-resolve.md +101 -101
- package/templates/skills/apex/steps/step-07-tests.md +238 -238
- package/templates/skills/apex/steps/step-08-run-tests.md +125 -125
- package/templates/skills/application/SKILL.md +4 -4
- package/templates/skills/application/references/application-roles-template.md +227 -227
- package/templates/skills/application/references/backend-controller-hierarchy.md +58 -58
- package/templates/skills/application/references/backend-entity-seeding.md +72 -72
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -83
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -79
- package/templates/skills/application/references/backend-verification.md +88 -88
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -67
- package/templates/skills/application/references/frontend-route-naming.md +117 -117
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -107
- package/templates/skills/application/references/frontend-verification.md +156 -156
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +1 -1
- package/templates/skills/application/references/provider-template.md +177 -177
- package/templates/skills/application/references/roles-client-project-handling.md +55 -55
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -149
- package/templates/skills/application/references/test-coverage-requirements.md +213 -213
- package/templates/skills/application/references/test-frontend.md +73 -73
- package/templates/skills/application/references/test-prerequisites.md +72 -72
- package/templates/skills/application/steps/step-05-frontend.md +176 -176
- package/templates/skills/application/steps/step-06-migration.md +193 -193
- package/templates/skills/application/steps/step-07-tests.md +356 -356
- package/templates/skills/application/steps/step-08-documentation.md +137 -137
- package/templates/skills/application/templates-backend.md +463 -463
- package/templates/skills/application/templates-frontend.md +685 -685
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +1096 -1096
- package/templates/skills/business-analyse/SKILL.md +327 -327
- package/templates/skills/business-analyse/_architecture.md +123 -123
- package/templates/skills/business-analyse/_elicitation.md +206 -206
- package/templates/skills/business-analyse/_module-loop.md +115 -115
- package/templates/skills/business-analyse/_shared.md +383 -383
- package/templates/skills/business-analyse/_suggestions.md +34 -34
- package/templates/skills/business-analyse/html/ba-interactive.html +4477 -4477
- package/templates/skills/business-analyse/html/build-html.js +77 -77
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +150 -150
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +227 -227
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +199 -199
- package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +205 -205
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +647 -647
- package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +195 -195
- package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +92 -92
- package/templates/skills/business-analyse/html/src/scripts/08-editing.js +135 -135
- package/templates/skills/business-analyse/html/src/scripts/09-export.js +168 -168
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +171 -171
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +166 -166
- package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -38
- package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -101
- package/templates/skills/business-analyse/html/src/styles/03-navigation.css +120 -120
- package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -196
- package/templates/skills/business-analyse/html/src/styles/05-modules.css +454 -454
- package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +272 -272
- package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -184
- package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +241 -241
- package/templates/skills/business-analyse/html/src/template.html +516 -516
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +546 -546
- package/templates/skills/business-analyse/questionnaire/00-application.md +160 -160
- package/templates/skills/business-analyse/questionnaire/00b-project.md +85 -85
- package/templates/skills/business-analyse/questionnaire/01-context.md +185 -185
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +189 -189
- package/templates/skills/business-analyse/questionnaire/03-scope.md +164 -164
- package/templates/skills/business-analyse/questionnaire/04-data.md +88 -88
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +58 -58
- package/templates/skills/business-analyse/questionnaire/06-security.md +68 -68
- package/templates/skills/business-analyse/questionnaire/07-ui.md +76 -76
- package/templates/skills/business-analyse/questionnaire/08-performance.md +42 -42
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +45 -45
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +43 -43
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -59
- package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -58
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -69
- package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +135 -135
- package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +136 -136
- package/templates/skills/business-analyse/questionnaire.md +337 -337
- package/templates/skills/business-analyse/react/application-viewer.md +242 -242
- package/templates/skills/business-analyse/react/components.md +551 -551
- package/templates/skills/business-analyse/react/i18n-template.md +306 -306
- package/templates/skills/business-analyse/references/acceptance-criteria.md +169 -169
- package/templates/skills/business-analyse/references/agent-module-prompt.md +362 -362
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +557 -557
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -190
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +566 -566
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -41
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -74
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +115 -115
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +68 -69
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +85 -85
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -297
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +107 -107
- package/templates/skills/business-analyse/references/deploy-data-build.md +180 -180
- package/templates/skills/business-analyse/references/deploy-modes.md +118 -118
- package/templates/skills/business-analyse/references/detection-strategies.md +424 -424
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -218
- package/templates/skills/business-analyse/references/handoff-file-templates.md +120 -120
- package/templates/skills/business-analyse/references/handoff-mappings.md +81 -81
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -312
- package/templates/skills/business-analyse/references/html-data-mapping.md +299 -299
- package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -65
- package/templates/skills/business-analyse/references/naming-conventions.md +243 -243
- package/templates/skills/business-analyse/references/prd-generation.md +258 -258
- package/templates/skills/business-analyse/references/review-data-mapping.md +363 -363
- package/templates/skills/business-analyse/references/robustness-checks.md +542 -542
- package/templates/skills/business-analyse/references/spec-auto-inference.md +111 -111
- package/templates/skills/business-analyse/references/team-orchestration.md +1022 -1022
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -85
- package/templates/skills/business-analyse/references/ui-resource-cards.md +259 -259
- package/templates/skills/business-analyse/references/validate-incremental-html.md +121 -121
- package/templates/skills/business-analyse/references/validation-checklist.md +347 -347
- package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +335 -335
- package/templates/skills/business-analyse/schemas/application-schema.json +453 -453
- package/templates/skills/business-analyse/schemas/feature-schema.json +53 -53
- package/templates/skills/business-analyse/schemas/project-schema.json +485 -485
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +201 -201
- package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +82 -82
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +80 -80
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +70 -70
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +547 -547
- package/templates/skills/business-analyse/schemas/sections/validation-schema.json +93 -93
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +226 -226
- package/templates/skills/business-analyse/steps/step-00-init.md +575 -576
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +767 -767
- package/templates/skills/business-analyse/steps/step-01b-applications.md +419 -419
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +387 -387
- package/templates/skills/business-analyse/steps/step-03a-data.md +16 -16
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +506 -506
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +252 -252
- package/templates/skills/business-analyse/steps/step-03b-ui.md +425 -425
- package/templates/skills/business-analyse/steps/step-03c-compile.md +611 -611
- package/templates/skills/business-analyse/steps/step-03d-validate.md +783 -783
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +17 -17
- package/templates/skills/business-analyse/steps/step-04a-collect.md +415 -415
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +163 -163
- package/templates/skills/business-analyse/steps/step-04c-decide.md +186 -186
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +840 -840
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +522 -522
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +703 -703
- package/templates/skills/business-analyse/steps/step-06-review.md +278 -278
- package/templates/skills/business-analyse/templates/tpl-frd.md +168 -168
- package/templates/skills/business-analyse/templates/tpl-handoff.md +186 -186
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +59 -59
- package/templates/skills/business-analyse/templates/tpl-progress.md +172 -172
- package/templates/skills/business-analyse/templates-frd.md +476 -476
- package/templates/skills/business-analyse/templates-react.md +574 -574
- package/templates/skills/cc-agent/SKILL.md +129 -129
- package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -95
- package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -213
- package/templates/skills/cc-agent/references/permission-modes.md +102 -102
- package/templates/skills/cc-agent/references/tools-reference.md +144 -144
- package/templates/skills/cc-agent/steps/step-00-init.md +134 -134
- package/templates/skills/cc-agent/steps/step-01-design.md +186 -186
- package/templates/skills/cc-agent/steps/step-02-generate.md +131 -131
- package/templates/skills/cc-agent/steps/step-03-validate.md +130 -130
- package/templates/skills/cc-agent/templates/agent-categorized.md +67 -67
- package/templates/skills/cc-agent/templates/agent-standalone.md +56 -56
- package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -94
- package/templates/skills/cc-audit/SKILL.md +108 -108
- package/templates/skills/cc-audit/references/agent-checklist.md +91 -91
- package/templates/skills/cc-audit/references/hook-checklist.md +110 -110
- package/templates/skills/cc-audit/references/skill-checklist.md +70 -70
- package/templates/skills/cc-audit/steps/step-00-init.md +98 -98
- package/templates/skills/cc-audit/steps/step-01-scan.md +142 -142
- package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -158
- package/templates/skills/cc-audit/steps/step-03-report.md +142 -142
- package/templates/skills/cc-skill/SKILL.md +134 -134
- package/templates/skills/cc-skill/references/best-practices.md +167 -167
- package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -182
- package/templates/skills/cc-skill/references/skill-patterns.md +199 -199
- package/templates/skills/cc-skill/steps/step-00-init.md +119 -119
- package/templates/skills/cc-skill/steps/step-01-design.md +199 -199
- package/templates/skills/cc-skill/steps/step-02-generate.md +145 -145
- package/templates/skills/cc-skill/steps/step-03-steps.md +151 -151
- package/templates/skills/cc-skill/steps/step-04-validate.md +124 -124
- package/templates/skills/cc-skill/templates/skill-forked.md +85 -85
- package/templates/skills/cc-skill/templates/skill-progressive.md +102 -102
- package/templates/skills/cc-skill/templates/skill-simple.md +75 -75
- package/templates/skills/cc-skill/templates/step-template.md +82 -82
- package/templates/skills/check-version/SKILL.md +196 -196
- package/templates/skills/controller/SKILL.md +162 -162
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/references/controller-code-templates.md +159 -159
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -209
- package/templates/skills/controller/references/permission-sync-templates.md +149 -149
- package/templates/skills/controller/steps/step-00-init.md +193 -191
- package/templates/skills/controller/steps/step-01-analyze.md +146 -146
- package/templates/skills/controller/steps/step-02-plan.md +176 -176
- package/templates/skills/controller/steps/step-03-generate.md +189 -189
- package/templates/skills/controller/steps/step-04-perms.md +80 -80
- package/templates/skills/controller/steps/step-05-validate.md +107 -107
- package/templates/skills/controller/templates.md +1555 -1555
- package/templates/skills/debug/SKILL.md +70 -70
- package/templates/skills/debug/references/team-protocol.md +232 -232
- package/templates/skills/debug/steps/step-00-init.md +57 -57
- package/templates/skills/debug/steps/step-01-analyze.md +219 -219
- package/templates/skills/debug/steps/step-02-resolve.md +85 -85
- package/templates/skills/documentation/SKILL.md +132 -132
- package/templates/skills/documentation/data-schema.md +227 -227
- package/templates/skills/documentation/steps/step-00-init.md +70 -70
- package/templates/skills/documentation/steps/step-01-scan.md +113 -113
- package/templates/skills/documentation/steps/step-02-generate.md +231 -231
- package/templates/skills/documentation/steps/step-03-validate.md +251 -238
- package/templates/skills/documentation/templates.md +662 -663
- package/templates/skills/efcore/SKILL.md +168 -167
- package/templates/skills/efcore/references/both-contexts.md +32 -32
- package/templates/skills/efcore/references/database-operations.md +67 -67
- package/templates/skills/efcore/references/destructive-operations.md +38 -38
- package/templates/skills/efcore/references/reset-operations.md +81 -81
- package/templates/skills/efcore/references/seed-methods.md +86 -86
- package/templates/skills/efcore/references/shared-init-functions.md +250 -250
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -61
- package/templates/skills/efcore/references/troubleshooting.md +81 -81
- package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -227
- package/templates/skills/efcore/steps/db/step-deploy.md +217 -217
- package/templates/skills/efcore/steps/db/step-reset.md +186 -186
- package/templates/skills/efcore/steps/db/step-seed.md +166 -166
- package/templates/skills/efcore/steps/db/step-status.md +173 -173
- package/templates/skills/efcore/steps/migration/step-00-init.md +102 -102
- package/templates/skills/efcore/steps/migration/step-01-check.md +164 -164
- package/templates/skills/efcore/steps/migration/step-02-create.md +160 -160
- package/templates/skills/efcore/steps/migration/step-03-validate.md +168 -168
- package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +173 -173
- package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +100 -100
- package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +115 -115
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +112 -112
- package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +157 -157
- package/templates/skills/efcore/steps/shared/step-00-init.md +131 -131
- package/templates/skills/efcore/steps/squash/step-00-init.md +141 -141
- package/templates/skills/efcore/steps/squash/step-01-backup.md +120 -120
- package/templates/skills/efcore/steps/squash/step-02-fetch.md +168 -168
- package/templates/skills/efcore/steps/squash/step-03-create.md +184 -184
- package/templates/skills/efcore/steps/squash/step-04-validate.md +174 -174
- package/templates/skills/explore/SKILL.md +98 -98
- package/templates/skills/feature-full/SKILL.md +111 -111
- package/templates/skills/feature-full/steps/step-00-init.md +57 -57
- package/templates/skills/feature-full/steps/step-01-implementation.md +120 -120
- package/templates/skills/gitflow/SKILL.md +377 -377
- package/templates/skills/gitflow/_shared.md +620 -620
- package/templates/skills/gitflow/phases/abort.md +189 -189
- package/templates/skills/gitflow/phases/cleanup.md +234 -234
- package/templates/skills/gitflow/phases/status.md +192 -192
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -58
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -49
- package/templates/skills/gitflow/references/finish-cleanup.md +55 -55
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -45
- package/templates/skills/gitflow/references/init-config-template.md +135 -135
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -41
- package/templates/skills/gitflow/references/init-name-normalization.md +103 -103
- package/templates/skills/gitflow/references/init-questions.md +185 -185
- package/templates/skills/gitflow/references/init-structure-creation.md +75 -75
- package/templates/skills/gitflow/references/init-version-detection.md +21 -21
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -43
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -36
- package/templates/skills/gitflow/references/merge-execution.md +62 -62
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -76
- package/templates/skills/gitflow/references/plan-template.md +69 -69
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -60
- package/templates/skills/gitflow/references/pr-generation.md +58 -58
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -28
- package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -70
- package/templates/skills/gitflow/references/start-local-config.md +113 -113
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -50
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -44
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -38
- package/templates/skills/gitflow/steps/step-commit.md +199 -199
- package/templates/skills/gitflow/steps/step-finish.md +147 -147
- package/templates/skills/gitflow/steps/step-init.md +190 -190
- package/templates/skills/gitflow/steps/step-merge.md +85 -85
- package/templates/skills/gitflow/steps/step-plan.md +151 -151
- package/templates/skills/gitflow/steps/step-pr.md +199 -199
- package/templates/skills/gitflow/steps/step-start.md +195 -195
- package/templates/skills/gitflow/steps/step-sync.md +161 -161
- package/templates/skills/gitflow/templates/config.json +72 -72
- package/templates/skills/mcp/SKILL.md +62 -62
- package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -108
- package/templates/skills/mcp/steps/step-02-tools.md +73 -73
- package/templates/skills/notification/SKILL.md +173 -173
- package/templates/skills/quick-search/SKILL.md +99 -99
- package/templates/skills/ralph-loop/SKILL.md +234 -234
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -185
- package/templates/skills/ralph-loop/references/category-rules.md +96 -96
- package/templates/skills/ralph-loop/references/compact-loop.md +300 -300
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -127
- package/templates/skills/ralph-loop/references/module-transition.md +151 -151
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -171
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -246
- package/templates/skills/ralph-loop/references/section-splitting.md +439 -439
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +256 -256
- package/templates/skills/ralph-loop/references/team-orchestration.md +547 -547
- package/templates/skills/ralph-loop/steps/step-00-init.md +150 -150
- package/templates/skills/ralph-loop/steps/step-01-task.md +174 -174
- package/templates/skills/ralph-loop/steps/step-02-execute.md +177 -177
- package/templates/skills/ralph-loop/steps/step-03-commit.md +92 -92
- package/templates/skills/ralph-loop/steps/step-04-check.md +207 -207
- package/templates/skills/ralph-loop/steps/step-05-report.md +175 -175
- package/templates/skills/refactor/SKILL.md +56 -56
- package/templates/skills/refactor/steps/step-01-discover.md +60 -60
- package/templates/skills/refactor/steps/step-02-execute.md +67 -67
- package/templates/skills/review-code/SKILL.md +95 -94
- package/templates/skills/review-code/references/clean-code-principles.md +292 -292
- package/templates/skills/review-code/references/code-quality-metrics.md +174 -174
- package/templates/skills/review-code/references/feedback-patterns.md +149 -149
- package/templates/skills/review-code/references/owasp-api-top10.md +243 -243
- package/templates/skills/review-code/references/security-checklist.md +212 -212
- package/templates/skills/review-code/steps/step-01-smartstack.md +96 -96
- package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -80
- package/templates/skills/review-code/steps/step-03-react.md +44 -44
- package/templates/skills/ui-components/SKILL.md +137 -137
- package/templates/skills/ui-components/accessibility.md +170 -170
- package/templates/skills/ui-components/patterns/dashboard-chart.md +327 -327
- package/templates/skills/ui-components/patterns/data-table.md +39 -39
- package/templates/skills/ui-components/patterns/entity-card.md +77 -77
- package/templates/skills/ui-components/patterns/grid-layout.md +91 -91
- package/templates/skills/ui-components/patterns/kanban.md +43 -43
- package/templates/skills/ui-components/responsive-guidelines.md +278 -278
- package/templates/skills/ui-components/style-guide.md +113 -113
- package/templates/skills/utils/SKILL.md +44 -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/SKILL.md +181 -181
- package/templates/skills/validate-feature/SKILL.md +101 -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/workflow/SKILL.md +127 -127
- package/templates/skills/workflow/steps/step-00-init.md +57 -57
- package/templates/skills/workflow/steps/step-01-implementation.md +84 -84
- package/templates/test-web/api-health.json +38 -38
- package/templates/test-web/minimal.json +19 -19
- package/templates/test-web/npm-package.json +46 -46
- package/templates/test-web/seo-check.json +54 -54
|
@@ -1,300 +1,300 @@
|
|
|
1
|
-
# Compact Loop — Delegate to /apex
|
|
2
|
-
|
|
3
|
-
> **Loaded by:** step-04 section 5 (after first full iteration)
|
|
4
|
-
> **Purpose:** Execute ALL remaining tasks autonomously by delegating to /apex.
|
|
5
|
-
> **EXECUTION GUARANTEE:** This loop runs until ALL tasks are done, max iterations, or dead-end.
|
|
6
|
-
> **ABSOLUTE RULES:**
|
|
7
|
-
> - NEVER stop the loop
|
|
8
|
-
> - NEVER wait for user input
|
|
9
|
-
> - NEVER ask for confirmation
|
|
10
|
-
> - NEVER re-read step files
|
|
11
|
-
> - NEVER pause between iterations
|
|
12
|
-
> - NEVER generate code directly — delegate to /apex
|
|
13
|
-
> - Execute A → B → C → D → back to step-04 section 1 → repeat
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Loop Entry
|
|
18
|
-
|
|
19
|
-
Display compact progress:
|
|
20
|
-
```
|
|
21
|
-
[{iteration}/{max}] {completed}/{total} done | Finding eligible tasks...
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## A0. Section-Split Mode (checked BEFORE standard batching)
|
|
27
|
-
|
|
28
|
-
```javascript
|
|
29
|
-
const prd = readJSON('.ralph/prd.json');
|
|
30
|
-
|
|
31
|
-
if (prd._sectionSplit?.enabled) {
|
|
32
|
-
// SECTION-SPLIT: Delegate per-phase instead of per-category batch
|
|
33
|
-
|
|
34
|
-
// Find next pending phase with dependencies met
|
|
35
|
-
const nextPhase = prd._sectionSplit.phases.find(p => p.status === 'pending');
|
|
36
|
-
|
|
37
|
-
if (!nextPhase) {
|
|
38
|
-
// All phases done — check if master PRD tasks are all complete
|
|
39
|
-
goto CHECK_COMPLETION;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const depsOk = nextPhase.dependsOn.every(depIdx =>
|
|
43
|
-
prd._sectionSplit.phases[depIdx].status === 'completed'
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
if (!depsOk) {
|
|
47
|
-
// Phase blocked — should not happen with topological sort
|
|
48
|
-
console.warn(`Phase ${nextPhase.phase} blocked — dependencies incomplete`);
|
|
49
|
-
goto CHECK_COMPLETION;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const phaseLabel = nextPhase.type === 'foundation'
|
|
53
|
-
? `Phase 0: Foundation (${nextPhase.entities.length} entities + migration)`
|
|
54
|
-
: `Phase ${nextPhase.phase}: Section "${nextPhase.sectionCode}" (${nextPhase.entities.length} entities)`;
|
|
55
|
-
console.log(`[{iteration}/{max}] SECTION SPLIT: ${phaseLabel}`);
|
|
56
|
-
|
|
57
|
-
// INVOKE /apex -d {nextPhase.prdFile}
|
|
58
|
-
// Apex sees a normal (smaller) PRD and executes normally
|
|
59
|
-
|
|
60
|
-
// After apex returns: merge results back into master PRD
|
|
61
|
-
// Read references/section-splitting.md sections 7-9
|
|
62
|
-
const phasePrd = readJSON(nextPhase.prdFile);
|
|
63
|
-
for (const phaseTask of phasePrd.tasks) {
|
|
64
|
-
const masterTask = prd.tasks.find(t => t.id === phaseTask.id);
|
|
65
|
-
if (masterTask) {
|
|
66
|
-
masterTask.status = phaseTask.status;
|
|
67
|
-
masterTask.completed_at = phaseTask.completed_at;
|
|
68
|
-
masterTask.commit_hash = phaseTask.commit_hash;
|
|
69
|
-
masterTask.files_changed = phaseTask.files_changed;
|
|
70
|
-
masterTask.error = phaseTask.error;
|
|
71
|
-
masterTask.validation = phaseTask.validation;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Handle phase failure
|
|
76
|
-
if (phasePrd.tasks.some(t => t.status === 'failed')) {
|
|
77
|
-
const retryCount = nextPhase._retryCount || 0;
|
|
78
|
-
if (retryCount < 2) {
|
|
79
|
-
nextPhase.status = 'pending';
|
|
80
|
-
nextPhase._retryCount = retryCount + 1;
|
|
81
|
-
console.log(`Phase ${nextPhase.phase} had failures — retry ${retryCount + 1}/2`);
|
|
82
|
-
// Reset failed tasks in phase PRD for retry
|
|
83
|
-
for (const task of phasePrd.tasks) {
|
|
84
|
-
if (task.status === 'failed') { task.status = 'pending'; task.error = null; }
|
|
85
|
-
}
|
|
86
|
-
writeJSON(nextPhase.prdFile, phasePrd);
|
|
87
|
-
} else {
|
|
88
|
-
nextPhase.status = 'failed';
|
|
89
|
-
console.error(`Phase ${nextPhase.phase} failed after 2 retries`);
|
|
90
|
-
}
|
|
91
|
-
} else {
|
|
92
|
-
nextPhase.status = 'completed';
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
prd._sectionSplit.currentPhase = nextPhase.phase;
|
|
96
|
-
writeJSON('.ralph/prd.json', prd);
|
|
97
|
-
|
|
98
|
-
// → Skip to section C (commit PRD state), then D (loop back)
|
|
99
|
-
goto COMMIT_PRD;
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
> **IMPORTANT:** When `_sectionSplit.enabled`, the standard category-based batching (section A below)
|
|
104
|
-
> is SKIPPED. The loop delegates per-phase to apex instead of per-category-batch.
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## A. Find Eligible Tasks
|
|
109
|
-
|
|
110
|
-
> **Note:** This section is SKIPPED when `prd._sectionSplit?.enabled` (handled by A0 above).
|
|
111
|
-
|
|
112
|
-
```javascript
|
|
113
|
-
const MAX_RETRIES = 3;
|
|
114
|
-
|
|
115
|
-
// RETRY: Reset failed tasks to pending if retries remain (max 3 attempts per task)
|
|
116
|
-
for (const task of prd.tasks) {
|
|
117
|
-
if (task.status !== 'failed') continue;
|
|
118
|
-
const retryCount = task._retryCount || 0;
|
|
119
|
-
if (retryCount < MAX_RETRIES) {
|
|
120
|
-
task.status = 'pending';
|
|
121
|
-
task._retryCount = retryCount + 1;
|
|
122
|
-
task.error = null;
|
|
123
|
-
console.log(`RETRY [${task.id}] attempt ${retryCount + 1}/${MAX_RETRIES}: ${task.description.substring(0, 60)}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Unblock tasks whose dependencies are no longer failed (due to retries above)
|
|
128
|
-
for (const task of prd.tasks) {
|
|
129
|
-
if (task.status !== 'blocked') continue;
|
|
130
|
-
const stillBlocked = task.dependencies.some(depId => {
|
|
131
|
-
const dep = prd.tasks.find(t => t.id === depId);
|
|
132
|
-
return dep && (dep.status === 'failed' || dep.status === 'blocked');
|
|
133
|
-
});
|
|
134
|
-
if (!stillBlocked) {
|
|
135
|
-
task.status = 'pending';
|
|
136
|
-
task.error = null;
|
|
137
|
-
console.log(`UNBLOCKED [${task.id}]: dependencies resolved`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Block pending tasks whose dependencies are still failed/blocked
|
|
142
|
-
for (const task of prd.tasks) {
|
|
143
|
-
if (task.status !== 'pending') continue;
|
|
144
|
-
const depsBlocked = task.dependencies.some(depId => {
|
|
145
|
-
const dep = prd.tasks.find(t => t.id === depId);
|
|
146
|
-
return dep && (dep.status === 'failed' || dep.status === 'blocked');
|
|
147
|
-
});
|
|
148
|
-
if (depsBlocked) { task.status = 'blocked'; task.error = 'Blocked by failed dependency'; }
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
writeJSON('.ralph/prd.json', prd);
|
|
152
|
-
|
|
153
|
-
// Find ALL eligible tasks (dependencies met)
|
|
154
|
-
const eligible = prd.tasks.filter(task => {
|
|
155
|
-
if (task.status !== 'pending') return false;
|
|
156
|
-
return task.dependencies.every(depId => {
|
|
157
|
-
const dep = prd.tasks.find(t => t.id === depId);
|
|
158
|
-
return dep && dep.status === 'completed';
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
if (eligible.length === 0) {
|
|
163
|
-
// Dead-end or all done — return to step-04 sections 2-4
|
|
164
|
-
goto CHECK_COMPLETION;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// BATCH: group by category, take first group (max 5)
|
|
168
|
-
const firstCategory = eligible[0].category;
|
|
169
|
-
const batch = eligible.filter(t => t.category === firstCategory).slice(0, 5);
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Display:
|
|
173
|
-
```
|
|
174
|
-
Batch: {batch.length} [{firstCategory}] → {batch.map(t => `[${t.id}] ${t.description.substring(0, 60)}`).join(' | ')}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## B. Delegate Batch to /apex
|
|
180
|
-
|
|
181
|
-
> **Ralph NEVER generates code.** All code generation, MCP calls, POST-CHECKs,
|
|
182
|
-
> and build verification are handled by apex.
|
|
183
|
-
|
|
184
|
-
### B1. Mark Batch In-Progress
|
|
185
|
-
|
|
186
|
-
```javascript
|
|
187
|
-
for (const task of batch) {
|
|
188
|
-
task.status = 'in_progress';
|
|
189
|
-
task.started_at = new Date().toISOString();
|
|
190
|
-
}
|
|
191
|
-
writeJSON('.ralph/prd.json', prd);
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### B2. Invoke /apex
|
|
195
|
-
|
|
196
|
-
**INVOKE `/apex -d .ralph/prd.json`**
|
|
197
|
-
|
|
198
|
-
Apex handles everything for the current module:
|
|
199
|
-
- Reads PRD, extracts context (app_name, module_code, entities, sections)
|
|
200
|
-
- Executes ALL layers: domain → infrastructure → migration → application → api → seed data → frontend → tests
|
|
201
|
-
- Runs full POST-CHECKs (50 checks from `references/post-checks.md`)
|
|
202
|
-
- Commits per layer (atomic commits)
|
|
203
|
-
- Validates with MCP (`validate_conventions`)
|
|
204
|
-
- Updates task statuses in the PRD file directly
|
|
205
|
-
|
|
206
|
-
> **FLAGS:** `-d` implies `-a` (auto, no user confirmation) and `-e` (economy, no nested teams).
|
|
207
|
-
|
|
208
|
-
### B3. Verify Post-Apex Results
|
|
209
|
-
|
|
210
|
-
```javascript
|
|
211
|
-
// Re-read PRD after apex execution
|
|
212
|
-
const updatedPrd = readJSON('.ralph/prd.json');
|
|
213
|
-
const batchIds = batch.map(t => t.id);
|
|
214
|
-
|
|
215
|
-
const completed = updatedPrd.tasks.filter(t => batchIds.includes(t.id) && t.status === 'completed').length;
|
|
216
|
-
const failed = updatedPrd.tasks.filter(t => batchIds.includes(t.id) && t.status === 'failed').length;
|
|
217
|
-
const pending = updatedPrd.tasks.filter(t => batchIds.includes(t.id) && t.status === 'pending').length;
|
|
218
|
-
|
|
219
|
-
if (failed > 0) {
|
|
220
|
-
console.log(`WARNING: ${failed} tasks failed during apex execution`);
|
|
221
|
-
// Failed tasks will be retried in next loop iteration if retries remain
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (pending > 0) {
|
|
225
|
-
console.log(`INFO: ${pending} tasks still pending — apex may not have reached them`);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
console.log(`Apex completed: ${completed}/${batchIds.length} tasks`);
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## C. Commit PRD State
|
|
234
|
-
|
|
235
|
-
### C1. Update Progress File (MANDATORY)
|
|
236
|
-
|
|
237
|
-
```javascript
|
|
238
|
-
const prdCheck = readJSON('.ralph/prd.json');
|
|
239
|
-
const totalCompleted = prdCheck.tasks.filter(t => t.status === 'completed').length;
|
|
240
|
-
const total = prdCheck.tasks.length;
|
|
241
|
-
|
|
242
|
-
appendFile('.ralph/progress.txt',
|
|
243
|
-
`Iteration ${prdCheck.config.current_iteration}: Delegated to /apex — ` +
|
|
244
|
-
`${completed}/${batchIds.length} batch tasks completed. ${totalCompleted}/${total} overall.\n`
|
|
245
|
-
);
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### C2. Increment Iteration
|
|
249
|
-
|
|
250
|
-
```javascript
|
|
251
|
-
prdCheck.config.current_iteration++;
|
|
252
|
-
prdCheck.updated_at = new Date().toISOString();
|
|
253
|
-
writeJSON('.ralph/prd.json', prdCheck);
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### C3. Git Commit (PRD state only — apex already committed code)
|
|
257
|
-
|
|
258
|
-
```bash
|
|
259
|
-
git add .ralph/prd.json .ralph/progress.txt
|
|
260
|
-
[ -f .ralph/modules-queue.json ] && git add .ralph/modules-queue.json
|
|
261
|
-
|
|
262
|
-
git commit -m "$(cat <<'EOF'
|
|
263
|
-
chore(ralph): update PRD state — iteration {iteration}
|
|
264
|
-
|
|
265
|
-
Tasks: {completed}/{batch_size} completed via /apex
|
|
266
|
-
Overall: {totalCompleted}/{total}
|
|
267
|
-
|
|
268
|
-
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
269
|
-
EOF
|
|
270
|
-
)"
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### C4. PRD Sync Verification (HARD CHECK)
|
|
274
|
-
|
|
275
|
-
```javascript
|
|
276
|
-
const prdVerify = readJSON('.ralph/prd.json');
|
|
277
|
-
const actuallyCompleted = prdVerify.tasks.filter(t => batchIds.includes(t.id) && t.status === 'completed');
|
|
278
|
-
|
|
279
|
-
if (actuallyCompleted.length !== completed) {
|
|
280
|
-
console.error('PRD SYNC ERROR: Mismatch between apex results and prd.json');
|
|
281
|
-
// Force re-read — apex may have written after our read
|
|
282
|
-
// DO NOT overwrite — apex is the source of truth for task statuses
|
|
283
|
-
}
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
---
|
|
287
|
-
|
|
288
|
-
## D. Loop Back (MANDATORY — NO PAUSE)
|
|
289
|
-
|
|
290
|
-
**IMMEDIATELY return to step-04 section 1 (Read Current State).**
|
|
291
|
-
|
|
292
|
-
DO NOT stop. DO NOT wait for user. DO NOT ask "should I continue?". DO NOT re-read step files.
|
|
293
|
-
DO NOT display a summary and pause. DO NOT output partial results and wait.
|
|
294
|
-
**Go directly to step-04 section 1. NOW.**
|
|
295
|
-
|
|
296
|
-
The ONLY exit conditions (enforced by step-04 sections 2-4):
|
|
297
|
-
- ALL tasks complete (all modules if multi-module) → step-05
|
|
298
|
-
- Max iterations reached → step-05
|
|
299
|
-
- Dead-end (all remaining blocked/failed) → step-05
|
|
300
|
-
- User Ctrl+C (external interrupt)
|
|
1
|
+
# Compact Loop — Delegate to /apex
|
|
2
|
+
|
|
3
|
+
> **Loaded by:** step-04 section 5 (after first full iteration)
|
|
4
|
+
> **Purpose:** Execute ALL remaining tasks autonomously by delegating to /apex.
|
|
5
|
+
> **EXECUTION GUARANTEE:** This loop runs until ALL tasks are done, max iterations, or dead-end.
|
|
6
|
+
> **ABSOLUTE RULES:**
|
|
7
|
+
> - NEVER stop the loop
|
|
8
|
+
> - NEVER wait for user input
|
|
9
|
+
> - NEVER ask for confirmation
|
|
10
|
+
> - NEVER re-read step files
|
|
11
|
+
> - NEVER pause between iterations
|
|
12
|
+
> - NEVER generate code directly — delegate to /apex
|
|
13
|
+
> - Execute A → B → C → D → back to step-04 section 1 → repeat
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Loop Entry
|
|
18
|
+
|
|
19
|
+
Display compact progress:
|
|
20
|
+
```
|
|
21
|
+
[{iteration}/{max}] {completed}/{total} done | Finding eligible tasks...
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## A0. Section-Split Mode (checked BEFORE standard batching)
|
|
27
|
+
|
|
28
|
+
```javascript
|
|
29
|
+
const prd = readJSON('.ralph/prd.json');
|
|
30
|
+
|
|
31
|
+
if (prd._sectionSplit?.enabled) {
|
|
32
|
+
// SECTION-SPLIT: Delegate per-phase instead of per-category batch
|
|
33
|
+
|
|
34
|
+
// Find next pending phase with dependencies met
|
|
35
|
+
const nextPhase = prd._sectionSplit.phases.find(p => p.status === 'pending');
|
|
36
|
+
|
|
37
|
+
if (!nextPhase) {
|
|
38
|
+
// All phases done — check if master PRD tasks are all complete
|
|
39
|
+
goto CHECK_COMPLETION;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const depsOk = nextPhase.dependsOn.every(depIdx =>
|
|
43
|
+
prd._sectionSplit.phases[depIdx].status === 'completed'
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
if (!depsOk) {
|
|
47
|
+
// Phase blocked — should not happen with topological sort
|
|
48
|
+
console.warn(`Phase ${nextPhase.phase} blocked — dependencies incomplete`);
|
|
49
|
+
goto CHECK_COMPLETION;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const phaseLabel = nextPhase.type === 'foundation'
|
|
53
|
+
? `Phase 0: Foundation (${nextPhase.entities.length} entities + migration)`
|
|
54
|
+
: `Phase ${nextPhase.phase}: Section "${nextPhase.sectionCode}" (${nextPhase.entities.length} entities)`;
|
|
55
|
+
console.log(`[{iteration}/{max}] SECTION SPLIT: ${phaseLabel}`);
|
|
56
|
+
|
|
57
|
+
// INVOKE /apex -d {nextPhase.prdFile}
|
|
58
|
+
// Apex sees a normal (smaller) PRD and executes normally
|
|
59
|
+
|
|
60
|
+
// After apex returns: merge results back into master PRD
|
|
61
|
+
// Read references/section-splitting.md sections 7-9
|
|
62
|
+
const phasePrd = readJSON(nextPhase.prdFile);
|
|
63
|
+
for (const phaseTask of phasePrd.tasks) {
|
|
64
|
+
const masterTask = prd.tasks.find(t => t.id === phaseTask.id);
|
|
65
|
+
if (masterTask) {
|
|
66
|
+
masterTask.status = phaseTask.status;
|
|
67
|
+
masterTask.completed_at = phaseTask.completed_at;
|
|
68
|
+
masterTask.commit_hash = phaseTask.commit_hash;
|
|
69
|
+
masterTask.files_changed = phaseTask.files_changed;
|
|
70
|
+
masterTask.error = phaseTask.error;
|
|
71
|
+
masterTask.validation = phaseTask.validation;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Handle phase failure
|
|
76
|
+
if (phasePrd.tasks.some(t => t.status === 'failed')) {
|
|
77
|
+
const retryCount = nextPhase._retryCount || 0;
|
|
78
|
+
if (retryCount < 2) {
|
|
79
|
+
nextPhase.status = 'pending';
|
|
80
|
+
nextPhase._retryCount = retryCount + 1;
|
|
81
|
+
console.log(`Phase ${nextPhase.phase} had failures — retry ${retryCount + 1}/2`);
|
|
82
|
+
// Reset failed tasks in phase PRD for retry
|
|
83
|
+
for (const task of phasePrd.tasks) {
|
|
84
|
+
if (task.status === 'failed') { task.status = 'pending'; task.error = null; }
|
|
85
|
+
}
|
|
86
|
+
writeJSON(nextPhase.prdFile, phasePrd);
|
|
87
|
+
} else {
|
|
88
|
+
nextPhase.status = 'failed';
|
|
89
|
+
console.error(`Phase ${nextPhase.phase} failed after 2 retries`);
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
nextPhase.status = 'completed';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
prd._sectionSplit.currentPhase = nextPhase.phase;
|
|
96
|
+
writeJSON('.ralph/prd.json', prd);
|
|
97
|
+
|
|
98
|
+
// → Skip to section C (commit PRD state), then D (loop back)
|
|
99
|
+
goto COMMIT_PRD;
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> **IMPORTANT:** When `_sectionSplit.enabled`, the standard category-based batching (section A below)
|
|
104
|
+
> is SKIPPED. The loop delegates per-phase to apex instead of per-category-batch.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## A. Find Eligible Tasks
|
|
109
|
+
|
|
110
|
+
> **Note:** This section is SKIPPED when `prd._sectionSplit?.enabled` (handled by A0 above).
|
|
111
|
+
|
|
112
|
+
```javascript
|
|
113
|
+
const MAX_RETRIES = 3;
|
|
114
|
+
|
|
115
|
+
// RETRY: Reset failed tasks to pending if retries remain (max 3 attempts per task)
|
|
116
|
+
for (const task of prd.tasks) {
|
|
117
|
+
if (task.status !== 'failed') continue;
|
|
118
|
+
const retryCount = task._retryCount || 0;
|
|
119
|
+
if (retryCount < MAX_RETRIES) {
|
|
120
|
+
task.status = 'pending';
|
|
121
|
+
task._retryCount = retryCount + 1;
|
|
122
|
+
task.error = null;
|
|
123
|
+
console.log(`RETRY [${task.id}] attempt ${retryCount + 1}/${MAX_RETRIES}: ${task.description.substring(0, 60)}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Unblock tasks whose dependencies are no longer failed (due to retries above)
|
|
128
|
+
for (const task of prd.tasks) {
|
|
129
|
+
if (task.status !== 'blocked') continue;
|
|
130
|
+
const stillBlocked = task.dependencies.some(depId => {
|
|
131
|
+
const dep = prd.tasks.find(t => t.id === depId);
|
|
132
|
+
return dep && (dep.status === 'failed' || dep.status === 'blocked');
|
|
133
|
+
});
|
|
134
|
+
if (!stillBlocked) {
|
|
135
|
+
task.status = 'pending';
|
|
136
|
+
task.error = null;
|
|
137
|
+
console.log(`UNBLOCKED [${task.id}]: dependencies resolved`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Block pending tasks whose dependencies are still failed/blocked
|
|
142
|
+
for (const task of prd.tasks) {
|
|
143
|
+
if (task.status !== 'pending') continue;
|
|
144
|
+
const depsBlocked = task.dependencies.some(depId => {
|
|
145
|
+
const dep = prd.tasks.find(t => t.id === depId);
|
|
146
|
+
return dep && (dep.status === 'failed' || dep.status === 'blocked');
|
|
147
|
+
});
|
|
148
|
+
if (depsBlocked) { task.status = 'blocked'; task.error = 'Blocked by failed dependency'; }
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
writeJSON('.ralph/prd.json', prd);
|
|
152
|
+
|
|
153
|
+
// Find ALL eligible tasks (dependencies met)
|
|
154
|
+
const eligible = prd.tasks.filter(task => {
|
|
155
|
+
if (task.status !== 'pending') return false;
|
|
156
|
+
return task.dependencies.every(depId => {
|
|
157
|
+
const dep = prd.tasks.find(t => t.id === depId);
|
|
158
|
+
return dep && dep.status === 'completed';
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
if (eligible.length === 0) {
|
|
163
|
+
// Dead-end or all done — return to step-04 sections 2-4
|
|
164
|
+
goto CHECK_COMPLETION;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// BATCH: group by category, take first group (max 5)
|
|
168
|
+
const firstCategory = eligible[0].category;
|
|
169
|
+
const batch = eligible.filter(t => t.category === firstCategory).slice(0, 5);
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Display:
|
|
173
|
+
```
|
|
174
|
+
Batch: {batch.length} [{firstCategory}] → {batch.map(t => `[${t.id}] ${t.description.substring(0, 60)}`).join(' | ')}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## B. Delegate Batch to /apex
|
|
180
|
+
|
|
181
|
+
> **Ralph NEVER generates code.** All code generation, MCP calls, POST-CHECKs,
|
|
182
|
+
> and build verification are handled by apex.
|
|
183
|
+
|
|
184
|
+
### B1. Mark Batch In-Progress
|
|
185
|
+
|
|
186
|
+
```javascript
|
|
187
|
+
for (const task of batch) {
|
|
188
|
+
task.status = 'in_progress';
|
|
189
|
+
task.started_at = new Date().toISOString();
|
|
190
|
+
}
|
|
191
|
+
writeJSON('.ralph/prd.json', prd);
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### B2. Invoke /apex
|
|
195
|
+
|
|
196
|
+
**INVOKE `/apex -d .ralph/prd.json`**
|
|
197
|
+
|
|
198
|
+
Apex handles everything for the current module:
|
|
199
|
+
- Reads PRD, extracts context (app_name, module_code, entities, sections)
|
|
200
|
+
- Executes ALL layers: domain → infrastructure → migration → application → api → seed data → frontend → tests
|
|
201
|
+
- Runs full POST-CHECKs (50 checks from `references/post-checks.md`)
|
|
202
|
+
- Commits per layer (atomic commits)
|
|
203
|
+
- Validates with MCP (`validate_conventions`)
|
|
204
|
+
- Updates task statuses in the PRD file directly
|
|
205
|
+
|
|
206
|
+
> **FLAGS:** `-d` implies `-a` (auto, no user confirmation) and `-e` (economy, no nested teams).
|
|
207
|
+
|
|
208
|
+
### B3. Verify Post-Apex Results
|
|
209
|
+
|
|
210
|
+
```javascript
|
|
211
|
+
// Re-read PRD after apex execution
|
|
212
|
+
const updatedPrd = readJSON('.ralph/prd.json');
|
|
213
|
+
const batchIds = batch.map(t => t.id);
|
|
214
|
+
|
|
215
|
+
const completed = updatedPrd.tasks.filter(t => batchIds.includes(t.id) && t.status === 'completed').length;
|
|
216
|
+
const failed = updatedPrd.tasks.filter(t => batchIds.includes(t.id) && t.status === 'failed').length;
|
|
217
|
+
const pending = updatedPrd.tasks.filter(t => batchIds.includes(t.id) && t.status === 'pending').length;
|
|
218
|
+
|
|
219
|
+
if (failed > 0) {
|
|
220
|
+
console.log(`WARNING: ${failed} tasks failed during apex execution`);
|
|
221
|
+
// Failed tasks will be retried in next loop iteration if retries remain
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (pending > 0) {
|
|
225
|
+
console.log(`INFO: ${pending} tasks still pending — apex may not have reached them`);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
console.log(`Apex completed: ${completed}/${batchIds.length} tasks`);
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## C. Commit PRD State
|
|
234
|
+
|
|
235
|
+
### C1. Update Progress File (MANDATORY)
|
|
236
|
+
|
|
237
|
+
```javascript
|
|
238
|
+
const prdCheck = readJSON('.ralph/prd.json');
|
|
239
|
+
const totalCompleted = prdCheck.tasks.filter(t => t.status === 'completed').length;
|
|
240
|
+
const total = prdCheck.tasks.length;
|
|
241
|
+
|
|
242
|
+
appendFile('.ralph/progress.txt',
|
|
243
|
+
`Iteration ${prdCheck.config.current_iteration}: Delegated to /apex — ` +
|
|
244
|
+
`${completed}/${batchIds.length} batch tasks completed. ${totalCompleted}/${total} overall.\n`
|
|
245
|
+
);
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### C2. Increment Iteration
|
|
249
|
+
|
|
250
|
+
```javascript
|
|
251
|
+
prdCheck.config.current_iteration++;
|
|
252
|
+
prdCheck.updated_at = new Date().toISOString();
|
|
253
|
+
writeJSON('.ralph/prd.json', prdCheck);
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### C3. Git Commit (PRD state only — apex already committed code)
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
git add .ralph/prd.json .ralph/progress.txt
|
|
260
|
+
[ -f .ralph/modules-queue.json ] && git add .ralph/modules-queue.json
|
|
261
|
+
|
|
262
|
+
git commit -m "$(cat <<'EOF'
|
|
263
|
+
chore(ralph): update PRD state — iteration {iteration}
|
|
264
|
+
|
|
265
|
+
Tasks: {completed}/{batch_size} completed via /apex
|
|
266
|
+
Overall: {totalCompleted}/{total}
|
|
267
|
+
|
|
268
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
269
|
+
EOF
|
|
270
|
+
)"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### C4. PRD Sync Verification (HARD CHECK)
|
|
274
|
+
|
|
275
|
+
```javascript
|
|
276
|
+
const prdVerify = readJSON('.ralph/prd.json');
|
|
277
|
+
const actuallyCompleted = prdVerify.tasks.filter(t => batchIds.includes(t.id) && t.status === 'completed');
|
|
278
|
+
|
|
279
|
+
if (actuallyCompleted.length !== completed) {
|
|
280
|
+
console.error('PRD SYNC ERROR: Mismatch between apex results and prd.json');
|
|
281
|
+
// Force re-read — apex may have written after our read
|
|
282
|
+
// DO NOT overwrite — apex is the source of truth for task statuses
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## D. Loop Back (MANDATORY — NO PAUSE)
|
|
289
|
+
|
|
290
|
+
**IMMEDIATELY return to step-04 section 1 (Read Current State).**
|
|
291
|
+
|
|
292
|
+
DO NOT stop. DO NOT wait for user. DO NOT ask "should I continue?". DO NOT re-read step files.
|
|
293
|
+
DO NOT display a summary and pause. DO NOT output partial results and wait.
|
|
294
|
+
**Go directly to step-04 section 1. NOW.**
|
|
295
|
+
|
|
296
|
+
The ONLY exit conditions (enforced by step-04 sections 2-4):
|
|
297
|
+
- ALL tasks complete (all modules if multi-module) → step-05
|
|
298
|
+
- Max iterations reached → step-05
|
|
299
|
+
- Dead-end (all remaining blocked/failed) → step-05
|
|
300
|
+
- User Ctrl+C (external interrupt)
|