@moretea-labs/forge 1.6.0 → 1.7.1
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/AGENTS.md +4 -0
- package/CHANGELOG.md +39 -0
- package/CLAUDE.md +4 -0
- package/README.md +2 -2
- package/README.zh-CN.md +1 -1
- package/SKILL.md +2 -2
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/agents/openai.yaml +1 -1
- package/assets/hooks/hook-input.sh +11 -8
- package/assets/hooks/lib/session-state.sh +10 -7
- package/assets/hooks/lib/workflow-state.sh +13 -177
- package/assets/hooks/post-tool-observer.sh +8 -2
- package/assets/hooks/prompt-guard.sh +5 -81
- package/assets/hooks/session-start-context.sh +56 -1
- package/assets/partials/05-workflow.partial.md +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +2 -0
- package/assets/partials-agents/03-orchestration.partial.md +1 -1
- package/assets/plugin-registry.v1.json +3 -3
- package/assets/reference-configs/document-generation.md +1 -1
- package/assets/reference-configs/harness-overview.md +1 -1
- package/assets/reference-configs/sprint-contracts.md +3 -3
- package/assets/skill-version.json +2 -2
- package/assets/templates/contract.template.md +2 -7
- package/assets/templates/helpers/capture-plan.sh +2 -2
- package/assets/templates/helpers/check-architecture-sync.sh +17 -0
- package/assets/templates/helpers/check-task-workflow.sh +4 -4
- package/assets/templates/helpers/contract-worktree.sh +1 -21
- package/assets/templates/helpers/ensure-task-workflow.sh +11 -36
- package/assets/templates/helpers/inspect-project-state.ts +8 -6
- package/assets/templates/helpers/migrate-project-template.sh +22 -45
- package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
- package/assets/templates/helpers/new-plan.sh +1 -1
- package/assets/templates/helpers/plan-to-todo.sh +12 -37
- package/assets/templates/helpers/ship-worktrees.sh +2 -29
- package/assets/templates/helpers/verify-contract.sh +1 -111
- package/assets/templates/helpers/verify-sprint.sh +3 -180
- package/assets/templates/helpers/workflow-contract.ts +5 -1
- package/assets/templates/plan.template.md +1 -1
- package/assets/templates/review.template.md +9 -34
- package/assets/workflow-contract.v1.json +10 -19
- package/docs/README.md +10 -10
- package/docs/architecture/CURRENT.md +178 -0
- package/docs/architecture/EVOLUTION.md +42 -0
- package/docs/architecture/current/README.md +4 -156
- package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
- package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
- package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
- package/docs/architecture/history/README.md +7 -0
- package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
- package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
- package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
- package/docs/architecture/history.md +3 -34
- package/docs/architecture/index.md +15 -98
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
- package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
- package/docs/architecture/versions/1.6.md +38 -0
- package/docs/architecture/versions/1.7.md +41 -0
- package/docs/forge-chatgpt-browser-engine.md +2 -2
- package/docs/forge-chatgpt-mcp-setup.md +4 -28
- package/docs/forge-chatgpt-supervised-automation.md +3 -3
- package/docs/forge-github-issue-launcher.md +1 -1
- package/docs/forge-plugin-management.md +1 -1
- package/docs/forge-runtime-self-healing-loop.md +1 -1
- package/docs/operations/controller-browser-plugin.md +26 -6
- package/docs/operations/controller-performance-and-502.md +143 -0
- package/docs/operations/controller-reliability-runbook.md +1 -1
- package/docs/operations/features.md +2 -2
- package/docs/operations/github-repository.md +1 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +5 -3
- package/docs/wiki/Architecture.md +6 -6
- package/docs/wiki/Implementation.md +2 -2
- package/docs/wiki/Integrations.md +2 -2
- package/docs/wiki/Work-Lifecycle.md +1 -1
- package/package.json +33 -11
- package/scripts/activate-source-baseline.ts +17 -13
- package/scripts/architecture-event.ts +2 -820
- package/scripts/architecture-queue.sh +2 -645
- package/scripts/archive-architecture-request.sh +2 -242
- package/scripts/archive-workflow.sh +1 -291
- package/scripts/benchmark-background-check-overlap.ts +228 -0
- package/scripts/benchmark-mcp-host.sh +117 -0
- package/scripts/benchmark-mcp-transport.ts +170 -0
- package/scripts/benchmark-quality-harness.ts +146 -0
- package/scripts/benchmark-route-session-concurrency.ts +207 -6
- package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
- package/scripts/benchmark-typescript-navigation.ts +186 -0
- package/scripts/benchmark-work-efficiency.ts +334 -0
- package/scripts/capability-config.ts +2 -392
- package/scripts/capability-resolver.ts +2 -503
- package/scripts/capture-plan.sh +1 -332
- package/scripts/check-agent-tooling.sh +2 -1558
- package/scripts/check-architecture-sync.sh +2 -371
- package/scripts/check-brain-manifest.sh +2 -253
- package/scripts/check-context-files.sh +2 -47
- package/scripts/check-deploy-sql-order.sh +2 -115
- package/scripts/check-mcp-compatibility.ts +14 -0
- package/scripts/check-runtime-architecture.mjs +349 -79
- package/scripts/check-skill-version.ts +3 -191
- package/scripts/check-source-duplication.mjs +61 -0
- package/scripts/check-stable-baseline.ts +92 -0
- package/scripts/check-task-sync.sh +2 -63
- package/scripts/check-task-workflow.sh +2 -1000
- package/scripts/codex-handoff-resume.sh +2 -267
- package/scripts/context-contract-sync.sh +2 -514
- package/scripts/contract-run.ts +2 -463
- package/scripts/contract-worktree.sh +1 -722
- package/scripts/ensure-task-workflow.sh +1 -1225
- package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
- package/scripts/inspect-project-state.ts +4 -279
- package/scripts/install-standalone-recovery.ts +24 -0
- package/scripts/lib/project-init-lib.sh +22 -46
- package/scripts/lib/run-forge-helper.sh +19 -0
- package/scripts/lib/run-forge-helper.ts +26 -0
- package/scripts/migrate-project-template.sh +1 -1189
- package/scripts/migrate-workflow-docs.ts +4 -412
- package/scripts/new-plan.sh +1 -180
- package/scripts/new-spec.sh +1 -47
- package/scripts/new-sprint.sh +1 -46
- package/scripts/plan-to-todo.sh +1 -796
- package/scripts/prepare-codex-handoff.sh +2 -201
- package/scripts/prepare-handoff.sh +1 -78
- package/scripts/refresh-current-status.sh +2 -467
- package/scripts/run-governed-gate.ts +5 -1
- package/scripts/select-agent-context-blocks.sh +2 -64
- package/scripts/ship-worktrees.sh +1 -558
- package/scripts/smoke-ios-physical-device.ts +4 -2
- package/scripts/smoke-runtime-recovery.ts +1 -35
- package/scripts/smoke-schedule-engine.ts +1 -20
- package/scripts/sprint-backlog.sh +1 -834
- package/scripts/stage-runtime-release.ts +2 -1
- package/scripts/summarize-failures.sh +2 -123
- package/scripts/switch-plan.sh +1 -150
- package/scripts/sync-brain-docs.sh +2 -379
- package/scripts/sync-generated-authority.mjs +175 -0
- package/scripts/verify-contract.sh +2 -703
- package/scripts/verify-forge-runtime.sh +0 -1
- package/scripts/verify-sprint.sh +1 -677
- package/scripts/workflow-contract.ts +4 -205
- package/scripts/workstream-sync.sh +2 -261
- package/src/cli/agent-jobs/executor-health.ts +1 -1
- package/src/cli/commands/init-hook.ts +3 -3
- package/src/cli/commands/mcp.ts +9 -5
- package/src/cli/commands/plugin.ts +12 -3
- package/src/cli/commands/recovery.ts +25 -3
- package/src/cli/commands/runtime.ts +55 -3
- package/src/cli/commands/security.ts +12 -1
- package/src/cli/commands/setup-profile.ts +31 -21
- package/src/cli/controller/check-runner.ts +113 -5
- package/src/cli/controller/composite-result.ts +1 -1
- package/src/cli/controller/context/focus.ts +51 -0
- package/src/cli/controller/context/instruction-context.ts +114 -0
- package/src/cli/controller/context/known-paths.ts +76 -0
- package/src/cli/controller/context/query-planning.ts +110 -0
- package/src/cli/controller/context/rule-resolution.ts +532 -0
- package/src/cli/controller/context/source-materializer.ts +278 -0
- package/src/cli/controller/context/structural.ts +16 -0
- package/src/cli/controller/context/types.ts +286 -0
- package/src/cli/controller/context-pack.ts +828 -487
- package/src/cli/controller/launch-agents.ts +77 -2
- package/src/cli/controller/operational-plan.ts +2 -2
- package/src/cli/controller/work-mode.ts +6 -4
- package/src/cli/editing/edit-session.ts +60 -7
- package/src/cli/github/contracts.ts +16 -0
- package/src/cli/github/github.ts +135 -16
- package/src/cli/github/session.ts +2 -1
- package/src/cli/installer/managed-entries.ts +15 -1
- package/src/cli/local-bridge/console-automations.ts +54 -78
- package/src/cli/local-bridge/console-view-models.ts +1 -35
- package/src/cli/local-bridge/facade-api.ts +37 -264
- package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +23 -13
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +6 -4
- package/src/cli/local-bridge/frontend/src/lib/api.ts +1 -6
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +2 -2
- package/src/cli/local-bridge/frontend/src/styles.css +1 -1
- package/src/cli/local-bridge/frontend/src/types.ts +5 -8
- package/src/cli/local-bridge/job-store.ts +1 -490
- package/src/cli/local-bridge/server.ts +2 -515
- package/src/cli/local-bridge/ui-dist/app.css +1 -1
- package/src/cli/local-bridge/ui-dist/app.js +3703 -3757
- package/src/cli/mcp/auth.ts +5 -5
- package/src/cli/mcp/instructions.ts +3 -2
- package/src/cli/mcp/legacy-tool-service.ts +10 -222
- package/src/cli/mcp/multi-repository.ts +16 -5
- package/src/cli/mcp/oauth.ts +175 -26
- package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
- package/src/cli/mcp/repository-tools.ts +282 -146
- package/src/cli/mcp/server.ts +586 -116
- package/src/cli/mcp/tool-capability-cache.ts +1 -1
- package/src/cli/mcp/tool-contract.ts +14 -0
- package/src/cli/mcp/toolset-selection.ts +1 -1
- package/src/cli/mcp/toolset.ts +44 -7
- package/src/cli/mcp/transports/http.ts +124 -14
- package/src/cli/mcp/transports/session-registry.ts +43 -5
- package/src/cli/mcp/types.ts +3 -3
- package/src/cli/repositories/command-classifier.ts +103 -21
- package/src/cli/repositories/command-executor.ts +78 -526
- package/src/cli/repositories/command-process.ts +108 -0
- package/src/cli/repositories/command-scope.ts +99 -41
- package/src/cli/repositories/controller-home.ts +7 -8
- package/src/cli/repositories/git-command-executor.ts +2 -0
- package/src/cli/repositories/locks.ts +53 -16
- package/src/cli/repositories/repository-snapshot.ts +124 -0
- package/src/cli/repositories/selected-path-actions.ts +17 -9
- package/src/cli/repositories/structured-git.ts +118 -6
- package/src/cli/repository/inspector.ts +563 -65
- package/src/cli/repository/session-cache.ts +58 -17
- package/src/cli/v81-entry.ts +1 -4
- package/src/effects/fs-transaction.ts +85 -17
- package/src/runtime/context/codegraph-read-provider.ts +233 -2
- package/src/runtime/context/codegraph-sidecar.cjs +74 -40
- package/src/runtime/context/generic-lsp-provider.ts +355 -0
- package/src/runtime/context/lsp-client.ts +283 -0
- package/src/runtime/context/semantic-navigation-contract.ts +61 -0
- package/src/runtime/context/semantic-navigation.ts +223 -0
- package/src/runtime/context/swift-navigation.ts +565 -0
- package/src/runtime/context/typescript-navigation.ts +226 -0
- package/src/runtime/control-plane/dispatch-priority.ts +28 -0
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +48 -16
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
- package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
- package/src/runtime/control-plane/execution/session-store.ts +18 -0
- package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
- package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
- package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
- package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
- package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
- package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
- package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
- package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
- package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
- package/src/runtime/control-plane/execution/work-task-receipt.ts +22 -18
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +156 -11
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +22 -14
- package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
- package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +90 -9
- package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
- package/src/runtime/control-plane/facade/controller-round-relay.ts +1118 -0
- package/src/runtime/control-plane/facade/controller-session-store.ts +302 -12
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +17 -1
- package/src/runtime/control-plane/facade/goal-workloop.ts +928 -190
- package/src/runtime/control-plane/facade/index.ts +3 -0
- package/src/runtime/control-plane/facade/plan-contract-store.ts +275 -42
- package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
- package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
- package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
- package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
- package/src/runtime/control-plane/facade/types.ts +90 -10
- package/src/runtime/control-plane/facade/work-contract-store.ts +157 -261
- package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
- package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
- package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
- package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +152 -0
- package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +278 -543
- package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
- package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
- package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
- package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
- package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
- package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
- package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
- package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
- package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
- package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +63 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +365 -117
- package/src/runtime/control-plane/launcher/launch-reservation-store.ts +89 -0
- package/src/runtime/control-plane/launcher/thin-launcher.ts +244 -11
- package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
- package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
- package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
- package/src/runtime/control-plane/release-retention.ts +62 -2
- package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
- package/src/runtime/control-plane/routing/route-policy.ts +24 -21
- package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
- package/src/runtime/control-plane/runtime-status-client.ts +0 -2
- package/src/runtime/diagnostics/mcp-timing.ts +13 -0
- package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
- package/src/runtime/diagnostics/performance.ts +24 -1
- package/src/runtime/evidence/event-ledger.ts +1 -1
- package/src/runtime/evidence/process-check-execution.ts +18 -0
- package/src/runtime/execution/jobs/child-reference.ts +6 -2
- package/src/runtime/execution/jobs/store.ts +58 -4
- package/src/runtime/execution/jobs/types.ts +1 -1
- package/src/runtime/execution/managed-workspace.ts +203 -1
- package/src/runtime/execution/process-runtime/check-facade.ts +51 -4
- package/src/runtime/execution/process-runtime/check-result.ts +88 -0
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
- package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
- package/src/runtime/execution/process-runtime/command-facade.ts +367 -40
- package/src/runtime/execution/process-runtime/gc.ts +38 -6
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +1201 -0
- package/src/runtime/execution/process-runtime/persisted-check.ts +51 -5
- package/src/runtime/execution/process-runtime/resource-claims.ts +10 -6
- package/src/runtime/execution/process-runtime/runtime.ts +53 -3
- package/src/runtime/execution/process-runtime/store.ts +1 -0
- package/src/runtime/execution/process-runtime/types.ts +4 -12
- package/src/runtime/execution/thin-harness/async-process.ts +12 -2
- package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
- package/src/runtime/execution/work-activity.ts +21 -0
- package/src/runtime/execution/workers/executor.ts +18 -61
- package/src/runtime/gateway/mcp/execution-tools.ts +35 -1852
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
- package/src/runtime/gateway/mcp/process-tools.ts +83 -37
- package/src/runtime/gateway/mcp/router.ts +186 -84
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +565 -0
- package/src/runtime/gateway/mcp/runtime-tools.ts +2378 -1947
- package/src/runtime/plugins/app-store-connect-adapter.ts +216 -47
- package/src/runtime/plugins/browser-adapter.ts +2662 -829
- package/src/runtime/plugins/browser-automation-service.ts +10 -0
- package/src/runtime/plugins/browser-handoff-host.ts +2 -25
- package/src/runtime/plugins/browser-handoff.ts +110 -5
- package/src/runtime/plugins/browser-macos-bridge.ts +701 -63
- package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
- package/src/runtime/plugins/browser-native-session-service.ts +222 -0
- package/src/runtime/plugins/browser-node-bridge.ts +6 -34
- package/src/runtime/plugins/browser-provider-registry.ts +109 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +154 -0
- package/src/runtime/plugins/browser-runtime.ts +193 -0
- package/src/runtime/plugins/browser-session-authority.ts +332 -0
- package/src/runtime/plugins/browser-session-store.ts +121 -0
- package/src/runtime/plugins/browser-session-types.ts +98 -0
- package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +10 -4
- package/src/runtime/plugins/external-adapter.ts +358 -3
- package/src/runtime/plugins/external-unix-socket.ts +7 -1
- package/src/runtime/plugins/first-party-registry.ts +2 -0
- package/src/runtime/plugins/github-adapter.ts +125 -0
- package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
- package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
- package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
- package/src/runtime/plugins/ios-adapter.ts +106 -16
- package/src/runtime/plugins/ios-agent-device.ts +234 -64
- package/src/runtime/plugins/ios-physical-device.ts +1143 -392
- package/src/runtime/plugins/lightweight-action.ts +153 -0
- package/src/runtime/plugins/local-system-adapter.ts +123 -6
- package/src/runtime/plugins/macos-capability-broker.ts +47 -9
- package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
- package/src/runtime/plugins/plugin-management-adapter.ts +49 -8
- package/src/runtime/plugins/resend-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +330 -33
- package/src/runtime/plugins/types.ts +38 -3
- package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
- package/src/runtime/projections/git-status-sampler.ts +16 -16
- package/src/runtime/projections/materialized-view.ts +28 -10
- package/src/runtime/recovery/maintenance-executor.ts +426 -25
- package/src/runtime/root/mcp-transport.ts +180 -10
- package/src/runtime/root/package-connector-service.ts +230 -10
- package/src/runtime/root/package-runtime-release.ts +143 -17
- package/src/runtime/root/package-runtime-service.ts +461 -22
- package/src/runtime/root/release-manifest.ts +144 -18
- package/src/runtime/root/release-materialize.ts +125 -32
- package/src/runtime/root/release-store.ts +48 -11
- package/src/runtime/root/runtime.ts +23 -5
- package/src/runtime/root/service.ts +100 -29
- package/src/runtime/root/types.ts +12 -0
- package/src/runtime/safe-tooling/ios-development.ts +321 -63
- package/src/runtime/shared/trusted-executable.ts +62 -0
- package/src/runtime/shared/trusted-node-executable.ts +48 -0
- package/src/runtime/standalone-recovery/core.ts +1079 -240
- package/src/runtime/standalone-recovery/entry.ts +100 -24
- package/src/runtime/standalone-recovery/installer.ts +20 -4
- package/src/runtime/standalone-recovery/service-labels.ts +2 -0
- package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
- package/src/runtime/workflow/schedules/browser-probe.ts +81 -3
- package/src/runtime/workflow/schedules/engine.ts +364 -202
- package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
- package/src/runtime/workflow/schedules/settlement.ts +64 -17
- package/src/runtime/workflow/schedules/store.ts +209 -19
- package/src/runtime/workflow/schedules/types.ts +2 -4
- package/src/runtime/workflow/schedules/work-continuation.ts +26 -13
- package/src/testing/test-governance.ts +8 -40
- package/assets/reference-configs/heartbeat-triage.md +0 -57
- package/assets/templates/helpers/harness-trace-grade.sh +0 -150
- package/assets/templates/helpers/heartbeat-triage.sh +0 -361
- package/assets/templates/helpers/maintenance-triage.sh +0 -167
- package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
- package/docs/architecture/current/architecture-invariants.md +0 -331
- package/docs/architecture/current/automation-and-schedule-engine.md +0 -459
- package/docs/architecture/current/codegraph-context-provider.md +0 -238
- package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
- package/docs/architecture/current/controller-repository-decoupling.md +0 -148
- package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -373
- package/docs/architecture/current/entity-model.md +0 -612
- package/docs/architecture/current/external-plugin-governance.md +0 -396
- package/docs/architecture/current/failure-recovery.md +0 -447
- package/docs/architecture/current/governance.md +0 -213
- package/docs/architecture/current/human-interaction-plane.md +0 -87
- package/docs/architecture/current/implementation-status.md +0 -128
- package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
- package/docs/architecture/current/legacy-governance.md +0 -58
- package/docs/architecture/current/local-workspace-target-grants.md +0 -70
- package/docs/architecture/current/migration-roadmap.md +0 -105
- package/docs/architecture/current/multi-repository-execution.md +0 -371
- package/docs/architecture/current/operations-runbook.md +0 -45
- package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
- package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
- package/docs/architecture/current/repository-access-modes.md +0 -102
- package/docs/architecture/current/route-policy.md +0 -15
- package/docs/architecture/current/route-session-concurrency.md +0 -85
- package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
- package/docs/architecture/current/runtime-directory-map.md +0 -49
- package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
- package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
- package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
- package/docs/architecture/current/system-overview.md +0 -169
- package/docs/architecture/current/target-requirements-traceability.md +0 -202
- package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
- package/docs/architecture/current/thin-harness-v1.md +0 -321
- package/docs/architecture/current/verification-and-release-gates.md +0 -391
- package/docs/forge-autonomous-goal-loop.md +0 -9
- package/docs/forge-provider-configuration.md +0 -7
- package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -93
- package/docs/operations/gmail-assistant-routines.md +0 -186
- package/docs/operations/personal-assistant-operator-guide.md +0 -61
- package/docs/operations/provider-configuration.md +0 -31
- package/scripts/harness-trace-grade.sh +0 -150
- package/scripts/heartbeat-triage.sh +0 -361
- package/scripts/maintenance-triage.sh +0 -167
- package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
- package/src/cli/repositories/goal-registry.ts +0 -239
- package/src/runtime/assistant/action-proposals.ts +0 -279
- package/src/runtime/assistant/intent.ts +0 -395
- package/src/runtime/assistant/model-provider.ts +0 -460
- package/src/runtime/assistant/openapi.ts +0 -223
- package/src/runtime/assistant/policy.ts +0 -89
- package/src/runtime/assistant/readiness.ts +0 -258
- package/src/runtime/assistant/routine-runtime.ts +0 -477
- package/src/runtime/assistant/schedule-binding.ts +0 -171
- package/src/runtime/assistant/standing-grants.ts +0 -375
- package/src/runtime/assistant/store.ts +0 -243
- package/src/runtime/assistant/types.ts +0 -135
- package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
- package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
- package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
- package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
- package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
- package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
- package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
- package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
- package/src/runtime/control-plane/goal-loop/index.ts +0 -13
- package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
- package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
- package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
- package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
- package/src/runtime/control-plane/goal-loop/types.ts +0 -378
- package/src/runtime/control-plane/startup-recovery.ts +0 -198
- package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
- package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
- package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
- package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
- package/src/runtime/workflow/findings/store.ts +0 -204
- package/src/runtime/workflow/findings/types.ts +0 -58
- package/src/runtime/workflow/portfolio/engine.ts +0 -20
- package/src/runtime/workflow/portfolio/store.ts +0 -185
- package/src/runtime/workflow/portfolio/types.ts +0 -29
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|
3
|
-
import {
|
|
2
|
+
import { readFileSync, existsSync, lstatSync, readdirSync } from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { dirname, extname, normalize, resolve } from 'node:path';
|
|
4
5
|
|
|
5
6
|
const root = resolve(new URL('..', import.meta.url).pathname);
|
|
6
7
|
const failures = [];
|
|
@@ -15,8 +16,16 @@ function text(path) {
|
|
|
15
16
|
function requireText(path, needle) {
|
|
16
17
|
if (!text(path).includes(needle)) failures.push(`${path} must contain ${JSON.stringify(needle)}`);
|
|
17
18
|
}
|
|
19
|
+
function hasFilesystemContent(path) {
|
|
20
|
+
const absolute = resolve(root, path);
|
|
21
|
+
if (!existsSync(absolute)) return false;
|
|
22
|
+
if (!lstatSync(absolute).isDirectory()) return true;
|
|
23
|
+
return readdirSync(absolute, { withFileTypes: true }).some((entry) =>
|
|
24
|
+
entry.isDirectory() ? hasFilesystemContent(`${path}/${entry.name}`) : true,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
18
27
|
function requireMissing(path) {
|
|
19
|
-
if (
|
|
28
|
+
if (hasFilesystemContent(path)) failures.push(`${path} must be deleted`);
|
|
20
29
|
}
|
|
21
30
|
function requireMatch(path, expression, description) {
|
|
22
31
|
if (!expression.test(text(path))) failures.push(`${path} must ${description}`);
|
|
@@ -44,10 +53,141 @@ function sourceFiles(directory) {
|
|
|
44
53
|
return files;
|
|
45
54
|
}
|
|
46
55
|
|
|
56
|
+
function relativeStaticTypeScriptDependencyGraph(directory = 'src') {
|
|
57
|
+
let ts;
|
|
58
|
+
try {
|
|
59
|
+
ts = createRequire(import.meta.url)('typescript');
|
|
60
|
+
} catch (error) {
|
|
61
|
+
failures.push(`TypeScript dependency is required for architecture import-cycle analysis: ${error instanceof Error ? error.message : String(error)}`);
|
|
62
|
+
return new Map();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const files = sourceFiles(directory).sort();
|
|
66
|
+
const known = new Set(files);
|
|
67
|
+
const graph = new Map(files.map((path) => [path, new Set()]));
|
|
68
|
+
|
|
69
|
+
function resolveTypeScriptImport(fromPath, specifier) {
|
|
70
|
+
if (!specifier.startsWith('.')) return undefined;
|
|
71
|
+
const base = normalize(`${dirname(fromPath)}/${specifier}`).replaceAll('\\', '/');
|
|
72
|
+
const extension = extname(base);
|
|
73
|
+
const withoutRuntimeExtension = ['.js', '.mjs', '.cjs'].includes(extension)
|
|
74
|
+
? base.slice(0, -extension.length)
|
|
75
|
+
: base;
|
|
76
|
+
const candidates = extension === '.ts'
|
|
77
|
+
? [base]
|
|
78
|
+
: [withoutRuntimeExtension, `${withoutRuntimeExtension}.ts`, `${withoutRuntimeExtension}/index.ts`];
|
|
79
|
+
return candidates.find((candidate) => known.has(candidate));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
for (const path of files) {
|
|
83
|
+
const sourceFile = ts.createSourceFile(path, text(path), ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
84
|
+
for (const statement of sourceFile.statements) {
|
|
85
|
+
let specifier;
|
|
86
|
+
if ((ts.isImportDeclaration(statement) || ts.isExportDeclaration(statement))
|
|
87
|
+
&& statement.moduleSpecifier
|
|
88
|
+
&& ts.isStringLiteralLike(statement.moduleSpecifier)) {
|
|
89
|
+
specifier = statement.moduleSpecifier.text;
|
|
90
|
+
} else if (ts.isImportEqualsDeclaration(statement)
|
|
91
|
+
&& ts.isExternalModuleReference(statement.moduleReference)
|
|
92
|
+
&& statement.moduleReference.expression
|
|
93
|
+
&& ts.isStringLiteralLike(statement.moduleReference.expression)) {
|
|
94
|
+
specifier = statement.moduleReference.expression.text;
|
|
95
|
+
}
|
|
96
|
+
if (!specifier) continue;
|
|
97
|
+
const target = resolveTypeScriptImport(path, specifier);
|
|
98
|
+
if (target) graph.get(path).add(target);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return graph;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function stronglyConnectedComponents(graph) {
|
|
105
|
+
let index = 0;
|
|
106
|
+
const indices = new Map();
|
|
107
|
+
const lowLinks = new Map();
|
|
108
|
+
const stack = [];
|
|
109
|
+
const onStack = new Set();
|
|
110
|
+
const components = [];
|
|
111
|
+
|
|
112
|
+
function visit(node) {
|
|
113
|
+
indices.set(node, index);
|
|
114
|
+
lowLinks.set(node, index);
|
|
115
|
+
index += 1;
|
|
116
|
+
stack.push(node);
|
|
117
|
+
onStack.add(node);
|
|
118
|
+
|
|
119
|
+
for (const target of graph.get(node) ?? []) {
|
|
120
|
+
if (!indices.has(target)) {
|
|
121
|
+
visit(target);
|
|
122
|
+
lowLinks.set(node, Math.min(lowLinks.get(node), lowLinks.get(target)));
|
|
123
|
+
} else if (onStack.has(target)) {
|
|
124
|
+
lowLinks.set(node, Math.min(lowLinks.get(node), indices.get(target)));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (lowLinks.get(node) !== indices.get(node)) return;
|
|
129
|
+
const component = [];
|
|
130
|
+
while (stack.length) {
|
|
131
|
+
const member = stack.pop();
|
|
132
|
+
onStack.delete(member);
|
|
133
|
+
component.push(member);
|
|
134
|
+
if (member === node) break;
|
|
135
|
+
}
|
|
136
|
+
components.push(component.sort());
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
for (const node of [...graph.keys()].sort()) {
|
|
140
|
+
if (!indices.has(node)) visit(node);
|
|
141
|
+
}
|
|
142
|
+
return components;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function requireAcyclicProductionTypeScript() {
|
|
146
|
+
const graph = relativeStaticTypeScriptDependencyGraph('src');
|
|
147
|
+
const cyclic = stronglyConnectedComponents(graph).filter((component) =>
|
|
148
|
+
component.length > 1 || (component.length === 1 && graph.get(component[0])?.has(component[0])),
|
|
149
|
+
);
|
|
150
|
+
for (const component of cyclic) {
|
|
151
|
+
failures.push(`production TypeScript import cycle: ${component.join(' -> ')}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const allowedArchitectureRootMarkdown = new Set(['CURRENT.md', 'EVOLUTION.md', 'history.md', 'index.md']);
|
|
156
|
+
const architectureRootMarkdown = readdirSync(resolve(root, 'docs/architecture'), { withFileTypes: true })
|
|
157
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
|
|
158
|
+
.map((entry) => entry.name)
|
|
159
|
+
.sort();
|
|
160
|
+
for (const name of architectureRootMarkdown) {
|
|
161
|
+
if (!allowedArchitectureRootMarkdown.has(name)) {
|
|
162
|
+
failures.push(`docs/architecture/${name} must be archived under docs/architecture/history/ instead of acting as parallel root architecture authority`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
for (const path of ['README.md', 'docs/ROADMAP.md', 'docs/architecture/CURRENT.md', 'docs/architecture/index.md']) {
|
|
167
|
+
forbid(path, /\/Users\//, 'maintained documentation must not contain personal absolute macOS paths');
|
|
168
|
+
forbid(path, /\bRepo Harness\b/i, 'maintained documentation must use the current Forge product identity');
|
|
169
|
+
forbid(path, /(?:^|\n)\s*(?:>\s*)?(?:\*\*)?Status(?:\*\*)?\s*:\s*[^\n]*(?:implementation in progress|Phase\s+\d+)/i, 'maintained documentation must not carry transient execution status; use Plan/Work/evidence or history');
|
|
170
|
+
}
|
|
171
|
+
|
|
47
172
|
const required = [
|
|
48
173
|
'src/runtime/gateway/mcp/router.ts',
|
|
49
174
|
'src/cli/agent-jobs/executable-resolver.ts',
|
|
50
175
|
'src/runtime/control-plane/global-scheduler/scheduler.ts',
|
|
176
|
+
'src/runtime/control-plane/global-scheduler/config.ts',
|
|
177
|
+
'src/runtime/control-plane/global-scheduler/state.ts',
|
|
178
|
+
'src/runtime/control-plane/global-scheduler/worker-launch.ts',
|
|
179
|
+
'src/runtime/control-plane/global-scheduler/dispatch-capacity.ts',
|
|
180
|
+
'src/runtime/control-plane/global-scheduler/projection-refresh.ts',
|
|
181
|
+
'src/runtime/control-plane/global-scheduler/worker-lifecycle.ts',
|
|
182
|
+
'src/runtime/control-plane/global-scheduler/worker-stderr.ts',
|
|
183
|
+
'src/runtime/control-plane/global-scheduler/worker-attachment.ts',
|
|
184
|
+
'src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts',
|
|
185
|
+
'src/runtime/control-plane/global-scheduler/maintenance.ts',
|
|
186
|
+
'src/runtime/control-plane/global-scheduler/source-scan.ts',
|
|
187
|
+
'src/runtime/control-plane/global-scheduler/durable-admission.ts',
|
|
188
|
+
'src/runtime/control-plane/global-scheduler/worker-exit-decision.ts',
|
|
189
|
+
'src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts',
|
|
190
|
+
'src/runtime/control-plane/global-scheduler/worker-process.ts',
|
|
51
191
|
'src/runtime/control-plane/repo-actor/actor.ts',
|
|
52
192
|
'src/runtime/execution/jobs/store.ts',
|
|
53
193
|
'src/runtime/execution/jobs/timeouts.ts',
|
|
@@ -56,8 +196,27 @@ const required = [
|
|
|
56
196
|
'src/runtime/execution/thin-harness/index.ts',
|
|
57
197
|
'src/runtime/execution/thin-harness/execution-router.ts',
|
|
58
198
|
'src/runtime/control-plane/routing/route-policy.ts',
|
|
59
|
-
'
|
|
60
|
-
'
|
|
199
|
+
'src/runtime/control-plane/routing/workspace-admission.ts',
|
|
200
|
+
'src/runtime/control-plane/facade/requirement-authority.ts',
|
|
201
|
+
'src/runtime/control-plane/facade/repository-work-admission.ts',
|
|
202
|
+
'src/runtime/control-plane/execution/retained-work-resume.ts',
|
|
203
|
+
'src/runtime/control-plane/execution/work-handle-authority.ts',
|
|
204
|
+
'src/runtime/control-plane/execution/work-verification-context.ts',
|
|
205
|
+
'src/runtime/control-plane/execution/work-verification-service.ts',
|
|
206
|
+
'src/runtime/control-plane/execution/repository-work-attribution.ts',
|
|
207
|
+
'src/runtime/control-plane/execution/work-completion-authority.ts',
|
|
208
|
+
'src/runtime/control-plane/execution/work-evidence-policy.ts',
|
|
209
|
+
'src/runtime/control-plane/execution/work-execution-support.ts',
|
|
210
|
+
'src/runtime/control-plane/execution/work-finalization-service.ts',
|
|
211
|
+
'src/runtime/control-plane/execution/work-preparation-service.ts',
|
|
212
|
+
'src/runtime/control-plane/execution/work-operation-service.ts',
|
|
213
|
+
'src/runtime/control-plane/facade/work-state-machine.ts',
|
|
214
|
+
'src/runtime/evidence/process-check-execution.ts',
|
|
215
|
+
'src/runtime/context/semantic-navigation-contract.ts',
|
|
216
|
+
'src/cli/mcp/tool-contract.ts',
|
|
217
|
+
'src/cli/github/contracts.ts',
|
|
218
|
+
'src/runtime/gateway/mcp/runtime-tool-definitions.ts',
|
|
219
|
+
'docs/architecture/CURRENT.md',
|
|
61
220
|
'src/runtime/resources/leases/store.ts',
|
|
62
221
|
'src/runtime/evidence/event-ledger.ts',
|
|
63
222
|
'src/runtime/evidence/evidence-store.ts',
|
|
@@ -70,8 +229,6 @@ const required = [
|
|
|
70
229
|
'src/runtime/workflow/schedules/work-continuation.ts',
|
|
71
230
|
'scripts/smoke-runtime-recovery.ts',
|
|
72
231
|
'scripts/smoke-schedule-engine.ts',
|
|
73
|
-
'src/runtime/workflow/portfolio/engine.ts',
|
|
74
|
-
'src/runtime/workflow/findings/store.ts',
|
|
75
232
|
'src/runtime/release/release-gate.ts',
|
|
76
233
|
'src/runtime/root/runtime.ts',
|
|
77
234
|
'src/runtime/root/readiness.ts',
|
|
@@ -85,32 +242,39 @@ const required = [
|
|
|
85
242
|
'src/cli/commands/init-hook.ts',
|
|
86
243
|
'src/cli/commands/runtime.ts',
|
|
87
244
|
'src/cli/index.ts',
|
|
88
|
-
'docs/architecture/current/runtime-architecture-simplification.md',
|
|
89
|
-
'docs/architecture/current/implementation-status.md',
|
|
90
|
-
'docs/architecture/current/runtime-directory-map.md',
|
|
91
|
-
'docs/architecture/current/operations-runbook.md',
|
|
92
|
-
'docs/architecture/current/target-requirements-traceability.md',
|
|
93
|
-
'docs/architecture/current/approved-target-architecture.zh-CN.md',
|
|
94
245
|
];
|
|
95
246
|
for (const path of required) text(path);
|
|
247
|
+
requireAcyclicProductionTypeScript();
|
|
248
|
+
for (const path of sourceFiles('src/runtime/control-plane')) {
|
|
249
|
+
forbid(path, /(?:from\s+['"]|import\s*\(\s*['"])(?:\.\.\/)+gateway\//, 'control-plane domain/application code must not depend on Gateway transport');
|
|
250
|
+
}
|
|
96
251
|
requireText('src/runtime/control-plane/routing/route-policy.ts', "export function decideRoute");
|
|
97
252
|
requireText('src/runtime/control-plane/routing/route-policy.ts', 'inputFingerprint');
|
|
98
253
|
requireText('src/runtime/control-plane/routing/route-policy.ts', 'policyVersion');
|
|
99
|
-
requireText('src/runtime/
|
|
100
|
-
requireText('src/runtime/
|
|
101
|
-
requireText('src/runtime/
|
|
102
|
-
requireText('src/runtime/
|
|
103
|
-
|
|
254
|
+
requireText('src/runtime/control-plane/execution/work-verification-service.ts', 'runPersistedCheckViaProcessRuntime({');
|
|
255
|
+
requireText('src/runtime/control-plane/execution/work-verification-service.ts', 'interactiveWaitMs: input.interactiveWaitMs ?? 0');
|
|
256
|
+
requireText('src/runtime/control-plane/execution/work-verification-service.ts', 'checkContentRevision');
|
|
257
|
+
requireText('src/runtime/control-plane/execution/work-verification-service.ts', 'observedGitHead');
|
|
258
|
+
requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'executeWorkVerification({');
|
|
259
|
+
requireText('src/cli/local-bridge/facade-api.ts', 'executeWorkVerification({');
|
|
260
|
+
forbid(
|
|
261
|
+
'src/cli/local-bridge/facade-api.ts',
|
|
262
|
+
/runControllerCheck\s*\(/,
|
|
263
|
+
'Local Bridge Work verification must use the canonical persisted Work verification service',
|
|
264
|
+
);
|
|
265
|
+
forbid(
|
|
104
266
|
'src/runtime/gateway/mcp/runtime-tools.ts',
|
|
105
|
-
|
|
106
|
-
'
|
|
267
|
+
/function\s+classifyTerminalCheckEvidence\s*\(/,
|
|
268
|
+
'terminal Check evidence classification belongs to Process Runtime, not the Gateway transport',
|
|
269
|
+
);
|
|
270
|
+
forbid(
|
|
271
|
+
'src/runtime/control-plane/execution/work-verification-service.ts',
|
|
107
272
|
/runControllerCheck\s*\(/,
|
|
108
|
-
'route
|
|
273
|
+
'route Work verification through persisted Process Runtime instead of synchronous check execution',
|
|
109
274
|
);
|
|
110
275
|
for (const adapter of [
|
|
111
276
|
'src/cli/controller/work-mode.ts',
|
|
112
277
|
'src/runtime/control-plane/facade/types.ts',
|
|
113
|
-
'src/runtime/control-plane/goal-loop/executor-router.ts',
|
|
114
278
|
]) {
|
|
115
279
|
requireText(adapter, '@deprecated Compatibility adapter');
|
|
116
280
|
requireText(adapter, 'decideRoute(');
|
|
@@ -122,10 +286,66 @@ for (const path of sourceFiles('src')) {
|
|
|
122
286
|
forbid(path, /requirePlanForGoalWorkloop\s*:\s*true/, 'never restore mandatory Plan gating in production');
|
|
123
287
|
}
|
|
124
288
|
if (routeAuthorityCount !== 1) failures.push(`exactly one decideRoute authority is required; found ${routeAuthorityCount}`);
|
|
289
|
+
forbid(
|
|
290
|
+
'src/runtime/control-plane/facade/goal-workloop.ts',
|
|
291
|
+
/function\s+(?:evaluateWorkCompletionEvidence|evaluateWorkImplementationEvidence|verificationRecordAppliesToCurrentWorkspace)\s*\(/,
|
|
292
|
+
'keep Work evidence policy in the canonical work-evidence-policy module instead of reimplementing it in the facade',
|
|
293
|
+
);
|
|
294
|
+
requireText('src/runtime/control-plane/facade/goal-workloop.ts', "from '../execution/work-evidence-policy'");
|
|
295
|
+
for (const path of sourceFiles('src/runtime/control-plane')) {
|
|
296
|
+
if (path === 'src/runtime/control-plane/facade/work-contract-store.ts' || path === 'src/runtime/control-plane/execution/work-completion-authority.ts') continue;
|
|
297
|
+
forbid(
|
|
298
|
+
path,
|
|
299
|
+
/\brecordWorkCompletionReceipt\s*\(/,
|
|
300
|
+
'route Work completion through the canonical work-completion-authority instead of writing terminal receipts directly',
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
requireText('src/runtime/control-plane/execution/work-finalization-service.ts', 'completeWorkWithReceipt(');
|
|
304
|
+
forbid(
|
|
305
|
+
'src/runtime/plugins/browser-handoff-host.ts',
|
|
306
|
+
/browser\/sessions|saveBrowserSession|writeBrowserSession|sessionPath/,
|
|
307
|
+
'Browser handoff sidecars must return interaction results and never write BrowserSession authority directly',
|
|
308
|
+
);
|
|
309
|
+
forbid(
|
|
310
|
+
'src/runtime/plugins/browser-adapter.ts',
|
|
311
|
+
/BROWSER_POST_DISPATCH_REPLAY_SAFE_ACTIONS|POST_DISPATCH_REPLAY_SAFE_ACTIONS/,
|
|
312
|
+
'Browser replay safety must come from Browser Runtime transaction policy, not an adapter-local allowlist',
|
|
313
|
+
);
|
|
314
|
+
requireText('src/runtime/plugins/browser-runtime.ts', 'browserActionCanReplayAfterDispatch');
|
|
315
|
+
forbid(
|
|
316
|
+
'src/runtime/gateway/mcp/runtime-tools.ts',
|
|
317
|
+
/\b(?:createRequirement|resumeRetainedCancelledWorkContract)\s*\(/,
|
|
318
|
+
'keep Requirement admission and retained-cancelled Work lifecycle authority out of the MCP transport',
|
|
319
|
+
);
|
|
320
|
+
forbid(
|
|
321
|
+
'src/runtime/gateway/mcp/runtime-tools.ts',
|
|
322
|
+
/\b(?:updateWorkContract|writeWorkHandle)\s*\(/,
|
|
323
|
+
'keep WorkContract/WorkHandle persistence policy out of the MCP transport',
|
|
324
|
+
);
|
|
325
|
+
forbid(
|
|
326
|
+
'src/runtime/gateway/mcp/execution-tools.ts',
|
|
327
|
+
/\bcreateWorkContract\s*\(/,
|
|
328
|
+
'route compatibility work preparation through canonical Work admission authority',
|
|
329
|
+
);
|
|
330
|
+
forbid(
|
|
331
|
+
'src/cli/mcp/legacy-tool-service.ts',
|
|
332
|
+
/\bcreateWorkContract\s*\(/,
|
|
333
|
+
'keep the legacy MCP surface as translation over canonical Work admission authority',
|
|
334
|
+
);
|
|
125
335
|
requireMissing('src/runtime/control-plane/daemon-entry.ts');
|
|
126
336
|
requireMissing('scripts/smoke-runtime-control-plane.ts');
|
|
127
337
|
requireMissing('src/cli/controller/lifecycle.ts');
|
|
128
338
|
requireMissing('src/cli/commands/supervisor.ts');
|
|
339
|
+
requireMissing('src/runtime/control-plane/goal-loop');
|
|
340
|
+
requireMissing('src/cli/repositories/goal-registry.ts');
|
|
341
|
+
requireMissing('src/runtime/assistant');
|
|
342
|
+
requireMissing('src/runtime/personal-assistant');
|
|
343
|
+
requireMissing('src/runtime/workflow/findings');
|
|
344
|
+
forbid(
|
|
345
|
+
'src/runtime/control-plane/global-scheduler/scheduler.ts',
|
|
346
|
+
/tickGoalLoopsForController|lastGoalLoopTick/,
|
|
347
|
+
'Scheduler must not restore autonomous Goal Loop polling',
|
|
348
|
+
);
|
|
129
349
|
requireMissing('src/cli/controller/restart-coordinator-entry.ts');
|
|
130
350
|
requireMissing('scripts/controller-runtime.sh');
|
|
131
351
|
requireMissing('scripts/activate-source-baseline.command');
|
|
@@ -145,6 +365,13 @@ requireMissing('OPTIMIZATION_REPORT.md');
|
|
|
145
365
|
requireMissing('docs/architecture/RELIABILITY-PROGRAM.md');
|
|
146
366
|
requireMissing('docs/architecture/p0-canonical-single-runtime-plan.md');
|
|
147
367
|
requireMissing('docs/architecture/transactional-adoption-planner.md');
|
|
368
|
+
requireMissing('docs/architecture/global-hook-runtime.md');
|
|
369
|
+
requireMissing('docs/architecture/ios-semantic-automation-provider-v2.md');
|
|
370
|
+
requireMissing('docs/architecture/chatgpt-handoff-facade.md');
|
|
371
|
+
requireText('docs/architecture/history/global-hook-runtime.md', 'Status: **Historical Evidence — Not Runtime Authority**');
|
|
372
|
+
requireText('docs/architecture/history/ios-semantic-automation-provider-v2.md', 'Status: **Historical Design Evidence — Not Runtime Authority**');
|
|
373
|
+
requireText('docs/architecture/history/chatgpt-handoff-facade.md', 'Status: **Historical Design Rationale — Not Runtime Authority**');
|
|
374
|
+
requireText('docs/architecture/history/README.md', 'Status: **Historical Evidence — Not Runtime Authority**');
|
|
148
375
|
requireMissing('docs/operations/20260802-requirement-portfolio-migration.md');
|
|
149
376
|
requireMissing('docs/runbooks/RELIABILITY-SESSION-PROTOCOL.md');
|
|
150
377
|
requireMissing('docs/architecture/decisions/20260718-mcp-session-lifecycle-and-ingress-isolation.md');
|
|
@@ -156,6 +383,7 @@ requireMissing('bin/repo-harness-hook.mjs');
|
|
|
156
383
|
requireMissing('bin/repo-harness-runtime.mjs');
|
|
157
384
|
requireMissing('src/runtime/control-plane/daemon-client.ts');
|
|
158
385
|
requireMissing('src/runtime/control-plane/daemon-ownership.ts');
|
|
386
|
+
requireMissing('src/runtime/workflow/portfolio');
|
|
159
387
|
for (const path of sourceFiles('src')) {
|
|
160
388
|
const source = text(path);
|
|
161
389
|
for (const retiredAuthority of [
|
|
@@ -209,24 +437,16 @@ for (const projectionPath of [
|
|
|
209
437
|
}
|
|
210
438
|
requireText('src/runtime/projections/invalidation.ts', 'runtimeInstanceId?: string');
|
|
211
439
|
requireText('src/runtime/projections/materialized-view.ts', 'currentOwner.runtimeInstanceId !== owner.runtimeInstanceId');
|
|
212
|
-
requireText('src/runtime/control-plane/global-scheduler/
|
|
440
|
+
requireText('src/runtime/control-plane/global-scheduler/projection-refresh.ts', 'getRuntimeWriteClaim()?.runtimeInstanceId');
|
|
213
441
|
forbid(
|
|
214
442
|
'src/runtime/execution/jobs/receipt-store.ts',
|
|
215
443
|
/ownerEpoch|releaseFencingToken/,
|
|
216
444
|
'persist only non-secret Canonical Runtime/release identity in OperationReceipt ownership evidence',
|
|
217
445
|
);
|
|
218
446
|
|
|
219
|
-
requireText('docs/architecture/
|
|
220
|
-
requireText('docs/architecture/
|
|
221
|
-
requireText('docs/architecture/
|
|
222
|
-
requireText('docs/architecture/current/runtime-architecture-simplification.md', 'Legacy code may receive only deletion-enabling or safety-fencing changes.');
|
|
223
|
-
forbidBetween(
|
|
224
|
-
'docs/architecture/current/runtime-architecture-simplification.md',
|
|
225
|
-
'## 2. Target Runtime',
|
|
226
|
-
'## 3. Seven phases',
|
|
227
|
-
/Stable Supervisor|Stable Ingress|blue\/green|candidate\/current\/previous/i,
|
|
228
|
-
'define the target Runtime without Supervisor, ingress, slots, or component rollback',
|
|
229
|
-
);
|
|
447
|
+
requireText('docs/architecture/CURRENT.md', 'Canonical Runtime is activated as one immutable whole release');
|
|
448
|
+
requireText('docs/architecture/CURRENT.md', 'Runtime availability/recovery keeps Forge itself healthy');
|
|
449
|
+
requireText('docs/architecture/CURRENT.md', 'Historical Issue/Task/Local Job and compatibility projections must not become second mutable authorities.');
|
|
230
450
|
requireText('src/runtime/root/runtime.ts', 'export class CanonicalForgeRuntime');
|
|
231
451
|
forbid('src/runtime/control-plane/runtime-status-client.ts', /ensureControllerDaemon|child_process|daemon-entry|StableSupervisor|ownerEpoch|slot\?:/, 'keep Forge Runtime status observation read-only and free of legacy lifecycle authority');
|
|
232
452
|
requireText('src/runtime/root/runtime.ts', "startInProcessScheduler");
|
|
@@ -346,7 +566,14 @@ requireText('src/runtime/gateway/mcp/execution-tools.ts', 'isDurableWorkOperatio
|
|
|
346
566
|
requireText('src/runtime/gateway/mcp/execution-tools.ts', "'work_execute'");
|
|
347
567
|
requireText('src/runtime/gateway/mcp/execution-tools.ts', "'work_validate'");
|
|
348
568
|
requireText('src/runtime/gateway/mcp/execution-tools.ts', "'work_finalize'");
|
|
349
|
-
requireText('src/runtime/execution/workers/executor.ts', '
|
|
569
|
+
requireText('src/runtime/execution/workers/executor.ts', 'executeWork(runtimeContext');
|
|
570
|
+
requireText('src/runtime/execution/workers/executor.ts', 'validateWork(runtimeContext');
|
|
571
|
+
requireText('src/runtime/execution/workers/executor.ts', 'finalizeWork(runtimeContext');
|
|
572
|
+
forbid(
|
|
573
|
+
'src/runtime/execution/workers/executor.ts',
|
|
574
|
+
/gateway\/mcp\/execution-tools|callExecutionTool\s*\(/,
|
|
575
|
+
'Execution Worker must invoke control-plane Work application services directly, never MCP transport',
|
|
576
|
+
);
|
|
350
577
|
requireText('src/runtime/execution/workers/executor.ts', '__from_durable_worker');
|
|
351
578
|
requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'managedProcessOperationDigest');
|
|
352
579
|
forbid(
|
|
@@ -354,21 +581,11 @@ forbid(
|
|
|
354
581
|
/\bcreateExecutionJob\b/,
|
|
355
582
|
'Runtime MCP tools must not retain dormant ExecutionJob creation paths',
|
|
356
583
|
);
|
|
357
|
-
forbid(
|
|
358
|
-
'src/runtime/assistant/intent.ts',
|
|
359
|
-
/\bcreateExecutionJob\b/,
|
|
360
|
-
'Assistant intent and routine triggers must use direct plugin actions or external-Controller handoffs',
|
|
361
|
-
);
|
|
362
584
|
forbid(
|
|
363
585
|
'src/runtime/execution/jobs/legacy-adapter.ts',
|
|
364
586
|
/\bcreateExecutionJob\b|\bdispatchLegacyLocalJob\b/,
|
|
365
587
|
'Legacy Local Bridge compatibility must be read-only and must not dispatch new ExecutionJobs',
|
|
366
588
|
);
|
|
367
|
-
forbid(
|
|
368
|
-
'src/runtime/workflow/portfolio/engine.ts',
|
|
369
|
-
/\bcreateExecutionJob\b|\bfindExecutionJob\b/,
|
|
370
|
-
'Portfolio definitions are planning records; Kernel-owned Portfolio execution is retired',
|
|
371
|
-
);
|
|
372
589
|
forbid(
|
|
373
590
|
'src/cli/local-bridge/server.ts',
|
|
374
591
|
/\bsubmitLocalBridgeJob\b|\bdispatchLocalBridgeJob\b|\basyncExecute\b/,
|
|
@@ -425,16 +642,6 @@ forbid(
|
|
|
425
642
|
/\bretryAgentJob\b/,
|
|
426
643
|
'Legacy MCP must not call Agent Run retry',
|
|
427
644
|
);
|
|
428
|
-
forbid(
|
|
429
|
-
'src/runtime/workflow/portfolio/engine.ts',
|
|
430
|
-
/\bacceptTaskJob\b|\bstartTaskJob\b|\bretryAgentJob\b/,
|
|
431
|
-
'Portfolio Engine must not start or retry Kernel-managed Agent Runs',
|
|
432
|
-
);
|
|
433
|
-
forbid(
|
|
434
|
-
'src/runtime/control-plane/goal-loop/goal-loop-engine.ts',
|
|
435
|
-
/\bcreateExecutionJob\b|\bsubmitLocalBridgeJob\b|\bacceptTaskJob\b|\bstartTaskJob\b|\bdispatchProvider\b/,
|
|
436
|
-
'Goal Loop must not create Jobs, Agent Runs, or invoke Kernel Provider dispatch',
|
|
437
|
-
);
|
|
438
645
|
forbid('src/runtime/gateway/mcp/router.ts', /Use process_get \/ process_wait \/ process_logs/, 'Gateway follow-up instructions must use an always-exposed neutral Work facade');
|
|
439
646
|
requireMatch(
|
|
440
647
|
'src/runtime/gateway/mcp/router.ts',
|
|
@@ -446,12 +653,6 @@ requireText('src/runtime/gateway/mcp/runtime-tools.ts', "case 'local_bridge_stat
|
|
|
446
653
|
requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'readAgentExecutableReadinessSnapshot');
|
|
447
654
|
requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'connectorExposedTools');
|
|
448
655
|
requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'currentCallableTools');
|
|
449
|
-
forbid(
|
|
450
|
-
'docs/architecture/current/implementation-status.md',
|
|
451
|
-
/Stable external lifecycle Supervisor \| Implemented|Stable ingress event-loop isolation \| Implemented/,
|
|
452
|
-
'legacy Supervisor or Stable Ingress must not be reported as the target implementation',
|
|
453
|
-
);
|
|
454
|
-
requireText('docs/architecture/current/implementation-status.md', 'Canonical Single Runtime vertical slice');
|
|
455
656
|
forbid('src/runtime/gateway/mcp/runtime-tools.ts', /inspectAgentExecutableReadiness|resolveAgentExecutable|writeAgentExecutableReadinessSnapshot/, 'Gateway readiness must only read the Daemon-produced Agent executable snapshot');
|
|
456
657
|
forbidBetween(
|
|
457
658
|
'src/runtime/gateway/mcp/runtime-tools.ts',
|
|
@@ -491,15 +692,50 @@ requireText('src/runtime/execution/jobs/receipt-store.ts', "state: 'started' | '
|
|
|
491
692
|
requireText('src/runtime/execution/thin-harness/execution-router.ts', "mode: 'fast'");
|
|
492
693
|
requireText('src/runtime/execution/thin-harness/execution-router.ts', 'routeExecution');
|
|
493
694
|
requireText('src/runtime/execution/thin-harness/types.ts', 'FastExecutionReceipt');
|
|
494
|
-
requireText('docs/architecture/
|
|
695
|
+
requireText('docs/architecture/CURRENT.md', '### Ephemeral Direct — default');
|
|
495
696
|
requireText('src/runtime/resources/leases/types.ts', 'fencingToken: number');
|
|
496
697
|
requireText('src/runtime/resources/leases/store.ts', 'assertFencingToken');
|
|
497
698
|
requireText('src/runtime/resources/leases/store.ts', 'expectedLeaseMap');
|
|
498
699
|
requireText('src/runtime/resources/claims/conflicts.ts', "'repo-content:*'");
|
|
499
700
|
requireText('src/runtime/control-plane/repo-actor/actor.ts', 'repo-actor-mailbox');
|
|
500
701
|
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'maxConcurrentRepositories');
|
|
501
|
-
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', '
|
|
502
|
-
requireText('src/runtime/control-plane/global-scheduler/
|
|
702
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'createSchedulerDispatchCapacity');
|
|
703
|
+
requireText('src/runtime/control-plane/global-scheduler/dispatch-capacity.ts', 'maxHeavyChecks');
|
|
704
|
+
requireText('src/runtime/control-plane/global-scheduler/dispatch-capacity.ts', 'maxAgentProcesses');
|
|
705
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'normalizeSchedulerConfig');
|
|
706
|
+
requireText('src/runtime/control-plane/global-scheduler/config.ts', 'normalizeSchedulerConfig');
|
|
707
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'writeSchedulerHealthSnapshot');
|
|
708
|
+
requireText('src/runtime/control-plane/global-scheduler/state.ts', 'writeSchedulerHealthSnapshot');
|
|
709
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'buildSchedulerWorkerLaunchDescriptor');
|
|
710
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-launch.ts', 'buildSchedulerWorkerLaunchDescriptor');
|
|
711
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'refreshSchedulerRepositoryProjections');
|
|
712
|
+
requireText('src/runtime/control-plane/global-scheduler/projection-refresh.ts', 'refreshRepositoryProjectionForRepository');
|
|
713
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'buildSchedulerWorkerSpawnedLifecycle');
|
|
714
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-lifecycle.ts', 'buildSchedulerWorkerExitFailure');
|
|
715
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'createSchedulerWorkerStderrCapture');
|
|
716
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-stderr.ts', 'MAX_SCHEDULER_WORKER_STDERR_BYTES');
|
|
717
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'persistSchedulerWorkerAttachment');
|
|
718
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-attachment.ts', 'attachExecutionWorker');
|
|
719
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'runSchedulerPeriodicCleanup');
|
|
720
|
+
requireText('src/runtime/control-plane/global-scheduler/maintenance.ts', 'runSchedulerValidationReconciliation');
|
|
721
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'planSchedulerSourceSampling');
|
|
722
|
+
requireText('src/runtime/control-plane/global-scheduler/source-scan.ts', 'selectSchedulerSourceScanRepositories');
|
|
723
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'runSchedulerDurableAdmission');
|
|
724
|
+
requireText('src/runtime/control-plane/global-scheduler/durable-admission.ts', 'markExecutionJobSchedulerObserved');
|
|
725
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts', 'persistSchedulerTerminalWorkerLifecycle');
|
|
726
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts', 'TERMINAL_JOB_STATUSES');
|
|
727
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts', 'evaluateSchedulerWorkerExitCandidate');
|
|
728
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-exit-decision.ts', 'TERMINAL_JOB_STATUSES');
|
|
729
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'reconcileSchedulerWorkerExit');
|
|
730
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts', 'releaseExecutionLeases');
|
|
731
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'cleanupSchedulerWorkerProcesses');
|
|
732
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'registerSchedulerWorkerProcess');
|
|
733
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'spawnSchedulerWorkerProcess');
|
|
734
|
+
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'wireSchedulerWorkerProcess');
|
|
735
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', 'cleanupSchedulerWorkerProcesses');
|
|
736
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', 'dependencies.spawnProcess');
|
|
737
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', 'terminateProcessTree');
|
|
738
|
+
requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', "child.once('close'");
|
|
503
739
|
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'writeAgentExecutableReadinessSnapshot');
|
|
504
740
|
requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'sampleRepositoryGitStatusForRepositories');
|
|
505
741
|
requireText('src/cli/agent-jobs/executable-resolver.ts', 'revalidateAgentExecutable');
|
|
@@ -533,22 +769,55 @@ forbidBetween(
|
|
|
533
769
|
requireText('src/runtime/control-plane/execution/session-store.ts', 'lastValidatedAt: now');
|
|
534
770
|
requireText('src/runtime/control-plane/execution/validation.ts', 'warnings.push');
|
|
535
771
|
requireText('src/runtime/control-plane/execution/work-handle-store.ts', "failed: ['validating', 'editing', 'committed', 'merged', 'cleaned', 'failed_terminal_cleanup']");
|
|
536
|
-
requireText('src/runtime/gateway/mcp/execution-tools.ts', '
|
|
537
|
-
requireText('src/runtime/gateway/mcp/execution-tools.ts', '
|
|
538
|
-
|
|
772
|
+
requireText('src/runtime/gateway/mcp/execution-tools.ts', "from '../../control-plane/execution/work-finalization-service'");
|
|
773
|
+
requireText('src/runtime/gateway/mcp/execution-tools.ts', "from '../../control-plane/execution/work-preparation-service'");
|
|
774
|
+
requireText('src/runtime/gateway/mcp/execution-tools.ts', "from '../../control-plane/execution/work-operation-service'");
|
|
775
|
+
requireText('src/runtime/gateway/mcp/execution-tools.ts', 'Compatibility exports: implementation authority lives in control-plane execution.');
|
|
776
|
+
requireText('src/runtime/gateway/mcp/execution-tools.ts', 'resetFinalizationStagesForRequest,');
|
|
777
|
+
requireText('src/runtime/gateway/mcp/execution-tools.ts', 'selectDefaultWorkValidationChecks');
|
|
778
|
+
requireText('src/runtime/gateway/mcp/runtime-tools.ts', "callExecutionTool(ctx, 'work_finalize'");
|
|
779
|
+
forbid(
|
|
780
|
+
'src/runtime/gateway/mcp/runtime-tools.ts',
|
|
781
|
+
/repositoryGit(?:Commit|FinishWorkflow|MergeBranch|DeleteBranch|RebaseOnto)\s*\(/,
|
|
782
|
+
'rh_work facade finalization must delegate to the canonical Work finalization application service instead of performing Git delivery itself',
|
|
783
|
+
);
|
|
784
|
+
forbid(
|
|
785
|
+
'src/runtime/gateway/mcp/execution-tools.ts',
|
|
786
|
+
/function\s+finalizeWork\s*\(/,
|
|
787
|
+
'MCP execution transport must delegate Work finalization to the control-plane application service',
|
|
788
|
+
);
|
|
789
|
+
forbid(
|
|
539
790
|
'src/runtime/gateway/mcp/execution-tools.ts',
|
|
540
|
-
|
|
541
|
-
'
|
|
791
|
+
/function\s+(?:prepareWork|adoptExistingWorkHead)\s*\(/,
|
|
792
|
+
'MCP execution transport must delegate Work preparation/adoption to the control-plane application service',
|
|
793
|
+
);
|
|
794
|
+
forbid(
|
|
795
|
+
'src/runtime/gateway/mcp/execution-tools.ts',
|
|
796
|
+
/function\s+(?:executeWork|validateWork)\s*\(/,
|
|
797
|
+
'MCP execution transport must delegate Work execute/validate operations to the control-plane application service',
|
|
798
|
+
);
|
|
799
|
+
forbid(
|
|
800
|
+
'src/runtime/gateway/mcp/execution-tools.ts',
|
|
801
|
+
/(?:ensureManagedWorkspace|admitPreparedRepositoryWorkContract)\s*\(/,
|
|
802
|
+
'MCP execution transport must not own managed-workspace or WorkContract preparation admission',
|
|
803
|
+
);
|
|
804
|
+
requireText('src/runtime/control-plane/execution/work-preparation-service.ts', 'export function prepareWork(');
|
|
805
|
+
requireText('src/runtime/control-plane/execution/work-preparation-service.ts', 'function adoptExistingWorkHead(');
|
|
806
|
+
requireText('src/runtime/control-plane/execution/work-operation-service.ts', 'export async function executeWork(');
|
|
807
|
+
requireText('src/runtime/control-plane/execution/work-operation-service.ts', 'export async function validateWork(');
|
|
808
|
+
requireText('src/runtime/control-plane/execution/work-finalization-service.ts', 'resetFinalizationStagesForRequest');
|
|
809
|
+
requireText('src/runtime/control-plane/execution/work-finalization-service.ts', 'finalizationComplete');
|
|
810
|
+
forbidBetween(
|
|
811
|
+
'src/runtime/control-plane/execution/work-finalization-service.ts',
|
|
812
|
+
'export async function finalizeWork(',
|
|
813
|
+
'// WORK_FINALIZATION_SERVICE_END',
|
|
542
814
|
/withControllerLock\([\s\S]{0,900}?(?:repositoryGitCommit|repositoryGitFinishWorkflow|runCleanup|repositoryGitDeleteBranch)/,
|
|
543
|
-
'
|
|
815
|
+
'Work finalization must not hold the controller lock while committing, merging, deleting branches, or removing worktrees',
|
|
544
816
|
);
|
|
545
817
|
requireText('src/runtime/workflow/schedules/types.ts', "'repository-event'");
|
|
546
818
|
requireText('src/runtime/workflow/schedules/types.ts', "'dependency-checkpoint'");
|
|
547
819
|
requireText('src/runtime/workflow/schedules/store.ts', 'saveScheduleDecision');
|
|
548
820
|
requireText('src/runtime/workflow/schedules/settlement.ts', 'backoffMinutes');
|
|
549
|
-
requireText('src/runtime/workflow/portfolio/store.ts', "'workflows.json'");
|
|
550
|
-
requireText('src/runtime/workflow/portfolio/store.ts', 'PORTFOLIO_DEPENDENCY_CYCLE');
|
|
551
|
-
requireText('src/runtime/workflow/findings/store.ts', 'observationCount');
|
|
552
821
|
requireText('src/runtime/release/release-gate.ts', 'releaseReady');
|
|
553
822
|
requireText('src/cli/mcp/transports/http.ts', "'/ready'");
|
|
554
823
|
requireText('src/cli/mcp/transports/http.ts', "'/repos/:repoId/health'");
|
|
@@ -568,12 +837,13 @@ for (const path of [
|
|
|
568
837
|
forbid(path, /\b(?:spawnSync|execSync|execFileSync)\s*\(/, 'the non-blocking Gateway/Controller hot-path rule');
|
|
569
838
|
}
|
|
570
839
|
|
|
571
|
-
requireText('
|
|
572
|
-
requireText('
|
|
573
|
-
requireText('
|
|
574
|
-
requireText('
|
|
575
|
-
requireText('docs/architecture/
|
|
576
|
-
requireText('docs/architecture/
|
|
840
|
+
requireText('scripts/run-governed-gate.ts', "label: 'source duplication'");
|
|
841
|
+
requireText('scripts/run-governed-gate.ts', "args: ['scripts/check-source-duplication.mjs']");
|
|
842
|
+
requireText('scripts/run-governed-gate.ts', "label: 'controller UI bundle'");
|
|
843
|
+
requireText('scripts/run-governed-gate.ts', "args: ['run', 'check:controller-ui']");
|
|
844
|
+
requireText('docs/architecture/CURRENT.md', '## State ownership');
|
|
845
|
+
requireText('docs/architecture/CURRENT.md', '## Runtime and MCP boundary');
|
|
846
|
+
requireText('docs/architecture/CURRENT.md', '## Testing and verification');
|
|
577
847
|
requireText('plans/README.md', 'not the runtime execution queue');
|
|
578
848
|
if (text('src/cli/mcp/tools.ts').split(/\r?\n/).length > 40) failures.push('src/cli/mcp/tools.ts must remain a thin compatibility facade');
|
|
579
849
|
|