@atlashub/smartstack-cli 3.39.0 → 3.40.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.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 +84 -84
- package/templates/agents/efcore/db-deploy.md +74 -74
- package/templates/agents/efcore/db-reset.md +85 -85
- package/templates/agents/efcore/db-seed.md +61 -61
- package/templates/agents/efcore/db-status.md +86 -86
- package/templates/agents/efcore/migration.md +186 -186
- package/templates/agents/efcore/rebase-snapshot.md +108 -108
- package/templates/agents/efcore/scan.md +92 -92
- package/templates/agents/efcore/squash.md +161 -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 +167 -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 +94 -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,547 +1,547 @@
|
|
|
1
|
-
# Team Orchestration — Multi-Module Parallel Execution
|
|
2
|
-
|
|
3
|
-
> **Loaded by:** step-00 when multi-module detected (PRD_COUNT > 1)
|
|
4
|
-
> **Purpose:** Parallelize independent modules via Agent Teams.
|
|
5
|
-
> **Rule:** Single module = NO team. Only create team for 2+ modules.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Mode Selection
|
|
10
|
-
|
|
11
|
-
Ralph-loop supports TWO team orchestration modes:
|
|
12
|
-
|
|
13
|
-
### 1. **Parallel Mode** (`-p` flag) — RECOMMENDED
|
|
14
|
-
|
|
15
|
-
**Architecture:** Phase 0 (entities sequential by Ralph) + Phase 1-N (teammates parallel)
|
|
16
|
-
|
|
17
|
-
**Avantages:**
|
|
18
|
-
- ✅ Zero EF Core ModelSnapshot conflicts (entities generated once in Phase 0)
|
|
19
|
-
- ✅ True parallelization on 75-85% of code (services/controllers/frontend/tests)
|
|
20
|
-
- ✅ Teammates have isolated contexts (no saturation)
|
|
21
|
-
- ✅ 2-3x faster than sequential mode
|
|
22
|
-
- ✅ Simple coordination (no dependency graph needed)
|
|
23
|
-
|
|
24
|
-
**When to use:**
|
|
25
|
-
- 2+ applications OR 5+ modules
|
|
26
|
-
- Complex modules with many entities
|
|
27
|
-
- Need guaranteed conflict-free execution
|
|
28
|
-
|
|
29
|
-
**Workflow:**
|
|
30
|
-
1. Ralph generates ALL entities + migration (Phase 0)
|
|
31
|
-
2. Ralph spawns teammates (1 per application or module)
|
|
32
|
-
3. Teammates generate services/controllers/frontend/tests in parallel
|
|
33
|
-
4. Ralph collects results + validates
|
|
34
|
-
5. TeamDelete
|
|
35
|
-
|
|
36
|
-
See section **Parallel Mode Protocol** below.
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
### 2. **Dependency Layer Mode** (no `-p` flag) — LEGACY
|
|
41
|
-
|
|
42
|
-
**Architecture:** Layer-by-layer execution based on dependency graph
|
|
43
|
-
|
|
44
|
-
**Avantages:**
|
|
45
|
-
- ✅ Respects module dependencies
|
|
46
|
-
- ✅ Works without `-p` flag (backward compatible)
|
|
47
|
-
|
|
48
|
-
**Inconvénients:**
|
|
49
|
-
- ⚠️ Requires dependency graph in feature.json
|
|
50
|
-
- ⚠️ EF Core ModelSnapshot conflicts possible if modules touch same entities
|
|
51
|
-
- ⚠️ More complex coordination
|
|
52
|
-
|
|
53
|
-
**When to use:**
|
|
54
|
-
- Modules have strict dependencies
|
|
55
|
-
- No `-p` flag specified (legacy mode)
|
|
56
|
-
- Single-application projects with <5 modules
|
|
57
|
-
|
|
58
|
-
See section **Dependency Layer Mode Protocol** below.
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Parallel Mode Protocol (if `-p` flag)
|
|
63
|
-
|
|
64
|
-
### Phase 0: Foundation (Ralph sequential)
|
|
65
|
-
|
|
66
|
-
Ralph generates ALL entities from ALL modules in ONE pass to avoid ModelSnapshot conflicts.
|
|
67
|
-
|
|
68
|
-
```javascript
|
|
69
|
-
// 1. Collect all entities
|
|
70
|
-
const allPrds = glob('.ralph/prd-*.json').map(f => readJSON(f));
|
|
71
|
-
const allEntities = [];
|
|
72
|
-
const allModules = [];
|
|
73
|
-
|
|
74
|
-
for (const prd of allPrds) {
|
|
75
|
-
const entities = prd.tasks
|
|
76
|
-
.filter(t => t.category === 'domain')
|
|
77
|
-
.map(t => extractEntityName(t.description));
|
|
78
|
-
|
|
79
|
-
allEntities.push(...entities);
|
|
80
|
-
allModules.push({
|
|
81
|
-
code: prd.project.module,
|
|
82
|
-
application: prd.project.application,
|
|
83
|
-
entityCount: entities.length
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
console.log(`Phase 0: Generating ${allEntities.length} entities from ${allModules.length} modules`);
|
|
88
|
-
|
|
89
|
-
// 2. Invoke apex in foundation mode
|
|
90
|
-
// /apex --foundation -d .ralph/prd.json
|
|
91
|
-
//
|
|
92
|
-
// Apex will:
|
|
93
|
-
// - Generate ALL entity classes
|
|
94
|
-
// - Generate ALL EF configurations
|
|
95
|
-
// - Register ALL DbSets in DbContext
|
|
96
|
-
// - Create ONE migration with all entities
|
|
97
|
-
// - Skip services/controllers/frontend/tests
|
|
98
|
-
|
|
99
|
-
// 3. Verify build
|
|
100
|
-
const buildResult = bash('dotnet build');
|
|
101
|
-
if (buildResult.exitCode !== 0) {
|
|
102
|
-
throw new Error('Phase 0 build failed');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// 4. Commit foundation
|
|
106
|
-
bash(`git add . && git commit -m "chore(foundation): entities for all modules"`);
|
|
107
|
-
|
|
108
|
-
console.log(`Phase 0 complete. ModelSnapshot contains ${allEntities.length} entities.`);
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
### Phase 1-N: Spawn Teammates (parallel)
|
|
114
|
-
|
|
115
|
-
Ralph creates a team and spawns teammates (1 per application OR 1 per module if app has >3 modules).
|
|
116
|
-
|
|
117
|
-
```javascript
|
|
118
|
-
// 1. Determine teammate granularity
|
|
119
|
-
const teammates = [];
|
|
120
|
-
const applicationsMap = {}; // group modules by application
|
|
121
|
-
|
|
122
|
-
for (const mod of allModules) {
|
|
123
|
-
if (!applicationsMap[mod.application]) {
|
|
124
|
-
applicationsMap[mod.application] = [];
|
|
125
|
-
}
|
|
126
|
-
applicationsMap[mod.application].push(mod);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
for (const [appName, modules] of Object.entries(applicationsMap)) {
|
|
130
|
-
if (modules.length <= 3) {
|
|
131
|
-
// 1 teammate per APPLICATION
|
|
132
|
-
teammates.push({
|
|
133
|
-
name: `apex-${kebabCase(appName)}`,
|
|
134
|
-
application: appName,
|
|
135
|
-
modules: modules.map(m => m.code),
|
|
136
|
-
scope: 'application'
|
|
137
|
-
});
|
|
138
|
-
} else {
|
|
139
|
-
// Application has >3 modules → 1 teammate per MODULE
|
|
140
|
-
for (const mod of modules) {
|
|
141
|
-
teammates.push({
|
|
142
|
-
name: `apex-${kebabCase(appName)}-${kebabCase(mod.code)}`,
|
|
143
|
-
application: appName,
|
|
144
|
-
modules: [mod.code],
|
|
145
|
-
scope: 'module'
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
console.log(`Spawning ${teammates.length} teammates:`);
|
|
152
|
-
for (const t of teammates) {
|
|
153
|
-
console.log(` - ${t.name} (${t.scope}): ${t.modules.join(', ')}`);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// 2. Create team
|
|
157
|
-
const teamName = `smartstack-${kebabCase(projectName)}`;
|
|
158
|
-
TeamCreate({ team_name: teamName, description: `Layer-based module orchestration for ${projectName}` });
|
|
159
|
-
|
|
160
|
-
// 3. Spawn teammates in parallel (single message, multiple Task calls)
|
|
161
|
-
for (const teammate of teammates) {
|
|
162
|
-
const prdFiles = teammate.modules.map(m => `.ralph/prd-${m}.json`);
|
|
163
|
-
|
|
164
|
-
Task({
|
|
165
|
-
subagent_type: "apex",
|
|
166
|
-
name: teammate.name,
|
|
167
|
-
team_name: teamName,
|
|
168
|
-
mode: "bypassPermissions",
|
|
169
|
-
prompt: `
|
|
170
|
-
You are teammate ${teammate.name}.
|
|
171
|
-
|
|
172
|
-
## Context
|
|
173
|
-
- Application: ${teammate.application}
|
|
174
|
-
- Modules: ${teammate.modules.join(', ')}
|
|
175
|
-
- PRD files: ${prdFiles.join(', ')}
|
|
176
|
-
|
|
177
|
-
## Phase 0 Completed (by Ralph)
|
|
178
|
-
ALL entity classes, EF configurations, and migrations are already created.
|
|
179
|
-
The ModelSnapshot is complete and the database schema is ready.
|
|
180
|
-
|
|
181
|
-
## Your Task
|
|
182
|
-
For each module in your scope, generate:
|
|
183
|
-
- Services (Application layer)
|
|
184
|
-
- Controllers (API layer)
|
|
185
|
-
- Seed data (Navigation + Permissions + RolePermissions + Business data)
|
|
186
|
-
- Frontend (Pages + Routes + i18n for all 4 languages)
|
|
187
|
-
- Tests (Unit + Integration)
|
|
188
|
-
|
|
189
|
-
## Execution
|
|
190
|
-
For each PRD file:
|
|
191
|
-
1. INVOKE /apex -d {prdFile}
|
|
192
|
-
→ Apex will see existing entities and skip domain/infrastructure layers
|
|
193
|
-
→ Apex will generate services/controllers/seed/frontend/tests
|
|
194
|
-
→ Apex will run POST-CHECKs and commit per layer
|
|
195
|
-
2. Verify build passes
|
|
196
|
-
3. Verify tests pass
|
|
197
|
-
|
|
198
|
-
## Communication Protocol
|
|
199
|
-
When ALL your modules are complete:
|
|
200
|
-
SendMessage({
|
|
201
|
-
type: "message",
|
|
202
|
-
recipient: "team-lead",
|
|
203
|
-
content: "COMPLETE:${teammate.name}",
|
|
204
|
-
summary: "${teammate.name} completed ${teammate.modules.join(', ')}"
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
If you encounter a BLOCKING error:
|
|
208
|
-
SendMessage({
|
|
209
|
-
type: "message",
|
|
210
|
-
recipient: "team-lead",
|
|
211
|
-
content: "ERROR:${teammate.name}:{error_summary}",
|
|
212
|
-
summary: "${teammate.name} blocked"
|
|
213
|
-
})
|
|
214
|
-
|
|
215
|
-
## DO NOT
|
|
216
|
-
- Create new entities (already done in Phase 0)
|
|
217
|
-
- Create migrations (ModelSnapshot already complete)
|
|
218
|
-
- Modify existing entities or EF configs
|
|
219
|
-
`,
|
|
220
|
-
description: `${teammate.application} - ${teammate.modules.join(', ')}`
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
### Collect Results
|
|
228
|
-
|
|
229
|
-
Ralph waits for all teammates to send completion messages.
|
|
230
|
-
|
|
231
|
-
```javascript
|
|
232
|
-
// Track completion
|
|
233
|
-
const expectedTeammates = teammates.length;
|
|
234
|
-
let completedTeammates = 0;
|
|
235
|
-
let errors = [];
|
|
236
|
-
|
|
237
|
-
// Messages arrive automatically via SendMessage
|
|
238
|
-
// When a teammate sends "COMPLETE:xxx", increment counter
|
|
239
|
-
// When a teammate sends "ERROR:xxx:yyy", record error
|
|
240
|
-
|
|
241
|
-
// Wait loop (teammates send messages when done)
|
|
242
|
-
console.log(`Waiting for ${expectedTeammates} teammates to complete...`);
|
|
243
|
-
|
|
244
|
-
// After all teammates complete (or timeout):
|
|
245
|
-
console.log(`Results:`);
|
|
246
|
-
console.log(` ✓ Completed: ${completedTeammates}/${expectedTeammates}`);
|
|
247
|
-
console.log(` ✗ Errors: ${errors.length}`);
|
|
248
|
-
|
|
249
|
-
for (const error of errors) {
|
|
250
|
-
console.log(` - ${error}`);
|
|
251
|
-
}
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
### Validation
|
|
257
|
-
|
|
258
|
-
After all teammates complete, Ralph runs global validation.
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
# Full solution build
|
|
262
|
-
dotnet build --no-restore
|
|
263
|
-
|
|
264
|
-
# Full test suite
|
|
265
|
-
dotnet test --no-build
|
|
266
|
-
|
|
267
|
-
# MCP validation
|
|
268
|
-
mcp__smartstack__validate_conventions checks=["all"]
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
### Cleanup
|
|
274
|
-
|
|
275
|
-
```javascript
|
|
276
|
-
// Shutdown teammates
|
|
277
|
-
for (const teammate of teammates) {
|
|
278
|
-
SendMessage({
|
|
279
|
-
type: "shutdown_request",
|
|
280
|
-
recipient: teammate.name,
|
|
281
|
-
content: "All modules complete, shutting down team"
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// Wait for shutdown confirmations, then:
|
|
286
|
-
TeamDelete();
|
|
287
|
-
|
|
288
|
-
console.log(`Team ${teamName} deleted. All teammates shut down.`);
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
---
|
|
292
|
-
|
|
293
|
-
## Task List Coordination (T10)
|
|
294
|
-
|
|
295
|
-
Create tasks for each module before spawning teammates:
|
|
296
|
-
|
|
297
|
-
```javascript
|
|
298
|
-
// Create tasks for each module before spawning teammates
|
|
299
|
-
for (const mod of modules) {
|
|
300
|
-
TaskCreate({
|
|
301
|
-
subject: `Complete ${mod.code} module`,
|
|
302
|
-
description: `Generate services, controllers, frontend, and tests for ${mod.code}`,
|
|
303
|
-
activeForm: `Working on ${mod.code}`
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Teammates update task status when done
|
|
308
|
-
TaskUpdate({ taskId: currentTaskId, status: 'completed' });
|
|
309
|
-
|
|
310
|
-
// Team lead checks progress
|
|
311
|
-
TaskList(); // View all tasks and their status
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## Idle State Handling (T13)
|
|
317
|
-
|
|
318
|
-
> **IMPORTANT:** Teammates go idle after every turn — this is completely normal.
|
|
319
|
-
> Idle simply means the teammate is waiting for input. An idle notification immediately
|
|
320
|
-
> after a message does NOT mean the teammate is done or has errors.
|
|
321
|
-
> Send a message to an idle teammate to wake it up.
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
## Team Config Discovery (T14)
|
|
326
|
-
|
|
327
|
-
```javascript
|
|
328
|
-
// Teammates can discover each other via team config:
|
|
329
|
-
// ~/.claude/teams/{team-name}/config.json
|
|
330
|
-
// Contains: members[] with name, agentId, agentType
|
|
331
|
-
// Always refer to teammates by NAME, not by UUID.
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
---
|
|
335
|
-
|
|
336
|
-
## Dependency Layer Mode Protocol (no `-p` flag — LEGACY)
|
|
337
|
-
|
|
338
|
-
### 1. Layer Detection
|
|
339
|
-
|
|
340
|
-
**For dependency layer mode only (legacy, no `-p` flag).**
|
|
341
|
-
|
|
342
|
-
Read dependency graph from master feature.json:
|
|
343
|
-
|
|
344
|
-
```javascript
|
|
345
|
-
const master = readJSON(MASTER_FEATURE);
|
|
346
|
-
const layers = master.metadata?.workflow?.dependencyGraph?.layers
|
|
347
|
-
|| master.dependencyGraph?.layers;
|
|
348
|
-
|
|
349
|
-
// Example layers:
|
|
350
|
-
// [
|
|
351
|
-
// { layer: 0, modules: ["employees"], reason: "foundation" },
|
|
352
|
-
// { layer: 1, modules: ["timetracking", "leavemanagement"], reason: "depends on employees" },
|
|
353
|
-
// { layer: 2, modules: ["reporting"], reason: "depends on all" }
|
|
354
|
-
// ]
|
|
355
|
-
|
|
356
|
-
// Fallback: if no layers, treat all modules as sequential (layer 0, 1, 2...)
|
|
357
|
-
if (!layers) {
|
|
358
|
-
const modules = queue.modules.map((m, i) => ({
|
|
359
|
-
layer: i, modules: [m.code], reason: "sequential"
|
|
360
|
-
}));
|
|
361
|
-
}
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
### 2. Team Setup (Legacy)
|
|
367
|
-
|
|
368
|
-
```javascript
|
|
369
|
-
// Create team
|
|
370
|
-
TeamCreate({ team_name: `ralph-${appName}`, description: `Layer-based module orchestration for ${appName}` });
|
|
371
|
-
|
|
372
|
-
// Store team context
|
|
373
|
-
const teamContext = {
|
|
374
|
-
teamName: `ralph-${appName}`,
|
|
375
|
-
layers: layers,
|
|
376
|
-
currentLayer: 0,
|
|
377
|
-
teammates: {} // name → agentId mapping (populated after spawn)
|
|
378
|
-
};
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
---
|
|
382
|
-
|
|
383
|
-
### 3. Teammate Spawn — Per Layer (Legacy)
|
|
384
|
-
|
|
385
|
-
**For dependency layer mode only.**
|
|
386
|
-
|
|
387
|
-
For each layer, spawn teammates IN PARALLEL (single message, multiple Task calls):
|
|
388
|
-
|
|
389
|
-
```javascript
|
|
390
|
-
for (const layer of layers) {
|
|
391
|
-
// Wait for previous layer to complete (except layer 0)
|
|
392
|
-
if (layer.layer > 0) {
|
|
393
|
-
// WAIT: check for MODULE_COMPLETE messages from all previous layer teammates
|
|
394
|
-
// Messages are automatically delivered via SendMessage
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// Spawn all modules in this layer in parallel
|
|
398
|
-
for (const moduleCode of layer.modules) {
|
|
399
|
-
const prdFile = `.ralph/prd-${moduleCode}.json`;
|
|
400
|
-
const prdContent = readJSON(prdFile);
|
|
401
|
-
|
|
402
|
-
Task({
|
|
403
|
-
subagent_type: "general-purpose",
|
|
404
|
-
team_name: `ralph-${appName}`,
|
|
405
|
-
name: `mod-${moduleCode}`,
|
|
406
|
-
mode: "bypassPermissions",
|
|
407
|
-
prompt: TEAMMATE_PROMPT(moduleCode, prdContent),
|
|
408
|
-
description: `Module ${moduleCode}`
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
---
|
|
415
|
-
|
|
416
|
-
### 4. Teammate Prompt Template (Legacy)
|
|
417
|
-
|
|
418
|
-
**For dependency layer mode only.**
|
|
419
|
-
|
|
420
|
-
Each teammate receives a self-contained prompt that delegates to `/apex`:
|
|
421
|
-
|
|
422
|
-
```
|
|
423
|
-
You are a Ralph Loop module worker for module "${moduleCode}".
|
|
424
|
-
|
|
425
|
-
## Your Mission
|
|
426
|
-
Execute ALL tasks in the PRD by delegating to /apex.
|
|
427
|
-
You are an ORCHESTRATOR — you NEVER generate code directly.
|
|
428
|
-
|
|
429
|
-
## PRD File
|
|
430
|
-
${prdFile}
|
|
431
|
-
|
|
432
|
-
## Execution
|
|
433
|
-
1. INVOKE `/apex -d ${prdFile}`
|
|
434
|
-
→ Apex handles all layers: domain → infrastructure → migration → seed data → application → api → frontend → tests
|
|
435
|
-
→ Apex runs POST-CHECKs, MCP validation, build verification, and commits per layer
|
|
436
|
-
→ Apex updates task statuses in the PRD file directly
|
|
437
|
-
2. After apex returns, re-read ${prdFile} to check task statuses
|
|
438
|
-
3. If tasks remain pending/failed, re-invoke `/apex -d ${prdFile}`
|
|
439
|
-
|
|
440
|
-
## Communication Protocol
|
|
441
|
-
- After apex completes and build passes:
|
|
442
|
-
SendMessage({ type: "message", recipient: "team-lead", content: "LAYER_READY:${moduleCode}", summary: "${moduleCode} foundation ready" })
|
|
443
|
-
- When ALL tasks complete:
|
|
444
|
-
SendMessage({ type: "message", recipient: "team-lead", content: "MODULE_COMPLETE:${moduleCode}", summary: "${moduleCode} complete" })
|
|
445
|
-
- On blocking error:
|
|
446
|
-
SendMessage({ type: "message", recipient: "team-lead", content: "ERROR:${moduleCode}:{error}", summary: "${moduleCode} blocked" })
|
|
447
|
-
|
|
448
|
-
## Project Context
|
|
449
|
-
- Project path: ${projectPath}
|
|
450
|
-
- Branch: ${branch}
|
|
451
|
-
- Application: ${appName}
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
---
|
|
455
|
-
|
|
456
|
-
### 5. Team Lead Wait Logic (Legacy)
|
|
457
|
-
|
|
458
|
-
**For dependency layer mode only.**
|
|
459
|
-
|
|
460
|
-
After spawning a layer, the team lead waits for completion:
|
|
461
|
-
|
|
462
|
-
```javascript
|
|
463
|
-
// Track expected messages
|
|
464
|
-
const expectedMessages = layer.modules.length;
|
|
465
|
-
let receivedComplete = 0;
|
|
466
|
-
let receivedReady = 0;
|
|
467
|
-
let errors = [];
|
|
468
|
-
|
|
469
|
-
// Messages arrive automatically via SendMessage
|
|
470
|
-
// When a teammate sends "MODULE_COMPLETE:xxx", increment counter
|
|
471
|
-
// When a teammate sends "ERROR:xxx:yyy", record error
|
|
472
|
-
|
|
473
|
-
// For LAYER_READY: wait until all layer 0 modules signal before spawning layer 1
|
|
474
|
-
// For MODULE_COMPLETE: wait until all layer N modules complete before spawning layer N+1
|
|
475
|
-
|
|
476
|
-
// If error received:
|
|
477
|
-
// - Log to progress.txt
|
|
478
|
-
// - Decide: retry module or mark as partial
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
|
-
### 6. Cross-Module Verification (Legacy)
|
|
484
|
-
|
|
485
|
-
**For dependency layer mode only.**
|
|
486
|
-
|
|
487
|
-
After all layers complete, team lead runs:
|
|
488
|
-
|
|
489
|
-
```bash
|
|
490
|
-
# Full solution build
|
|
491
|
-
dotnet build --no-restore
|
|
492
|
-
|
|
493
|
-
# Full test suite
|
|
494
|
-
dotnet test --no-build
|
|
495
|
-
|
|
496
|
-
# MCP validation
|
|
497
|
-
mcp__smartstack__validate_conventions checks=["all"]
|
|
498
|
-
```
|
|
499
|
-
|
|
500
|
-
---
|
|
501
|
-
|
|
502
|
-
### 7. Cleanup (Legacy)
|
|
503
|
-
|
|
504
|
-
**For dependency layer mode only.**
|
|
505
|
-
|
|
506
|
-
After all modules done and report generated:
|
|
507
|
-
|
|
508
|
-
```javascript
|
|
509
|
-
// Shutdown all teammates
|
|
510
|
-
for (const [name, _] of Object.entries(teamContext.teammates)) {
|
|
511
|
-
SendMessage({ type: "shutdown_request", recipient: name, content: "All modules complete" });
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
// Wait for shutdown confirmations, then:
|
|
515
|
-
TeamDelete();
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
---
|
|
519
|
-
|
|
520
|
-
---
|
|
521
|
-
|
|
522
|
-
## Decision Matrix
|
|
523
|
-
|
|
524
|
-
| Condition | Mode | Action |
|
|
525
|
-
|-----------|------|--------|
|
|
526
|
-
| 1 module | No team | Classic compact loop (no teams) |
|
|
527
|
-
| 2+ modules, `-p` flag | **Parallel Mode** | Phase 0 (Ralph entities) + spawn teammates per app/module |
|
|
528
|
-
| 2+ modules, no `-p`, with dependency graph | Dependency Layer Mode (legacy) | Parallel within each layer based on dependencies |
|
|
529
|
-
| 2+ modules, no `-p`, no dependency graph | Sequential (legacy) | Sequential layers (one module at a time) |
|
|
530
|
-
| Teammate error (parallel) | Continue | Log error, other teammates continue, report in step-05 |
|
|
531
|
-
| Teammate error (legacy) | Continue | Log, try to continue other modules |
|
|
532
|
-
| All modules done (parallel) | Validate + Report | Global build/test → step-05 report → TeamDelete |
|
|
533
|
-
| All modules done (legacy) | Validate + Report | Cross-module verify → step-05 → TeamDelete |
|
|
534
|
-
|
|
535
|
-
---
|
|
536
|
-
|
|
537
|
-
## Recommendations
|
|
538
|
-
|
|
539
|
-
| Scenario | Recommended Mode |
|
|
540
|
-
|----------|------------------|
|
|
541
|
-
| **Multi-app project** (HR + CRM + PM) | **Parallel mode** (`-p`) — 2-3x faster, zero conflicts |
|
|
542
|
-
| **Single-app, 5+ modules** | **Parallel mode** (`-p`) — better scalability |
|
|
543
|
-
| **Single-app, 2-4 modules** | Parallel mode (`-p`) OR sequential (both OK) |
|
|
544
|
-
| **Modules with strict dependencies** | Dependency layer mode (no `-p`) OR sequential |
|
|
545
|
-
| **Single module** | No teams (compact loop) |
|
|
546
|
-
|
|
547
|
-
**Default recommendation: Use `-p` for 2+ modules.**
|
|
1
|
+
# Team Orchestration — Multi-Module Parallel Execution
|
|
2
|
+
|
|
3
|
+
> **Loaded by:** step-00 when multi-module detected (PRD_COUNT > 1)
|
|
4
|
+
> **Purpose:** Parallelize independent modules via Agent Teams.
|
|
5
|
+
> **Rule:** Single module = NO team. Only create team for 2+ modules.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Mode Selection
|
|
10
|
+
|
|
11
|
+
Ralph-loop supports TWO team orchestration modes:
|
|
12
|
+
|
|
13
|
+
### 1. **Parallel Mode** (`-p` flag) — RECOMMENDED
|
|
14
|
+
|
|
15
|
+
**Architecture:** Phase 0 (entities sequential by Ralph) + Phase 1-N (teammates parallel)
|
|
16
|
+
|
|
17
|
+
**Avantages:**
|
|
18
|
+
- ✅ Zero EF Core ModelSnapshot conflicts (entities generated once in Phase 0)
|
|
19
|
+
- ✅ True parallelization on 75-85% of code (services/controllers/frontend/tests)
|
|
20
|
+
- ✅ Teammates have isolated contexts (no saturation)
|
|
21
|
+
- ✅ 2-3x faster than sequential mode
|
|
22
|
+
- ✅ Simple coordination (no dependency graph needed)
|
|
23
|
+
|
|
24
|
+
**When to use:**
|
|
25
|
+
- 2+ applications OR 5+ modules
|
|
26
|
+
- Complex modules with many entities
|
|
27
|
+
- Need guaranteed conflict-free execution
|
|
28
|
+
|
|
29
|
+
**Workflow:**
|
|
30
|
+
1. Ralph generates ALL entities + migration (Phase 0)
|
|
31
|
+
2. Ralph spawns teammates (1 per application or module)
|
|
32
|
+
3. Teammates generate services/controllers/frontend/tests in parallel
|
|
33
|
+
4. Ralph collects results + validates
|
|
34
|
+
5. TeamDelete
|
|
35
|
+
|
|
36
|
+
See section **Parallel Mode Protocol** below.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### 2. **Dependency Layer Mode** (no `-p` flag) — LEGACY
|
|
41
|
+
|
|
42
|
+
**Architecture:** Layer-by-layer execution based on dependency graph
|
|
43
|
+
|
|
44
|
+
**Avantages:**
|
|
45
|
+
- ✅ Respects module dependencies
|
|
46
|
+
- ✅ Works without `-p` flag (backward compatible)
|
|
47
|
+
|
|
48
|
+
**Inconvénients:**
|
|
49
|
+
- ⚠️ Requires dependency graph in feature.json
|
|
50
|
+
- ⚠️ EF Core ModelSnapshot conflicts possible if modules touch same entities
|
|
51
|
+
- ⚠️ More complex coordination
|
|
52
|
+
|
|
53
|
+
**When to use:**
|
|
54
|
+
- Modules have strict dependencies
|
|
55
|
+
- No `-p` flag specified (legacy mode)
|
|
56
|
+
- Single-application projects with <5 modules
|
|
57
|
+
|
|
58
|
+
See section **Dependency Layer Mode Protocol** below.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Parallel Mode Protocol (if `-p` flag)
|
|
63
|
+
|
|
64
|
+
### Phase 0: Foundation (Ralph sequential)
|
|
65
|
+
|
|
66
|
+
Ralph generates ALL entities from ALL modules in ONE pass to avoid ModelSnapshot conflicts.
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
// 1. Collect all entities
|
|
70
|
+
const allPrds = glob('.ralph/prd-*.json').map(f => readJSON(f));
|
|
71
|
+
const allEntities = [];
|
|
72
|
+
const allModules = [];
|
|
73
|
+
|
|
74
|
+
for (const prd of allPrds) {
|
|
75
|
+
const entities = prd.tasks
|
|
76
|
+
.filter(t => t.category === 'domain')
|
|
77
|
+
.map(t => extractEntityName(t.description));
|
|
78
|
+
|
|
79
|
+
allEntities.push(...entities);
|
|
80
|
+
allModules.push({
|
|
81
|
+
code: prd.project.module,
|
|
82
|
+
application: prd.project.application,
|
|
83
|
+
entityCount: entities.length
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
console.log(`Phase 0: Generating ${allEntities.length} entities from ${allModules.length} modules`);
|
|
88
|
+
|
|
89
|
+
// 2. Invoke apex in foundation mode
|
|
90
|
+
// /apex --foundation -d .ralph/prd.json
|
|
91
|
+
//
|
|
92
|
+
// Apex will:
|
|
93
|
+
// - Generate ALL entity classes
|
|
94
|
+
// - Generate ALL EF configurations
|
|
95
|
+
// - Register ALL DbSets in DbContext
|
|
96
|
+
// - Create ONE migration with all entities
|
|
97
|
+
// - Skip services/controllers/frontend/tests
|
|
98
|
+
|
|
99
|
+
// 3. Verify build
|
|
100
|
+
const buildResult = bash('dotnet build');
|
|
101
|
+
if (buildResult.exitCode !== 0) {
|
|
102
|
+
throw new Error('Phase 0 build failed');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// 4. Commit foundation
|
|
106
|
+
bash(`git add . && git commit -m "chore(foundation): entities for all modules"`);
|
|
107
|
+
|
|
108
|
+
console.log(`Phase 0 complete. ModelSnapshot contains ${allEntities.length} entities.`);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### Phase 1-N: Spawn Teammates (parallel)
|
|
114
|
+
|
|
115
|
+
Ralph creates a team and spawns teammates (1 per application OR 1 per module if app has >3 modules).
|
|
116
|
+
|
|
117
|
+
```javascript
|
|
118
|
+
// 1. Determine teammate granularity
|
|
119
|
+
const teammates = [];
|
|
120
|
+
const applicationsMap = {}; // group modules by application
|
|
121
|
+
|
|
122
|
+
for (const mod of allModules) {
|
|
123
|
+
if (!applicationsMap[mod.application]) {
|
|
124
|
+
applicationsMap[mod.application] = [];
|
|
125
|
+
}
|
|
126
|
+
applicationsMap[mod.application].push(mod);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
for (const [appName, modules] of Object.entries(applicationsMap)) {
|
|
130
|
+
if (modules.length <= 3) {
|
|
131
|
+
// 1 teammate per APPLICATION
|
|
132
|
+
teammates.push({
|
|
133
|
+
name: `apex-${kebabCase(appName)}`,
|
|
134
|
+
application: appName,
|
|
135
|
+
modules: modules.map(m => m.code),
|
|
136
|
+
scope: 'application'
|
|
137
|
+
});
|
|
138
|
+
} else {
|
|
139
|
+
// Application has >3 modules → 1 teammate per MODULE
|
|
140
|
+
for (const mod of modules) {
|
|
141
|
+
teammates.push({
|
|
142
|
+
name: `apex-${kebabCase(appName)}-${kebabCase(mod.code)}`,
|
|
143
|
+
application: appName,
|
|
144
|
+
modules: [mod.code],
|
|
145
|
+
scope: 'module'
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
console.log(`Spawning ${teammates.length} teammates:`);
|
|
152
|
+
for (const t of teammates) {
|
|
153
|
+
console.log(` - ${t.name} (${t.scope}): ${t.modules.join(', ')}`);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// 2. Create team
|
|
157
|
+
const teamName = `smartstack-${kebabCase(projectName)}`;
|
|
158
|
+
TeamCreate({ team_name: teamName, description: `Layer-based module orchestration for ${projectName}` });
|
|
159
|
+
|
|
160
|
+
// 3. Spawn teammates in parallel (single message, multiple Task calls)
|
|
161
|
+
for (const teammate of teammates) {
|
|
162
|
+
const prdFiles = teammate.modules.map(m => `.ralph/prd-${m}.json`);
|
|
163
|
+
|
|
164
|
+
Task({
|
|
165
|
+
subagent_type: "apex",
|
|
166
|
+
name: teammate.name,
|
|
167
|
+
team_name: teamName,
|
|
168
|
+
mode: "bypassPermissions",
|
|
169
|
+
prompt: `
|
|
170
|
+
You are teammate ${teammate.name}.
|
|
171
|
+
|
|
172
|
+
## Context
|
|
173
|
+
- Application: ${teammate.application}
|
|
174
|
+
- Modules: ${teammate.modules.join(', ')}
|
|
175
|
+
- PRD files: ${prdFiles.join(', ')}
|
|
176
|
+
|
|
177
|
+
## Phase 0 Completed (by Ralph)
|
|
178
|
+
ALL entity classes, EF configurations, and migrations are already created.
|
|
179
|
+
The ModelSnapshot is complete and the database schema is ready.
|
|
180
|
+
|
|
181
|
+
## Your Task
|
|
182
|
+
For each module in your scope, generate:
|
|
183
|
+
- Services (Application layer)
|
|
184
|
+
- Controllers (API layer)
|
|
185
|
+
- Seed data (Navigation + Permissions + RolePermissions + Business data)
|
|
186
|
+
- Frontend (Pages + Routes + i18n for all 4 languages)
|
|
187
|
+
- Tests (Unit + Integration)
|
|
188
|
+
|
|
189
|
+
## Execution
|
|
190
|
+
For each PRD file:
|
|
191
|
+
1. INVOKE /apex -d {prdFile}
|
|
192
|
+
→ Apex will see existing entities and skip domain/infrastructure layers
|
|
193
|
+
→ Apex will generate services/controllers/seed/frontend/tests
|
|
194
|
+
→ Apex will run POST-CHECKs and commit per layer
|
|
195
|
+
2. Verify build passes
|
|
196
|
+
3. Verify tests pass
|
|
197
|
+
|
|
198
|
+
## Communication Protocol
|
|
199
|
+
When ALL your modules are complete:
|
|
200
|
+
SendMessage({
|
|
201
|
+
type: "message",
|
|
202
|
+
recipient: "team-lead",
|
|
203
|
+
content: "COMPLETE:${teammate.name}",
|
|
204
|
+
summary: "${teammate.name} completed ${teammate.modules.join(', ')}"
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
If you encounter a BLOCKING error:
|
|
208
|
+
SendMessage({
|
|
209
|
+
type: "message",
|
|
210
|
+
recipient: "team-lead",
|
|
211
|
+
content: "ERROR:${teammate.name}:{error_summary}",
|
|
212
|
+
summary: "${teammate.name} blocked"
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
## DO NOT
|
|
216
|
+
- Create new entities (already done in Phase 0)
|
|
217
|
+
- Create migrations (ModelSnapshot already complete)
|
|
218
|
+
- Modify existing entities or EF configs
|
|
219
|
+
`,
|
|
220
|
+
description: `${teammate.application} - ${teammate.modules.join(', ')}`
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
### Collect Results
|
|
228
|
+
|
|
229
|
+
Ralph waits for all teammates to send completion messages.
|
|
230
|
+
|
|
231
|
+
```javascript
|
|
232
|
+
// Track completion
|
|
233
|
+
const expectedTeammates = teammates.length;
|
|
234
|
+
let completedTeammates = 0;
|
|
235
|
+
let errors = [];
|
|
236
|
+
|
|
237
|
+
// Messages arrive automatically via SendMessage
|
|
238
|
+
// When a teammate sends "COMPLETE:xxx", increment counter
|
|
239
|
+
// When a teammate sends "ERROR:xxx:yyy", record error
|
|
240
|
+
|
|
241
|
+
// Wait loop (teammates send messages when done)
|
|
242
|
+
console.log(`Waiting for ${expectedTeammates} teammates to complete...`);
|
|
243
|
+
|
|
244
|
+
// After all teammates complete (or timeout):
|
|
245
|
+
console.log(`Results:`);
|
|
246
|
+
console.log(` ✓ Completed: ${completedTeammates}/${expectedTeammates}`);
|
|
247
|
+
console.log(` ✗ Errors: ${errors.length}`);
|
|
248
|
+
|
|
249
|
+
for (const error of errors) {
|
|
250
|
+
console.log(` - ${error}`);
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
### Validation
|
|
257
|
+
|
|
258
|
+
After all teammates complete, Ralph runs global validation.
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# Full solution build
|
|
262
|
+
dotnet build --no-restore
|
|
263
|
+
|
|
264
|
+
# Full test suite
|
|
265
|
+
dotnet test --no-build
|
|
266
|
+
|
|
267
|
+
# MCP validation
|
|
268
|
+
mcp__smartstack__validate_conventions checks=["all"]
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### Cleanup
|
|
274
|
+
|
|
275
|
+
```javascript
|
|
276
|
+
// Shutdown teammates
|
|
277
|
+
for (const teammate of teammates) {
|
|
278
|
+
SendMessage({
|
|
279
|
+
type: "shutdown_request",
|
|
280
|
+
recipient: teammate.name,
|
|
281
|
+
content: "All modules complete, shutting down team"
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Wait for shutdown confirmations, then:
|
|
286
|
+
TeamDelete();
|
|
287
|
+
|
|
288
|
+
console.log(`Team ${teamName} deleted. All teammates shut down.`);
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Task List Coordination (T10)
|
|
294
|
+
|
|
295
|
+
Create tasks for each module before spawning teammates:
|
|
296
|
+
|
|
297
|
+
```javascript
|
|
298
|
+
// Create tasks for each module before spawning teammates
|
|
299
|
+
for (const mod of modules) {
|
|
300
|
+
TaskCreate({
|
|
301
|
+
subject: `Complete ${mod.code} module`,
|
|
302
|
+
description: `Generate services, controllers, frontend, and tests for ${mod.code}`,
|
|
303
|
+
activeForm: `Working on ${mod.code}`
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Teammates update task status when done
|
|
308
|
+
TaskUpdate({ taskId: currentTaskId, status: 'completed' });
|
|
309
|
+
|
|
310
|
+
// Team lead checks progress
|
|
311
|
+
TaskList(); // View all tasks and their status
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Idle State Handling (T13)
|
|
317
|
+
|
|
318
|
+
> **IMPORTANT:** Teammates go idle after every turn — this is completely normal.
|
|
319
|
+
> Idle simply means the teammate is waiting for input. An idle notification immediately
|
|
320
|
+
> after a message does NOT mean the teammate is done or has errors.
|
|
321
|
+
> Send a message to an idle teammate to wake it up.
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Team Config Discovery (T14)
|
|
326
|
+
|
|
327
|
+
```javascript
|
|
328
|
+
// Teammates can discover each other via team config:
|
|
329
|
+
// ~/.claude/teams/{team-name}/config.json
|
|
330
|
+
// Contains: members[] with name, agentId, agentType
|
|
331
|
+
// Always refer to teammates by NAME, not by UUID.
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## Dependency Layer Mode Protocol (no `-p` flag — LEGACY)
|
|
337
|
+
|
|
338
|
+
### 1. Layer Detection
|
|
339
|
+
|
|
340
|
+
**For dependency layer mode only (legacy, no `-p` flag).**
|
|
341
|
+
|
|
342
|
+
Read dependency graph from master feature.json:
|
|
343
|
+
|
|
344
|
+
```javascript
|
|
345
|
+
const master = readJSON(MASTER_FEATURE);
|
|
346
|
+
const layers = master.metadata?.workflow?.dependencyGraph?.layers
|
|
347
|
+
|| master.dependencyGraph?.layers;
|
|
348
|
+
|
|
349
|
+
// Example layers:
|
|
350
|
+
// [
|
|
351
|
+
// { layer: 0, modules: ["employees"], reason: "foundation" },
|
|
352
|
+
// { layer: 1, modules: ["timetracking", "leavemanagement"], reason: "depends on employees" },
|
|
353
|
+
// { layer: 2, modules: ["reporting"], reason: "depends on all" }
|
|
354
|
+
// ]
|
|
355
|
+
|
|
356
|
+
// Fallback: if no layers, treat all modules as sequential (layer 0, 1, 2...)
|
|
357
|
+
if (!layers) {
|
|
358
|
+
const modules = queue.modules.map((m, i) => ({
|
|
359
|
+
layer: i, modules: [m.code], reason: "sequential"
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
### 2. Team Setup (Legacy)
|
|
367
|
+
|
|
368
|
+
```javascript
|
|
369
|
+
// Create team
|
|
370
|
+
TeamCreate({ team_name: `ralph-${appName}`, description: `Layer-based module orchestration for ${appName}` });
|
|
371
|
+
|
|
372
|
+
// Store team context
|
|
373
|
+
const teamContext = {
|
|
374
|
+
teamName: `ralph-${appName}`,
|
|
375
|
+
layers: layers,
|
|
376
|
+
currentLayer: 0,
|
|
377
|
+
teammates: {} // name → agentId mapping (populated after spawn)
|
|
378
|
+
};
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
### 3. Teammate Spawn — Per Layer (Legacy)
|
|
384
|
+
|
|
385
|
+
**For dependency layer mode only.**
|
|
386
|
+
|
|
387
|
+
For each layer, spawn teammates IN PARALLEL (single message, multiple Task calls):
|
|
388
|
+
|
|
389
|
+
```javascript
|
|
390
|
+
for (const layer of layers) {
|
|
391
|
+
// Wait for previous layer to complete (except layer 0)
|
|
392
|
+
if (layer.layer > 0) {
|
|
393
|
+
// WAIT: check for MODULE_COMPLETE messages from all previous layer teammates
|
|
394
|
+
// Messages are automatically delivered via SendMessage
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Spawn all modules in this layer in parallel
|
|
398
|
+
for (const moduleCode of layer.modules) {
|
|
399
|
+
const prdFile = `.ralph/prd-${moduleCode}.json`;
|
|
400
|
+
const prdContent = readJSON(prdFile);
|
|
401
|
+
|
|
402
|
+
Task({
|
|
403
|
+
subagent_type: "general-purpose",
|
|
404
|
+
team_name: `ralph-${appName}`,
|
|
405
|
+
name: `mod-${moduleCode}`,
|
|
406
|
+
mode: "bypassPermissions",
|
|
407
|
+
prompt: TEAMMATE_PROMPT(moduleCode, prdContent),
|
|
408
|
+
description: `Module ${moduleCode}`
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
### 4. Teammate Prompt Template (Legacy)
|
|
417
|
+
|
|
418
|
+
**For dependency layer mode only.**
|
|
419
|
+
|
|
420
|
+
Each teammate receives a self-contained prompt that delegates to `/apex`:
|
|
421
|
+
|
|
422
|
+
```
|
|
423
|
+
You are a Ralph Loop module worker for module "${moduleCode}".
|
|
424
|
+
|
|
425
|
+
## Your Mission
|
|
426
|
+
Execute ALL tasks in the PRD by delegating to /apex.
|
|
427
|
+
You are an ORCHESTRATOR — you NEVER generate code directly.
|
|
428
|
+
|
|
429
|
+
## PRD File
|
|
430
|
+
${prdFile}
|
|
431
|
+
|
|
432
|
+
## Execution
|
|
433
|
+
1. INVOKE `/apex -d ${prdFile}`
|
|
434
|
+
→ Apex handles all layers: domain → infrastructure → migration → seed data → application → api → frontend → tests
|
|
435
|
+
→ Apex runs POST-CHECKs, MCP validation, build verification, and commits per layer
|
|
436
|
+
→ Apex updates task statuses in the PRD file directly
|
|
437
|
+
2. After apex returns, re-read ${prdFile} to check task statuses
|
|
438
|
+
3. If tasks remain pending/failed, re-invoke `/apex -d ${prdFile}`
|
|
439
|
+
|
|
440
|
+
## Communication Protocol
|
|
441
|
+
- After apex completes and build passes:
|
|
442
|
+
SendMessage({ type: "message", recipient: "team-lead", content: "LAYER_READY:${moduleCode}", summary: "${moduleCode} foundation ready" })
|
|
443
|
+
- When ALL tasks complete:
|
|
444
|
+
SendMessage({ type: "message", recipient: "team-lead", content: "MODULE_COMPLETE:${moduleCode}", summary: "${moduleCode} complete" })
|
|
445
|
+
- On blocking error:
|
|
446
|
+
SendMessage({ type: "message", recipient: "team-lead", content: "ERROR:${moduleCode}:{error}", summary: "${moduleCode} blocked" })
|
|
447
|
+
|
|
448
|
+
## Project Context
|
|
449
|
+
- Project path: ${projectPath}
|
|
450
|
+
- Branch: ${branch}
|
|
451
|
+
- Application: ${appName}
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
### 5. Team Lead Wait Logic (Legacy)
|
|
457
|
+
|
|
458
|
+
**For dependency layer mode only.**
|
|
459
|
+
|
|
460
|
+
After spawning a layer, the team lead waits for completion:
|
|
461
|
+
|
|
462
|
+
```javascript
|
|
463
|
+
// Track expected messages
|
|
464
|
+
const expectedMessages = layer.modules.length;
|
|
465
|
+
let receivedComplete = 0;
|
|
466
|
+
let receivedReady = 0;
|
|
467
|
+
let errors = [];
|
|
468
|
+
|
|
469
|
+
// Messages arrive automatically via SendMessage
|
|
470
|
+
// When a teammate sends "MODULE_COMPLETE:xxx", increment counter
|
|
471
|
+
// When a teammate sends "ERROR:xxx:yyy", record error
|
|
472
|
+
|
|
473
|
+
// For LAYER_READY: wait until all layer 0 modules signal before spawning layer 1
|
|
474
|
+
// For MODULE_COMPLETE: wait until all layer N modules complete before spawning layer N+1
|
|
475
|
+
|
|
476
|
+
// If error received:
|
|
477
|
+
// - Log to progress.txt
|
|
478
|
+
// - Decide: retry module or mark as partial
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
### 6. Cross-Module Verification (Legacy)
|
|
484
|
+
|
|
485
|
+
**For dependency layer mode only.**
|
|
486
|
+
|
|
487
|
+
After all layers complete, team lead runs:
|
|
488
|
+
|
|
489
|
+
```bash
|
|
490
|
+
# Full solution build
|
|
491
|
+
dotnet build --no-restore
|
|
492
|
+
|
|
493
|
+
# Full test suite
|
|
494
|
+
dotnet test --no-build
|
|
495
|
+
|
|
496
|
+
# MCP validation
|
|
497
|
+
mcp__smartstack__validate_conventions checks=["all"]
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
### 7. Cleanup (Legacy)
|
|
503
|
+
|
|
504
|
+
**For dependency layer mode only.**
|
|
505
|
+
|
|
506
|
+
After all modules done and report generated:
|
|
507
|
+
|
|
508
|
+
```javascript
|
|
509
|
+
// Shutdown all teammates
|
|
510
|
+
for (const [name, _] of Object.entries(teamContext.teammates)) {
|
|
511
|
+
SendMessage({ type: "shutdown_request", recipient: name, content: "All modules complete" });
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
// Wait for shutdown confirmations, then:
|
|
515
|
+
TeamDelete();
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
## Decision Matrix
|
|
523
|
+
|
|
524
|
+
| Condition | Mode | Action |
|
|
525
|
+
|-----------|------|--------|
|
|
526
|
+
| 1 module | No team | Classic compact loop (no teams) |
|
|
527
|
+
| 2+ modules, `-p` flag | **Parallel Mode** | Phase 0 (Ralph entities) + spawn teammates per app/module |
|
|
528
|
+
| 2+ modules, no `-p`, with dependency graph | Dependency Layer Mode (legacy) | Parallel within each layer based on dependencies |
|
|
529
|
+
| 2+ modules, no `-p`, no dependency graph | Sequential (legacy) | Sequential layers (one module at a time) |
|
|
530
|
+
| Teammate error (parallel) | Continue | Log error, other teammates continue, report in step-05 |
|
|
531
|
+
| Teammate error (legacy) | Continue | Log, try to continue other modules |
|
|
532
|
+
| All modules done (parallel) | Validate + Report | Global build/test → step-05 report → TeamDelete |
|
|
533
|
+
| All modules done (legacy) | Validate + Report | Cross-module verify → step-05 → TeamDelete |
|
|
534
|
+
|
|
535
|
+
---
|
|
536
|
+
|
|
537
|
+
## Recommendations
|
|
538
|
+
|
|
539
|
+
| Scenario | Recommended Mode |
|
|
540
|
+
|----------|------------------|
|
|
541
|
+
| **Multi-app project** (HR + CRM + PM) | **Parallel mode** (`-p`) — 2-3x faster, zero conflicts |
|
|
542
|
+
| **Single-app, 5+ modules** | **Parallel mode** (`-p`) — better scalability |
|
|
543
|
+
| **Single-app, 2-4 modules** | Parallel mode (`-p`) OR sequential (both OK) |
|
|
544
|
+
| **Modules with strict dependencies** | Dependency layer mode (no `-p`) OR sequential |
|
|
545
|
+
| **Single module** | No teams (compact loop) |
|
|
546
|
+
|
|
547
|
+
**Default recommendation: Use `-p` for 2+ modules.**
|