@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,206 +0,0 @@
|
|
|
1
|
-
# Personal Assistant Plugin Baseline
|
|
2
|
-
|
|
3
|
-
> Status: **Runtime Authority**
|
|
4
|
-
|
|
5
|
-
This document defines the concrete baseline for the "personal assistant plugin"
|
|
6
|
-
surface inside the current Forge Controller Runtime. It exists to stop
|
|
7
|
-
"assistant", "plugin", "Gmail", and "Calendar" from being treated as one
|
|
8
|
-
undifferentiated feature set.
|
|
9
|
-
|
|
10
|
-
## 1. Current implementation boundary
|
|
11
|
-
|
|
12
|
-
Current implementation:
|
|
13
|
-
|
|
14
|
-
- Forge already implements a durable Controller Runtime, not a generic
|
|
15
|
-
personal-app plugin host.
|
|
16
|
-
- First-class persisted plugins in source are the optional GitHub plugin under
|
|
17
|
-
`src/cli/github/plugin.ts` plus Gmail, Google Calendar, and Google Tasks
|
|
18
|
-
adapters under `src/runtime/plugins/`, all surfaced through Controller CLI,
|
|
19
|
-
Local Bridge APIs, and MCP compatibility tools.
|
|
20
|
-
- ChatGPT browser automation exists under `src/cli/chatgpt-browser/` and the
|
|
21
|
-
runtime control plane. It is an execution channel, not a plugin
|
|
22
|
-
registry entry.
|
|
23
|
-
- Calendar support exists both as a runtime Schedule trigger under
|
|
24
|
-
`src/runtime/workflow/schedules/` and as a separate Google Calendar account
|
|
25
|
-
adapter under `src/runtime/plugins/`.
|
|
26
|
-
- Gmail, Calendar, and Tasks live-provider credentials are environment-only and
|
|
27
|
-
are never persisted by this repository.
|
|
28
|
-
|
|
29
|
-
Architecture requirement:
|
|
30
|
-
|
|
31
|
-
- Docs and product language must distinguish repo-owned runtime capabilities,
|
|
32
|
-
optional in-repo plugins with persisted config, and external Connector/app
|
|
33
|
-
capabilities owned outside this repository.
|
|
34
|
-
|
|
35
|
-
Compatibility rule:
|
|
36
|
-
|
|
37
|
-
- Existing GitHub plugin behavior, runtime tool fingerprints, and packaging
|
|
38
|
-
surfaces remain stable while assistant-oriented capabilities are clarified.
|
|
39
|
-
|
|
40
|
-
## 2. Concrete topology
|
|
41
|
-
|
|
42
|
-
```text
|
|
43
|
-
ChatGPT / Local UI / CLI
|
|
44
|
-
-> MCP Gateway + Local Bridge
|
|
45
|
-
-> Controller Runtime
|
|
46
|
-
-> durable Jobs / Goal/Work / schedules / evidence
|
|
47
|
-
-> optional provider adapters
|
|
48
|
-
-> GitHub plugin (implemented)
|
|
49
|
-
-> Gmail adapter (implemented)
|
|
50
|
-
-> Google Calendar adapter (implemented)
|
|
51
|
-
-> Google Tasks adapter (implemented)
|
|
52
|
-
-> ChatGPT browser channel (implemented)
|
|
53
|
-
-> Calendar trigger engine (implemented, separate from account adapter)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
The runtime already owns admission, persistence, scheduling, isolation, and
|
|
57
|
-
evidence. "Personal assistant" behavior must therefore be modeled as bounded
|
|
58
|
-
operations on top of that runtime, not as a second orchestrator.
|
|
59
|
-
|
|
60
|
-
## 3. Capability matrix
|
|
61
|
-
|
|
62
|
-
| Capability | Source of truth | Persistence and boundary | External side effect | Status |
|
|
63
|
-
| --- | --- | --- | --- | --- |
|
|
64
|
-
| GitHub Issue/Project sync | `src/cli/github/plugin.ts`, `src/cli/local-bridge/server.ts` | `.Forge/plugins/github.json` plus repository registry mapping | GitHub issue/project mutation | Implemented |
|
|
65
|
-
| Durable assistant work submission | `src/runtime/gateway/mcp/runtime-tools.ts`, `src/runtime/execution/jobs/` | Controller Home `execution-jobs/`, events, artifacts, projections | Repository-local work and approved provider actions | Implemented |
|
|
66
|
-
| Calendar time-based triggering | `src/runtime/workflow/schedules/store.ts`, `engine.ts` | Schedule, Decision, Occurrence records | Launches bounded runtime Jobs only | Implemented |
|
|
67
|
-
| Calendar account read/write | `src/runtime/plugins/google-calendar-adapter.ts` | `.Forge/plugins/google-calendar.json`, derived manifest/index, env-only credentials | Google Calendar event read/write | Implemented |
|
|
68
|
-
| Gmail mailbox read/write | `src/runtime/plugins/gmail-adapter.ts` | `.Forge/plugins/gmail.json`, derived manifest/index, env-only credentials | Gmail read/send/trash | Implemented |
|
|
69
|
-
| Google Tasks/reminder read/write | `src/runtime/plugins/google-tasks-adapter.ts` | `.Forge/plugins/google-tasks.json`, derived manifest/index, env-only credentials | Google Tasks list/task mutation | Implemented |
|
|
70
|
-
| Generic plugin manifest/registry for personal apps | `src/runtime/plugins/`, `src/runtime/gateway/mcp/runtime-tools.ts`, `src/cli/local-bridge/server.ts` | Controller Home `plugins/` manifest/index projections derived from existing authority | Typed plugin action dispatch into durable Jobs | Implemented |
|
|
71
|
-
|
|
72
|
-
## 4. Packaging baseline
|
|
73
|
-
|
|
74
|
-
Current implementation:
|
|
75
|
-
|
|
76
|
-
- `package.json` already ships `docs/architecture/`, runtime source, controller
|
|
77
|
-
verification script, and ChatGPT bridge skills as part of the public package.
|
|
78
|
-
- `scripts/package-source-archive.sh` builds a portable archive from the working
|
|
79
|
-
tree while rejecting symlinks and excluding runtime state, Git metadata, and
|
|
80
|
-
secrets.
|
|
81
|
-
|
|
82
|
-
Architecture requirement:
|
|
83
|
-
|
|
84
|
-
- Assistant/plugin documentation must live under tracked docs already included in
|
|
85
|
-
the public package; introducing a new baseline doc must not require shipping
|
|
86
|
-
ignored runtime state or auth material.
|
|
87
|
-
|
|
88
|
-
Compatibility rule:
|
|
89
|
-
|
|
90
|
-
- Packaging must continue to exclude `.ai/` runtime state, local auth, tokens,
|
|
91
|
-
and browser profile data even when assistant-oriented features expand.
|
|
92
|
-
|
|
93
|
-
## 5. Threat model
|
|
94
|
-
|
|
95
|
-
| Asset or boundary | Primary threat | Current controls | Remaining gap |
|
|
96
|
-
| --- | --- | --- | --- |
|
|
97
|
-
| Public `/mcp` endpoint and local Gateway | Remote callers trigger long or unsafe work through request lifetime coupling | Thin Gateway, durable acknowledgement, loopback local UI, auth, bounded toolsets, readiness checks | Tool-level capability descriptions are clearer than provider-level assistant semantics |
|
|
98
|
-
| Controller Home runtime state | Replayed or stale ownership mutates state after disconnect or restart | request-id dedupe, Leases, fencing, Operation Receipts, reconciliation, append-only events | Additional adapters beyond GitHub still need the same registry contract |
|
|
99
|
-
| GitHub plugin config and repo mapping | Wrong repository/project mapping or silent remote mutation | explicit config, readiness probe, derived plugin manifests, action-scoped confirmation, warnings on remote drift | Google adapters use separate config authority and do not reuse GitHub registry mapping |
|
|
100
|
-
| Browser-based ChatGPT automation | Session leakage, default-profile misuse, invisible side effects | dedicated profile guidance, CDP default-profile block, bounded capture, opt-in workflow, evidence records | Browser channel is still an execution transport, not a typed assistant-provider contract |
|
|
101
|
-
| Gmail/Calendar/Tasks adapters | Overbroad mailbox/calendar/task scope and opaque side effects | read/write scope separation, action-scoped confirmation, env-only credentials, mock/live provider split, durable audit events, structured provider errors | No OAuth refresh/token broker is implemented; operators must supply short-lived access tokens outside repo state |
|
|
102
|
-
| Local visual controller | Exposure beyond loopback or secret leakage in logs | loopback bind enforcement, token auth, bounded snapshots, redaction paths | Personal-app views do not exist yet, so no specialized redaction policy is defined |
|
|
103
|
-
|
|
104
|
-
## 6. Migration plan
|
|
105
|
-
|
|
106
|
-
### Phase A — Name the real provider classes
|
|
107
|
-
|
|
108
|
-
- Keep "GitHub plugin", "ChatGPT browser channel", and "Schedule trigger"
|
|
109
|
-
separate in docs and CLI help.
|
|
110
|
-
- Describe Gmail, Google Calendar, and Google Tasks as implemented runtime
|
|
111
|
-
plugins only through the generic plugin contract; do not present them as
|
|
112
|
-
browser-channel or schedule-engine features.
|
|
113
|
-
|
|
114
|
-
### Phase B — Add a typed assistant-provider contract
|
|
115
|
-
|
|
116
|
-
Current implementation:
|
|
117
|
-
|
|
118
|
-
- The runtime now exposes a generic personal-assistant plugin contract with:
|
|
119
|
-
versioned manifests, derived registry/discovery, lifecycle/health, typed
|
|
120
|
-
action schemas, permission scopes, confirmation policies, idempotent durable
|
|
121
|
-
action dispatch, cancellation/timeout support through `ExecutionJob`, and
|
|
122
|
-
plugin audit events in the runtime ledger.
|
|
123
|
-
- The first adapter is GitHub. Its configuration authority remains the existing
|
|
124
|
-
repository registry plus `.Forge/plugins/github.json`; the generic
|
|
125
|
-
manifest is a derived projection, not a second source of truth.
|
|
126
|
-
|
|
127
|
-
- Introduce one provider contract for personal-app adapters with capability id,
|
|
128
|
-
read/write scope declaration, persisted config shape, readiness probe,
|
|
129
|
-
audit/evidence schema, env-only credential rule, and explicit
|
|
130
|
-
external-side-effect classification.
|
|
131
|
-
- Reuse existing Controller authorization, durable Job, and evidence layers
|
|
132
|
-
instead of bypassing them.
|
|
133
|
-
|
|
134
|
-
### Phase C — Run Gmail, Calendar, and Tasks adapters only behind the contract
|
|
135
|
-
|
|
136
|
-
- Gmail is implemented as a bounded mailbox adapter with list/read, draft,
|
|
137
|
-
send, and trash actions.
|
|
138
|
-
- Calendar is implemented as an account adapter distinct from the existing
|
|
139
|
-
time-trigger engine, with list/read, create, reschedule, and cancel actions.
|
|
140
|
-
- Tasks is implemented as a reminder/task adapter with list/create/update,
|
|
141
|
-
reschedule, complete, and delete actions.
|
|
142
|
-
- All three emit provider/action audit events, structured provider failures, and
|
|
143
|
-
integrate with existing approval and release boundaries.
|
|
144
|
-
|
|
145
|
-
### Phase D — Preserve public package and source-archive invariants
|
|
146
|
-
|
|
147
|
-
- Keep docs, scripts, and public source packaged.
|
|
148
|
-
- Keep runtime state, auth material, browser profiles, and local Connector
|
|
149
|
-
secrets excluded from npm and source archives.
|
|
150
|
-
- Extend focused checks before any new assistant provider becomes part of the
|
|
151
|
-
public contract.
|
|
152
|
-
|
|
153
|
-
## 7. Delivery conclusion
|
|
154
|
-
|
|
155
|
-
The current source-aligned assistant baseline is:
|
|
156
|
-
|
|
157
|
-
- Controller Runtime plus durable Jobs/Goal/Work/schedules are the assistant
|
|
158
|
-
execution substrate.
|
|
159
|
-
- GitHub, Gmail, Google Calendar, and Google Tasks are implemented persisted
|
|
160
|
-
plugin adapters behind the generic plugin runtime contract.
|
|
161
|
-
- Generic plugin discovery, typed action execution, confirmation policy and
|
|
162
|
-
audit events are implemented through the runtime `plugins/` layer.
|
|
163
|
-
- ChatGPT browser automation is an opt-in execution channel.
|
|
164
|
-
- Calendar exists both as a scheduling primitive and as a separate Google
|
|
165
|
-
Calendar account adapter.
|
|
166
|
-
- Live Google credentials remain environment-only; this repo persists plugin
|
|
167
|
-
config and derived health, not tokens.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
## 8. Bundled first-party and managed-provider boundary
|
|
171
|
-
|
|
172
|
-
The current plugin baseline also includes a controller-scoped `desktop` plugin.
|
|
173
|
-
It establishes the boundary between bundled first-party capability modules and
|
|
174
|
-
managed native providers without introducing a plugin marketplace:
|
|
175
|
-
|
|
176
|
-
- Core Controller authority remains compiled into Forge: admission,
|
|
177
|
-
authorization, resource claims, receipts, audit events, Work, Process, Git,
|
|
178
|
-
Runtime Root, recovery, and plugin discovery are not replaceable plugins.
|
|
179
|
-
- First-party domain capabilities remain bundled with the Forge package
|
|
180
|
-
and are registered through `src/runtime/plugins/first-party-registry.ts`.
|
|
181
|
-
- Desktop is the first bundled capability whose domain implementation executes
|
|
182
|
-
through the generic `managed-process-adapter.ts` backend.
|
|
183
|
-
- The helper is package-owned and resolved from the active installation. Users do
|
|
184
|
-
not configure an absolute executable path, socket, or registration descriptor.
|
|
185
|
-
- The initial transport is a one-shot versioned JSON-lines stdio protocol with
|
|
186
|
-
handshake, request identity, capability negotiation, bounded input/output,
|
|
187
|
-
timeout, cancellation, crash cleanup, and structured errors.
|
|
188
|
-
- Existing `list_plugins`, `get_plugin`, and `plugin_action_execute` tools remain
|
|
189
|
-
the only public plugin entry points. This does not imply dynamic MCP schema
|
|
190
|
-
loading.
|
|
191
|
-
|
|
192
|
-
Desktop configuration authority is
|
|
193
|
-
`<controller-home>/system/desktop/config.json`. The manifest and registry index are
|
|
194
|
-
derived projections, not a second source of truth. Current Desktop actions are
|
|
195
|
-
limited to enable/disable, live status, frontmost-application observation through
|
|
196
|
-
AppKit `NSWorkspace`, and explicitly authorized application launch. Screen capture,
|
|
197
|
-
clicks, coordinates, keyboard input, accessibility-tree access, arbitrary shell,
|
|
198
|
-
plugin downloads, and marketplace installation are intentionally absent.
|
|
199
|
-
|
|
200
|
-
The managed helper threat model is process compromise, hidden native side effects,
|
|
201
|
-
permission overclaim, protocol confusion, and unbounded output. Current controls
|
|
202
|
-
are direct no-shell spawn, package-owned helper resolution, minimal environment,
|
|
203
|
-
versioned handshake, required-capability matching, bounded diagnostics, timeout and
|
|
204
|
-
AbortSignal handling, SIGTERM/SIGKILL cleanup, read-only observation, and typed
|
|
205
|
-
application selectors. Any future interaction or screen-observation capability
|
|
206
|
-
requires a separate permission model and fault-injection review.
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# Repository access modes
|
|
2
|
-
|
|
3
|
-
Forge keeps two user-selectable execution policies:
|
|
4
|
-
|
|
5
|
-
- `full_access` — the default for a personal local controller. Normal work inside the selected repository can read, edit, run bounded local commands and checks, and perform local Git operations without repeated approval prompts.
|
|
6
|
-
- `request` — keeps the same MCP tool schema, but asks before elevated local side effects.
|
|
7
|
-
|
|
8
|
-
Access mode controls **execution approval only**. It never changes `tools/list`, never hides Direct Edit, Git, Agent, iOS, browser, plugin, or recovery tools, and never requires an MCP restart or ChatGPT reconnect.
|
|
9
|
-
|
|
10
|
-
## Hard safety boundary
|
|
11
|
-
|
|
12
|
-
Neither mode bypasses the controller's hard boundaries. These remain separately authorized or denied:
|
|
13
|
-
|
|
14
|
-
- paths outside the selected repository;
|
|
15
|
-
- external network effects;
|
|
16
|
-
- Git push and other remote writes;
|
|
17
|
-
- deployments, publishing, destructive cleanup, and irreversible operations;
|
|
18
|
-
- raw secrets, tokens, private keys, and credentials;
|
|
19
|
-
- controller policy bypass.
|
|
20
|
-
|
|
21
|
-
`full_access` is therefore repository-local autonomy, not unrestricted host access.
|
|
22
|
-
|
|
23
|
-
## Storage and defaults
|
|
24
|
-
|
|
25
|
-
The repository policy is stored under controller-owned state:
|
|
26
|
-
|
|
27
|
-
```text
|
|
28
|
-
<controllerHome>/repositories/<repoId>/controller/access-policy.json
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
The setting is not written into the repository. When no policy file exists, the personal-controller default is `full_access` without creating a file. A malformed existing policy fails closed to `request`.
|
|
32
|
-
|
|
33
|
-
Each durable `WorkContract` captures the effective `accessMode` in `constraints` when work starts. Changing the repository default affects new work only; an existing task keeps its immutable snapshot.
|
|
34
|
-
|
|
35
|
-
## MCP and Local Controller UI
|
|
36
|
-
|
|
37
|
-
The stable MCP schema always includes:
|
|
38
|
-
|
|
39
|
-
- `rh_access`;
|
|
40
|
-
- `repository_access_get`;
|
|
41
|
-
- `repository_access_preview`;
|
|
42
|
-
- `repository_access_set`.
|
|
43
|
-
|
|
44
|
-
Changing a mode requires explicit authorization:
|
|
45
|
-
|
|
46
|
-
```json
|
|
47
|
-
{
|
|
48
|
-
"operation": "set",
|
|
49
|
-
"mode": "request",
|
|
50
|
-
"confirm_authorization": true
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
No magic confirmation phrase is required for repository-local Full Access. The result explicitly reports:
|
|
55
|
-
|
|
56
|
-
```json
|
|
57
|
-
{
|
|
58
|
-
"reconnectRequired": false,
|
|
59
|
-
"schemaRefreshRequired": false,
|
|
60
|
-
"toolSchemaStable": true
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
The Local Controller UI uses the same controllerHome policy and explains that switching mode changes approval behavior only.
|
|
65
|
-
|
|
66
|
-
## Per-work override
|
|
67
|
-
|
|
68
|
-
`rh_work` may override the repository default for one work item:
|
|
69
|
-
|
|
70
|
-
```json
|
|
71
|
-
{
|
|
72
|
-
"operation": "start",
|
|
73
|
-
"objective": "Refactor controller routing",
|
|
74
|
-
"constraints": {
|
|
75
|
-
"accessMode": "request",
|
|
76
|
-
"workspaceMode": "current"
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Both camelCase and snake_case are accepted inside constraints. The effective mode is captured in the created WorkContract.
|
|
82
|
-
|
|
83
|
-
## Decision matrix
|
|
84
|
-
|
|
85
|
-
| Effect | Request | Full Access |
|
|
86
|
-
| --- | --- | --- |
|
|
87
|
-
| Read selected repository | allow | allow |
|
|
88
|
-
| Direct Edit / safe patch | allow | allow |
|
|
89
|
-
| General repository write | request | allow |
|
|
90
|
-
| Repository-scoped local command | request | allow |
|
|
91
|
-
| Dependency change | request | allow |
|
|
92
|
-
| Local Git write | request | allow |
|
|
93
|
-
| Registered checks | allow | allow |
|
|
94
|
-
| External network | request | request |
|
|
95
|
-
| Remote write / push | request | request |
|
|
96
|
-
| Destructive effect | explicit approval | explicit approval |
|
|
97
|
-
| Raw secrets or credentials | deny | deny |
|
|
98
|
-
| Outside-repository path | explicit grant | explicit grant |
|
|
99
|
-
|
|
100
|
-
## Compatibility
|
|
101
|
-
|
|
102
|
-
The legacy `core`, `advanced`, and `full` labels remain accepted. `core` and `advanced` resolve to the same stable, repair-capable schema. `full` exposes every historical compatibility tool and is intended only for legacy integrations and deep diagnostics.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Route Policy Authority
|
|
2
|
-
|
|
3
|
-
Forge has one replayable routing authority: `src/runtime/control-plane/routing/route-policy.ts`.
|
|
4
|
-
|
|
5
|
-
`decideRoute(RoutePolicyInput)` is a pure function. It applies hard constraints in lexical order: policy and authorization, destructive or remote effects, recovery and isolation, workspace state, explicit provider preference, then efficiency. It does not use dynamic weights.
|
|
6
|
-
|
|
7
|
-
The decision records execution mode, executor kind, Work requirement, isolation, recovery, approval/handoff state, reasons, a stable input fingerprint, and a policy version. CLI `assessWorkMode`, Facade `selectExecutionMode`, and Goal Loop `routeExecutor` are compatibility adapters only; they may normalize legacy fields but cannot retain thresholds or fallback rules.
|
|
8
|
-
|
|
9
|
-
Plan is optional reasoning evidence. It is created only for explicit planning, frozen scope, external approval, independent deliverables, or irreversible strategy review. Plan does not gate ordinary complex execution and is not a mutable execution state machine. Work remains the only execution contract for every mutation.
|
|
10
|
-
|
|
11
|
-
Direct mutation stays on Direct Control but creates lightweight Work lineage. Goal Workloop uses the same Work contract with durable recovery and optional isolation. EditSession stores only a bound execution identity and post-diff assurance; it never owns lifecycle.
|
|
12
|
-
|
|
13
|
-
Dirty workspaces are never adopted implicitly. A mutation must use a clean/isolated checkout or a separate exact reviewed adoption path. After a real diff exists, assurance is recalculated from changed paths and line count; protected paths can expand checks and require approval before finalization.
|
|
14
|
-
|
|
15
|
-
Test checkpoint reuse is content-addressed and must expose provenance: checkpoint key, digests, completion time, and evidence path. `--no-cache` remains the deterministic force-execution path.
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# Route and Session Concurrency
|
|
2
|
-
|
|
3
|
-
Status: current architecture
|
|
4
|
-
|
|
5
|
-
This document records the invariants implemented for `ISS-20260803-90E84B` / `PLAN-ROUTE-SESSION-CONCURRENCY`. Runtime state in the controller-home SQLite control plane remains authoritative. Issue and Task files are historical/import/export artifacts and are not runtime write authority.
|
|
6
|
-
|
|
7
|
-
## Identity and projection isolation
|
|
8
|
-
|
|
9
|
-
Every context or projection result is accepted only when its immutable identity agrees with the active request identity. The cache/projection identity includes:
|
|
10
|
-
|
|
11
|
-
- repository ID;
|
|
12
|
-
- checkout ID and worktree identity;
|
|
13
|
-
- observed Git source identity, including HEAD/source revision;
|
|
14
|
-
- projection identity and generation.
|
|
15
|
-
|
|
16
|
-
A late result from a previous repository, checkout, source identity, branch observation, or projection generation is discarded. Payload identity and `sourceIdentity` disagreement fails closed. Session default repository state never overrides an explicit repository ID. Registry branch data is advisory; Git HEAD observation is authoritative for source fencing.
|
|
17
|
-
|
|
18
|
-
The T1 source-identity fencing introduced before this change remains mandatory. No shared mutable cache was added; Gateway contention metrics use bounded process-local aggregation and hashed low-cardinality dimensions only.
|
|
19
|
-
|
|
20
|
-
## Typed diagnostic runtime resolution
|
|
21
|
-
|
|
22
|
-
All persisted diagnostic/check launch paths use one typed runtime resolver. The resolver returns:
|
|
23
|
-
|
|
24
|
-
- executable;
|
|
25
|
-
- argv;
|
|
26
|
-
- runtime kind;
|
|
27
|
-
- source revision;
|
|
28
|
-
- immutable-release flag;
|
|
29
|
-
- a diagnostic explanation.
|
|
30
|
-
|
|
31
|
-
Runtime kinds are `compiled_bun_release`, `bun_source`, `node_source`, and `package_launcher`. Runtime identity is established by an explicit runtime kind, an immutable standalone marker, the Bun virtual filesystem identity, an explicit package/global launcher entry, or the Bun/Node executable identity. File extensions are not used to guess launch semantics.
|
|
32
|
-
|
|
33
|
-
Package/global shims and paths containing spaces remain separate argv entries. A package launcher requires an explicit launcher entry. Source and compiled runtimes therefore use the same resolver contract instead of separate argv fallback chains.
|
|
34
|
-
|
|
35
|
-
If runtime identity cannot be resolved, the controller creates a short persistent Process that exits terminally and reports `DIAGNOSTIC_RUNTIME_UNRESOLVED`. The request cannot remain `running` or `validating` after resolver failure.
|
|
36
|
-
|
|
37
|
-
## Gateway bounded-latency boundary
|
|
38
|
-
|
|
39
|
-
Gateway synchronous work is limited to bounded identity resolution, registry/control-plane reads, routing, and admission. Heavy operations are Process-managed:
|
|
40
|
-
|
|
41
|
-
- workflow watchdog;
|
|
42
|
-
- runtime maintenance status;
|
|
43
|
-
- cleanup preview;
|
|
44
|
-
- runtime performance diagnostics, including process and temporary-directory scans;
|
|
45
|
-
- capability recovery probe;
|
|
46
|
-
- persisted check execution.
|
|
47
|
-
|
|
48
|
-
The Gateway waits at most five seconds for an inline diagnostic result. The Process execution timeout remains independent. After the interactive budget expires, the response contains the durable Process reference and polling pointers. Process status, cancellation, timeout, terminal receipts, and restart reconciliation remain persisted and truthful.
|
|
49
|
-
|
|
50
|
-
A diagnostic for one repository cannot occupy another repository session's request path. The routing regression starts a delayed Process for repository A while repository B continues a bounded board read.
|
|
51
|
-
|
|
52
|
-
## Authoritative checkout mutation lease
|
|
53
|
-
|
|
54
|
-
Direct Edit and durable execution use the same execution lease store and conflict rules. Mutation claims are explicitly scoped by repository and checkout; cwd, session defaults, and stale registry branch values cannot create an unscoped mutation owner.
|
|
55
|
-
|
|
56
|
-
The authoritative owner identity contains:
|
|
57
|
-
|
|
58
|
-
- repository ID;
|
|
59
|
-
- checkout ID;
|
|
60
|
-
- worktree ID;
|
|
61
|
-
- branch;
|
|
62
|
-
- principal ID;
|
|
63
|
-
- controller instance ID;
|
|
64
|
-
- controller generation.
|
|
65
|
-
|
|
66
|
-
A SHA-256 owner identity digest is persisted with every lease and is included in renew, assert, rollback, and release fencing. A stale controller instance or generation cannot renew or release a live owner's lease. Terminal, cancelled, failed, timeout, snapshot-failure, and restart cleanup paths release only leases whose owner, lease ID, fencing token, and identity digest match.
|
|
67
|
-
|
|
68
|
-
Conflict semantics are checkout-local:
|
|
69
|
-
|
|
70
|
-
- two writers for the same checkout serialize;
|
|
71
|
-
- different checkouts in the same repository can proceed in parallel;
|
|
72
|
-
- different repositories can proceed in parallel;
|
|
73
|
-
- read-only requests do not acquire the mutation lease.
|
|
74
|
-
|
|
75
|
-
## Bounded lock acquisition and metrics
|
|
76
|
-
|
|
77
|
-
Gateway-reachable controller locks never sleep synchronously. `tryAcquireControllerLock` performs one acquisition attempt. The compatibility synchronous API returns `LOCK_HELD` immediately on contention, even when an obsolete caller supplies a long wait budget. The asynchronous API yields to the event loop and caps its total wait at five seconds.
|
|
78
|
-
|
|
79
|
-
Metrics record wall-clock, queue, lock wait, storage, Git observation, worker/process, projection, execution, and serialization phases. Aggregation dimensions are operation class plus hashed repository/checkout buckets. Full paths, secrets, request payloads, principals, branch names, and user input are not recorded. Aggregation is bounded to 256 buckets and 512 samples per bucket.
|
|
80
|
-
|
|
81
|
-
## Operational consequences
|
|
82
|
-
|
|
83
|
-
A contention response is an admission result, not a hidden blocking wait. Callers may retry durably or hand off to a Process/worker. A persistent Process reference is the continuation point for heavy diagnostics and checks. Restart recovery reads persisted state and never reconstructs ownership from cwd or session defaults.
|
|
84
|
-
|
|
85
|
-
The reproducible capacity baseline and threshold derivation are documented in `docs/operations/route-session-concurrency-baseline.md` and materialized as `docs/operations/route-session-concurrency-baseline.json`.
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
# Canonical Single Runtime Architecture and Seven-Phase Replacement
|
|
2
|
-
|
|
3
|
-
> **Status: Runtime Authority — Approved Target Architecture**
|
|
4
|
-
>
|
|
5
|
-
> **Scope:** Forge local Runtime process ownership, readiness, release/rollback, Worker fencing, and deletion of legacy lifecycle paths.
|
|
6
|
-
>
|
|
7
|
-
> **Current implementation status:** source convergence complete. The Canonical Runtime is the only core lifecycle architecture; Supervisor, independent Daemon/Ingress, runtime slots, bootstrap compatibility authority, restart coordinator, and component lifecycle scripts are deleted. Live activation of a release remains a separate explicitly authorized operational action.
|
|
8
|
-
|
|
9
|
-
## 1. Non-negotiable end state
|
|
10
|
-
|
|
11
|
-
Forge converges to:
|
|
12
|
-
|
|
13
|
-
```text
|
|
14
|
-
one local MCP application
|
|
15
|
-
one active Runtime
|
|
16
|
-
one root lifecycle owner
|
|
17
|
-
one complete release
|
|
18
|
-
one whole-Runtime readiness result
|
|
19
|
-
one whole-Runtime publish and rollback unit
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Gateway Adapter, Controller Services, Scheduler, SQLite, MCP Transport, and Worker Manager retain module boundaries for code organization. They are not independent deployments, generations, lifecycle owners, readiness authorities, or rollback units.
|
|
23
|
-
|
|
24
|
-
The only supported core process topology is:
|
|
25
|
-
|
|
26
|
-
```text
|
|
27
|
-
forge-runtime
|
|
28
|
-
├─ MCP Transport in process
|
|
29
|
-
├─ Gateway Adapter in process
|
|
30
|
-
├─ Controller Services in process
|
|
31
|
-
├─ Scheduler in process
|
|
32
|
-
├─ SQLite in process / library boundary
|
|
33
|
-
├─ Worker processes bounded child execution units
|
|
34
|
-
└─ Helper processes bounded, request-owned execution units
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
External tunnels are optional transports. They may connect to the Runtime endpoint, but they cannot start, stop, restart, adopt, publish, roll back, or determine readiness for the Runtime.
|
|
38
|
-
|
|
39
|
-
## 2. Target Runtime
|
|
40
|
-
|
|
41
|
-
`CanonicalForgeRuntime` is the sole root lifecycle owner. It performs one ordered startup, one ordered shutdown, and one fatal-failure path for the complete application.
|
|
42
|
-
|
|
43
|
-
After acquiring the single Runtime ownership claim and confirming the selected whole-release authority, startup collects the exact configured Runtime source identity and atomically rotates `system/runtime-generation.json`. This happens before the write claim, Controller Services, SQLite admission, Scheduler, Workers, or MCP Transport. Source collection or snapshot persistence failure is a release-coherence startup failure; startup must stop and release ownership rather than serve with an unknown source baseline.
|
|
44
|
-
|
|
45
|
-
It alone may:
|
|
46
|
-
|
|
47
|
-
- acquire the Controller Home Runtime ownership claim;
|
|
48
|
-
- initialize SQLite and Controller Services;
|
|
49
|
-
- start the in-process Scheduler;
|
|
50
|
-
- create the Gateway Adapter and MCP Transport;
|
|
51
|
-
- start and fence Workers through the Scheduler/Worker Manager boundary;
|
|
52
|
-
- publish the single Runtime readiness result;
|
|
53
|
-
- stop the complete Runtime after a fatal core-module failure.
|
|
54
|
-
|
|
55
|
-
No core module may create a KeepAlive loop, detached restart coordinator, secondary generation, child lifecycle supervisor, component release pointer, or component rollback operation. The canonical `runtime` inspection surface does not own module lifecycle. The OS service manager owns one `forge-runtime` root service, while standalone Recovery may restart that complete service or perform an offline previous whole-release recovery under one cross-process lock.
|
|
56
|
-
|
|
57
|
-
## 3. Seven phases
|
|
58
|
-
|
|
59
|
-
| Phase | Required result | Current source assessment |
|
|
60
|
-
| --- | --- | --- |
|
|
61
|
-
| 1. Establish Canonical Single Runtime | MCP Transport, Gateway Adapter, Controller Services, Scheduler, SQLite, and Worker Manager are started by one Runtime Root | Implemented in the source architecture: `forge-runtime` starts the complete core application in one process |
|
|
62
|
-
| 2. Converge lifecycle ownership | Runtime Root is the only in-process core owner; one OS service and one standalone Recovery owner operate only on the complete Runtime | Implemented: public component lifecycle commands, Supervisor, independent Daemon, KeepAlive wrappers, component restart owners, and detached recovery paths are deleted; the Forge service starts one Runtime Root, and standalone Recovery can restart that complete service or perform previous whole-release recovery |
|
|
63
|
-
| 3. Simplify readiness | Public Runtime readiness is only `ready: true/false`; module observations are diagnostic evidence | Implemented: Canonical Runtime, status projection, Recovery verification, and public `controller_ready` use one binary Runtime decision |
|
|
64
|
-
| 4. Remove ingress and Runtime slots | No Stable Ingress, fixed blue/green ports, runtime slots, mixed generation, adoption, or component cutover | Implemented: Stable Ingress, blue/green slots, slot homes, activation transactions, writer authority, and slot fallback readers are deleted |
|
|
65
|
-
| 5. Whole-Runtime publish and rollback | Code, configuration, entrypoint, manifest, SQLite schema/backup, and Worker protocol move as one compatible set | Implemented: one active/previous whole-release authority, local SQLite backup/restore, service startup binding, bounded whole-Runtime restart, and automatic previous-release recovery after restart exhaustion; old bootstrap/slot authority is deleted |
|
|
66
|
-
| 6. Complete Worker isolation and fencing | Workers are bounded Runtime-owned children; stale Workers cannot commit control-plane side effects | Implemented: Workers inherit Runtime instance, owner PID, release authority revision/token, release ID, artifact identity, and Worker protocol; write paths import the Canonical Runtime fence directly; durable OperationReceipt recovery matches non-secret Runtime/release identity plus Job/attempt/PID/Lease evidence |
|
|
67
|
-
| 7. Delete legacy architecture | Supervisor, Ingress, KeepAlive, slots, component rollout/rollback, and old authority are removed | Implemented in source: Supervisor, Stable Ingress, independent Daemon, KeepAlive, component rollout, slots, activation transactions, writer authority, and public lifecycle commands are deleted |
|
|
68
|
-
|
|
69
|
-
A change that cannot be assigned to one phase, or that does not reduce core processes, lifecycle owners, readiness authorities, release units, or compatibility paths, is presumed scope drift and must stop for review.
|
|
70
|
-
|
|
71
|
-
## 4. Readiness contract
|
|
72
|
-
|
|
73
|
-
The public contract is intentionally small:
|
|
74
|
-
|
|
75
|
-
```ts
|
|
76
|
-
interface RuntimeReadiness {
|
|
77
|
-
ready: boolean;
|
|
78
|
-
reasonCodes: string[];
|
|
79
|
-
diagnostics: {
|
|
80
|
-
database: DiagnosticEvidence;
|
|
81
|
-
scheduler: DiagnosticEvidence;
|
|
82
|
-
releaseCoherence: DiagnosticEvidence;
|
|
83
|
-
mcpEndToEnd: DiagnosticEvidence;
|
|
84
|
-
};
|
|
85
|
-
observedAt: string;
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Only `ready` is the Runtime decision. `reasonCodes`, `diagnostics`, and `observedAt` explain the decision. Public readiness does not expose `state`, component top-level readiness objects, slots, generations, Supervisor state, or Ingress state. Detailed legacy observations may remain internal temporarily, but must not become a second lifecycle state machine.
|
|
90
|
-
|
|
91
|
-
Forbidden public Runtime readiness combinations include:
|
|
92
|
-
|
|
93
|
-
- `degraded`, `partial`, `recovering`, or component-specific top-level states;
|
|
94
|
-
- independently authoritative Gateway, Controller, Scheduler, or database readiness;
|
|
95
|
-
- port/PID health promoted to Runtime readiness;
|
|
96
|
-
- readiness that remains true after any fatal core module exits.
|
|
97
|
-
|
|
98
|
-
The Runtime becomes ready only after release compatibility, SQLite, Scheduler, MCP initialize, tools/list, authenticated Controller access, and a SQLite-backed read all succeed in the same Runtime instance.
|
|
99
|
-
|
|
100
|
-
## 5. Whole-Runtime release and rollback
|
|
101
|
-
|
|
102
|
-
A Runtime release is one immutable compatibility set:
|
|
103
|
-
|
|
104
|
-
```text
|
|
105
|
-
entrypoint
|
|
106
|
-
core code and assets
|
|
107
|
-
bounded helper runtimes and libraries (Process/Check, Browser/Desktop, external-plugin probe, CodeGraph Node/library/sidecar)
|
|
108
|
-
Runtime configuration schema
|
|
109
|
-
release manifest
|
|
110
|
-
SQLite schema compatibility (distributed metadata only; never database contents)
|
|
111
|
-
local pre-upgrade database backup contract under Controller Home
|
|
112
|
-
Worker protocol version
|
|
113
|
-
migration and rollback metadata
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
Release validation is offline and does not require a second serving Runtime, traffic router, fixed alternate port, or persistent slot identity. `src/runtime/root/release-store.ts` records one atomic active/previous authority and binds each previous release to a verified local SQLite backup under Controller Home. SQLite rows are project execution state: they are not copied into the immutable release, source repository, installer, manifest, or anything distributed to another user.
|
|
117
|
-
|
|
118
|
-
Activation is a whole-Runtime restart:
|
|
119
|
-
|
|
120
|
-
1. validate the complete immutable release and configuration;
|
|
121
|
-
2. verify database compatibility and create the required backup before mutation;
|
|
122
|
-
3. stop admission and quiesce the current Runtime;
|
|
123
|
-
4. stop the complete current Runtime;
|
|
124
|
-
5. start the complete new Runtime from one release entrypoint;
|
|
125
|
-
6. require whole-Runtime readiness;
|
|
126
|
-
7. on failure, stop the failed Runtime and restore the complete previous release/config/database compatibility set;
|
|
127
|
-
8. start the previous Runtime and require whole-Runtime readiness.
|
|
128
|
-
|
|
129
|
-
No operation may independently publish, restart, or roll back Gateway, Controller, Scheduler, MCP Transport, SQLite schema, or Worker protocol.
|
|
130
|
-
|
|
131
|
-
Bounded helper processes remain part of this one compatibility set. They do not become services or lifecycle owners: the Runtime launches them for one request, applies deadlines and cancellation, and collects typed evidence. In particular, CodeGraph reads only an existing checkout-local `.codegraph/` index; failure degrades the requesting structural-context contract and never establishes a separate readiness or recovery state machine.
|
|
132
|
-
|
|
133
|
-
## 6. Worker boundary and fencing
|
|
134
|
-
|
|
135
|
-
Workers remain separate processes because they execute bounded external work. They are not Runtime owners.
|
|
136
|
-
|
|
137
|
-
Every Worker attempt must carry:
|
|
138
|
-
|
|
139
|
-
- Runtime instance identity;
|
|
140
|
-
- Runtime release identity;
|
|
141
|
-
- Worker protocol version;
|
|
142
|
-
- Job/Work identity and attempt;
|
|
143
|
-
- exact Lease and fencing token set;
|
|
144
|
-
- bounded deadline and cancellation channel.
|
|
145
|
-
|
|
146
|
-
A Worker created by an old Runtime cannot renew Leases, publish heartbeats, commit results, write evidence as current, release replacement ownership, or perform control-plane side effects after Runtime ownership changes.
|
|
147
|
-
|
|
148
|
-
Workers cannot schedule other Workers, select releases, recover the Runtime, mutate Runtime authority, or maintain a forever loop.
|
|
149
|
-
|
|
150
|
-
## 7. Legacy inventory and deletion order
|
|
151
|
-
|
|
152
|
-
The following paths are legacy implementation inventory, not target building blocks:
|
|
153
|
-
|
|
154
|
-
| Legacy area | Required disposition |
|
|
155
|
-
| --- | --- |
|
|
156
|
-
| `src/runtime/supervisor/**` | deleted; architecture checks require the directory to remain absent |
|
|
157
|
-
| Stable Ingress router and ingress session/process state | deleted in phase 4; one Runtime endpoint is configured directly |
|
|
158
|
-
| MCP KeepAlive/restart commands and implementations | public/hidden entrypoints, the 911-line restart implementation, and the 1,136-line KeepAlive process/tunnel/restart owner are deleted in phase 2; reusable HTTP/stdio transports remain module code only |
|
|
159
|
-
| MCP transport and Gateway tool Daemon auto-start | removed in phase 2; readiness and tool responses may observe daemon status but cannot create or recover Controller Services |
|
|
160
|
-
| independent daemon entry and component service API | deleted; `runtime-status-client.ts` is read-only observation over Canonical Forge Runtime state |
|
|
161
|
-
| `src/cli/controller/runtime-slots.ts` and slot homes | deleted in phase 4; architecture checks require them to remain absent |
|
|
162
|
-
| `src/cli/controller/bluegreen-rollout.ts` | deleted; must not return |
|
|
163
|
-
| public `controller` lifecycle/blue-green commands and public `supervisor` command | deleted from the supported CLI surface and implementation tree |
|
|
164
|
-
| detached restart coordinator and component restart bridges | deleted, including retired stubs and repository lifecycle shell entrypoints |
|
|
165
|
-
| standalone Recovery PI/agent repair and repository-write authority | removed in phase 2; Recovery code must never launch an agent in, generate scripts in, move files from, or otherwise mutate a source checkout |
|
|
166
|
-
| stable ingress ports and private blue/green ports | deleted; one Runtime endpoint is configured directly |
|
|
167
|
-
| component generation and mixed-generation coherence | deleted; one Runtime instance/release identity remains |
|
|
168
|
-
| Gateway/MCP component restart, rollout, rollback, green-gate and Supervisor facade operations | removed from direct tools and `rh_status`/`rh_work`; no compatibility facade may trigger lifecycle changes |
|
|
169
|
-
| Recovery lifecycle/self-healing compatibility surfaces | deleted from descriptors, MCP definitions, dispatch branches and maintenance status; source-coherence failure produces an external lifecycle handoff only |
|
|
170
|
-
| component rollout/rollback operation stores | deleted with the Supervisor implementation; only whole-Runtime release authority remains |
|
|
171
|
-
| compatibility authority projections | deleted after one-way migration; no permanent dual-read or dual-write remains |
|
|
172
|
-
|
|
173
|
-
Legacy code may receive only deletion-enabling or safety-fencing changes. New features, new states, new rollback protocols, or new recovery automation must not be added to it. Recovery diagnostics may read source identity, but must never write a source checkout. Recovery state, evidence, and configuration remain below Controller Home; temporary OS service metadata is legacy deletion inventory, not a new authority. Autonomous code repair is not an allowed Runtime recovery mechanism.
|
|
174
|
-
|
|
175
|
-
## 8. Scope-drift assessment of prior work
|
|
176
|
-
|
|
177
|
-
The earlier fixed release-manifest work, Controller Home ownership, explicit Runtime configuration, SQLite inspection, in-process Scheduler, authenticated MCP end-to-end probe, and Worker fencing primitives remain useful.
|
|
178
|
-
|
|
179
|
-
The following earlier direction is no longer an approved target:
|
|
180
|
-
|
|
181
|
-
- treating Supervisor as the permanent root application;
|
|
182
|
-
- retaining independently managed Daemon and Gateway processes;
|
|
183
|
-
- moving Stable Ingress into the Supervisor process instead of deleting it;
|
|
184
|
-
- replacing blue/green slots with candidate/current/previous traffic switching;
|
|
185
|
-
- preserving component readiness, component restart budgets, and component rollback;
|
|
186
|
-
- adding an independent primary Recovery service family for the local application.
|
|
187
|
-
|
|
188
|
-
Those directions are historical only. They must not reappear as executable compatibility paths, fallback scripts, durable authority, or release mechanisms.
|
|
189
|
-
|
|
190
|
-
## 9. Required review questions
|
|
191
|
-
|
|
192
|
-
Every Runtime refactor review answers:
|
|
193
|
-
|
|
194
|
-
1. Which of the seven phases owns this work?
|
|
195
|
-
2. Does it directly reduce the gap for that phase?
|
|
196
|
-
3. Does it add a process, state, owner, authority, or long-term compatibility path?
|
|
197
|
-
4. Does it reintroduce component deployment, recovery, or rollback?
|
|
198
|
-
5. Does completion move the system toward one Runtime, one Owner, and one release?
|
|
199
|
-
6. Which legacy layers still remain?
|
|
200
|
-
7. What is the next deletion or convergence step?
|
|
201
|
-
|
|
202
|
-
## 10. Completed source convergence order
|
|
203
|
-
|
|
204
|
-
1. `forge-runtime` became the only supported core startup entry.
|
|
205
|
-
2. Controller startup and Worker Manager ownership moved into Runtime Root.
|
|
206
|
-
3. Public readiness converged to one whole-Runtime boolean decision.
|
|
207
|
-
4. Stable Ingress was removed and MCP Transport binds directly to the configured Runtime endpoint.
|
|
208
|
-
5. Runtime slots, fixed alternate ports, mixed generations, and component cutover were removed.
|
|
209
|
-
6. Whole-Runtime release, database backup, and rollback authority was established.
|
|
210
|
-
7. Worker commits were bound to Runtime instance, release identity, Job attempt, and Lease fencing.
|
|
211
|
-
8. Supervisor, KeepAlive wrappers, independent Daemon entry, restart coordinator, component rollout/rollback, and compatibility authority were deleted.
|
|
212
|
-
9. One stable Forge Runtime service and standalone Recovery watchdog were added without slots: sustained failure triggers bounded whole-Runtime restart, then attested previous-release rollback and verification.
|
|
213
|
-
|
|
214
|
-
Forge has no blue-green Runtime pair. Candidate canaries execute before an explicitly authorized stop/switch/start activation, and failed activation or later sustained failure uses the single previous whole-release authority. No rollout, service installation, service restart, or live cutover is implied by source implementation work.
|