@moretea-labs/forge 1.8.0 → 1.8.2
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 +73 -7
- package/CHANGELOG.md +34 -0
- package/CLAUDE.md +17 -2
- package/CONTRIBUTING.md +3 -2
- package/README.en.md +24 -3
- package/README.md +10 -6
- package/README.zh-CN.md +5 -3
- package/THIRD_PARTY_NOTICES.md +1 -2
- package/adapters/chatgpt/browser-delivery-host.ts +7 -1
- package/adapters/chatgpt/browser-delivery-runtime.ts +531 -56
- package/adapters/chatgpt/controller-binding-store.ts +101 -22
- package/adapters/chatgpt/controller-round-host.ts +15 -25
- package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
- package/adapters/chatgpt/provider-delivery.ts +229 -2
- package/adapters/chatgpt/work-conversation-binding-store.ts +99 -54
- package/adapters/computer/chatgpt-extension-target.ts +708 -0
- package/adapters/computer/chrome-extension/background.js +541 -0
- package/adapters/computer/chrome-extension/content.js +402 -0
- package/adapters/computer/chrome-extension/core.js +24 -0
- package/adapters/computer/chrome-extension/manifest.json +32 -0
- package/adapters/computer/desktop-operator-discovery.ts +11 -31
- package/adapters/computer/desktop-operator-provider.ts +18 -6
- package/adapters/computer/interaction-target-authority.ts +178 -24
- package/adapters/mcp/access-mode.ts +18 -39
- package/adapters/mcp/auth.ts +2 -7
- package/adapters/mcp/instructions.ts +6 -5
- package/adapters/mcp/multi-repository.ts +10 -47
- package/adapters/mcp/oauth.ts +73 -0
- package/adapters/mcp/paths.ts +4 -1
- package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
- package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
- package/adapters/mcp/runtime-gateway/context-adapter.ts +490 -113
- package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +83 -0
- package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
- package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
- package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
- package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
- package/adapters/mcp/runtime-gateway/execution-tools.ts +14 -54
- package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +132 -47
- package/adapters/mcp/runtime-gateway/process-tools.ts +173 -23
- package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
- package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
- package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
- package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
- package/adapters/mcp/runtime-gateway/router.ts +19 -507
- package/adapters/mcp/runtime-gateway/routing-policy.ts +506 -0
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +15 -66
- package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +123 -178
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +11 -5
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +37 -1
- package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +416 -270
- package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +140 -0
- package/adapters/mcp/runtime-gateway/work-adapter.ts +262 -3123
- package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
- package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
- package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +229 -0
- package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
- package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
- package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
- package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
- package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
- package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +320 -0
- package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
- package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +180 -0
- package/adapters/mcp/server.ts +91 -26
- package/adapters/mcp/setup.ts +5 -13
- package/adapters/mcp/tool-mapping/access-tools.ts +0 -6
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +703 -3092
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +5 -10
- package/adapters/mcp/tool-mapping/repository-tools.ts +170 -213
- package/adapters/mcp/toolset-names.ts +11 -37
- package/adapters/mcp/toolset.ts +19 -92
- package/{src/cli → adapters}/mcp/transports/AGENTS.md +5 -5
- package/{src/cli → adapters}/mcp/transports/CLAUDE.md +5 -5
- package/adapters/mcp/transports/http-observation.ts +377 -0
- package/adapters/mcp/transports/http-post-lifecycle.ts +19 -0
- package/adapters/mcp/transports/http.ts +200 -683
- package/adapters/mcp/transports/oauth-http.ts +322 -0
- package/adapters/mcp/transports/session-registry.ts +6 -0
- package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
- package/adapters/mcp/types.ts +0 -6
- package/assets/hooks/lib/session-state.sh +0 -38
- package/assets/hooks/post-bash.sh +1 -1
- package/assets/hooks/post-tool-observer.sh +0 -5
- package/assets/hooks/prompt-guard.sh +0 -55
- package/assets/partials/04-project-structure.partial.md +1 -1
- package/assets/partials/07-footer.partial.md +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +1 -1
- package/assets/partials-agents/08-deep-docs.partial.md +1 -1
- package/assets/plugin-registry.v1.json +6 -4
- package/assets/reference-configs/agentic-development-flow.md +26 -1
- package/assets/reference-configs/external-tooling.md +0 -76
- package/assets/reference-configs/global-working-rules.md +19 -0
- package/assets/reference-configs/release-deploy.md +1 -1
- package/assets/templates/helpers/architecture-queue.sh +1 -1
- package/assets/templates/helpers/check-agent-tooling.sh +1 -327
- package/assets/templates/helpers/check-task-workflow.sh +1 -1
- package/assets/templates/helpers/ensure-task-workflow.sh +0 -14
- package/assets/templates/helpers/migrate-project-template.sh +2 -2
- package/assets/workflow-contract.v1.json +0 -2
- package/docs/README.md +5 -2
- package/docs/architecture/CURRENT.md +205 -51
- package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
- package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
- package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +42 -0
- package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
- package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
- package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
- package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
- package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +234 -0
- package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
- package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +74 -0
- package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +342 -0
- package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
- package/docs/architecture/decisions/20261009-exact-code-context-discovery.md +19 -0
- package/docs/architecture/decisions/20261009-generated-xcode-cache-retention.md +37 -0
- package/docs/architecture/decisions/20261011-autonomous-continuation-convergence.md +597 -0
- package/docs/architecture/decisions/20261017-edit-session-finalization-reconciliation.md +17 -0
- package/docs/architecture/decisions/20261019-retire-host-skills.md +16 -0
- package/docs/architecture/diagrams/agentic-dev-plugin-architecture.html +1 -1
- package/docs/architecture/domains/public-surface.md +3 -5
- package/docs/architecture/domains/verification.md +6 -5
- package/docs/architecture/domains/workflow-engine.md +6 -0
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +3 -3
- package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +4 -4
- package/docs/architecture/reviews/20261015-code-search-runtime-acceptance.md +75 -0
- package/docs/forge-plugin-management.md +16 -4
- package/docs/operations/controller-browser-plugin.md +23 -0
- package/docs/operations/controller-performance-and-502.md +17 -0
- package/docs/operations/controller-reliability-runbook.md +2 -2
- package/docs/operations/features.md +6 -7
- package/docs/operations/features.zh-CN.md +1 -1
- package/docs/operations/github-repository.md +4 -4
- package/docs/operations/github-semantic-release-projection.md +20 -0
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +13 -52
- package/docs/operations/releasing.md +2 -0
- package/docs/operations/runtime-performance-diagnostics.md +8 -0
- package/docs/operations/standalone-disaster-recovery.md +15 -7
- package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
- package/docs/tutorials/03-first-repository-task.md +2 -0
- package/docs/wiki/Computer-and-Plugins.md +78 -0
- package/docs/wiki/Computer-and-Plugins.zh-CN.md +88 -0
- package/docs/wiki/Home.md +16 -2
- package/docs/wiki/Implementation.md +25 -13
- package/docs/wiki/Installation.md +28 -32
- package/docs/wiki/Integrations.md +4 -0
- package/docs/wiki/Quick-Start.md +35 -22
- package/docs/wiki/Releases-and-Upgrades.md +15 -25
- package/docs/wiki/_Sidebar.md +5 -1
- package/package.json +25 -25
- package/packages/kernel/cognition/api/index.ts +6 -0
- package/packages/kernel/cognition/application/activation-service.ts +451 -0
- package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
- package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
- package/packages/kernel/cognition/application/memory-service.ts +64 -0
- package/packages/kernel/cognition/domain/learning.ts +106 -0
- package/packages/kernel/cognition/domain/memory.ts +254 -0
- package/packages/kernel/controller/api/index.ts +1 -0
- package/packages/kernel/controller/application/continuation-service.ts +281 -0
- package/packages/kernel/controller/application/controller-round-service.ts +12 -0
- package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
- package/packages/kernel/controller/domain/controller-round.ts +4 -1
- package/packages/kernel/controller/domain/execution-quality.ts +3 -1
- package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
- package/packages/kernel/controller/infrastructure/controller-session-store.ts +348 -97
- package/packages/kernel/controller/ports/controller-host.ts +2 -0
- package/packages/kernel/identity/api/index.ts +10 -0
- package/packages/kernel/identity/domain/activity-projection.ts +43 -0
- package/packages/kernel/identity/domain/capability-broker.ts +60 -0
- package/packages/kernel/identity/domain/grant.ts +72 -0
- package/packages/kernel/identity/domain/owned-resource.ts +116 -0
- package/packages/kernel/identity/domain/user-request.ts +93 -0
- package/packages/kernel/identity/infrastructure/activity-projection-store.ts +87 -0
- package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
- package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
- package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
- package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
- package/packages/kernel/scheduler/api/index.ts +0 -2
- package/packages/kernel/scheduler/application/eligibility.ts +4 -1
- package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
- package/packages/kernel/scheduler/application/settlement.ts +0 -15
- package/packages/kernel/scheduler/domain/schedule.ts +87 -0
- package/packages/kernel/scheduler/infrastructure/schedule-store.ts +166 -143
- package/packages/kernel/work/api/index.ts +3 -2
- package/packages/kernel/work/application/work-service.ts +18 -42
- package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
- package/packages/kernel/work/domain/engineering-design.ts +10 -5
- package/packages/kernel/work/domain/engineering-profile.ts +8 -12
- package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
- package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
- package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
- package/packages/kernel/work/domain/implementation-review.ts +14 -331
- package/packages/kernel/work/domain/objective-graph.ts +119 -0
- package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
- package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
- package/packages/kernel/work/domain/state-machine.ts +34 -65
- package/packages/kernel/work/domain/types.ts +57 -51
- package/packages/kernel/work/infrastructure/work-contract-store.ts +847 -729
- package/packages/kernel/work/ports/work-contract-store.ts +5 -2
- package/packages/plugin-runtime/browser/provider-registry.ts +12 -36
- package/packages/plugin-runtime/browser/session-authority.ts +2 -1
- package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
- package/packages/plugin-runtime/computer/conversation-target.ts +153 -0
- package/packages/plugin-runtime/computer/index.ts +2 -0
- package/packages/plugin-runtime/computer/target-authority.ts +26 -1
- package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
- package/packages/protocols/computer/contract.ts +27 -1
- package/scripts/activate-source-baseline.ts +7 -9
- package/scripts/assemble-template.ts +11 -72
- package/scripts/canary-controller-semantic-wait.ts +12 -24
- package/scripts/check-mcp-compatibility.ts +94 -201
- package/scripts/check-package-identity.mjs +0 -5
- package/scripts/check-runtime-architecture.mjs +921 -239
- package/scripts/forge-local-recovery-helper.mjs +93 -15
- package/scripts/init-project.sh +0 -46
- package/scripts/install-ios-hid-toolchain.sh +60 -0
- package/scripts/install-standalone-recovery.ts +1 -1
- package/scripts/lib/project-init-lib.sh +6 -3
- package/scripts/migrate-windows-wsl-controller-home.ts +2 -0
- package/scripts/open-source-audit-allowlist.txt +1 -3
- package/scripts/run-bounded-command.mjs +5 -0
- package/scripts/run-governed-gate.ts +2 -1
- package/scripts/run-mobile-monitor-bridge.ts +0 -1
- package/scripts/smoke-control-plane-failure-domain.ts +94 -0
- package/scripts/smoke-ios-physical-device.ts +38 -10
- package/scripts/smoke-mcp-http-runtime.ts +12 -8
- package/scripts/smoke-mcp-tool-surface.ts +27 -41
- package/scripts/smoke-runtime-recovery.ts +12 -43
- package/scripts/smoke-schedule-engine.ts +23 -15
- package/scripts/smoke-unattended-transport-recovery.ts +223 -0
- package/scripts/smoke-user-request-continuation-restart.ts +232 -0
- package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +95 -0
- package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
- package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
- package/scripts/smoke-workflow-supervisor.ts +103 -0
- package/scripts/sync-generated-authority.mjs +0 -1
- package/scripts/verify-forge-runtime.sh +2 -1
- package/src/cli/agent-jobs/executor-health.ts +12 -35
- package/src/cli/agent-jobs/integration.ts +20 -51
- package/src/cli/agent-jobs/job-manager.ts +7 -3
- package/src/cli/chatgpt-browser/file-policy.ts +2 -2
- package/src/cli/commands/brain-assistant.ts +27 -13
- package/src/cli/commands/brain.ts +13 -15
- package/src/cli/commands/chatgpt.ts +1 -163
- package/src/cli/commands/doctor.ts +1 -143
- package/src/cli/commands/global-runtime.ts +3 -196
- package/src/cli/commands/init-hook.ts +6 -23
- package/src/cli/commands/init.ts +3 -252
- package/src/cli/commands/mcp.ts +0 -5
- package/src/cli/commands/prompt-guard-decision.ts +0 -2
- package/src/cli/commands/recovery.ts +137 -135
- package/src/cli/commands/repository.ts +17 -1
- package/src/cli/commands/runtime.ts +3 -3
- package/src/cli/commands/setup-execution.ts +41 -0
- package/src/cli/commands/setup-profile.ts +8 -0
- package/src/cli/controller/check-runner.ts +13 -2
- package/src/cli/controller/completion-backlog.ts +3 -3
- package/src/cli/controller/completion-orchestrator.ts +5 -44
- package/src/cli/controller/completion-target.ts +3 -72
- package/src/cli/controller/composite-operations.ts +1 -1
- package/src/cli/controller/context/instruction-context.ts +1 -1
- package/src/cli/controller/context/known-paths.ts +2 -2
- package/src/cli/controller/context/query-planning.ts +11 -4
- package/src/cli/controller/context/rule-resolution.ts +2 -2
- package/src/cli/controller/context/source-materializer.ts +83 -102
- package/src/cli/controller/context/structural-provider.ts +84 -0
- package/src/cli/controller/context/structural.ts +6 -6
- package/src/cli/controller/context/types.ts +8 -9
- package/src/cli/controller/context-pack.ts +107 -84
- package/src/cli/controller/execution-completion.ts +4 -7
- package/src/cli/controller/execution-policy.ts +36 -153
- package/src/cli/controller/governance.ts +2 -3
- package/src/cli/controller/issue-store.ts +4 -99
- package/src/cli/controller/launch-agents.ts +59 -18
- package/src/cli/controller/operational-plan.ts +25 -52
- package/src/cli/controller/runtime-config.ts +5 -1
- package/src/cli/controller/stuck-state-migration.ts +2 -3
- package/src/cli/controller/systemd-user.ts +42 -10
- package/src/cli/editing/edit-session.ts +18 -12
- package/src/cli/github/github.ts +4 -4
- package/src/cli/github/semantic-projection.ts +174 -0
- package/src/cli/hook/prompt-intents.ts +0 -9
- package/src/cli/index.ts +1 -43
- package/src/cli/local-bridge/connector-freshness.ts +1 -12
- package/src/cli/local-bridge/console-automations.ts +19 -14
- package/src/cli/local-bridge/console-view-models.ts +4 -13
- package/src/cli/local-bridge/facade-api.ts +64 -193
- package/src/cli/local-bridge/server.ts +24 -147
- package/src/cli/local-bridge/types.ts +0 -1
- package/src/cli/mcp/oauth-client-retirement.ts +74 -0
- package/src/cli/repositories/command-classifier.ts +0 -9
- package/src/cli/repositories/command-executor.ts +29 -23
- package/src/cli/repositories/command-scope.ts +37 -18
- package/src/cli/repositories/controller-home.ts +48 -0
- package/src/cli/repositories/ephemeral-workspace.ts +20 -30
- package/src/cli/repositories/git-command-executor.ts +2 -2
- package/src/cli/repositories/locks.ts +20 -0
- package/src/cli/repositories/registry.ts +79 -12
- package/src/cli/repositories/safe-patch.ts +2 -12
- package/src/cli/repositories/structured-git.ts +101 -5
- package/src/cli/repository/inspector.ts +185 -343
- package/src/cli/repository/session-cache.ts +92 -6
- package/src/effects/process-runner.ts +17 -1
- package/src/runtime/context/assistant-context.ts +20 -7
- package/src/runtime/context/assistant-work-context.ts +89 -27
- package/src/runtime/context/automatic-learning.ts +565 -0
- package/src/runtime/context/cognitive-attention.ts +173 -0
- package/src/runtime/context/cognitive-skill-canary.ts +158 -0
- package/src/runtime/context/context-closure.ts +46 -9
- package/src/runtime/context/context-pack-process.ts +103 -0
- package/src/runtime/context/context-plane.ts +1 -9
- package/src/runtime/context/direct-controller-learning.ts +298 -0
- package/src/runtime/context/generic-lsp-provider.ts +1 -1
- package/src/runtime/context/semantic-navigation-contract.ts +16 -0
- package/src/runtime/context/semantic-navigation.ts +7 -35
- package/src/runtime/context/typescript-navigation-process.ts +145 -0
- package/src/runtime/context/typescript-navigation.ts +89 -3
- package/src/runtime/control-plane/cleanup-artifact-retention.ts +215 -12
- package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
- package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
- package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
- package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
- package/src/runtime/control-plane/execution/session-store.ts +31 -1
- package/src/runtime/control-plane/execution/validation.ts +6 -8
- package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
- package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
- package/src/runtime/control-plane/execution/work-delivery-service.ts +616 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
- package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
- package/src/runtime/control-plane/execution/work-handle-authority.ts +197 -110
- package/src/runtime/control-plane/execution/work-handle-store.ts +72 -44
- package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
- package/src/runtime/control-plane/execution/work-operation-service.ts +60 -34
- package/src/runtime/control-plane/execution/work-preparation-service.ts +231 -267
- package/src/runtime/control-plane/execution/work-process-evidence.ts +2 -2
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
- package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +201 -199
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +33 -85
- package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +6 -2
- package/src/runtime/control-plane/facade/capability-registry.ts +364 -37
- package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
- package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
- package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
- package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
- package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
- package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
- package/src/runtime/control-plane/facade/index.ts +0 -1
- package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
- package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
- package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
- package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
- package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
- package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
- package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
- package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
- package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
- package/src/runtime/control-plane/facade/types.ts +49 -108
- package/src/runtime/control-plane/facade/work-continuation.ts +9 -9
- package/src/runtime/control-plane/generated-cache-retention.ts +206 -59
- package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +256 -117
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -12
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
- package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
- package/src/runtime/control-plane/governance/access-policy.ts +19 -2
- package/src/runtime/control-plane/governance/authorization.ts +20 -3
- package/src/runtime/control-plane/governance/external-effects.ts +1 -1
- package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +29 -300
- package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
- package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
- package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
- package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
- package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
- package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
- package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
- package/src/runtime/control-plane/release-retention.ts +135 -47
- package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
- package/src/runtime/control-plane/runtime-cleanup.ts +295 -107
- package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
- package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
- package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
- package/src/runtime/diagnostics/incident-repair.ts +313 -146
- package/src/runtime/diagnostics/mcp-timing.ts +114 -0
- package/src/runtime/evidence/artifact-store.ts +158 -40
- package/src/runtime/evidence/evidence-store.ts +112 -8
- package/src/runtime/evidence/output-handle-index.ts +225 -0
- package/src/runtime/evidence/result-store.ts +158 -44
- package/src/runtime/evidence/sensitive-output.ts +22 -2
- package/src/runtime/execution/jobs/child-reference.ts +11 -0
- package/src/runtime/execution/jobs/receipt-recovery.ts +1 -11
- package/src/runtime/execution/jobs/store.ts +3 -4
- package/src/runtime/execution/managed-workspace.ts +57 -0
- package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
- package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
- package/src/runtime/execution/process-runtime/check-result.ts +105 -1
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
- package/src/runtime/execution/process-runtime/command-facade.ts +82 -30
- package/src/runtime/execution/process-runtime/gc.ts +15 -2
- package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
- package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
- package/src/runtime/execution/process-runtime/index.ts +3 -0
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
- package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
- package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
- package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
- package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
- package/src/runtime/execution/process-runtime/runtime.ts +55 -18
- package/src/runtime/execution/process-runtime/store.ts +30 -2
- package/src/runtime/execution/process-runtime/types.ts +6 -1
- package/src/runtime/execution/thin-harness/execution-router.ts +16 -16
- package/src/runtime/execution/thin-harness/fast-executor.ts +2 -2
- package/src/runtime/execution/thin-harness/search-worker.ts +2 -2
- package/src/runtime/execution/workers/executor.ts +3 -8
- package/src/runtime/maintenance/cleanup.ts +41 -5
- package/src/runtime/platform/service-inventory.ts +130 -0
- package/src/runtime/platform/service-manager.ts +8 -0
- package/src/runtime/plugins/action-application.ts +97 -29
- package/src/runtime/plugins/app-store-connect-adapter.ts +290 -18
- package/src/runtime/plugins/browser-adapter.ts +1124 -333
- package/src/runtime/plugins/browser-automation-service.ts +23 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +431 -137
- package/src/runtime/plugins/browser-manifest-surface.ts +47 -12
- package/src/runtime/plugins/browser-native-session-service.ts +63 -13
- package/src/runtime/plugins/browser-registration.ts +18 -0
- package/src/runtime/plugins/browser-runtime.ts +40 -36
- package/src/runtime/plugins/browser-session-authority.ts +2 -2
- package/src/runtime/plugins/browser-session-store.ts +46 -76
- package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
- package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +228 -0
- package/src/runtime/plugins/computer-registration.ts +298 -20
- package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
- package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
- package/src/runtime/plugins/external-adapter.ts +42 -6
- package/src/runtime/plugins/external-registration.ts +21 -1
- package/src/runtime/plugins/github-adapter.ts +30 -3
- package/src/runtime/plugins/gmail-adapter.ts +189 -3
- package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
- package/src/runtime/plugins/google-shared.ts +24 -12
- package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
- package/src/runtime/plugins/ios/remote-xpc-hid.ts +70 -30
- package/src/runtime/plugins/ios-adapter.ts +46 -41
- package/src/runtime/plugins/ios-agent-device.ts +54 -4
- package/src/runtime/plugins/ios-device-ownership.ts +103 -0
- package/src/runtime/plugins/ios-physical-device.ts +497 -79
- package/src/runtime/plugins/lightweight-action.ts +208 -2
- package/src/runtime/plugins/local-system-adapter.ts +12 -100
- package/src/runtime/plugins/managed-process-adapter.ts +12 -5
- package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
- package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +682 -435
- package/src/runtime/plugins/types.ts +24 -0
- package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
- package/src/runtime/projections/git-status-sampler.ts +2 -19
- package/src/runtime/projections/invalidation.ts +7 -3
- package/src/runtime/projections/materialized-view.ts +80 -36
- package/src/runtime/recovery/actions.ts +4 -4
- package/src/runtime/recovery/capability-action-application.ts +46 -45
- package/src/runtime/recovery/lifecycle-inventory.ts +30 -40
- package/src/runtime/recovery/maintenance-executor.ts +374 -123
- package/src/runtime/recovery/probe.ts +2 -2
- package/src/runtime/recovery/store.ts +29 -11
- package/src/runtime/release/release-coordinator.ts +312 -0
- package/src/runtime/release/release-session.ts +716 -0
- package/src/runtime/release/release-state-migration.ts +25 -0
- package/src/runtime/resources/leases/store.ts +56 -25
- package/src/runtime/root/computer-composition.ts +191 -6
- package/src/runtime/root/controller-progression-composition.ts +254 -0
- package/src/runtime/root/controller-round-composition.ts +20 -1
- package/src/runtime/root/deployment-topology.ts +106 -0
- package/src/runtime/root/entry.ts +4 -3
- package/src/runtime/root/known-good-recovery.ts +184 -0
- package/src/runtime/root/local-bridge.ts +0 -1
- package/src/runtime/root/mcp-transport.ts +111 -18
- package/src/runtime/root/ownership.ts +261 -9
- package/src/runtime/root/package-connector-service.ts +227 -29
- package/src/runtime/root/package-runtime-release.ts +117 -30
- package/src/runtime/root/package-runtime-service.ts +24 -24
- package/src/runtime/root/release-execution-canary.ts +57 -12
- package/src/runtime/root/release-loader.ts +90 -8
- package/src/runtime/root/release-manifest.ts +80 -40
- package/src/runtime/root/release-materialize.ts +372 -106
- package/src/runtime/root/release-store.ts +395 -36
- package/src/runtime/root/runtime-lane.ts +191 -0
- package/src/runtime/root/runtime.ts +160 -29
- package/src/runtime/root/scheduled-controller-composition.ts +29 -3
- package/src/runtime/root/service-runner.ts +2 -2
- package/src/runtime/root/service.ts +126 -44
- package/src/runtime/root/status.ts +48 -0
- package/src/runtime/root/types.ts +32 -9
- package/src/runtime/root/workflow-supervisor-composition.ts +681 -0
- package/src/runtime/root/workflow-supervisor-runtime.ts +564 -0
- package/src/runtime/root/write-fence.ts +50 -2
- package/src/runtime/safe-tooling/google-credential-store.ts +67 -22
- package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
- package/src/runtime/safe-tooling/ios-development.ts +22 -8
- package/src/runtime/safe-tooling/job-summary.ts +1 -1
- package/src/runtime/safe-tooling/workspace-auth.ts +5 -2
- package/src/runtime/shared/atomic-text-file.ts +21 -0
- package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
- package/src/runtime/shared/json-files.ts +8 -3
- package/src/runtime/shared/process-environment.ts +20 -9
- package/src/runtime/shared/response-budget.ts +1 -3
- package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
- package/src/runtime/standalone-recovery/core.ts +3792 -417
- package/src/runtime/standalone-recovery/entry.ts +507 -45
- package/src/runtime/standalone-recovery/installer.ts +262 -148
- package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
- package/src/runtime/standalone-recovery/operation-lock.ts +12 -2
- package/src/runtime/standalone-recovery/performance.ts +54 -16
- package/src/runtime/standalone-recovery/release.ts +53 -5
- package/src/runtime/standalone-recovery/service-labels.ts +5 -2
- package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
- package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +11 -3
- package/src/runtime/workflow/schedules/engine.ts +166 -178
- package/src/runtime/workflow/schedules/pending-activation.ts +11 -4
- package/src/runtime/workflow/schedules/work-continuation.ts +95 -11
- package/src/runtime/workflows/runtime.ts +15 -19
- package/src/testing/test-governance.ts +5 -1
- package/supervisor/chatgpt-conversation.ts +23 -0
- package/supervisor/client.ts +218 -0
- package/supervisor/control-plane.ts +963 -0
- package/supervisor/entry.ts +15 -0
- package/supervisor/forge-validators.ts +147 -0
- package/supervisor/index.ts +5 -0
- package/supervisor/native-browser-adapter.ts +1151 -0
- package/supervisor/native-messaging/host.ts +58 -0
- package/supervisor/native-messaging/manifest.ts +26 -0
- package/supervisor/native-messaging/protocol.ts +27 -0
- package/supervisor/paths.ts +18 -0
- package/supervisor/protocol.ts +250 -0
- package/supervisor/server.ts +412 -0
- package/supervisor/store.ts +1870 -0
- package/supervisor/tsconfig.json +8 -0
- package/supervisor/types.ts +261 -0
- package/SKILL.md +0 -427
- package/adapters/chatgpt/controller-host.ts +0 -119
- package/adapters/mcp/controller-round-compatibility.ts +0 -184
- package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
- package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
- package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +0 -1
- package/adapters/mcp/toolset-selection.ts +0 -41
- package/agents/openai.yaml +0 -4
- package/assets/skill-hooks.json +0 -41
- package/assets/skill-version.json +0 -189
- package/assets/skills/claude-review/SKILL.md +0 -231
- package/assets/skills/codex-review/SKILL.md +0 -103
- package/assets/templates/helpers/check-skill-version.ts +0 -193
- package/packages/kernel/progression/api/index.ts +0 -2
- package/packages/kernel/progression/application/projector.ts +0 -211
- package/packages/kernel/progression/domain/types.ts +0 -116
- package/packages/kernel/progression/index.ts +0 -1
- package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
- package/packages/kernel/scheduler/domain/continuation.ts +0 -38
- package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
- package/packages/kernel/work/domain/admission-policy.ts +0 -34
- package/scripts/benchmark-background-check-overlap.ts +0 -228
- package/scripts/benchmark-computer-hotpath.ts +0 -255
- package/scripts/benchmark-controller-hotpath.ts +0 -212
- package/scripts/benchmark-controller-round2.ts +0 -191
- package/scripts/benchmark-ios-agent-device.ts +0 -511
- package/scripts/benchmark-mcp-host.sh +0 -117
- package/scripts/benchmark-mcp-transport.ts +0 -169
- package/scripts/benchmark-operational-memory-activation.ts +0 -235
- package/scripts/benchmark-operational-shadow.ts +0 -28
- package/scripts/benchmark-quality-harness.ts +0 -146
- package/scripts/benchmark-route-session-concurrency.ts +0 -915
- package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
- package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
- package/scripts/benchmark-thin-harness.ts +0 -251
- package/scripts/benchmark-typescript-navigation.ts +0 -186
- package/scripts/benchmark-work-efficiency.ts +0 -334
- package/scripts/build-controller-ui.ts +0 -28
- package/scripts/check-npm-release.sh +0 -32
- package/scripts/check-public-release-surface.sh +0 -19
- package/scripts/check-release-published.sh +0 -57
- package/scripts/check-release-readiness.sh +0 -37
- package/scripts/check-release-version.mjs +0 -74
- package/scripts/check-skill-version.ts +0 -5
- package/scripts/check-tarball-install-smoke.sh +0 -150
- package/scripts/ensure-codegraph.sh +0 -16
- package/scripts/package-source-archive.sh +0 -147
- package/scripts/public-release-files.txt +0 -39
- package/scripts/public-release.ts +0 -174
- package/scripts/publish-release-tarball.sh +0 -27
- package/scripts/route-nl-vs-ts-eval.ts +0 -679
- package/scripts/run-skill-hook.ts +0 -244
- package/scripts/stage-runtime-release.ts +0 -44
- package/scripts/sync-codex-installed-copies.sh +0 -182
- package/src/cli/commands/tools.ts +0 -167
- package/src/cli/controller/progress.ts +0 -656
- package/src/cli/controller/work-mode.ts +0 -181
- package/src/cli/local-bridge/console-assets.ts +0 -17
- package/src/cli/local-bridge/dashboard.ts +0 -17
- package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
- package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
- package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
- package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
- package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
- package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/styles.css +0 -28
- package/src/cli/local-bridge/frontend/src/types.ts +0 -15
- package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
- package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
- package/src/cli/local-bridge/ui-dist/app.css +0 -1
- package/src/cli/local-bridge/ui-dist/app.js +0 -11228
- package/src/cli/mcp/access-mode.ts +0 -2
- package/src/cli/mcp/access-tools.ts +0 -2
- package/src/cli/mcp/audit.ts +0 -2
- package/src/cli/mcp/auth.ts +0 -2
- package/src/cli/mcp/instructions.ts +0 -2
- package/src/cli/mcp/legacy-context.ts +0 -2
- package/src/cli/mcp/legacy-tool-service.ts +0 -2
- package/src/cli/mcp/multi-repository.ts +0 -2
- package/src/cli/mcp/oauth.ts +0 -2
- package/src/cli/mcp/openai-secure-tunnel.ts +0 -2
- package/src/cli/mcp/paths.ts +0 -2
- package/src/cli/mcp/policy.ts +0 -2
- package/src/cli/mcp/post-finalize-work-attribution.ts +0 -2
- package/src/cli/mcp/proxy-env.ts +0 -2
- package/src/cli/mcp/readiness-projection.ts +0 -2
- package/src/cli/mcp/redaction.ts +0 -2
- package/src/cli/mcp/repo.ts +0 -2
- package/src/cli/mcp/repository-tools.ts +0 -2
- package/src/cli/mcp/server.ts +0 -2
- package/src/cli/mcp/setup.ts +0 -2
- package/src/cli/mcp/tool-capability-cache.ts +0 -2
- package/src/cli/mcp/tool-contract.ts +0 -2
- package/src/cli/mcp/tools.ts +0 -2
- package/src/cli/mcp/toolset-names.ts +0 -2
- package/src/cli/mcp/toolset-selection.ts +0 -2
- package/src/cli/mcp/toolset.ts +0 -2
- package/src/cli/mcp/transports/http.ts +0 -2
- package/src/cli/mcp/transports/session-registry.ts +0 -2
- package/src/cli/mcp/transports/stdio.ts +0 -2
- package/src/cli/mcp/types.ts +0 -2
- package/src/cli/mcp/umbrella-tools.ts +0 -2
- package/src/cli/tools/codegraph.ts +0 -695
- package/src/core/adoption/helper-wrapper-plan.ts +0 -159
- package/src/runtime/context/codegraph-cache-boundary.ts +0 -255
- package/src/runtime/context/codegraph-read-provider.ts +0 -611
- package/src/runtime/context/codegraph-sidecar.cjs +0 -248
- package/src/runtime/control-plane/codegraph-cache-retention.ts +0 -164
- package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
- package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
- package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
- package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
- package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
- package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
- package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
- package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
- package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
- package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
- package/src/runtime/control-plane/routing/index.ts +0 -1
- package/src/runtime/control-plane/routing/route-policy.ts +0 -401
- package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
- package/src/runtime/gateway/mcp/execution-tools.ts +0 -2
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +0 -2
- package/src/runtime/gateway/mcp/persisted-check-process.ts +0 -2
- package/src/runtime/gateway/mcp/process-tools.ts +0 -2
- package/src/runtime/gateway/mcp/router.ts +0 -2
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +0 -2
- package/src/runtime/gateway/mcp/runtime-tools.ts +0 -2
- package/src/runtime/gateway/mcp/work-validation-reconciler.ts +0 -2
- package/src/runtime/plugins/browser-provider-registry.ts +0 -2
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# ADR: Stable A / Candidate B and ReleaseSession authority
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted source architecture; authority boundary refined 2026-09-20; live cutover remains a separate release operation
|
|
4
|
+
- **Date:** 2026-09-18
|
|
5
|
+
- **Authority:** [`../CURRENT.md`](../CURRENT.md) and executable Runtime/Recovery contracts
|
|
6
|
+
|
|
7
|
+
## Decision
|
|
8
|
+
|
|
9
|
+
Forge self-hosting has two lanes during a release session:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
Stable A (fixed known-good package Runtime)
|
|
13
|
+
source read/edit/build/static verification + Recovery control
|
|
14
|
+
remains running and is never upgraded by the session
|
|
15
|
+
|
|
16
|
+
Candidate B (one isolated Controller Home)
|
|
17
|
+
copied SQLite snapshot + independent token/config/port/service label
|
|
18
|
+
portable immutable release materialized once and tree-hashed
|
|
19
|
+
all candidate canaries on the exact artifact later promoted to A
|
|
20
|
+
|
|
21
|
+
ReleaseSession (release domain)
|
|
22
|
+
sole durable normal-release lifecycle authority
|
|
23
|
+
durable receipt/fence journal
|
|
24
|
+
final semantic routing decision: B or still-healthy A
|
|
25
|
+
|
|
26
|
+
Standalone Recovery provider
|
|
27
|
+
physical Candidate B preparation and verification
|
|
28
|
+
fenced Runtime activation / rollback
|
|
29
|
+
Watchdog health recovery only
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Candidate B never shares A's Controller Home, `control-plane.sqlite`, release
|
|
33
|
+
authority, token file, TCP port, service label, Runtime incarnation, Supervisor
|
|
34
|
+
socket or writer claim. B is not a second production authority: its Home is a
|
|
35
|
+
bounded test clone. New compiled release manifests are deployment-portable and
|
|
36
|
+
omit Controller Home; deployment binding belongs to release authority/service
|
|
37
|
+
contract instead. The exact verified B artifact is promoted byte-for-byte into
|
|
38
|
+
A's immutable release store. A remains the execution plane until an approved
|
|
39
|
+
ReleaseSession reaches one final cutover.
|
|
40
|
+
|
|
41
|
+
No source build, static gate, architecture review or ordinary test may stop or
|
|
42
|
+
activate Stable A. After the source batch is accepted, ReleaseSession may boot
|
|
43
|
+
and restart only isolated Candidate B while A remains continuously available.
|
|
44
|
+
The sole production cutover happens only after B passes Recovery, MCP,
|
|
45
|
+
Scheduler, Supervisor and controller canaries. Final certification then covers
|
|
46
|
+
A→B→C continuation, failed startup, Recovery interruption, Runtime restart,
|
|
47
|
+
MCP reconnection, stale Supervisor writer and return-to-A rollback.
|
|
48
|
+
|
|
49
|
+
## Incarnation and writer fence
|
|
50
|
+
|
|
51
|
+
`runtime-incarnation.json` is the Controller-Home durable writer epoch. Runtime
|
|
52
|
+
ownership acquires it monotonically with `runtimeInstanceId`, PID and
|
|
53
|
+
`fencingGeneration`; a child claim contains the same generation. A write is
|
|
54
|
+
valid only when owner, incarnation and whole-release authority all match.
|
|
55
|
+
Crash/hard-stop replacement advances the generation, making every old Runtime,
|
|
56
|
+
Scheduler worker, Gateway request and process writer stale without relying on
|
|
57
|
+
their `close()` handlers.
|
|
58
|
+
|
|
59
|
+
Supervisor's Unix socket has only ephemeral owner evidence containing the same
|
|
60
|
+
incarnation. A live socket is a hard writer conflict. A non-connectable socket
|
|
61
|
+
can be reconciled only as stale evidence for a different incarnation; the
|
|
62
|
+
historical `WORKFLOW_SUPERVISOR_WRITER_ALREADY_PRESENT` condition is therefore
|
|
63
|
+
an acceptance case, not a fallback branch.
|
|
64
|
+
|
|
65
|
+
Every service/Recovery/child boundary starts from the shared private-authority
|
|
66
|
+
environment sanitizer. It strips `FORGE_CONTROLLER_*`, `FORGE_RUNTIME_*`,
|
|
67
|
+
`FORGE_RELEASE_*`, `FORGE_SUPERVISOR_*`, `FORGE_WRITER_*` (including
|
|
68
|
+
`FORGE_WRITER_SLOT`) and related process identity. The exact selected release
|
|
69
|
+
contract may then add its own values. No ambient host claim is inherited.
|
|
70
|
+
|
|
71
|
+
## Recovery bundle and known-good
|
|
72
|
+
|
|
73
|
+
Known-good schema v2 means all of the following validate together:
|
|
74
|
+
|
|
75
|
+
1. immutable release manifest identity;
|
|
76
|
+
2. Recovery-owned SQLite `VACUUM INTO` snapshot with SHA-256 and inspection
|
|
77
|
+
counts/schema;
|
|
78
|
+
3. a hashed declarative Runtime service-contract snapshot.
|
|
79
|
+
|
|
80
|
+
The bundle lives below `Recovery/bundles/known-good/<attestationId>`. Recovery
|
|
81
|
+
creates its data before atomically publishing the known-good record, then
|
|
82
|
+
prunes unreferenced bundles only after publication. A crash leaves at most an
|
|
83
|
+
orphan for the same Recovery owner to clean; it never publishes a metadata-only
|
|
84
|
+
known-good record. Release retention uses this exact validator. Legacy schema-1
|
|
85
|
+
records remain audit history only and have no retention or rollback authority.
|
|
86
|
+
|
|
87
|
+
## ReleaseSession state
|
|
88
|
+
|
|
89
|
+
`Recovery/state/release-sessions/<id>.json` is the durable storage path for the
|
|
90
|
+
ReleaseSession transaction journal; that path is not a second authority. The
|
|
91
|
+
ReleaseSession domain owns semantic phase progression and a per-record revision
|
|
92
|
+
CAS, while the executing Recovery provider holds the existing mutation lock for
|
|
93
|
+
physical operations. Authority decisions read the complete journal through a
|
|
94
|
+
process-local cache that is invalidated by atomic session writes and directory
|
|
95
|
+
changes; bounded inventories are diagnostic/projection surfaces only and may
|
|
96
|
+
never decide whether an active or prior-attempt session exists. Terminal session
|
|
97
|
+
records remain durable evidence, while their Candidate B homes are physically
|
|
98
|
+
retired once; an already-absent home is an idempotent no-op and is not emitted as
|
|
99
|
+
a fresh cleanup event. A stateless ReleaseCoordinator derives the next action
|
|
100
|
+
from the persisted phase and has no second daemon, scheduler, Work, or durable
|
|
101
|
+
coordinator state. Only one non-terminal ReleaseSession may exist per Forge
|
|
102
|
+
instance. An interrupted `source_frozen` preparation resumes that same session
|
|
103
|
+
when the frozen source and Stable A identity still match.
|
|
104
|
+
|
|
105
|
+
Recovery's own bundle handoff acquires that same exclusive operation lock before
|
|
106
|
+
changing the immutable release pointer and holds it through activation verification
|
|
107
|
+
or exact rollback. New Gateway requests are fenced during this interval and the
|
|
108
|
+
admission marker is cleared on every exit. Open read-only MCP streams are transport
|
|
109
|
+
connections, not in-flight mutation evidence; HTTP request counts cannot add a
|
|
110
|
+
second quiescence gate. The existing service handoff still proves the previous
|
|
111
|
+
process has stopped and the exact replacement is serving before acceptance.
|
|
112
|
+
|
|
113
|
+
ReleaseSession separates wire compatibility from semantic authority. One-way migration also reconciles historical legacy `soaking` records without guesswork: Candidate B is terminalized as `known_good` only when exact durable lineage proves it became a later Stable A, or current RuntimeReleaseAuthority `previous` references that exact release identity; missing proof fails closed. Multiple later ReleaseSession attempts that all name the same exact Candidate B as Stable A are corroborating acceptance evidence, not branches. Successor proof is derived from one pre-migration inventory snapshot, so rewrite order cannot manufacture or erase acceptance evidence. Its
|
|
114
|
+
storage `schemaVersion` remains 1 so the immediately previous Recovery release
|
|
115
|
+
can still inventory the record after an exact rollback; current code requires
|
|
116
|
+
`semanticEpoch=2`. The migration boundary rewrites legacy epoch-1/epoch-less
|
|
117
|
+
records once and thereafter steady-state code consumes only epoch 2. The
|
|
118
|
+
`transaction` field is additive on the wire and ignored by the prior reader.
|
|
119
|
+
RuntimeReleaseAuthority schema 2 is the physical active/previous pointer plus
|
|
120
|
+
rollback SQLite artifact only; it carries no ReleaseSession transaction state.
|
|
121
|
+
|
|
122
|
+
```text
|
|
123
|
+
source_frozen → built → static_verified → candidate_booted
|
|
124
|
+
→ candidate_verified → cutover_eligible → cutover_attempting
|
|
125
|
+
→ cutover_committed → soaking → known_good
|
|
126
|
+
↘ rolled_back / failed
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`static_verified` requires type, runtime-architecture, architecture-sync and
|
|
130
|
+
bootstrap receipts from the frozen source revision. `candidate_verified`
|
|
131
|
+
requires Recovery restart, MCP, Scheduler, Supervisor and controller receipts
|
|
132
|
+
from isolated B. `cutover_eligible` is impossible while A and B collide on Home
|
|
133
|
+
or port. Before the first production activation, a transient failure to obtain a
|
|
134
|
+
fresh Stable A verification leaves the same ReleaseSession `cutover_eligible` so
|
|
135
|
+
the exact candidate can be retried after observation recovers; proven Stable A
|
|
136
|
+
identity drift is a real precondition failure. After those exact pre-cutover
|
|
137
|
+
checks and immutable Candidate promotion, Recovery may arm a bounded mechanical
|
|
138
|
+
drain marker in the existing Package Connector service root. The marker is tied
|
|
139
|
+
to the exact serving Stable A Connector generation (`releaseId`, `installedAt`,
|
|
140
|
+
and endpoint) plus the Recovery owner lifetime; that generation rejects new MCP
|
|
141
|
+
POST/stream admission with retryable 503 while already-admitted responses,
|
|
142
|
+
initialization and the existing session-idle window drain. The zero-active
|
|
143
|
+
request/stream gate is unchanged. A Candidate or rollback Connector rebind
|
|
144
|
+
changes the service generation before strict MCP verification, so the
|
|
145
|
+
replacement process is not trapped behind the predecessor marker. Recovery
|
|
146
|
+
clears the marker on every cutover exit; owner-liveness and TTL checks bound any
|
|
147
|
+
orphaned marker. This marker is transport fencing only, not ReleaseSession
|
|
148
|
+
state, release intent or another lifecycle owner. `cutover_attempting` permits
|
|
149
|
+
exactly one fenced production cutover; verified return to exact A terminalizes
|
|
150
|
+
`rolled_back` and is never retried. If observation is interrupted after the
|
|
151
|
+
rollback authority commit but before the ReleaseSession phase write,
|
|
152
|
+
reconciliation requires the exact `release-session-rollback:<sessionId>:`
|
|
153
|
+
authority operation plus matching Stable A, candidate and transaction identities;
|
|
154
|
+
it then records `rolled_back` without replaying the rollback effect.
|
|
155
|
+
Physical service handoff follows the same effect rule: a launchd/systemd helper
|
|
156
|
+
error or timeout is not itself authority that the requested stop/start failed.
|
|
157
|
+
Recovery performs bounded observation of the exact service identity and may
|
|
158
|
+
continue the same fenced transaction only when the physical effect is proven;
|
|
159
|
+
otherwise that transaction fails. Before stopping Stable A, Recovery may build
|
|
160
|
+
the rollback SQLite snapshot while A is still serving, but only under a
|
|
161
|
+
long-lived SQLite `data_version` observer. Any commit by another SQLite
|
|
162
|
+
connection during or after that speculative snapshot invalidates it; after
|
|
163
|
+
quiescence the release store discards it and falls back to the stopped-state
|
|
164
|
+
snapshot. Recovery also computes the bounded SHA-256 of that snapshot while A
|
|
165
|
+
is still serving. RuntimeReleaseAuthority persists this whole-database identity;
|
|
166
|
+
on rollback, a fresh live `VACUUM INTO` snapshot is compared against it. Only an
|
|
167
|
+
identical whole-database snapshot may be restored from the cutover backup. Any
|
|
168
|
+
SQLite change, including domain tables outside `control_plane_audit`, preserves
|
|
169
|
+
the newer live database while the Runtime release rolls back. Legacy backups
|
|
170
|
+
without whole-database identity also preserve live state. This optimization
|
|
171
|
+
therefore removes normal-path database copy/hash cost from the outage window
|
|
172
|
+
without weakening rollback or losing post-cutover durable state.
|
|
173
|
+
|
|
174
|
+
During the stop/start critical section, readiness convergence is intentionally
|
|
175
|
+
narrow: canonical Runtime owner/status, exact release/artifact authority and the
|
|
176
|
+
local `/ready` endpoint. Recovery Gateway/watchdog/tunnel probes, Connector
|
|
177
|
+
transport probes, execution canaries, known-good inspection and MCP protocol
|
|
178
|
+
verification are not activation-readiness inputs. After Runtime readiness,
|
|
179
|
+
Recovery rebinds the persistent Connector and then runs strict whole-Runtime
|
|
180
|
+
verification exactly once. There is no second readiness polling phase after
|
|
181
|
+
Connector rebinding. Once the physical candidate authority is published, the
|
|
182
|
+
ReleaseSession rollback transaction is durably captured before Candidate B is
|
|
183
|
+
started, so every later start/Connector/acceptance failure already has exact
|
|
184
|
+
Stable A rollback identity. Recovery never replays a cutover merely because a
|
|
185
|
+
helper response was lost.
|
|
186
|
+
Automatic source reconciliation is also revision-bounded: once an immutable
|
|
187
|
+
source revision has any terminal ReleaseSession, the daemon will not create a
|
|
188
|
+
second automatic ReleaseSession for that same revision. Explicit human release
|
|
189
|
+
operations remain available, and a changed source revision becomes eligible for
|
|
190
|
+
a new automatic attempt. This rule is derived from ReleaseSession history; it
|
|
191
|
+
introduces no retry ledger or second release authority.
|
|
192
|
+
|
|
193
|
+
Successful cutover enters `soaking` as soon as the canonical live Runtime observation proves the expected release/artifact identity is running, ready and non-stale. Cutover reconciliation does not rerun the expensive full verification suite after activation. Only the existing full verification + performance observation + recoverable release/SQLite/service bundle attestation may terminalize `known_good`. A definitive runaway-CPU rejection is an acceptance
|
|
194
|
+
failure, so Recovery executes the existing exact Stable A rollback transaction
|
|
195
|
+
instead of leaving Candidate B in `soaking` for repeated performance sampling.
|
|
196
|
+
Transient/unknown observations remain non-terminal and may be reconciled against
|
|
197
|
+
the same ReleaseSession. The state machine records redacted receipt ids and
|
|
198
|
+
summaries, never tokens, raw database payloads or browser messages.
|
|
199
|
+
|
|
200
|
+
## Persistent-state contract
|
|
201
|
+
|
|
202
|
+
| State | Semantic owner / writer | Terminal & retention | Recovery |
|
|
203
|
+
| --- | --- | --- | --- |
|
|
204
|
+
| `runtime-incarnation.json` | Canonical Runtime ownership acquisition | latest epoch; superseded generations remain stale | next owner CAS-reconciles |
|
|
205
|
+
| Supervisor socket owner evidence | Canonical Runtime/Supervisor composition | deleted with socket; ephemeral | probe then remove only stale non-connectable socket |
|
|
206
|
+
| known-good bundle | Standalone Recovery | bounded live attestations; prune only after state commit | validate release + DB + service contract offline |
|
|
207
|
+
| RuntimeReleaseAuthority | Runtime Root physical release store | schema 2; active/previous release identity and previous SQLite backup only | physical publish/rollback; no release-phase or transaction intent |
|
|
208
|
+
| ReleaseSession | Release domain / stateless ReleaseCoordinator | wire schema 1 + current semantic epoch 2; `known_good`, `rolled_back`, `failed`; bounded session retention is physical cleanup | revision CAS resumes the same session; Recovery provider executes physical effects |
|
|
209
|
+
| Candidate B Home | ReleaseSession semantic authority / Recovery physical provider | explicit retired cleanup after evidence retention; soaking and terminal sessions are physically reclaimable only after candidate owner quiescence | no deletion/rebuild of A; B can be inspected independently |
|
|
210
|
+
| Process Runtime terminal lease | Process Runtime lease authority | terminal evidence and lease release are separate idempotent phases | terminal observation/wait/cancel and full maintenance retry exact lease release until settled |
|
|
211
|
+
|
|
212
|
+
All bundle and session data is local Controller state. It contains no secrets:
|
|
213
|
+
the service contract records a token *path*, while each B token is an independently generated private credential and is never copied from A. SQLite data follows the Controller Home's existing privacy/backup policy.
|
|
214
|
+
|
|
215
|
+
## Verification
|
|
216
|
+
|
|
217
|
+
- Ordinary repository Work terminalizes at accepted source delivery and cannot depend on Runtime staging, activation, soak or known-good;
|
|
218
|
+
- release-level gates execute once for the frozen ReleaseSession candidate rather than once per contributing Work;
|
|
219
|
+
- Candidate lane derivation/build cannot mutate A; Candidate boot/restart touches only B's isolated service/Home;
|
|
220
|
+
- byte-identical release-tree identity is required for B→A promotion; no production rebuild is allowed;
|
|
221
|
+
- stale Runtime generation and release claims cannot write;
|
|
222
|
+
- every Recovery restart/release transition proves service, Runtime owner, TCP listener and Supervisor writer quiescence before authority may change;
|
|
223
|
+
- Recovery restart/cutover readiness polling is bounded to fenced Runtime identity plus local readiness; strict whole-Runtime verification remains a single post-Connector acceptance gate;
|
|
224
|
+
- the normal cutover prebuilds and hashes its rollback SQLite snapshot while Stable A is live and reuses it only when one SQLite-wide `data_version` observer proves no intervening commit; otherwise stopped-state backup remains the fail-closed fallback;
|
|
225
|
+
- rollback restores the cutover SQLite snapshot only when whole-snapshot SHA-256 matches a fresh live snapshot; any database-wide change preserves live SQLite, while `auditEventCount` remains compatibility/diagnostic evidence only;
|
|
226
|
+
- ReleaseSession captures exact rollback transaction identity immediately after the physical authority publish and before Candidate B starts;
|
|
227
|
+
- private writer environment cannot cross service or child boundaries;
|
|
228
|
+
- stale or missing known-good bundle material cannot protect a release;
|
|
229
|
+
- ReleaseSession cannot advance past static/candidate gates or a stale CAS;
|
|
230
|
+
- no-op automatic reconciliation does not fork a Recovery worker, and terminal source revisions are not autonomously replayed;
|
|
231
|
+
- definitive runaway-CPU rejection restores Stable A through the existing ReleaseSession rollback authority rather than repeating soak measurement;
|
|
232
|
+
- terminal Process observation and full maintenance both reconcile any exact leftover workspace lease; `completed_unknown` cannot permanently fence a checkout;
|
|
233
|
+
- periodic Runtime maintenance is the production retention caller; its rotating removal phase reaches release history without starving the other cleanup classes, while committed Runtime authority protects active/previous release trees, the serving Connector release and the previous rollback SQLite backup; historical known-good evidence alone does not pin release trees;
|
|
234
|
+
- final live release testing remains a separate, one-shot governed operation.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Autonomous Work liveness invariant
|
|
2
|
+
|
|
3
|
+
Date: 2026-09-19
|
|
4
|
+
Status: accepted
|
|
5
|
+
|
|
6
|
+
## Problem
|
|
7
|
+
|
|
8
|
+
Forge could retain a non-terminal Work indefinitely after its execution carrier and
|
|
9
|
+
Controller ownership disappeared. A current Plan protected that Work from stale
|
|
10
|
+
authority retirement, but nothing materialized the already-existing semantic
|
|
11
|
+
decision that the Work was ready to continue. The visible result was an unfinished
|
|
12
|
+
conversation/task with no process, no live Controller owner and no next round.
|
|
13
|
+
|
|
14
|
+
## Decision
|
|
15
|
+
|
|
16
|
+
Global Scheduler's normal reconciliation cadence owns materialization, not semantic
|
|
17
|
+
planning.
|
|
18
|
+
|
|
19
|
+
For every active runnable Work with no active execution and no live Controller
|
|
20
|
+
owner:
|
|
21
|
+
|
|
22
|
+
1. If the Work is Plan-bound, projectAutonomousGoalProgression() is the sole
|
|
23
|
+
authority deciding whether the current Work is WORK_READY_TO_CONTINUE.
|
|
24
|
+
2. If the Work is not Plan-bound, reconciliation may perform only the lower-level
|
|
25
|
+
mechanical liveness wake when Work/Requirement/ControllerRound state contains
|
|
26
|
+
no terminal or explicit wait authority. It never invents Plan authority.
|
|
27
|
+
3. Existing retained ControllerSession identity and ControllerBinding are reused.
|
|
28
|
+
A retained session is identity evidence, not a live ownership lease.
|
|
29
|
+
4. ControllerRound remains the sole provider-effect fence. The progression
|
|
30
|
+
idempotency key, or a deterministic planless Work occurrence key, becomes the
|
|
31
|
+
occurrence identity, so repeated scheduler ticks converge rather than replay.
|
|
32
|
+
5. If Workflow Supervisor owns the outer ChatGPT turn, Scheduler only ensures the
|
|
33
|
+
idempotent Supervisor enrollment effect. It must not dispatch a competing
|
|
34
|
+
provider prompt.
|
|
35
|
+
6. Existing semantic wait, wait_for_user, blocked/failed round state, live
|
|
36
|
+
execution, live Controller ownership and terminal Work/Requirement state all
|
|
37
|
+
suppress automatic continuation.
|
|
38
|
+
|
|
39
|
+
No new lifecycle state, watchdog table, polling daemon, retry authority or
|
|
40
|
+
Process-specific continuation path is introduced.
|
|
41
|
+
|
|
42
|
+
## Baseline boundary
|
|
43
|
+
|
|
44
|
+
Liveness reconciliation does not re-check the repository integration baseline in
|
|
45
|
+
the middle of an already-running isolated Work. For Plan-bound Work it evaluates
|
|
46
|
+
Goal Progression against the Plan's frozen source revision. Baseline drift remains
|
|
47
|
+
an admission/replan boundary after the independent Work reaches its semantic
|
|
48
|
+
boundary; it is not a reason to repeatedly interrupt execution.
|
|
49
|
+
|
|
50
|
+
## Recovery boundary
|
|
51
|
+
|
|
52
|
+
The existing periodic stalled-ControllerRound recovery remains responsible for
|
|
53
|
+
already-open rounds whose provider dispatch or closure was abandoned. The new
|
|
54
|
+
normal reconciliation path handles the previously invisible case where no round
|
|
55
|
+
exists at all.
|
|
56
|
+
|
|
57
|
+
## Acceptance
|
|
58
|
+
|
|
59
|
+
A runnable ownerless Work converges to exactly one existing Controller continuation
|
|
60
|
+
authority within the normal Scheduler reconciliation cadence. Repeated ticks and
|
|
61
|
+
runtime re-entry cannot duplicate provider dispatch, and explicit waits remain
|
|
62
|
+
stable.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Thin semantic working context and revision authority
|
|
2
|
+
|
|
3
|
+
Status: accepted architecture; canonical cutover is implemented in current source with final verification pending. Frozen-client compatibility projections remain where required.
|
|
4
|
+
|
|
5
|
+
## Decision
|
|
6
|
+
|
|
7
|
+
Forge exposes only three cross-domain model-authored semantic records: Requirement, Plan, and optional Work. Requirement is stable intent, Plan is model-authored strategy/decisions/progress, and Work is an independently resumable semantic unit. Workflow, Schedule, Connection/Grant, Process, ControllerRound, repository state, and domain handles remain operational, security, execution, or domain facts rather than additional working-memory authorities.
|
|
8
|
+
|
|
9
|
+
Each semantic record has one stable identity, one portable semantic scope and one monotonic semantic revision. ForgeInstance is the root authority; repository/checkout identity is execution placement or optional domain context, never synthetic semantic ownership. Model-facing writes use expected-revision compare-and-swap. A stale write fails with the current semantic record/revision and never silently merges. The append-only requirement_revision, plan_semantic_revision, and work_semantic_revision records are immutable history evidence, not independently mutable authorities; Controller storage revisions remain internal persistence concurrency metadata.
|
|
10
|
+
|
|
11
|
+
Plan semanticContext is the model-facing semantic authority once present. Legacy PlanContract goal/step/lifecycle fields remain migration/execution compatibility data and cannot implicitly rewrite semanticContext. Requirement/source basis revisions are provenance and staleness hints only. Source movement is observed at concrete mutation boundaries and does not make Plan working memory an execution gate. Thin Plan `scopeKey` is descriptive discovery/lineage metadata only, never an ownership mutex; current model-facing replanning revises the same stable Plan id rather than superseding it.
|
|
12
|
+
|
|
13
|
+
New Work records materialize semanticState from creation. Mechanical Work status, phase, verification, review, delivery, cleanup, provider, recovery, and completion receipts do not rewrite semanticState. Pre-semantic legacy Work may infer an initial semantic state from its historical terminal status until its first semantic revision; that revision materializes the state and ends the fallback. Work resultRefs are model/user-selected references only. Mechanical completion and check receipts are exposed separately.
|
|
14
|
+
|
|
15
|
+
ResumeContext is a derived read bundle assembled on demand from the latest relevant semantic records plus current source/resource facts, unresolved human requests, active durable handles, and pertinent receipts. It is never persisted as a fourth aggregate, and conversation text or projection caches are never authority.
|
|
16
|
+
|
|
17
|
+
## Concurrency and migration boundary
|
|
18
|
+
|
|
19
|
+
Semantic CAS protects authored context. Git/worktree, Process/resource leases, authorization grants, effect identities, and other concrete fences protect the resources they actually own. Verification is Work-bound evidence and is never gated by a Work-wide ControllerSession claim; durable checks are admitted by the Work's declared check set and then fenced by immutable execution identity plus Process Runtime resource claims. A semantic revision must be applied to the latest persisted aggregate inside the same storage transaction so a concurrent mechanical update cannot be overwritten merely because the semantic revision did not change.
|
|
20
|
+
|
|
21
|
+
The source still contains legacy Requirement waiting/continue, Plan approval/PlanStep/supersession data, Work finalization, and ControllerRound machinery for frozen-client compatibility and historical delivery continuity. These mechanisms are not current model-facing semantic authorities and cannot be consulted as semantic-write gates. `plan_approve` and `plan_accept_step` are compatibility no-ops; Work completion, verification, review, and terminal state never claim, complete, release, or reopen Plan item state. ControllerRound identity may fence the frozen transport/resume envelope but cannot authorize Requirement/Plan/Work semantic writes, and a frozen client may carry that exact authority through the bounded `session_id` compatibility carrier as long as the canonical principal/Work/round comparison still decides the claim.
|
|
22
|
+
|
|
23
|
+
Plan items are now authored working memory with no execution authority at all. No active path records a Plan item Work link, promotes item status, requires Plan approval/acceptance, or selects a successor from Plan dependencies: Work start/continue/completion read Plan and Plan item references as provenance only, and `plan.step.retry:<workId>` is a read-only compatibility report. Predecessor obligation continuity, Plan-source drift and Plan-finalization no longer gate Plan admission, Revision, Work execution or Requirement completion. Legacy `PlanContract.steps`/status/obligation fields remain migration-readable data; the retired PlanStep execution plane, obligation-continuity enforcement, Plan-bound Work refresh/retirement helpers and the PlanStep progression projector are deleted, and the architecture check forbids reintroducing them.
|
|
24
|
+
|
|
25
|
+
No Runtime/Recovery release transition is part of this decision.
|
|
26
|
+
|
|
27
|
+
## Thin capability substrate consolidation (2026-09-24)
|
|
28
|
+
|
|
29
|
+
### 0. Execution target and host-local command lane (historical 2026-09-26 Slice 2)
|
|
30
|
+
|
|
31
|
+
**Command entrypoints superseded on 2026-10-15 by `1861b541d`.** The only model-visible general terminal tool is `execute_command`, defaulting to repository/workspace placement with explicit `scope=host` subject to the original `process:exec` Grant. `dry_run=true` replaces separate preview; process lifecycle tools attach to handles. The old `repository_command_execute`, `process_exec`, `work_execute`, `repository_command_preview` and the `local_system` generic command action are no longer public. The bullets below record the historical slice, **not current tool-selection guidance**. Canonical entry and gates: `adapters/mcp/tool-mapping/repository-tools.ts`, `adapters/mcp/server.ts`, `adapters/mcp/toolset-names.ts`, `scripts/check-runtime-architecture.mjs`.
|
|
32
|
+
|
|
33
|
+
- `ProcessScope` is the canonical Process/Operation storage scope. Repository placement is optional context; the ForgeInstance scope is a sibling partition (`<controllerHome>/instance`) so a non-repository process never needs a synthetic repository identity.
|
|
34
|
+
- The Process Runtime owns an instance-level handle index (`process_handle_index`) recording processId -> target (`forge_instance` | `repository`) -> principal. Attachment resolves its target from the handle, never by scanning repositories or replaying placement inputs.
|
|
35
|
+
- `process_get`/`process_wait`/`process_logs`/`process_cancel` are addressed by `process_id`. An explicit `repo_id` is still accepted and validated against the recorded target.
|
|
36
|
+
- Instance-level handles are principal-bound and ForgeInstance-bound: an opaque handle id locates a record and never authorizes attachment on its own.
|
|
37
|
+
- `process_exec` is the canonical host-local command lane: the target is the serving ForgeInstance, `cwd` is an execution argument, and neither a repository nor a Work is required. It never parses command text to prove path safety; narrow path/repository guarantees remain with typed filesystem/source/git capabilities.
|
|
38
|
+
- Host process execution requires one explicit canonical Grant for `process:exec` whose typed target is the exact ForgeInstance. Missing instance identity, principal, or grant fails closed with no fallback host, container, or checkout.
|
|
39
|
+
- Distinct-by-design from the narrow typed `local_system` plugin lane: `execute_command` is a bounded, target-grant-scoped, typed-argv action whose path operands must stay inside a registered workspace target, while `process_exec` is the deliberately broad raw host capability with no path sandbox and a process handle. Consolidating the two into one owner (or retiring the narrow lane's command action) is an explicit open obligation of this slice, not a settled decision.
|
|
40
|
+
- Already satisfied (reconciled 2026-09-26, source evidence only): a Work-bound repository command defaults cwd to the resolved Work/checkout identity and an authorized explicit cwd outside it is served by the host lane; `git worktree remove` already resolves the owning repository/checkout (`selectTerminalCleanupTarget`) and never selects the removed target checkout as current; `process_get`/`process_wait`/`process_logs`/`process_cancel` resolve by handle with `repo_id` optional.
|
|
41
|
+
- Done — semantic storage identity (Slice 1 remainder): Requirement was already ForgeInstance-scoped (`scope: 'controller'`). Plan is repository-optional: `PlanContract.repoId` (and its revision/summary/input carriers) is optional provenance, `PlanContractStoreLocation` accepts a portable `scopeKey` (`semantic` is the reserved ForgeInstance scope, mirroring the workspace/instance partitions), and `plan_create` with zero enabled repositories creates the Plan in that scope — one repository stays authoritative, several keep the explicit ambiguity error. Plan and Work were already resolvable by stable id across scopes without a repository (`findControlPlaneRecordsByKey`). Work remains repository-bound on purpose: its execution semantics (WorkHandle, leases, checkout/delivery) have no meaning without a target, so its `repoId` is not a fake identity. `rh_status` is now instance-scoped: with zero or several repositories the summary resolves no repository target, reports `repositoryContext: null`, keeps runtime/tool-surface/source-coherence readiness, lists active Plans from the semantic scope, reports Work/handoff sections as unavailable rather than inventing a repository, downgrades `detail_level: detail` to the instance summary (reporting `requestedDetailLevel`), and fails closed with `REPOSITORY_CONTEXT_REQUIRED_FOR_REPAIR`/`..._FOR_DETAIL` only where repository context is genuinely required. `rh_inbox` (legacy Handoff) stays repository-scoped until Slice 7 replaces it with UserRequest.
|
|
42
|
+
- Done — ephemeral workspace scope and typed command target: `workspace_*` is a reserved workspace scope key (`controller-home.ts` `WORKSPACE_SCOPE_PREFIX`/`scopedOperationRoot`). An arbitrary workspace is now a `RepositoryCommandScopeTarget` (`workspaceScopeKey` + root + workspace checkout coordinate) instead of a fabricated `RepositoryRecord`; `resolveEphemeralWorkspaceTarget` no longer builds a repository record. Process/Operation records, lightweight receipts, logs, GC, handle-index targets, command audit, git-command audit, access policy, approval requests, work-handle mirrors and execution leases for a workspace target live in `<controllerHome>/workspaces/<workspaceId>`, and attachment resolves by handle or by the workspace id. Repository and `__controller__` scopes keep their established roots and payload fields byte-for-byte; repository-semantic checks (bound-session mutation, default-branch delivery, work-handle authority, `repositoryGitStatus`) now run only when a repository target exists. Workspace preview/execute payloads report `scopeId` + `workspace` and never a `repoId`. Bounded read-only fallbacks still resolve facts written to the old repository location (process records, lightweight receipts, access policy, approval requests). Residual: `ResolvedExecutionIdentity.repositoryId` still carries the workspace scope key as its required field name, and the controller lock scope key for a workspace is still spelled `{ scope: 'repository', repoId }`; both are naming/typing debt rather than repository identity or repository storage. Repository-semantic behavior for a workspace target (mutation authority, delivery guards) is now explicitly "not applicable" rather than evaluated against a fabricated repository.
|
|
43
|
+
- Open obligation — Grant target matching: exact matching with explicit wildcard only is blocked by `PluginCapabilityAuthorizationGrant.repoId` and `target.identityFingerprint` being optional while plugin queries always normalize `repoId`. Making matching exact requires migrating the stored plugin grants and the query normalization together; tightening only `grant-store.ts` would deny live plugin capabilities.
|
|
44
|
+
- Historical remaining items: generalizing durable Process/result/artifact/evidence stores to domain-handle scope and the instance-scoped recovery *apply* split (its audit record and several repository-repair actions still require RepositoryContext). The earlier `repository_command_execute` facade proposal was retired rather than preserved as another execution layer; the single `execute_command` uses the existing Process Runtime.
|
|
45
|
+
|
|
46
|
+
### 1. Mode-free capability surface
|
|
47
|
+
- Capabilities (`read`, `search`, `edit`, `command`, `process`, `git`, `workspace`, `browser`, `computer`, `plugin`, `API`, `agent`, `schedule`, `release`, `recovery`) remain domain-shaped public capabilities and compose without mandatory Requirement, Plan, Work, task-size thresholds, or mode tokens.
|
|
48
|
+
- Shared invocation conventions are deliberately small: principal/target, typed arguments, optional expected revision, timeout/cancellation, idempotency token, and result or typed handle.
|
|
49
|
+
- A direct task may acquire Work durability later by attaching existing semantic refs/handles/receipts without replaying prior effects.
|
|
50
|
+
|
|
51
|
+
### 2. Mechanical authority consolidation
|
|
52
|
+
- Canonical `Grant` is the single authorization fact for principal + capability/action set + target/resource scope + constraints + expiry/revocation. Plugin authorization reads/revokes/reconciles canonical Grant first; the old plugin grant JSON is migration seed/compatibility projection only. Repository ID is optional locator metadata, not mandatory scope.
|
|
53
|
+
- `OwnedResource` records Forge-created worktrees/branches and cleanup provenance. Creating/recovering a managed workspace records ownership; cleanup receipts settle that ownership idempotently.
|
|
54
|
+
- Optimistic CAS and native Git/OS conflict semantics are default; short exclusive claims exist only for concrete shared mutable resources (Git refs/index, release promotion, physical input, mutable provider target).
|
|
55
|
+
- Work is not a mutex. ControllerSession/ControllerRound remains only where transport, external-effect, or destructive resource fencing needs an exact mechanical identity; it is not a semantic mutation lock.
|
|
56
|
+
|
|
57
|
+
### 3. Continuity, schedule, and user requests
|
|
58
|
+
- Open Work is durable context, not an autonomous execution loop instruction.
|
|
59
|
+
- `ScheduleDefinition` (authored trigger, target, policy, action, stop conditions, enabled) is split from `ScheduleRuntimeState` (lastTriggeredAt, consecutiveFailures, nextEligibleAt, occurrences, observation data). Scheduler records triggers, timing, bounded backoff and dispatch facts; internal watcher/provider failures do not manufacture human Handoffs.
|
|
60
|
+
- `UserActionRequest` / `UserDecisionRequest` is the canonical person-only blocker/decision authority and coalesces repeated occurrences by rootCauseKey. Legacy Handoff is written only as a compatibility/UI projection after the UserRequest exists.
|
|
61
|
+
- A Schedule occurrence is continuation input, not a human blocker: semantic/model-owned schedules record trigger, decision and occurrence identity without manufacturing Handoff/UserRequest state.
|
|
62
|
+
- Workflow Supervisor observes outstanding external-turn effects and may reserve one exactly-once provider resume for an applied-but-uncompleted effect. It does not own recursive provider retry depth or Scheduler retry policy.
|
|
63
|
+
|
|
64
|
+
### 4. Completion vs release/recovery
|
|
65
|
+
- `work_complete` records only the model/user semantic decision and result references. Source integration, git merge, publication, release activation, and resource cleanup are separate capabilities/effects.
|
|
66
|
+
- `finalize`, `verify`, `review`, `controller_claim`, controller disposition/release, and plan approval/step-acceptance are not Work operations. After Runtime/Connector rollover they are rejected rather than translated.
|
|
67
|
+
- Pre-cutover `work_finalize` Worker payloads and review-candidate preparation are hard-rejected as well; a restart cannot replay them. Typed repository execution owns Git effects directly.
|
|
68
|
+
- Periodic cleanup does not treat semantic `completed`/`cancelled` as deletion authorization. A dirty managed worktree is retained in place; cleanup never auto-commits, archives, discards, or force-removes uncommitted bytes merely because Work became terminal.
|
|
69
|
+
- Cleanup debt is derived from owned-resource facts, acts only on resources proven Forge-owned, and is retryable/idempotent independently of Work completion.
|
|
70
|
+
|
|
71
|
+
### 5. Compatibility surface and projections
|
|
72
|
+
- There is no frozen lifecycle envelope after the cutover. Clients reconnect to the current MCP schema and use explicit semantic CAS operations.
|
|
73
|
+
- Deprecated route/work-mode/operational-plan surfaces are compatibility projections only. They may report concrete continuity/placement needs and available capabilities, but must not prescribe task-size modes, worker choice, validation policy, review lifecycle, or next engineering method.
|
|
74
|
+
- Activity/status/Handoff/legacy PlanStep data are derived or compatibility views. A stale projection is repairable cache debt, never a reason to reject a canonical semantic CAS or concrete resource/effect operation.
|