agentic-orchestrator 0.1.27 → 0.2.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/.claude/settings.local.json +46 -1
- package/.cortexrc +28 -0
- package/.github/agents/copilot-instructions.md +29 -0
- package/.github/copilot-instructions.md +93 -0
- package/.vscode/settings.json +13 -0
- package/.vscode/tms.code-snippets +223 -0
- package/AGENTS.md +72 -1
- package/Agentic-Orchestrator.iml +12 -11
- package/CLAUDE.md +72 -1
- package/CONSTITUTION.md +504 -0
- package/FUTURE-ENHANCEMENTS.md +85 -0
- package/NEXT-TASKS.md +25 -0
- package/PROMPTS.md +161 -0
- package/README.md +126 -29
- package/agentic/orchestrator/agents.yaml +4 -3
- package/agentic/orchestrator/defaults/policy.defaults.yaml +39 -3
- package/agentic/orchestrator/gates.yaml +15 -3
- package/agentic/orchestrator/policy.yaml +47 -3
- package/agentic/orchestrator/prompts/builder.system.md +69 -20
- package/agentic/orchestrator/prompts/planner-intake.system.md +149 -0
- package/agentic/orchestrator/prompts/planner.system.md +113 -40
- package/agentic/orchestrator/prompts/qa.system.md +73 -18
- package/agentic/orchestrator/prompts/reconciler.system.md +119 -0
- package/agentic/orchestrator/schemas/agents.schema.json +89 -1
- package/agentic/orchestrator/schemas/execution-control.schema.json +242 -0
- package/agentic/orchestrator/schemas/index.schema.json +234 -0
- package/agentic/orchestrator/schemas/intake.review.schema.json +82 -0
- package/agentic/orchestrator/schemas/organizer-ordering-artifact.schema.json +75 -0
- package/agentic/orchestrator/schemas/plan.schema.json +44 -0
- package/agentic/orchestrator/schemas/policy.schema.json +238 -9
- package/agentic/orchestrator/schemas/policy.user.schema.json +129 -1
- package/agentic/orchestrator/schemas/spec.manifest.bootstrap.schema.json +101 -0
- package/agentic/orchestrator/schemas/spec.manifest.verified.schema.json +80 -0
- package/agentic/orchestrator/schemas/state.schema.json +298 -3
- package/agentic/orchestrator/tools/catalog.json +145 -15
- package/agentic/orchestrator/tools/schemas/input/doctor.run.input.schema.json +18 -0
- package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +4 -0
- package/agentic/orchestrator/tools/schemas/input/evidence.verify_chain.input.schema.json +13 -0
- package/agentic/orchestrator/tools/schemas/input/feature.intake_submit.input.schema.json +11 -0
- package/agentic/orchestrator/tools/schemas/input/feature.question_answer.input.schema.json +15 -0
- package/agentic/orchestrator/tools/schemas/input/feature.question_create.input.schema.json +21 -0
- package/agentic/orchestrator/tools/schemas/input/feature.question_list.input.schema.json +13 -0
- package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +5 -0
- package/agentic/orchestrator/tools/schemas/input/feature.send_message.input.schema.json +1 -1
- package/agentic/orchestrator/tools/schemas/input/replay.timeline_get.input.schema.json +32 -0
- package/agentic/orchestrator/tools/schemas/input/repo.conflict_abort.input.schema.json +16 -0
- package/agentic/orchestrator/tools/schemas/input/repo.conflict_files.input.schema.json +16 -0
- package/agentic/orchestrator/tools/schemas/input/repo.reconcile_mainline.input.schema.json +37 -0
- package/agentic/orchestrator/tools/schemas/input/repo.resolve_conflict.input.schema.json +40 -0
- package/agentic/orchestrator/tools/schemas/input/runtime.execution_request_list.input.schema.json +7 -0
- package/agentic/orchestrator/tools/schemas/input/runtime.execution_request_submit.input.schema.json +25 -0
- package/agentic/orchestrator/tools/schemas/output/doctor.run.output.schema.json +34 -0
- package/agentic/orchestrator/tools/schemas/output/evidence.verify_chain.output.schema.json +23 -0
- package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +62 -2
- package/agentic/orchestrator/tools/schemas/output/feature.intake_submit.output.schema.json +24 -0
- package/agentic/orchestrator/tools/schemas/output/feature.question_answer.output.schema.json +21 -0
- package/agentic/orchestrator/tools/schemas/output/feature.question_create.output.schema.json +12 -0
- package/agentic/orchestrator/tools/schemas/output/feature.question_list.output.schema.json +14 -0
- package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +31 -0
- package/agentic/orchestrator/tools/schemas/output/feature.send_message.output.schema.json +8 -18
- package/agentic/orchestrator/tools/schemas/output/replay.timeline_get.output.schema.json +64 -0
- package/agentic/orchestrator/tools/schemas/output/repo.conflict_abort.output.schema.json +16 -0
- package/agentic/orchestrator/tools/schemas/output/repo.conflict_files.output.schema.json +22 -0
- package/agentic/orchestrator/tools/schemas/output/repo.reconcile_mainline.output.schema.json +61 -0
- package/agentic/orchestrator/tools/schemas/output/repo.resolve_conflict.output.schema.json +19 -0
- package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +26 -0
- package/agentic/orchestrator/tools/schemas/output/runtime.execution_request_list.output.schema.json +17 -0
- package/agentic/orchestrator/tools/schemas/output/runtime.execution_request_submit.output.schema.json +24 -0
- package/agentic/orchestrator/tools.md +13 -0
- package/apps/control-plane/scripts/validate-mcp-contracts.ts +1 -1
- package/apps/control-plane/src/application/kernel-tool-wiring.ts +140 -2
- package/apps/control-plane/src/application/services/activity-monitor-service.ts +44 -1
- package/apps/control-plane/src/application/services/bootstrap-manifest-generator-service.ts +251 -0
- package/apps/control-plane/src/application/services/checkpoint-service.ts +87 -27
- package/apps/control-plane/src/application/services/collision-override-service.ts +906 -0
- package/apps/control-plane/src/application/services/collision-queue-service.ts +129 -38
- package/apps/control-plane/src/application/services/cost-tracking-service.ts +94 -0
- package/apps/control-plane/src/application/services/execution-control-service.ts +599 -0
- package/apps/control-plane/src/application/services/feature-deletion-service.ts +37 -1
- package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +182 -4
- package/apps/control-plane/src/application/services/feature-send-message-service.ts +17 -8
- package/apps/control-plane/src/application/services/feature-state-service.ts +191 -6
- package/apps/control-plane/src/application/services/gate-service.ts +121 -2
- package/apps/control-plane/src/application/services/git-reconciliation-service.ts +1591 -0
- package/apps/control-plane/src/application/services/intake-service.ts +1468 -0
- package/apps/control-plane/src/application/services/merge-service.ts +308 -17
- package/apps/control-plane/src/application/services/notifier-service.ts +3 -1
- package/apps/control-plane/src/application/services/performance-analytics-service.ts +75 -0
- package/apps/control-plane/src/application/services/plan-service.ts +336 -20
- package/apps/control-plane/src/application/services/question-service.ts +693 -0
- package/apps/control-plane/src/application/services/reactions-service.ts +73 -17
- package/apps/control-plane/src/application/services/replay-timeline-service.ts +295 -0
- package/apps/control-plane/src/application/services/reporting-service.ts +194 -10
- package/apps/control-plane/src/application/services/run-lease-service.ts +121 -5
- package/apps/control-plane/src/application/services/worktree-watchdog-service.ts +95 -8
- package/apps/control-plane/src/application/tools/tool-metadata.ts +7 -0
- package/apps/control-plane/src/application/usage-types.ts +138 -0
- package/apps/control-plane/src/cli/add-command-handler.ts +162 -0
- package/apps/control-plane/src/cli/answer-command-handler.ts +113 -0
- package/apps/control-plane/src/cli/attach-command-handler.ts +12 -3
- package/apps/control-plane/src/cli/cli-argument-parser.ts +133 -11
- package/apps/control-plane/src/cli/collision-command-handler.ts +113 -0
- package/apps/control-plane/src/cli/command-catalog.ts +479 -0
- package/apps/control-plane/src/cli/complete-command-handler.ts +23 -0
- package/apps/control-plane/src/cli/completion-command-handler.ts +25 -0
- package/apps/control-plane/src/cli/completion-resolver.ts +319 -0
- package/apps/control-plane/src/cli/completion-shell-renderer.ts +58 -0
- package/apps/control-plane/src/cli/dashboard-command-handler.ts +110 -1
- package/apps/control-plane/src/cli/dashboard-runtime-runner.ts +1036 -0
- package/apps/control-plane/src/cli/dashboard-runtime.ts +31 -0
- package/apps/control-plane/src/cli/help-command-handler.ts +17 -185
- package/apps/control-plane/src/cli/init-command-handler.ts +51 -6
- package/apps/control-plane/src/cli/merge-command-handler.ts +200 -0
- package/apps/control-plane/src/cli/questions-command-handler.ts +70 -0
- package/apps/control-plane/src/cli/replay-command-handler.ts +98 -0
- package/apps/control-plane/src/cli/resume-command-handler.ts +252 -18
- package/apps/control-plane/src/cli/retry-command-handler.ts +229 -17
- package/apps/control-plane/src/cli/retry-resume-decision.ts +75 -0
- package/apps/control-plane/src/cli/rollback-command-handler.ts +4 -2
- package/apps/control-plane/src/cli/run-command-handler.ts +35 -1
- package/apps/control-plane/src/cli/spec-ingestion-service.ts +45 -55
- package/apps/control-plane/src/cli/spec-preparation.ts +114 -0
- package/apps/control-plane/src/cli/spec-utils.ts +90 -11
- package/apps/control-plane/src/cli/status-command-handler.ts +122 -0
- package/apps/control-plane/src/cli/types.ts +41 -3
- package/apps/control-plane/src/core/collisions.ts +150 -31
- package/apps/control-plane/src/core/constants.ts +18 -1
- package/apps/control-plane/src/core/error-codes.ts +39 -0
- package/apps/control-plane/src/core/execution-control.ts +56 -0
- package/apps/control-plane/src/core/feature-resume-phase.ts +118 -0
- package/apps/control-plane/src/core/gate-freshness.ts +359 -0
- package/apps/control-plane/src/core/gate-log-extractor.ts +97 -0
- package/apps/control-plane/src/core/gates.ts +90 -1
- package/apps/control-plane/src/core/intake-artifacts.ts +295 -0
- package/apps/control-plane/src/core/kernel-types.ts +11 -0
- package/apps/control-plane/src/core/kernel.ts +604 -16
- package/apps/control-plane/src/core/mainline-conflict.ts +22 -0
- package/apps/control-plane/src/core/merge-repair.ts +149 -0
- package/apps/control-plane/src/core/path-layout.ts +46 -2
- package/apps/control-plane/src/core/path-rules.ts +11 -3
- package/apps/control-plane/src/core/plan-submit-recovery.ts +130 -0
- package/apps/control-plane/src/core/questions.ts +49 -0
- package/apps/control-plane/src/core/runtime-sessions.ts +4 -0
- package/apps/control-plane/src/core/schemas.ts +40 -1
- package/apps/control-plane/src/core/tool-caller.ts +25 -1
- package/apps/control-plane/src/core/utils/index-normalizer.ts +25 -4
- package/apps/control-plane/src/core/worktree-diff.ts +66 -0
- package/apps/control-plane/src/index.ts +29 -1
- package/apps/control-plane/src/interfaces/cli/bootstrap.ts +300 -6
- package/apps/control-plane/src/mcp/kernel-tool-executor.ts +17 -0
- package/apps/control-plane/src/mcp/tool-runtime.ts +63 -4
- package/apps/control-plane/src/providers/api-worker-provider.ts +62 -15
- package/apps/control-plane/src/providers/cli-worker-provider.ts +1037 -61
- package/apps/control-plane/src/providers/output-parsers/generic-output-parser.ts +99 -1
- package/apps/control-plane/src/providers/output-parsers/types.ts +2 -0
- package/apps/control-plane/src/providers/provider-defaults.ts +116 -7
- package/apps/control-plane/src/providers/providers.ts +225 -21
- package/apps/control-plane/src/providers/worker-provider-factory.ts +26 -2
- package/apps/control-plane/src/supervisor/artifact-stager.ts +52 -0
- package/apps/control-plane/src/supervisor/build-wave-executor.ts +477 -166
- package/apps/control-plane/src/supervisor/execution-enrollment-service.ts +408 -0
- package/apps/control-plane/src/supervisor/organizer-enrollment-scheduler.ts +117 -0
- package/apps/control-plane/src/supervisor/organizer-sidecar-service.ts +394 -0
- package/apps/control-plane/src/supervisor/plan-conformance-scorer.ts +2 -5
- package/apps/control-plane/src/supervisor/planner-phase.ts +85 -0
- package/apps/control-plane/src/supervisor/planning-wave-executor.ts +993 -64
- package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +20 -1
- package/apps/control-plane/src/supervisor/qa-wave-executor.ts +384 -177
- package/apps/control-plane/src/supervisor/run-coordinator.ts +801 -43
- package/apps/control-plane/src/supervisor/runtime.ts +485 -9
- package/apps/control-plane/src/supervisor/session-orchestrator.ts +220 -1
- package/apps/control-plane/src/supervisor/types.ts +152 -1
- package/apps/control-plane/src/supervisor/worker-decision-loop.ts +1030 -92
- package/apps/control-plane/test/activity-monitor.spec.ts +76 -0
- package/apps/control-plane/test/add-command-handler.spec.ts +189 -0
- package/apps/control-plane/test/application/services/feature-state-service.spec.ts +208 -0
- package/apps/control-plane/test/artifact-stager.spec.ts +93 -0
- package/apps/control-plane/test/batch-operations.spec.ts +58 -0
- package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +50 -2
- package/apps/control-plane/test/bootstrap-manifest-generator-service.spec.ts +99 -0
- package/apps/control-plane/test/bootstrap.spec.ts +177 -4
- package/apps/control-plane/test/checkpoint-service.spec.ts +977 -29
- package/apps/control-plane/test/cli-argument-parser.spec.ts +119 -0
- package/apps/control-plane/test/cli-helpers.spec.ts +1202 -12
- package/apps/control-plane/test/cli.unit.spec.ts +797 -16
- package/apps/control-plane/test/collision-command-handler.spec.ts +182 -0
- package/apps/control-plane/test/collision-override-service.spec.ts +878 -0
- package/apps/control-plane/test/collision-queue.spec.ts +430 -2
- package/apps/control-plane/test/collisions.spec.ts +209 -1
- package/apps/control-plane/test/core-utils.spec.ts +61 -0
- package/apps/control-plane/test/cost-tracking.spec.ts +224 -0
- package/apps/control-plane/test/dashboard-api.integration.spec.ts +185 -5
- package/apps/control-plane/test/dashboard-client.spec.ts +948 -0
- package/apps/control-plane/test/dashboard-command.spec.ts +138 -6
- package/apps/control-plane/test/dashboard-runtime-runner.spec.ts +1550 -0
- package/apps/control-plane/test/dashboard-runtime.spec.ts +138 -0
- package/apps/control-plane/test/dashboard-ui-utils.spec.ts +56 -12
- package/apps/control-plane/test/dependency-scheduler.spec.ts +7 -1
- package/apps/control-plane/test/env-file.spec.ts +76 -0
- package/apps/control-plane/test/execution-control-service.spec.ts +535 -0
- package/apps/control-plane/test/execution-enrollment-service.spec.ts +648 -0
- package/apps/control-plane/test/feature-lifecycle.spec.ts +126 -0
- package/apps/control-plane/test/feature-resume-phase.spec.ts +164 -0
- package/apps/control-plane/test/feature-send-message-service.spec.ts +161 -0
- package/apps/control-plane/test/feature-state-service.spec.ts +295 -0
- package/apps/control-plane/test/fs.spec.ts +80 -0
- package/apps/control-plane/test/gate-freshness.spec.ts +590 -0
- package/apps/control-plane/test/gate-log-extractor.spec.ts +170 -0
- package/apps/control-plane/test/gates.spec.ts +108 -0
- package/apps/control-plane/test/git-reconciliation-service.spec.ts +2307 -0
- package/apps/control-plane/test/helpers.ts +65 -0
- package/apps/control-plane/test/incremental-gates.spec.ts +271 -0
- package/apps/control-plane/test/index-normalizer.spec.ts +98 -0
- package/apps/control-plane/test/init-wizard.spec.ts +17 -0
- package/apps/control-plane/test/intake-artifacts.spec.ts +203 -0
- package/apps/control-plane/test/intake-service.spec.ts +3176 -0
- package/apps/control-plane/test/kernel-collision-replay.spec.ts +3 -2
- package/apps/control-plane/test/kernel-tool-executor.spec.ts +77 -0
- package/apps/control-plane/test/kernel-tool-wiring.spec.ts +279 -0
- package/apps/control-plane/test/kernel.branches.spec.ts +15 -2
- package/apps/control-plane/test/kernel.coverage.spec.ts +7 -3
- package/apps/control-plane/test/kernel.coverage2.spec.ts +731 -2
- package/apps/control-plane/test/kernel.spec.ts +464 -2
- package/apps/control-plane/test/mainline-conflict.spec.ts +66 -0
- package/apps/control-plane/test/mcp-helpers.spec.ts +79 -0
- package/apps/control-plane/test/mcp.spec.ts +177 -13
- package/apps/control-plane/test/merge-command-handler.spec.ts +531 -0
- package/apps/control-plane/test/merge-service.spec.ts +570 -4
- package/apps/control-plane/test/notifier-service.spec.ts +26 -0
- package/apps/control-plane/test/organizer-enrollment-scheduler.spec.ts +340 -0
- package/apps/control-plane/test/organizer-ordering-artifact.spec.ts +95 -0
- package/apps/control-plane/test/organizer-sidecar-service.spec.ts +468 -0
- package/apps/control-plane/test/output-loop-detector.spec.ts +6 -0
- package/apps/control-plane/test/path-layout.spec.ts +70 -0
- package/apps/control-plane/test/path-normalizers.spec.ts +41 -0
- package/apps/control-plane/test/performance-analytics.spec.ts +124 -0
- package/apps/control-plane/test/plan-conformance-scorer.spec.ts +53 -0
- package/apps/control-plane/test/plan-service.spec.ts +686 -4
- package/apps/control-plane/test/planning-wave-executor.spec.ts +3272 -86
- package/apps/control-plane/test/policy-loader-service.spec.ts +5 -0
- package/apps/control-plane/test/prompt-overlay.spec.ts +65 -0
- package/apps/control-plane/test/provider-command-runner-epipe.spec.ts +64 -0
- package/apps/control-plane/test/providers/api-worker-provider.spec.ts +129 -0
- package/apps/control-plane/test/providers/cli-worker-provider.spec.ts +148 -0
- package/apps/control-plane/test/providers/usage-types.spec.ts +98 -0
- package/apps/control-plane/test/providers.spec.ts +293 -16
- package/apps/control-plane/test/question-command-handlers.spec.ts +156 -0
- package/apps/control-plane/test/question-service.spec.ts +1119 -0
- package/apps/control-plane/test/reactions.spec.ts +114 -0
- package/apps/control-plane/test/replay-command-handler.spec.ts +144 -0
- package/apps/control-plane/test/replay-timeline-service.spec.ts +459 -0
- package/apps/control-plane/test/response.spec.ts +31 -0
- package/apps/control-plane/test/resume-command.spec.ts +786 -9
- package/apps/control-plane/test/retry-resume-decision.spec.ts +133 -0
- package/apps/control-plane/test/rollback-command-handler.spec.ts +334 -0
- package/apps/control-plane/test/rollback-command.spec.ts +120 -0
- package/apps/control-plane/test/run-coordinator.spec.ts +3141 -364
- package/apps/control-plane/test/schemas/state.schema.spec.ts +71 -0
- package/apps/control-plane/test/service-retry-paths.spec.ts +112 -0
- package/apps/control-plane/test/services.spec.ts +472 -2
- package/apps/control-plane/test/session-management.spec.ts +346 -1
- package/apps/control-plane/test/spec-ingestion.spec.ts +102 -28
- package/apps/control-plane/test/spec-preparation.spec.ts +182 -0
- package/apps/control-plane/test/supervisor-collaborators.spec.ts +191 -3
- package/apps/control-plane/test/supervisor.calltool.spec.ts +198 -0
- package/apps/control-plane/test/supervisor.spec.ts +95 -16
- package/apps/control-plane/test/supervisor.unit.spec.ts +385 -18
- package/apps/control-plane/test/tool-runtime.spec.ts +122 -0
- package/apps/control-plane/test/worker-decision-loop.spec.ts +3479 -476
- package/apps/control-plane/test/worker-execution-policy.spec.ts +1416 -6
- package/apps/control-plane/test/worker-provider-adapters.spec.ts +1894 -37
- package/apps/control-plane/test/worker-provider-factory.spec.ts +81 -0
- package/apps/control-plane/test/worktree-watchdog-service.spec.ts +125 -0
- package/apps/control-plane/vitest.config.ts +5 -0
- package/config/agentic/orchestrator/agents.yaml +23 -2
- package/config/agentic/orchestrator/gates.yaml +24 -7
- package/config/agentic/orchestrator/policy.yaml +23 -1
- package/config/agentic/orchestrator/prompts/builder.system.md +69 -20
- package/config/agentic/orchestrator/prompts/organizer.system.md +85 -0
- package/config/agentic/orchestrator/prompts/overrides/builder.claude.md +28 -0
- package/config/agentic/orchestrator/prompts/overrides/builder.codex.md +28 -0
- package/config/agentic/orchestrator/prompts/overrides/planner.claude.md +20 -0
- package/config/agentic/orchestrator/prompts/overrides/planner.codex.md +20 -0
- package/config/agentic/orchestrator/prompts/planner-intake.system.md +149 -0
- package/config/agentic/orchestrator/prompts/planner.system.md +113 -40
- package/config/agentic/orchestrator/prompts/qa.system.md +75 -18
- package/config/agentic/orchestrator/prompts/reconciler.system.md +119 -0
- package/dist/apps/control-plane/application/kernel-tool-wiring.d.ts +26 -2
- package/dist/apps/control-plane/application/kernel-tool-wiring.js +40 -2
- package/dist/apps/control-plane/application/kernel-tool-wiring.js.map +1 -1
- package/dist/apps/control-plane/application/services/activity-monitor-service.js +37 -1
- package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.d.ts +4 -0
- package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.js +188 -0
- package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/checkpoint-service.d.ts +5 -0
- package/dist/apps/control-plane/application/services/checkpoint-service.js +69 -24
- package/dist/apps/control-plane/application/services/checkpoint-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/collision-override-service.d.ts +139 -0
- package/dist/apps/control-plane/application/services/collision-override-service.js +568 -0
- package/dist/apps/control-plane/application/services/collision-override-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/collision-queue-service.d.ts +15 -0
- package/dist/apps/control-plane/application/services/collision-queue-service.js +92 -33
- package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/cost-tracking-service.d.ts +11 -0
- package/dist/apps/control-plane/application/services/cost-tracking-service.js +75 -0
- package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/execution-control-service.d.ts +75 -0
- package/dist/apps/control-plane/application/services/execution-control-service.js +421 -0
- package/dist/apps/control-plane/application/services/execution-control-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/feature-deletion-service.d.ts +1 -0
- package/dist/apps/control-plane/application/services/feature-deletion-service.js +23 -1
- package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.d.ts +24 -1
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +132 -3
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-send-message-service.js +16 -8
- package/dist/apps/control-plane/application/services/feature-send-message-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-state-service.d.ts +36 -0
- package/dist/apps/control-plane/application/services/feature-state-service.js +163 -6
- package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-service.d.ts +2 -1
- package/dist/apps/control-plane/application/services/gate-service.js +95 -5
- package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/git-reconciliation-service.d.ts +92 -0
- package/dist/apps/control-plane/application/services/git-reconciliation-service.js +1097 -0
- package/dist/apps/control-plane/application/services/git-reconciliation-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/intake-service.d.ts +63 -0
- package/dist/apps/control-plane/application/services/intake-service.js +1050 -0
- package/dist/apps/control-plane/application/services/intake-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/merge-service.d.ts +5 -1
- package/dist/apps/control-plane/application/services/merge-service.js +233 -18
- package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/notifier-service.d.ts +1 -1
- package/dist/apps/control-plane/application/services/notifier-service.js +1 -0
- package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/performance-analytics-service.d.ts +11 -0
- package/dist/apps/control-plane/application/services/performance-analytics-service.js +59 -0
- package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/plan-service.d.ts +5 -0
- package/dist/apps/control-plane/application/services/plan-service.js +254 -15
- package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/question-service.d.ts +72 -0
- package/dist/apps/control-plane/application/services/question-service.js +507 -0
- package/dist/apps/control-plane/application/services/question-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/reactions-service.d.ts +2 -0
- package/dist/apps/control-plane/application/services/reactions-service.js +60 -17
- package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/replay-timeline-service.d.ts +39 -0
- package/dist/apps/control-plane/application/services/replay-timeline-service.js +205 -0
- package/dist/apps/control-plane/application/services/replay-timeline-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/reporting-service.d.ts +59 -0
- package/dist/apps/control-plane/application/services/reporting-service.js +121 -9
- package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/run-lease-service.d.ts +20 -0
- package/dist/apps/control-plane/application/services/run-lease-service.js +81 -4
- package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/worktree-watchdog-service.d.ts +10 -0
- package/dist/apps/control-plane/application/services/worktree-watchdog-service.js +65 -8
- package/dist/apps/control-plane/application/services/worktree-watchdog-service.js.map +1 -1
- package/dist/apps/control-plane/application/tools/tool-metadata.js +7 -0
- package/dist/apps/control-plane/application/tools/tool-metadata.js.map +1 -1
- package/dist/apps/control-plane/application/usage-types.d.ts +65 -0
- package/dist/apps/control-plane/application/usage-types.js +75 -0
- package/dist/apps/control-plane/application/usage-types.js.map +1 -0
- package/dist/apps/control-plane/cli/add-command-handler.d.ts +18 -0
- package/dist/apps/control-plane/cli/add-command-handler.js +110 -0
- package/dist/apps/control-plane/cli/add-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/answer-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/answer-command-handler.js +96 -0
- package/dist/apps/control-plane/cli/answer-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/attach-command-handler.js +8 -3
- package/dist/apps/control-plane/cli/attach-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/cli-argument-parser.js +131 -11
- package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
- package/dist/apps/control-plane/cli/collision-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/collision-command-handler.js +90 -0
- package/dist/apps/control-plane/cli/collision-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/command-catalog.d.ts +21 -0
- package/dist/apps/control-plane/cli/command-catalog.js +416 -0
- package/dist/apps/control-plane/cli/command-catalog.js.map +1 -0
- package/dist/apps/control-plane/cli/complete-command-handler.d.ts +15 -0
- package/dist/apps/control-plane/cli/complete-command-handler.js +26 -0
- package/dist/apps/control-plane/cli/complete-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/completion-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/completion-command-handler.js +20 -0
- package/dist/apps/control-plane/cli/completion-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/completion-resolver.d.ts +1 -0
- package/dist/apps/control-plane/cli/completion-resolver.js +250 -0
- package/dist/apps/control-plane/cli/completion-resolver.js.map +1 -0
- package/dist/apps/control-plane/cli/completion-shell-renderer.d.ts +3 -0
- package/dist/apps/control-plane/cli/completion-shell-renderer.js +53 -0
- package/dist/apps/control-plane/cli/completion-shell-renderer.js.map +1 -0
- package/dist/apps/control-plane/cli/dashboard-command-handler.d.ts +1 -0
- package/dist/apps/control-plane/cli/dashboard-command-handler.js +83 -1
- package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/dashboard-runtime-runner.d.ts +81 -0
- package/dist/apps/control-plane/cli/dashboard-runtime-runner.js +724 -0
- package/dist/apps/control-plane/cli/dashboard-runtime-runner.js.map +1 -0
- package/dist/apps/control-plane/cli/dashboard-runtime.d.ts +1 -0
- package/dist/apps/control-plane/cli/dashboard-runtime.js +26 -0
- package/dist/apps/control-plane/cli/dashboard-runtime.js.map +1 -0
- package/dist/apps/control-plane/cli/help-command-handler.js +13 -172
- package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/init-command-handler.js +51 -6
- package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/merge-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/merge-command-handler.js +139 -0
- package/dist/apps/control-plane/cli/merge-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/questions-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/questions-command-handler.js +59 -0
- package/dist/apps/control-plane/cli/questions-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/replay-command-handler.d.ts +15 -0
- package/dist/apps/control-plane/cli/replay-command-handler.js +55 -0
- package/dist/apps/control-plane/cli/replay-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/resume-command-handler.d.ts +2 -0
- package/dist/apps/control-plane/cli/resume-command-handler.js +196 -19
- package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/retry-command-handler.js +202 -16
- package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/retry-resume-decision.d.ts +26 -0
- package/dist/apps/control-plane/cli/retry-resume-decision.js +61 -0
- package/dist/apps/control-plane/cli/retry-resume-decision.js.map +1 -0
- package/dist/apps/control-plane/cli/rollback-command-handler.js +3 -2
- package/dist/apps/control-plane/cli/rollback-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/run-command-handler.js +26 -2
- package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-ingestion-service.d.ts +2 -0
- package/dist/apps/control-plane/cli/spec-ingestion-service.js +37 -48
- package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-preparation.d.ts +14 -0
- package/dist/apps/control-plane/cli/spec-preparation.js +81 -0
- package/dist/apps/control-plane/cli/spec-preparation.js.map +1 -0
- package/dist/apps/control-plane/cli/spec-utils.d.ts +4 -0
- package/dist/apps/control-plane/cli/spec-utils.js +70 -11
- package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
- package/dist/apps/control-plane/cli/status-command-handler.js +69 -0
- package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/types.d.ts +41 -4
- package/dist/apps/control-plane/cli/types.js +9 -1
- package/dist/apps/control-plane/cli/types.js.map +1 -1
- package/dist/apps/control-plane/core/collisions.d.ts +37 -19
- package/dist/apps/control-plane/core/collisions.js +87 -12
- package/dist/apps/control-plane/core/collisions.js.map +1 -1
- package/dist/apps/control-plane/core/constants.d.ts +17 -1
- package/dist/apps/control-plane/core/constants.js +18 -1
- package/dist/apps/control-plane/core/constants.js.map +1 -1
- package/dist/apps/control-plane/core/error-codes.d.ts +39 -0
- package/dist/apps/control-plane/core/error-codes.js +39 -0
- package/dist/apps/control-plane/core/error-codes.js.map +1 -1
- package/dist/apps/control-plane/core/execution-control.d.ts +45 -0
- package/dist/apps/control-plane/core/execution-control.js +2 -0
- package/dist/apps/control-plane/core/execution-control.js.map +1 -0
- package/dist/apps/control-plane/core/feature-resume-phase.d.ts +3 -0
- package/dist/apps/control-plane/core/feature-resume-phase.js +88 -0
- package/dist/apps/control-plane/core/feature-resume-phase.js.map +1 -0
- package/dist/apps/control-plane/core/gate-freshness.d.ts +48 -0
- package/dist/apps/control-plane/core/gate-freshness.js +267 -0
- package/dist/apps/control-plane/core/gate-freshness.js.map +1 -0
- package/dist/apps/control-plane/core/gate-log-extractor.d.ts +22 -0
- package/dist/apps/control-plane/core/gate-log-extractor.js +66 -0
- package/dist/apps/control-plane/core/gate-log-extractor.js.map +1 -0
- package/dist/apps/control-plane/core/gates.d.ts +11 -2
- package/dist/apps/control-plane/core/gates.js +67 -3
- package/dist/apps/control-plane/core/gates.js.map +1 -1
- package/dist/apps/control-plane/core/intake-artifacts.d.ts +109 -0
- package/dist/apps/control-plane/core/intake-artifacts.js +143 -0
- package/dist/apps/control-plane/core/intake-artifacts.js.map +1 -0
- package/dist/apps/control-plane/core/kernel-types.d.ts +8 -0
- package/dist/apps/control-plane/core/kernel.d.ts +256 -8
- package/dist/apps/control-plane/core/kernel.js +400 -14
- package/dist/apps/control-plane/core/kernel.js.map +1 -1
- package/dist/apps/control-plane/core/mainline-conflict.d.ts +7 -0
- package/dist/apps/control-plane/core/mainline-conflict.js +20 -0
- package/dist/apps/control-plane/core/mainline-conflict.js.map +1 -0
- package/dist/apps/control-plane/core/merge-repair.d.ts +35 -0
- package/dist/apps/control-plane/core/merge-repair.js +99 -0
- package/dist/apps/control-plane/core/merge-repair.js.map +1 -0
- package/dist/apps/control-plane/core/path-layout.d.ts +10 -0
- package/dist/apps/control-plane/core/path-layout.js +32 -2
- package/dist/apps/control-plane/core/path-layout.js.map +1 -1
- package/dist/apps/control-plane/core/path-rules.js +9 -3
- package/dist/apps/control-plane/core/path-rules.js.map +1 -1
- package/dist/apps/control-plane/core/plan-submit-recovery.d.ts +22 -0
- package/dist/apps/control-plane/core/plan-submit-recovery.js +78 -0
- package/dist/apps/control-plane/core/plan-submit-recovery.js.map +1 -0
- package/dist/apps/control-plane/core/questions.d.ts +40 -0
- package/dist/apps/control-plane/core/questions.js +2 -0
- package/dist/apps/control-plane/core/questions.js.map +1 -0
- package/dist/apps/control-plane/core/runtime-sessions.d.ts +4 -0
- package/dist/apps/control-plane/core/schemas.d.ts +2 -0
- package/dist/apps/control-plane/core/schemas.js +31 -1
- package/dist/apps/control-plane/core/schemas.js.map +1 -1
- package/dist/apps/control-plane/core/tool-caller.d.ts +18 -1
- package/dist/apps/control-plane/core/utils/index-normalizer.js +17 -4
- package/dist/apps/control-plane/core/utils/index-normalizer.js.map +1 -1
- package/dist/apps/control-plane/core/worktree-diff.d.ts +4 -0
- package/dist/apps/control-plane/core/worktree-diff.js +52 -0
- package/dist/apps/control-plane/core/worktree-diff.js.map +1 -0
- package/dist/apps/control-plane/index.d.ts +10 -2
- package/dist/apps/control-plane/index.js +9 -2
- package/dist/apps/control-plane/index.js.map +1 -1
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js +236 -6
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js +16 -0
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-runtime.d.ts +5 -0
- package/dist/apps/control-plane/mcp/tool-runtime.js +40 -5
- package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
- package/dist/apps/control-plane/providers/api-worker-provider.d.ts +2 -2
- package/dist/apps/control-plane/providers/api-worker-provider.js +40 -9
- package/dist/apps/control-plane/providers/api-worker-provider.js.map +1 -1
- package/dist/apps/control-plane/providers/cli-worker-provider.d.ts +59 -3
- package/dist/apps/control-plane/providers/cli-worker-provider.js +758 -46
- package/dist/apps/control-plane/providers/cli-worker-provider.js.map +1 -1
- package/dist/apps/control-plane/providers/output-parsers/generic-output-parser.js +91 -1
- package/dist/apps/control-plane/providers/output-parsers/generic-output-parser.js.map +1 -1
- package/dist/apps/control-plane/providers/output-parsers/types.d.ts +2 -0
- package/dist/apps/control-plane/providers/provider-defaults.d.ts +12 -0
- package/dist/apps/control-plane/providers/provider-defaults.js +103 -7
- package/dist/apps/control-plane/providers/provider-defaults.js.map +1 -1
- package/dist/apps/control-plane/providers/providers.d.ts +50 -4
- package/dist/apps/control-plane/providers/providers.js +145 -14
- package/dist/apps/control-plane/providers/providers.js.map +1 -1
- package/dist/apps/control-plane/providers/worker-provider-factory.d.ts +2 -0
- package/dist/apps/control-plane/providers/worker-provider-factory.js +8 -1
- package/dist/apps/control-plane/providers/worker-provider-factory.js.map +1 -1
- package/dist/apps/control-plane/supervisor/artifact-stager.d.ts +5 -0
- package/dist/apps/control-plane/supervisor/artifact-stager.js +45 -0
- package/dist/apps/control-plane/supervisor/artifact-stager.js.map +1 -0
- package/dist/apps/control-plane/supervisor/build-wave-executor.d.ts +24 -1
- package/dist/apps/control-plane/supervisor/build-wave-executor.js +362 -150
- package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/execution-enrollment-service.d.ts +41 -0
- package/dist/apps/control-plane/supervisor/execution-enrollment-service.js +311 -0
- package/dist/apps/control-plane/supervisor/execution-enrollment-service.js.map +1 -0
- package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.d.ts +15 -0
- package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.js +93 -0
- package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.js.map +1 -0
- package/dist/apps/control-plane/supervisor/organizer-sidecar-service.d.ts +44 -0
- package/dist/apps/control-plane/supervisor/organizer-sidecar-service.js +311 -0
- package/dist/apps/control-plane/supervisor/organizer-sidecar-service.js.map +1 -0
- package/dist/apps/control-plane/supervisor/plan-conformance-scorer.js +2 -5
- package/dist/apps/control-plane/supervisor/plan-conformance-scorer.js.map +1 -1
- package/dist/apps/control-plane/supervisor/planner-phase.d.ts +3 -0
- package/dist/apps/control-plane/supervisor/planner-phase.js +70 -0
- package/dist/apps/control-plane/supervisor/planner-phase.js.map +1 -0
- package/dist/apps/control-plane/supervisor/planning-wave-executor.d.ts +42 -0
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js +753 -55
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +19 -1
- package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js.map +1 -1
- package/dist/apps/control-plane/supervisor/qa-wave-executor.d.ts +21 -0
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js +287 -156
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.d.ts +33 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.js +631 -39
- package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/runtime.d.ts +84 -0
- package/dist/apps/control-plane/supervisor/runtime.js +393 -3
- package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
- package/dist/apps/control-plane/supervisor/session-orchestrator.d.ts +54 -0
- package/dist/apps/control-plane/supervisor/session-orchestrator.js +176 -1
- package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/types.d.ts +142 -1
- package/dist/apps/control-plane/supervisor/types.js.map +1 -1
- package/dist/apps/control-plane/supervisor/worker-decision-loop.d.ts +68 -2
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js +723 -89
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
- package/docs/core/ARCHITECTURE.md +227 -0
- package/docs/core/DECISIONS.md +94 -0
- package/docs/core/DOMAIN-LOGIC.md +60 -0
- package/docs/core/PATTERNS.md +201 -0
- package/docs/core/TROUBLESHOOTING.md +347 -0
- package/docs/core/intentgraph-dependencies.json +39860 -0
- package/docs/core/intentgraph.index.json +46580 -0
- package/docs/plans/2026-03-10-gate-failure-targeted-repair-design.md +224 -0
- package/docs/plans/2026-03-10-gate-failure-targeted-repair.md +1032 -0
- package/docs/superpowers/plans/2026-03-16-provider-cli-config.md +743 -0
- package/docs/superpowers/plans/2026-03-23-reconcile-divergence-fix.md +777 -0
- package/docs/superpowers/plans/2026-03-28-ordering-agent-implementation.md +1754 -0
- package/docs/superpowers/plans/2026-03-29-drop-zone-and-provider-optimization.md +1108 -0
- package/docs/superpowers/plans/2026-03-29-merge-target-feature-branch.md +685 -0
- package/docs/superpowers/plans/2026-03-29-organizer-sidecar-runtime-loop.md +1289 -0
- package/docs/superpowers/specs/2026-03-23-reconcile-divergence-fix-design.md +118 -0
- package/docs/superpowers/specs/2026-03-28-ordering-agent-spec-audit-design.md +50 -0
- package/docs/superpowers/specs/2026-03-29-drop-zone-and-provider-optimization-design.md +254 -0
- package/docs/superpowers/specs/2026-03-29-merge-target-feature-branch-design.md +152 -0
- package/docs/superpowers/specs/2026-03-29-organizer-sidecar-runtime-loop-design.md +225 -0
- package/package.json +3 -2
- package/packages/web-dashboard/package.json +2 -1
- package/packages/web-dashboard/src/app/analytics/page.tsx +36 -2
- package/packages/web-dashboard/src/app/api/actions/route.ts +274 -63
- package/packages/web-dashboard/src/app/api/actions/status/route.ts +35 -0
- package/packages/web-dashboard/src/app/api/analytics/provider/route.ts +18 -0
- package/packages/web-dashboard/src/app/api/collisions/approve/route.ts +58 -0
- package/packages/web-dashboard/src/app/api/features/[id]/checkpoint-diff/route.ts +36 -0
- package/packages/web-dashboard/src/app/api/features/[id]/checkpoints/route.ts +29 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/abort/route.ts +29 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/files/route.ts +30 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/resolve/route.ts +51 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/route.ts +75 -0
- package/packages/web-dashboard/src/app/api/features/[id]/diff/route.ts +16 -2
- package/packages/web-dashboard/src/app/api/features/[id]/files/route.ts +26 -0
- package/packages/web-dashboard/src/app/api/features/[id]/gate-history/route.ts +27 -0
- package/packages/web-dashboard/src/app/api/features/[id]/genealogy/route.ts +26 -0
- package/packages/web-dashboard/src/app/api/features/[id]/history/run/[runId]/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/history/runs/route.ts +34 -0
- package/packages/web-dashboard/src/app/api/features/[id]/intake-workspace/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/live-output/route.ts +74 -0
- package/packages/web-dashboard/src/app/api/features/[id]/plan/amend/route.ts +21 -0
- package/packages/web-dashboard/src/app/api/features/[id]/plan-progress/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/planner-artifacts/[artifact]/route.ts +78 -0
- package/packages/web-dashboard/src/app/api/features/[id]/planner-lifecycle/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/planning-workspace/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/questions/[questionId]/answer/route.ts +27 -0
- package/packages/web-dashboard/src/app/api/features/[id]/questions/route.ts +18 -0
- package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +14 -7
- package/packages/web-dashboard/src/app/api/features/[id]/route.ts +57 -2
- package/packages/web-dashboard/src/app/api/features/[id]/spec/route.ts +30 -0
- package/packages/web-dashboard/src/app/api/features/[id]/triage/route.ts +83 -0
- package/packages/web-dashboard/src/app/api/features/[id]/worker-events/route.ts +40 -0
- package/packages/web-dashboard/src/app/api/launch/preview/route.ts +86 -0
- package/packages/web-dashboard/src/app/api/launch/submit/route.ts +180 -0
- package/packages/web-dashboard/src/app/api/mainline/status/route.ts +74 -0
- package/packages/web-dashboard/src/app/api/merge-queue/route.ts +13 -0
- package/packages/web-dashboard/src/app/api/policy/budget/route.ts +14 -0
- package/packages/web-dashboard/src/app/api/projects/route.ts +11 -7
- package/packages/web-dashboard/src/app/api/reconciler/queue/route.ts +47 -0
- package/packages/web-dashboard/src/app/api/run/route.ts +26 -2
- package/packages/web-dashboard/src/app/api/runtime/events/route.ts +227 -0
- package/packages/web-dashboard/src/app/api/runtime/operations/route.ts +269 -0
- package/packages/web-dashboard/src/app/api/runtime/questions/route.ts +11 -0
- package/packages/web-dashboard/src/app/api/runtime/runs/route.ts +80 -0
- package/packages/web-dashboard/src/app/api/status/route.ts +4 -2
- package/packages/web-dashboard/src/app/feature/[id]/page.tsx +32 -42
- package/packages/web-dashboard/src/app/globals.css +34 -3
- package/packages/web-dashboard/src/app/launch/page.tsx +357 -0
- package/packages/web-dashboard/src/app/layout.tsx +23 -1
- package/packages/web-dashboard/src/app/page.tsx +263 -272
- package/packages/web-dashboard/src/components/dashboard/attention-strip.tsx +52 -0
- package/packages/web-dashboard/src/components/dashboard/collision-approval-drawer.tsx +185 -0
- package/packages/web-dashboard/src/components/dashboard/command-center-header.tsx +102 -0
- package/packages/web-dashboard/src/components/dashboard/mainline-status-banner.tsx +84 -0
- package/packages/web-dashboard/src/components/dashboard/merged-archive.tsx +36 -0
- package/packages/web-dashboard/src/components/dashboard/prioritized-queues.tsx +98 -0
- package/packages/web-dashboard/src/components/dashboard/reconciler-queue-card.tsx +115 -0
- package/packages/web-dashboard/src/components/dashboard/secondary-diagnostics-rail.tsx +48 -0
- package/packages/web-dashboard/src/components/dashboard/task-filter-bar.tsx +74 -0
- package/packages/web-dashboard/src/components/dashboard/triage-drawer.tsx +455 -0
- package/packages/web-dashboard/src/components/diff-viewer.tsx +19 -3
- package/packages/web-dashboard/src/components/evidence-viewer.tsx +65 -51
- package/packages/web-dashboard/src/components/feature-card.tsx +90 -7
- package/packages/web-dashboard/src/components/feature-cost-panel.tsx +112 -11
- package/packages/web-dashboard/src/components/feature-list-view.tsx +25 -4
- package/packages/web-dashboard/src/components/features/runtime-inspector/EventsTimelineView.tsx +260 -0
- package/packages/web-dashboard/src/components/features/runtime-inspector/OperationsListView.tsx +172 -0
- package/packages/web-dashboard/src/components/features/runtime-inspector/RuntimeInspectorPanel.tsx +896 -0
- package/packages/web-dashboard/src/components/filter-bar.tsx +7 -39
- package/packages/web-dashboard/src/components/focus/ActionableRiskList.tsx +46 -0
- package/packages/web-dashboard/src/components/focus/AgentRolePerformanceCard.tsx +200 -0
- package/packages/web-dashboard/src/components/focus/BlockedGuidanceBanner.tsx +149 -0
- package/packages/web-dashboard/src/components/focus/CheckpointInspector.tsx +123 -0
- package/packages/web-dashboard/src/components/focus/CheckpointRail.tsx +118 -0
- package/packages/web-dashboard/src/components/focus/CheckpointScrubber.tsx +249 -0
- package/packages/web-dashboard/src/components/focus/CollisionApprovalBanner.tsx +192 -0
- package/packages/web-dashboard/src/components/focus/CollisionRadar.tsx +136 -0
- package/packages/web-dashboard/src/components/focus/ConflictStatusCard.tsx +52 -0
- package/packages/web-dashboard/src/components/focus/ContextSidebar.tsx +108 -0
- package/packages/web-dashboard/src/components/focus/DiagnosisPanel.tsx +68 -0
- package/packages/web-dashboard/src/components/focus/FeatureDecisionBanner.tsx +68 -0
- package/packages/web-dashboard/src/components/focus/FeatureQuestionAnswerPanel.tsx +167 -0
- package/packages/web-dashboard/src/components/focus/FocusHeader.tsx +54 -0
- package/packages/web-dashboard/src/components/focus/FocusLayout.tsx +283 -0
- package/packages/web-dashboard/src/components/focus/GateFlakinessSummary.tsx +144 -0
- package/packages/web-dashboard/src/components/focus/GenealogyTree.tsx +34 -0
- package/packages/web-dashboard/src/components/focus/HeroBlock.tsx +67 -0
- package/packages/web-dashboard/src/components/focus/LiveAgentConsole.tsx +277 -0
- package/packages/web-dashboard/src/components/focus/MergeQueueCard.tsx +78 -0
- package/packages/web-dashboard/src/components/focus/OperationalSummaryCard.tsx +227 -0
- package/packages/web-dashboard/src/components/focus/PinnedActions.tsx +96 -0
- package/packages/web-dashboard/src/components/focus/PlanAmendmentPanel.tsx +250 -0
- package/packages/web-dashboard/src/components/focus/PlanProgressPanel.tsx +133 -0
- package/packages/web-dashboard/src/components/focus/PlannerArtifactViewer.tsx +158 -0
- package/packages/web-dashboard/src/components/focus/PlannerLifecycleHeader.tsx +141 -0
- package/packages/web-dashboard/src/components/focus/ProgressSnapshotCard.tsx +113 -0
- package/packages/web-dashboard/src/components/focus/RecentMaterialChanges.tsx +69 -0
- package/packages/web-dashboard/src/components/focus/RoleLogViewer.tsx +436 -0
- package/packages/web-dashboard/src/components/focus/RunHistoryBrowser.tsx +62 -0
- package/packages/web-dashboard/src/components/focus/SpecViewer.tsx +172 -0
- package/packages/web-dashboard/src/components/focus/TabBar.tsx +33 -0
- package/packages/web-dashboard/src/components/focus/UsageBurnChart.tsx +212 -0
- package/packages/web-dashboard/src/components/focus/VerificationSummaryCard.tsx +122 -0
- package/packages/web-dashboard/src/components/focus/tabs/ChangesTab.tsx +325 -0
- package/packages/web-dashboard/src/components/focus/tabs/ConflictsTab.tsx +395 -0
- package/packages/web-dashboard/src/components/focus/tabs/GatesQaTab.tsx +38 -0
- package/packages/web-dashboard/src/components/focus/tabs/HistoryTab.tsx +213 -0
- package/packages/web-dashboard/src/components/focus/tabs/IntakeTab.tsx +429 -0
- package/packages/web-dashboard/src/components/focus/tabs/OverviewTab.tsx +217 -0
- package/packages/web-dashboard/src/components/focus/tabs/PlanningTab.tsx +390 -0
- package/packages/web-dashboard/src/components/focus/tabs/ReviewTab.tsx +497 -0
- package/packages/web-dashboard/src/components/focus/tabs/RuntimeTab.tsx +213 -0
- package/packages/web-dashboard/src/components/focus/tabs/TranscriptTab.tsx +315 -0
- package/packages/web-dashboard/src/components/gate-results.tsx +2 -2
- package/packages/web-dashboard/src/components/human-input-panel.tsx +33 -57
- package/packages/web-dashboard/src/components/kanban-board.tsx +4 -0
- package/packages/web-dashboard/src/components/launch/launch-draft-card.tsx +131 -0
- package/packages/web-dashboard/src/components/plan-viewer.tsx +147 -69
- package/packages/web-dashboard/src/components/quick-launch-panel.tsx +20 -47
- package/packages/web-dashboard/src/components/summary-bar.tsx +30 -76
- package/packages/web-dashboard/src/lib/aop-client.ts +2484 -36
- package/packages/web-dashboard/src/lib/blocked-state-guidance.ts +475 -0
- package/packages/web-dashboard/src/lib/collision-radar.ts +136 -0
- package/packages/web-dashboard/src/lib/dashboard-action-states.ts +204 -0
- package/packages/web-dashboard/src/lib/dashboard-runtime-client.ts +439 -0
- package/packages/web-dashboard/src/lib/dashboard-utils.ts +179 -18
- package/packages/web-dashboard/src/lib/drop-zone-utils.ts +92 -0
- package/packages/web-dashboard/src/lib/focus-detail-derivations.ts +958 -0
- package/packages/web-dashboard/src/lib/focus-view.ts +300 -0
- package/packages/web-dashboard/src/lib/health-diagnosis.ts +356 -0
- package/packages/web-dashboard/src/lib/launch-contracts.ts +77 -0
- package/packages/web-dashboard/src/lib/launch-markdown.ts +107 -0
- package/packages/web-dashboard/src/lib/launch-page-preview.ts +89 -0
- package/packages/web-dashboard/src/lib/live-feed.ts +1 -1
- package/packages/web-dashboard/src/lib/multi-project-config.ts +33 -0
- package/packages/web-dashboard/src/lib/orchestrator-tools.ts +845 -59
- package/packages/web-dashboard/src/lib/planner-workspace.ts +1285 -0
- package/packages/web-dashboard/src/lib/review-contracts.ts +5 -3
- package/packages/web-dashboard/src/lib/runtime-files.ts +285 -0
- package/packages/web-dashboard/src/lib/tool-catalog.ts +51 -0
- package/packages/web-dashboard/src/lib/types.ts +731 -3
- package/packages/web-dashboard/src/lib/usage-burn.ts +175 -0
- package/packages/web-dashboard/src/lib/worktree-diff.ts +128 -0
- package/packages/web-dashboard/src/styles/dashboard.module.css +1742 -459
- package/packages/web-dashboard/test/api/actions/route.spec.ts +675 -0
- package/packages/web-dashboard/test/api/features/diff.route.spec.ts +57 -0
- package/packages/web-dashboard/test/api/features/feature.route.spec.ts +99 -0
- package/packages/web-dashboard/test/api/features/live-output.route.spec.ts +123 -0
- package/packages/web-dashboard/test/api/features/plan-amend.route.spec.ts +95 -0
- package/packages/web-dashboard/test/api/features/planner-workspaces.route.spec.ts +162 -0
- package/packages/web-dashboard/test/api/features/question-answer.route.spec.ts +99 -0
- package/packages/web-dashboard/test/api/features/triage.route.spec.ts +195 -0
- package/packages/web-dashboard/test/api/launch/preview.route.spec.ts +149 -0
- package/packages/web-dashboard/test/api/launch/submit.route.spec.ts +382 -0
- package/packages/web-dashboard/test/api/runtime/events/route.spec.ts +164 -0
- package/packages/web-dashboard/test/api/runtime/operations/route.spec.ts +156 -0
- package/packages/web-dashboard/test/api/runtime/runs/route.spec.ts +112 -0
- package/packages/web-dashboard/test/components/changes-tab.spec.tsx +76 -0
- package/packages/web-dashboard/test/components/command-center-root.spec.tsx +87 -0
- package/packages/web-dashboard/test/components/diagnosis-panel.spec.tsx +59 -0
- package/packages/web-dashboard/test/components/feature-card.spec.tsx +45 -0
- package/packages/web-dashboard/test/components/focus-layout.spec.tsx +299 -0
- package/packages/web-dashboard/test/components/gate-results.spec.tsx +39 -0
- package/packages/web-dashboard/test/components/gates-qa-tab.spec.tsx +118 -0
- package/packages/web-dashboard/test/components/human-input-panel.spec.tsx +54 -0
- package/packages/web-dashboard/test/components/intake-tab.spec.tsx +210 -0
- package/packages/web-dashboard/test/components/kanban-board.spec.tsx +35 -0
- package/packages/web-dashboard/test/components/launch-draft-card.spec.tsx +54 -0
- package/packages/web-dashboard/test/components/launch-page.spec.tsx +79 -0
- package/packages/web-dashboard/test/components/overview-tab.spec.tsx +236 -0
- package/packages/web-dashboard/test/components/planning-tab.spec.tsx +202 -0
- package/packages/web-dashboard/test/components/review-tab.spec.tsx +169 -0
- package/packages/web-dashboard/test/components/role-log-viewer.spec.ts +42 -0
- package/packages/web-dashboard/test/components/runtime-inspector.spec.tsx +22 -0
- package/packages/web-dashboard/test/components/runtime-tab.spec.tsx +133 -0
- package/packages/web-dashboard/test/components/transcript-tab.spec.tsx +46 -0
- package/packages/web-dashboard/test/components/triage-drawer.spec.tsx +159 -0
- package/packages/web-dashboard/test/lib/aop-client.spec.ts +235 -0
- package/packages/web-dashboard/test/lib/dashboard-runtime-client.spec.ts +144 -0
- package/packages/web-dashboard/test/lib/focus-detail-derivations.spec.ts +314 -0
- package/packages/web-dashboard/test/lib/focus-view.spec.ts +248 -0
- package/packages/web-dashboard/test/lib/health-diagnosis.spec.ts +277 -0
- package/packages/web-dashboard/test/lib/launch-markdown.spec.ts +36 -0
- package/packages/web-dashboard/test/lib/multi-project-config.spec.ts +54 -0
- package/packages/web-dashboard/test/lib/orchestrator-tools.spec.ts +352 -0
- package/packages/web-dashboard/test/lib/planner-workspace.spec.ts +289 -0
- package/packages/web-dashboard/test/lib/worktree-diff.spec.ts +119 -0
- package/packages/web-dashboard/vitest.config.ts +2 -0
- package/spec-files/completed/agentic_orchestrator_add_feature_to_active_execution_spec.md +557 -0
- package/spec-files/completed/agentic_orchestrator_dashboard_command_center_redesign_spec.md +1147 -0
- package/spec-files/completed/agentic_orchestrator_execution_mode_spec.md +18 -16
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_a_spec.md +672 -0
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_b_spec.md +794 -0
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_c_decision_centric_remediation_spec.md +1037 -0
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_ux_redesign_spec.md +1432 -0
- package/spec-files/completed/agentic_orchestrator_focus_plan_tab_intake_planning_workspace_spec.md +921 -0
- package/spec-files/completed/agentic_orchestrator_intentional_collision_override_spec.md +584 -0
- package/spec-files/completed/agentic_orchestrator_interactive_planning_intake_and_requirements_verification_spec.md +1185 -0
- package/spec-files/completed/agentic_orchestrator_reactive_execution_enrollment_spec.md +864 -0
- package/spec-files/{outstanding → completed}/agentic_orchestrator_runtime_inspection_spec.md +92 -19
- package/spec-files/completed/agentic_orchestrator_scope_aware_run_lease_spec.md +408 -0
- package/spec-files/completed/git-reconciliation-engine.md +827 -0
- package/spec-files/outstanding/agentic_orchestrator_dashboard_quick_launch_and_control_surface_spec.md +331 -0
- package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +16 -6
- package/spec-files/outstanding/agentic_orchestrator_evidence_integrity_doctor_spec.md +60 -9
- package/spec-files/outstanding/agentic_orchestrator_focus_plan_tab_execution_contract_workspace_spec.md +616 -0
- package/spec-files/outstanding/agentic_orchestrator_headless_standby_dashboard_runtime_spec.md +310 -0
- package/spec-files/outstanding/agentic_orchestrator_human_input_interaction_protocol_spec.md +175 -72
- package/spec-files/outstanding/agentic_orchestrator_interactive_rename_cleanup_spec.md +197 -0
- package/spec-files/outstanding/agentic_orchestrator_interactive_resume_and_reconciliation_disposition_spec.md +412 -0
- package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +166 -137
- package/spec-files/outstanding/agentic_orchestrator_observability_replay_spec.md +3 -3
- package/spec-files/outstanding/agentic_orchestrator_phase_specific_agent_profiles_and_token_telemetry_spec.md +303 -0
- package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +18 -5
- package/spec-files/outstanding/agentic_orchestrator_policy_stratification_spec.md +225 -0
- package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +77 -50
- package/spec-files/outstanding/agentic_orchestrator_ready_to_merge_branch_handoff_spec.md +724 -0
- package/spec-files/outstanding/agentic_orchestrator_remove_deterministic_mode_spec.md +263 -0
- package/spec-files/outstanding/agentic_orchestrator_request_more_context_and_dashboard_human_input_spec.md +456 -0
- package/spec-files/outstanding/agentic_orchestrator_spec_coverage_and_reconciliation_enforcement_spec.md +1411 -0
- package/spec-files/outstanding/agentic_orchestrator_spec_ordering_agent_spec.md +370 -0
- package/spec-files/outstanding/shadow_workspace_implementation_spec.md +1 -1
- package/spec-files/progress.md +2045 -87
- package/specs/001-runtime-inspection/checklists/requirements.md +35 -0
- package/specs/001-runtime-inspection/design.md +338 -0
- package/specs/001-runtime-inspection/spec.md +95 -0
- package/specs/002-scope-aware-lease/checklists/requirements.md +35 -0
- package/specs/002-scope-aware-lease/contracts/lease-registry.schema.json +101 -0
- package/specs/002-scope-aware-lease/data-model.md +236 -0
- package/specs/002-scope-aware-lease/plan.md +766 -0
- package/specs/002-scope-aware-lease/quickstart.md +150 -0
- package/specs/002-scope-aware-lease/research.md +135 -0
- package/specs/002-scope-aware-lease/spec.md +128 -0
- package/specs/002-scope-aware-lease/tasks.md +767 -0
- package/tsconfig.json +1 -1
- package/vitest.config.ts +28 -0
- package/ARCHITECTURE_ADHERENCE_ANALYSIS.md +0 -871
- package/packages/web-dashboard/next-env.d.ts +0 -6
- package/packages/web-dashboard/src/components/detail-panel.tsx +0 -1124
- package/packages/web-dashboard/src/components/review-workspace.tsx +0 -1162
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_artifact_database_publishing_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_cli_shell_tab_completion_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_dashboard_diff_and_agent_console_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_performance_improvements_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_persistent_worker_runtime_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_provider_auth_bootstrap_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_real_worker_provider_execution_spec.md +0 -0
|
@@ -0,0 +1,827 @@
|
|
|
1
|
+
# Git Reconciliation Engine Specification
|
|
2
|
+
|
|
3
|
+
**Feature ID**: `git_reconciliation_engine`
|
|
4
|
+
**Version**: 1.0.0
|
|
5
|
+
**Status**: Outstanding
|
|
6
|
+
**Created**: 2026-03-07
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
A periodic git reconciliation engine that ensures feature worktrees remain semantically compatible with the mainline branch throughout the multi-agent orchestration lifecycle. The engine runs between every phase transition (before planning, before building, before QA, before merge) to detect and resolve divergence.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Problem Statement
|
|
17
|
+
|
|
18
|
+
In parallel multi-agent development:
|
|
19
|
+
|
|
20
|
+
- Multiple features work in isolated worktrees simultaneously
|
|
21
|
+
- Mainline branch evolves independently as features merge
|
|
22
|
+
- Feature worktrees can drift from mainline, causing merge conflicts at promotion time
|
|
23
|
+
- Late-stage conflict detection blocks `ready_to_merge` transitions and wastes agent work
|
|
24
|
+
|
|
25
|
+
**Goal**: Detect and resolve mainline divergence proactively at phase boundaries, ensuring worktrees are always merge-ready.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Requirements
|
|
30
|
+
|
|
31
|
+
### 1. Git Diff Engine
|
|
32
|
+
|
|
33
|
+
**Location**: `apps/control-plane/src/application/services/git-reconciliation-service.ts`
|
|
34
|
+
|
|
35
|
+
**Core Operation**: `reconcileWithMainline(featureId: string, baseRef: string): Promise<ToolResponse<ReconciliationResult>>`
|
|
36
|
+
|
|
37
|
+
#### 1.1 Divergence Detection
|
|
38
|
+
|
|
39
|
+
**Input**:
|
|
40
|
+
|
|
41
|
+
- `featureId`: Feature identifier
|
|
42
|
+
- `baseRef`: Mainline branch name (from `policy.yaml` `worktree.base_branch`)
|
|
43
|
+
|
|
44
|
+
**Process**:
|
|
45
|
+
|
|
46
|
+
1. Resolve feature worktree path from `state.md`
|
|
47
|
+
2. Execute `git fetch origin <baseRef>` to update remote tracking
|
|
48
|
+
3. Compute diff: `git diff <baseRef>...HEAD` (three-dot diff shows changes since common ancestor)
|
|
49
|
+
4. Classify result:
|
|
50
|
+
- **No divergence**: Worktree is up-to-date or ahead-only (fast-forward merge possible)
|
|
51
|
+
- **Non-conflicting divergence**: Mainline has new commits, but no overlapping file changes
|
|
52
|
+
- **Conflicting divergence**: Mainline and worktree modified the same files/lines
|
|
53
|
+
|
|
54
|
+
**Output**: `ReconciliationResult`
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
type ReconciliationResult = {
|
|
58
|
+
status: 'up_to_date' | 'merged' | 'conflict_detected';
|
|
59
|
+
divergence_detected: boolean;
|
|
60
|
+
files_changed_mainline: string[];
|
|
61
|
+
files_changed_worktree: string[];
|
|
62
|
+
conflicting_files: string[];
|
|
63
|
+
merge_base: string; // SHA of common ancestor
|
|
64
|
+
mainline_head: string; // SHA of current mainline HEAD
|
|
65
|
+
worktree_head: string; // SHA of current worktree HEAD
|
|
66
|
+
};
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### 1.2 Non-Conflicting Merge
|
|
70
|
+
|
|
71
|
+
**Trigger**: `divergence_detected === true` AND `conflicting_files.length === 0`
|
|
72
|
+
|
|
73
|
+
**Process**:
|
|
74
|
+
|
|
75
|
+
1. **Pull remote mainline changes**:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
git fetch origin <baseRef>
|
|
79
|
+
git merge --ff-only origin/<baseRef> # Fast-forward if possible
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
If fast-forward fails (worktree has diverged):
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
git rebase origin/<baseRef> # Rebase worktree commits onto mainline
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
2. **Pull local mainline changes**:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Fetch from local repository's mainline branch
|
|
92
|
+
git fetch <repo_root> <baseRef>
|
|
93
|
+
git merge --ff-only FETCH_HEAD
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
If fast-forward fails:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
git rebase FETCH_HEAD
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
3. **Verify merge success**:
|
|
103
|
+
- No conflict markers: `git diff --check`
|
|
104
|
+
- Working tree clean: `git status --porcelain`
|
|
105
|
+
|
|
106
|
+
4. **Update state metadata**:
|
|
107
|
+
- Patch `state.md`: `last_reconciliation_at`, `last_reconciliation_sha`
|
|
108
|
+
- Return `{ status: 'merged' }`
|
|
109
|
+
|
|
110
|
+
5. **Handle rebase conflicts** (unexpected):
|
|
111
|
+
- Abort: `git rebase --abort`
|
|
112
|
+
- Fall through to conflict resolution path
|
|
113
|
+
|
|
114
|
+
**Note**: No merge commits are created. Changes are integrated via fast-forward or rebase to maintain linear history.
|
|
115
|
+
|
|
116
|
+
#### 1.3 Conflicting Merge
|
|
117
|
+
|
|
118
|
+
**Trigger**: `conflicting_files.length > 0`
|
|
119
|
+
|
|
120
|
+
**Process**:
|
|
121
|
+
|
|
122
|
+
1. Transition feature to `blocked` status with reason `mainline_conflict`
|
|
123
|
+
2. Record conflict metadata in `state.md`:
|
|
124
|
+
```yaml
|
|
125
|
+
conflicts:
|
|
126
|
+
- type: mainline_divergence
|
|
127
|
+
detected_at: <timestamp>
|
|
128
|
+
merge_base: <sha>
|
|
129
|
+
mainline_head: <sha>
|
|
130
|
+
conflicting_files: [...]
|
|
131
|
+
```
|
|
132
|
+
3. Invoke reconciliation agent (see §2)
|
|
133
|
+
4. Return `{ status: 'conflict_detected' }`
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### 2. Reconciliation Agent
|
|
138
|
+
|
|
139
|
+
**Role**: `reconciler` (new agent role)
|
|
140
|
+
|
|
141
|
+
**Trigger**: Conflicting divergence detected by git diff engine
|
|
142
|
+
|
|
143
|
+
**System Prompt**: `config/agentic/orchestrator/prompts/reconciler.md`
|
|
144
|
+
|
|
145
|
+
**Objective**: Resolve conflicts by modifying worktree to conform to mainline semantics while preserving feature intent.
|
|
146
|
+
|
|
147
|
+
#### 2.1 Agent Context
|
|
148
|
+
|
|
149
|
+
**Inputs**:
|
|
150
|
+
|
|
151
|
+
- Feature spec (`spec.md`)
|
|
152
|
+
- Feature plan (`plan.json`)
|
|
153
|
+
- Conflict metadata from `state.md`
|
|
154
|
+
- Mainline diff: `git diff <merge_base>..<mainline_head> -- <conflicting_files>`
|
|
155
|
+
- Worktree diff: `git diff <merge_base>..<worktree_head> -- <conflicting_files>`
|
|
156
|
+
- Full conflict markers: `git merge origin/<baseRef>` (leave in conflicted state)
|
|
157
|
+
|
|
158
|
+
**Available Tools**:
|
|
159
|
+
|
|
160
|
+
- `repo.read_file` — read conflicted files with markers
|
|
161
|
+
- `repo.apply_patch` — apply resolution patches
|
|
162
|
+
- `repo.status` — check resolution progress
|
|
163
|
+
- `repo.diff` — verify resolution semantics
|
|
164
|
+
- `feature.log_append` — document resolution decisions
|
|
165
|
+
|
|
166
|
+
#### 2.2 Resolution Strategy
|
|
167
|
+
|
|
168
|
+
**Principle**: Mainline is authoritative. Worktree must adapt.
|
|
169
|
+
|
|
170
|
+
**Process**:
|
|
171
|
+
|
|
172
|
+
1. **Analyze conflicts**: For each conflicting file, determine:
|
|
173
|
+
- What mainline changed (API signature, behavior, structure)
|
|
174
|
+
- What worktree changed (feature implementation)
|
|
175
|
+
- How to rebase worktree changes onto mainline semantics
|
|
176
|
+
|
|
177
|
+
2. **Identify plan impacts**: Determine if mainline changes invalidate plan assumptions:
|
|
178
|
+
- API contracts changed (function signatures, types)
|
|
179
|
+
- File structure changed (moved/renamed files in `allowed_areas`)
|
|
180
|
+
- Dependencies changed (new required imports, removed exports)
|
|
181
|
+
|
|
182
|
+
3. **Delegate plan updates**: If plan modifications are required:
|
|
183
|
+
- Document required changes: `feature.log_append`
|
|
184
|
+
- Invoke planner agent with context:
|
|
185
|
+
```typescript
|
|
186
|
+
{
|
|
187
|
+
task: 'update_plan_for_mainline_changes',
|
|
188
|
+
mainline_changes: [...],
|
|
189
|
+
affected_plan_sections: [...],
|
|
190
|
+
reconciliation_context: {
|
|
191
|
+
merge_base: '...',
|
|
192
|
+
mainline_head: '...',
|
|
193
|
+
conflicting_files: [...]
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
- Planner calls `plan.update` with revised plan
|
|
198
|
+
- Reconciler waits for plan update completion
|
|
199
|
+
|
|
200
|
+
4. **Generate resolution patches**: Modify worktree to:
|
|
201
|
+
- Accept all mainline structural changes
|
|
202
|
+
- Rewrite feature code to work with new mainline APIs/contracts
|
|
203
|
+
- Preserve feature intent from updated `plan.json`
|
|
204
|
+
|
|
205
|
+
5. **Apply patches**: Use `repo.apply_patch` to resolve conflicts
|
|
206
|
+
|
|
207
|
+
6. **Verify resolution**:
|
|
208
|
+
- `git diff --check` (no conflict markers remain)
|
|
209
|
+
- `gates.run` with `fast` profile (lint + typecheck pass)
|
|
210
|
+
|
|
211
|
+
7. **Commit resolution**:
|
|
212
|
+
- Stage resolved files: `git add <conflicting_files>`
|
|
213
|
+
- Commit: `git commit -m "chore: reconcile mainline conflicts at ${mainline_head}"`
|
|
214
|
+
|
|
215
|
+
8. **Transition feature**: Move from `blocked` back to previous phase (e.g., `building`)
|
|
216
|
+
|
|
217
|
+
**Failure Handling**:
|
|
218
|
+
|
|
219
|
+
- If reconciliation agent cannot resolve after `max_iterations_per_phase` attempts:
|
|
220
|
+
- Transition feature to `failed` with reason `unresolvable_mainline_conflict`
|
|
221
|
+
- Emit dashboard notification (see §9)
|
|
222
|
+
- Require human intervention (`requires_human: true`)
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
### 3. Phase Boundary Integration
|
|
227
|
+
|
|
228
|
+
**Execution Points**: Reconciliation runs **before** each phase transition:
|
|
229
|
+
|
|
230
|
+
1. **Before Planning** (`pending → planning`):
|
|
231
|
+
- Ensure worktree starts from latest mainline
|
|
232
|
+
- Reconcile any drift since feature initialization
|
|
233
|
+
2. **Before Building** (`planning → building`):
|
|
234
|
+
- Ensure plan was created against current mainline APIs
|
|
235
|
+
- Reconcile any mainline changes that invalidate plan assumptions
|
|
236
|
+
3. **Before QA** (`building → qa`):
|
|
237
|
+
- Ensure implementation is compatible with current mainline
|
|
238
|
+
- Reconcile any mainline test infrastructure changes
|
|
239
|
+
4. **Before Merge** (`qa → ready_to_merge`):
|
|
240
|
+
- Final reconciliation check before promotion
|
|
241
|
+
- Guarantee merge will be conflict-free
|
|
242
|
+
|
|
243
|
+
**Implementation**: `apps/control-plane/src/supervisor/runtime.ts`
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
async function transitionPhase(
|
|
247
|
+
featureId: string,
|
|
248
|
+
fromPhase: FeatureStatus,
|
|
249
|
+
toPhase: FeatureStatus,
|
|
250
|
+
): Promise<ToolResponse> {
|
|
251
|
+
// Run reconciliation before phase transition
|
|
252
|
+
const reconcileResult = await gitReconciliationService.reconcileWithMainline(
|
|
253
|
+
featureId,
|
|
254
|
+
policy.worktree.base_branch,
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
if (reconcileResult.ok && reconcileResult.data.status === 'conflict_detected') {
|
|
258
|
+
// Block transition, invoke reconciliation agent
|
|
259
|
+
return fail(
|
|
260
|
+
ERROR_CODES.MAINLINE_CONFLICT,
|
|
261
|
+
`Cannot transition to ${toPhase}: mainline conflicts detected`,
|
|
262
|
+
{
|
|
263
|
+
retryable: true,
|
|
264
|
+
requires_human: false,
|
|
265
|
+
conflicting_files: reconcileResult.data.conflicting_files,
|
|
266
|
+
},
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Proceed with phase transition
|
|
271
|
+
return await kernel.transitionStatus(featureId, toPhase);
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
### 4. Configuration
|
|
278
|
+
|
|
279
|
+
**Policy Settings** (`config/agentic/orchestrator/policy.yaml`):
|
|
280
|
+
|
|
281
|
+
```yaml
|
|
282
|
+
reconciliation:
|
|
283
|
+
enabled: true
|
|
284
|
+
base_branch: main # Inherited from worktree.base_branch
|
|
285
|
+
check_before_phases:
|
|
286
|
+
- planning
|
|
287
|
+
- building
|
|
288
|
+
- qa
|
|
289
|
+
- ready_to_merge
|
|
290
|
+
auto_merge_non_conflicting: true
|
|
291
|
+
reconciler_max_iterations: 3
|
|
292
|
+
reconciler_timeout_seconds: 600
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
**Agent Configuration** (`config/agentic/orchestrator/agents.yaml`):
|
|
296
|
+
|
|
297
|
+
```yaml
|
|
298
|
+
roles:
|
|
299
|
+
reconciler:
|
|
300
|
+
system_prompt: prompts/reconciler.md
|
|
301
|
+
description: Resolves mainline divergence conflicts by adapting worktree to mainline semantics
|
|
302
|
+
capabilities:
|
|
303
|
+
- conflict_analysis
|
|
304
|
+
- semantic_rebase
|
|
305
|
+
- api_migration
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
### 5. MCP Tool Extensions
|
|
311
|
+
|
|
312
|
+
**New Tool**: `repo.reconcile_mainline`
|
|
313
|
+
|
|
314
|
+
**Input Schema** (`tools/schemas/input/repo.reconcile_mainline.schema.json`):
|
|
315
|
+
|
|
316
|
+
```json
|
|
317
|
+
{
|
|
318
|
+
"type": "object",
|
|
319
|
+
"properties": {
|
|
320
|
+
"feature_id": { "type": "string" },
|
|
321
|
+
"base_ref": { "type": "string" },
|
|
322
|
+
"auto_merge_non_conflicting": { "type": "boolean", "default": true }
|
|
323
|
+
},
|
|
324
|
+
"required": ["feature_id", "base_ref"]
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Output Schema** (`tools/schemas/output/repo.reconcile_mainline.schema.json`):
|
|
329
|
+
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"type": "object",
|
|
333
|
+
"properties": {
|
|
334
|
+
"status": { "enum": ["up_to_date", "merged", "conflict_detected"] },
|
|
335
|
+
"divergence_detected": { "type": "boolean" },
|
|
336
|
+
"files_changed_mainline": { "type": "array", "items": { "type": "string" } },
|
|
337
|
+
"files_changed_worktree": { "type": "array", "items": { "type": "string" } },
|
|
338
|
+
"conflicting_files": { "type": "array", "items": { "type": "string" } },
|
|
339
|
+
"merge_base": { "type": "string" },
|
|
340
|
+
"mainline_head": { "type": "string" },
|
|
341
|
+
"worktree_head": { "type": "string" }
|
|
342
|
+
},
|
|
343
|
+
"required": ["status", "divergence_detected"]
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Authorization**: `orchestrator`, `reconciler`, `system` roles
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
### 6. State Schema Extensions
|
|
352
|
+
|
|
353
|
+
**`state.md` Frontmatter** (`schemas/state.schema.json`):
|
|
354
|
+
|
|
355
|
+
```yaml
|
|
356
|
+
# Existing fields...
|
|
357
|
+
last_reconciliation_at: '2026-03-07T10:30:00Z'
|
|
358
|
+
last_reconciliation_sha: 'abc123def456'
|
|
359
|
+
conflicts:
|
|
360
|
+
- type: mainline_divergence
|
|
361
|
+
detected_at: '2026-03-07T10:25:00Z'
|
|
362
|
+
merge_base: 'xyz789'
|
|
363
|
+
mainline_head: 'abc123'
|
|
364
|
+
worktree_head: 'def456'
|
|
365
|
+
conflicting_files:
|
|
366
|
+
- src/core/kernel.ts
|
|
367
|
+
- apps/control-plane/src/supervisor/runtime.ts
|
|
368
|
+
resolution_status: pending | resolved | failed
|
|
369
|
+
resolved_at: '2026-03-07T10:35:00Z'
|
|
370
|
+
resolved_by: reconciler
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
### 7. Error Codes
|
|
376
|
+
|
|
377
|
+
**New Codes** (`apps/control-plane/src/core/error-codes.ts`):
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
export const ERROR_CODES = {
|
|
381
|
+
// ... existing codes
|
|
382
|
+
MAINLINE_CONFLICT: 'mainline_conflict',
|
|
383
|
+
RECONCILIATION_FAILED: 'reconciliation_failed',
|
|
384
|
+
UNRESOLVABLE_CONFLICT: 'unresolvable_conflict',
|
|
385
|
+
MERGE_BASE_NOT_FOUND: 'merge_base_not_found',
|
|
386
|
+
} as const;
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
### 8. Observability
|
|
392
|
+
|
|
393
|
+
**Metrics** (`performance-analytics-service.ts`):
|
|
394
|
+
|
|
395
|
+
- `reconciliation_checks_total` — count of reconciliation runs
|
|
396
|
+
- `reconciliation_conflicts_detected` — count of conflicts found
|
|
397
|
+
- `reconciliation_auto_merged` — count of non-conflicting merges
|
|
398
|
+
- `reconciliation_agent_invocations` — count of reconciler agent sessions
|
|
399
|
+
- `reconciliation_failures` — count of unresolvable conflicts
|
|
400
|
+
|
|
401
|
+
**Logs** (`.aop/features/<id>/logs/reconciliation.log`):
|
|
402
|
+
|
|
403
|
+
- Timestamp of each reconciliation check
|
|
404
|
+
- Divergence detection results
|
|
405
|
+
- Merge outcomes (success/conflict)
|
|
406
|
+
- Reconciler agent decisions
|
|
407
|
+
|
|
408
|
+
**Evidence** (`.aop/features/<id>/evidence/reconciliation/`):
|
|
409
|
+
|
|
410
|
+
- `<timestamp>-mainline-diff.patch` — mainline changes since merge base
|
|
411
|
+
- `<timestamp>-worktree-diff.patch` — worktree changes since merge base
|
|
412
|
+
- `<timestamp>-conflict-markers.txt` — files with conflict markers
|
|
413
|
+
- `<timestamp>-resolution.patch` — reconciler's resolution patch
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## Acceptance Criteria
|
|
418
|
+
|
|
419
|
+
1. ✅ Reconciliation service detects divergence between worktree and mainline
|
|
420
|
+
2. ✅ Non-conflicting divergence auto-merges into worktree without agent intervention
|
|
421
|
+
3. ✅ Conflicting divergence blocks phase transition and invokes reconciler agent
|
|
422
|
+
4. ✅ Reconciler agent resolves conflicts by adapting worktree to mainline semantics
|
|
423
|
+
5. ✅ Reconciliation runs before planning, building, QA, and merge phases
|
|
424
|
+
6. ✅ `ready_to_merge` features are guaranteed conflict-free with mainline
|
|
425
|
+
7. ✅ Unresolvable conflicts transition feature to `failed` with `requires_human: true`
|
|
426
|
+
8. ✅ Dashboard displays exact conflicting files and diffs for human intervention
|
|
427
|
+
9. ✅ Reconciler agent delegates plan updates to planner agent when mainline changes invalidate plan
|
|
428
|
+
10. ✅ Time-based trigger runs every 5 minutes during long-running phases
|
|
429
|
+
11. ✅ Event-based trigger runs when checkpoint service detects worktree changes
|
|
430
|
+
12. ✅ Both remote and local mainline changes are pulled into worktree
|
|
431
|
+
13. ✅ No merge commits created (fast-forward or rebase for linear history)
|
|
432
|
+
14. ✅ All reconciliation operations are logged and produce evidence artifacts
|
|
433
|
+
15. ✅ Schema validation enforces reconciliation metadata structure
|
|
434
|
+
16. ✅ MCP tool `repo.reconcile_mainline` is registered and authorized
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 9. Dashboard Integration
|
|
439
|
+
|
|
440
|
+
### Conflict Notification UI
|
|
441
|
+
|
|
442
|
+
**Location**: `packages/web-dashboard/src/components/ConflictAlert.tsx`
|
|
443
|
+
|
|
444
|
+
**Trigger**: Feature transitions to `failed` with reason `unresolvable_mainline_conflict`
|
|
445
|
+
|
|
446
|
+
**Display Requirements**:
|
|
447
|
+
|
|
448
|
+
1. **Alert Banner**: Prominent notification in dashboard header
|
|
449
|
+
- Icon: ⚠️ Merge Conflict
|
|
450
|
+
- Message: "Feature `<feature_id>` has unresolvable conflicts with mainline"
|
|
451
|
+
- Action: "View Details" button
|
|
452
|
+
|
|
453
|
+
2. **Conflict Detail Modal**:
|
|
454
|
+
|
|
455
|
+
```typescript
|
|
456
|
+
interface ConflictDetailView {
|
|
457
|
+
featureId: string;
|
|
458
|
+
conflictingFiles: Array<{
|
|
459
|
+
path: string;
|
|
460
|
+
mainlineDiff: string; // git diff merge_base..mainline_head -- <file>
|
|
461
|
+
worktreeDiff: string; // git diff merge_base..worktree_head -- <file>
|
|
462
|
+
conflictMarkers: string; // Full file content with <<<< ==== >>>> markers
|
|
463
|
+
}>;
|
|
464
|
+
mergeBase: string;
|
|
465
|
+
mainlineHead: string;
|
|
466
|
+
worktreeHead: string;
|
|
467
|
+
detectedAt: string;
|
|
468
|
+
reconciliationAttempts: number;
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
3. **Per-File Conflict View**:
|
|
473
|
+
- **File path**: `src/core/kernel.ts`
|
|
474
|
+
- **Mainline changes** (collapsible):
|
|
475
|
+
```diff
|
|
476
|
+
+ Added new parameter to transitionStatus()
|
|
477
|
+
- Removed deprecated lockAcquire() method
|
|
478
|
+
```
|
|
479
|
+
- **Worktree changes** (collapsible):
|
|
480
|
+
```diff
|
|
481
|
+
+ Feature implementation uses lockAcquire()
|
|
482
|
+
+ Added new helper function
|
|
483
|
+
```
|
|
484
|
+
- **Conflict markers** (syntax-highlighted):
|
|
485
|
+
```typescript
|
|
486
|
+
<<<<<<< HEAD (worktree)
|
|
487
|
+
await lockAcquire(featureId, sessionId);
|
|
488
|
+
=======
|
|
489
|
+
await lockService.acquire(featureId, sessionId, ttl);
|
|
490
|
+
>>>>>>> origin/main (mainline)
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
4. **Resolution Actions**:
|
|
494
|
+
- **"Checkout Worktree"**: Open worktree in local editor
|
|
495
|
+
```bash
|
|
496
|
+
cd .worktrees/<feature_id>
|
|
497
|
+
```
|
|
498
|
+
- **"View Full Diff"**: Download complete diff bundle
|
|
499
|
+
- **"Retry Reconciliation"**: Re-invoke reconciler agent (if user manually resolved)
|
|
500
|
+
- **"Abandon Feature"**: Delete feature and cleanup worktree
|
|
501
|
+
|
|
502
|
+
### SSE Event Stream
|
|
503
|
+
|
|
504
|
+
**Event**: `conflict.unresolvable`
|
|
505
|
+
|
|
506
|
+
```typescript
|
|
507
|
+
{
|
|
508
|
+
type: 'conflict.unresolvable',
|
|
509
|
+
featureId: string,
|
|
510
|
+
conflictingFiles: string[],
|
|
511
|
+
timestamp: string,
|
|
512
|
+
requiresHuman: true
|
|
513
|
+
}
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
**Dashboard Behavior**:
|
|
517
|
+
|
|
518
|
+
- Real-time notification appears immediately
|
|
519
|
+
- Browser notification (if permitted): "Merge conflict requires attention"
|
|
520
|
+
- Feature card in Kanban view shows red "Conflict" badge
|
|
521
|
+
|
|
522
|
+
### API Endpoints
|
|
523
|
+
|
|
524
|
+
**GET** `/api/features/:featureId/conflicts`
|
|
525
|
+
|
|
526
|
+
Response:
|
|
527
|
+
|
|
528
|
+
```json
|
|
529
|
+
{
|
|
530
|
+
"ok": true,
|
|
531
|
+
"data": {
|
|
532
|
+
"featureId": "my_feature",
|
|
533
|
+
"conflictingFiles": [
|
|
534
|
+
{
|
|
535
|
+
"path": "src/core/kernel.ts",
|
|
536
|
+
"mainlineDiff": "...",
|
|
537
|
+
"worktreeDiff": "...",
|
|
538
|
+
"conflictMarkers": "..."
|
|
539
|
+
}
|
|
540
|
+
],
|
|
541
|
+
"mergeBase": "abc123",
|
|
542
|
+
"mainlineHead": "def456",
|
|
543
|
+
"worktreeHead": "ghi789",
|
|
544
|
+
"detectedAt": "2026-03-07T10:30:00Z",
|
|
545
|
+
"reconciliationAttempts": 3
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
**POST** `/api/features/:featureId/conflicts/retry`
|
|
551
|
+
|
|
552
|
+
Triggers reconciler agent re-run after manual intervention.
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## 10. Git Commands Reference
|
|
557
|
+
|
|
558
|
+
## 10. Git Commands Reference
|
|
559
|
+
|
|
560
|
+
```bash
|
|
561
|
+
# Fetch latest remote mainline
|
|
562
|
+
git fetch origin main
|
|
563
|
+
|
|
564
|
+
# Fetch local repository mainline
|
|
565
|
+
git fetch /path/to/repo main
|
|
566
|
+
|
|
567
|
+
# Find merge base (common ancestor)
|
|
568
|
+
git merge-base HEAD origin/main
|
|
569
|
+
|
|
570
|
+
# Three-dot diff (changes since divergence)
|
|
571
|
+
git diff origin/main...HEAD
|
|
572
|
+
|
|
573
|
+
# Fast-forward merge (no merge commit)
|
|
574
|
+
git merge --ff-only origin/main
|
|
575
|
+
|
|
576
|
+
# Rebase worktree onto mainline (linear history)
|
|
577
|
+
git rebase origin/main
|
|
578
|
+
|
|
579
|
+
# Abort failed rebase
|
|
580
|
+
git rebase --abort
|
|
581
|
+
|
|
582
|
+
# List conflicted files
|
|
583
|
+
git diff --name-only --diff-filter=U
|
|
584
|
+
|
|
585
|
+
# Check for remaining conflict markers
|
|
586
|
+
git diff --check
|
|
587
|
+
|
|
588
|
+
# Show mainline changes for specific file
|
|
589
|
+
git diff <merge_base>..<mainline_head> -- <file>
|
|
590
|
+
|
|
591
|
+
# Show worktree changes for specific file
|
|
592
|
+
git diff <merge_base>..<worktree_head> -- <file>
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
### Reconciler Agent Prompt Template
|
|
596
|
+
|
|
597
|
+
````markdown
|
|
598
|
+
# Reconciler Agent System Prompt
|
|
599
|
+
|
|
600
|
+
You are a reconciliation agent. Your role is to resolve conflicts between a feature worktree and the mainline branch.
|
|
601
|
+
|
|
602
|
+
## Guiding Principle
|
|
603
|
+
|
|
604
|
+
**Mainline is authoritative.** The worktree must adapt to mainline semantics while preserving feature intent.
|
|
605
|
+
|
|
606
|
+
## Your Task
|
|
607
|
+
|
|
608
|
+
1. Analyze the conflict: understand what mainline changed and why
|
|
609
|
+
2. Understand the feature intent from the plan
|
|
610
|
+
3. Determine if mainline changes require plan modifications:
|
|
611
|
+
- API contracts changed (function signatures, types)
|
|
612
|
+
- File structure changed (moved/renamed files)
|
|
613
|
+
- Dependencies changed (imports, exports)
|
|
614
|
+
4. If plan updates are needed:
|
|
615
|
+
- Document required changes with `feature.log_append`
|
|
616
|
+
- Invoke planner agent with reconciliation context
|
|
617
|
+
- Wait for planner to call `plan.update`
|
|
618
|
+
5. Rewrite the feature code to work with the new mainline APIs/structure
|
|
619
|
+
6. Apply resolution patches using `repo.apply_patch`
|
|
620
|
+
7. Verify resolution with `gates.run` (fast profile)
|
|
621
|
+
8. Document your decisions with `feature.log_append`
|
|
622
|
+
|
|
623
|
+
## Available Context
|
|
624
|
+
|
|
625
|
+
- Feature spec and plan
|
|
626
|
+
- Mainline diff since merge base
|
|
627
|
+
- Worktree diff since merge base
|
|
628
|
+
- Files with conflict markers
|
|
629
|
+
- Reconciliation metadata (merge base, heads, conflicting files)
|
|
630
|
+
|
|
631
|
+
## Planner Delegation
|
|
632
|
+
|
|
633
|
+
When mainline changes invalidate plan assumptions, invoke the planner agent:
|
|
634
|
+
|
|
635
|
+
```json
|
|
636
|
+
{
|
|
637
|
+
"task": "update_plan_for_mainline_changes",
|
|
638
|
+
"mainline_changes": ["API signature changed in kernel.ts", "..."],
|
|
639
|
+
"affected_plan_sections": ["files.modify", "contracts.openapi"],
|
|
640
|
+
"reconciliation_context": {
|
|
641
|
+
"merge_base": "abc123",
|
|
642
|
+
"mainline_head": "def456",
|
|
643
|
+
"conflicting_files": ["src/core/kernel.ts"]
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
```
|
|
647
|
+
````
|
|
648
|
+
|
|
649
|
+
The planner will update the plan, then you can proceed with code resolution.
|
|
650
|
+
|
|
651
|
+
## Success Criteria
|
|
652
|
+
|
|
653
|
+
- No conflict markers remain (`git diff --check` passes)
|
|
654
|
+
- Fast gates pass (lint + typecheck)
|
|
655
|
+
- Feature intent from plan is preserved
|
|
656
|
+
- Code works with current mainline APIs
|
|
657
|
+
- Plan is updated if mainline changes required it
|
|
658
|
+
|
|
659
|
+
## Failure Escalation
|
|
660
|
+
|
|
661
|
+
If you cannot resolve the conflict after {max_iterations} attempts, transition the feature to `failed` and request human intervention. The dashboard will display the exact conflicting files and diffs to the user.
|
|
662
|
+
|
|
663
|
+
````
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## Dependencies
|
|
668
|
+
|
|
669
|
+
- Existing: `repo.read_file`, `repo.apply_patch`, `repo.status`, `repo.diff`
|
|
670
|
+
- Existing: `gates.run` (fast profile)
|
|
671
|
+
- Existing: `feature.log_append`, `feature.state_patch`
|
|
672
|
+
- Existing: `CheckpointService` (event emitter for worktree changes)
|
|
673
|
+
- New: `repo.reconcile_mainline` (MCP tool)
|
|
674
|
+
- New: `GitReconciliationService` (application service)
|
|
675
|
+
- New: `ReconciliationScheduler` (time-based trigger)
|
|
676
|
+
- New: Reconciler agent role and system prompt
|
|
677
|
+
- New: Dashboard conflict notification UI
|
|
678
|
+
- New: Planner agent delegation for plan updates
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
682
|
+
## Testing Strategy
|
|
683
|
+
|
|
684
|
+
### Unit Tests
|
|
685
|
+
- `git-reconciliation-service.spec.ts`:
|
|
686
|
+
- Divergence detection (up-to-date, non-conflicting, conflicting)
|
|
687
|
+
- Auto-merge non-conflicting changes
|
|
688
|
+
- Conflict metadata recording
|
|
689
|
+
- Error handling (merge base not found, git command failures)
|
|
690
|
+
|
|
691
|
+
### Integration Tests
|
|
692
|
+
- `reconciliation-workflow.spec.ts`:
|
|
693
|
+
- Full reconciliation cycle (detect → merge/block → resolve)
|
|
694
|
+
- Phase boundary integration (before planning, building, QA, merge)
|
|
695
|
+
- Reconciler agent invocation and resolution
|
|
696
|
+
- Unresolvable conflict escalation
|
|
697
|
+
|
|
698
|
+
### Manual Test Scenarios
|
|
699
|
+
1. **No divergence**: Feature worktree is up-to-date with mainline
|
|
700
|
+
2. **Fast-forward**: Mainline has new commits, worktree is behind but no conflicts
|
|
701
|
+
3. **Non-conflicting divergence**: Mainline and worktree changed different files
|
|
702
|
+
4. **Conflicting divergence**: Mainline and worktree changed same files/lines
|
|
703
|
+
5. **Unresolvable conflict**: Reconciler agent cannot resolve after max iterations
|
|
704
|
+
|
|
705
|
+
---
|
|
706
|
+
|
|
707
|
+
## Rollout Plan
|
|
708
|
+
|
|
709
|
+
### Phase 1: Core Service (Week 1)
|
|
710
|
+
- Implement `GitReconciliationService`
|
|
711
|
+
- Add `repo.reconcile_mainline` MCP tool
|
|
712
|
+
- Unit tests for divergence detection and auto-merge
|
|
713
|
+
|
|
714
|
+
### Phase 2: Phase Integration (Week 2)
|
|
715
|
+
- Integrate reconciliation checks into `supervisor/runtime.ts`
|
|
716
|
+
- Add reconciliation hooks before each phase transition
|
|
717
|
+
- Integration tests for phase boundary behavior
|
|
718
|
+
|
|
719
|
+
### Phase 3: Reconciler Agent (Week 3)
|
|
720
|
+
- Define reconciler role and system prompt
|
|
721
|
+
- Implement reconciler agent invocation on conflict detection
|
|
722
|
+
- Integration tests for conflict resolution workflow
|
|
723
|
+
|
|
724
|
+
### Phase 4: Observability & Dashboard (Week 4)
|
|
725
|
+
- Add reconciliation metrics to performance analytics
|
|
726
|
+
- Implement reconciliation logging and evidence artifacts
|
|
727
|
+
- Dashboard conflict notification UI with file-level diff display
|
|
728
|
+
- SSE event stream for real-time conflict alerts
|
|
729
|
+
- API endpoints for conflict details and retry actions
|
|
730
|
+
|
|
731
|
+
---
|
|
732
|
+
|
|
733
|
+
## Reconciliation Triggers
|
|
734
|
+
|
|
735
|
+
### 1. Time-Based Trigger
|
|
736
|
+
|
|
737
|
+
**Frequency**: Every 5 minutes during long-running phases
|
|
738
|
+
|
|
739
|
+
**Implementation**: `apps/control-plane/src/supervisor/reconciliation-scheduler.ts`
|
|
740
|
+
|
|
741
|
+
```typescript
|
|
742
|
+
class ReconciliationScheduler {
|
|
743
|
+
private intervals = new Map<string, NodeJS.Timeout>();
|
|
744
|
+
|
|
745
|
+
startPeriodicReconciliation(featureId: string, intervalMs = 300000) {
|
|
746
|
+
const interval = setInterval(async () => {
|
|
747
|
+
await this.reconciliationService.reconcileWithMainline(featureId, baseRef);
|
|
748
|
+
}, intervalMs);
|
|
749
|
+
|
|
750
|
+
this.intervals.set(featureId, interval);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
stopPeriodicReconciliation(featureId: string) {
|
|
754
|
+
const interval = this.intervals.get(featureId);
|
|
755
|
+
if (interval) {
|
|
756
|
+
clearInterval(interval);
|
|
757
|
+
this.intervals.delete(featureId);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
````
|
|
762
|
+
|
|
763
|
+
**Lifecycle**:
|
|
764
|
+
|
|
765
|
+
- Start: When feature enters `planning`, `building`, or `qa` phase
|
|
766
|
+
- Stop: When feature exits phase or reaches terminal state
|
|
767
|
+
|
|
768
|
+
### 2. Event-Based Trigger
|
|
769
|
+
|
|
770
|
+
**Source**: `CheckpointService` change detection
|
|
771
|
+
|
|
772
|
+
**Implementation**: `apps/control-plane/src/application/services/checkpoint-service.ts`
|
|
773
|
+
|
|
774
|
+
```typescript
|
|
775
|
+
// Existing checkpoint service emits event when changes detected
|
|
776
|
+
async function captureCheckpoint(featureId: string): Promise<ToolResponse> {
|
|
777
|
+
const changes = await detectUncommittedChanges(featureId);
|
|
778
|
+
|
|
779
|
+
if (changes.files_changed.length > 0) {
|
|
780
|
+
// Emit event for reconciliation
|
|
781
|
+
await eventBus.emit('worktree.changes_detected', {
|
|
782
|
+
featureId,
|
|
783
|
+
filesChanged: changes.files_changed,
|
|
784
|
+
timestamp: new Date().toISOString(),
|
|
785
|
+
});
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
// ... existing checkpoint logic
|
|
789
|
+
}
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
**Reconciliation Handler**:
|
|
793
|
+
|
|
794
|
+
```typescript
|
|
795
|
+
eventBus.on('worktree.changes_detected', async (event) => {
|
|
796
|
+
await reconciliationService.reconcileWithMainline(event.featureId, policy.worktree.base_branch);
|
|
797
|
+
});
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
**Configuration** (`policy.yaml`):
|
|
801
|
+
|
|
802
|
+
```yaml
|
|
803
|
+
reconciliation:
|
|
804
|
+
enabled: true
|
|
805
|
+
triggers:
|
|
806
|
+
time_based:
|
|
807
|
+
enabled: true
|
|
808
|
+
interval_ms: 300000 # 5 minutes
|
|
809
|
+
active_phases: [planning, building, qa]
|
|
810
|
+
event_based:
|
|
811
|
+
enabled: true
|
|
812
|
+
source: checkpoint_service
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
---
|
|
816
|
+
|
|
817
|
+
## References
|
|
818
|
+
|
|
819
|
+
- Git merge strategies: https://git-scm.com/docs/git-merge
|
|
820
|
+
- Three-dot diff: https://git-scm.com/docs/git-diff#Documentation/git-diff.txt-emgitdiffemltoptionsgtltcommitgtltcommitgt--ltpathgt82308203
|
|
821
|
+
- Conflict resolution: https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging
|
|
822
|
+
|
|
823
|
+
---
|
|
824
|
+
|
|
825
|
+
**Spec Status**: Ready for implementation
|
|
826
|
+
**Estimated Effort**: 3-4 weeks (4 phases)
|
|
827
|
+
**Priority**: High (blocks parallel multi-feature development at scale)
|