@moretea-labs/forge 1.8.0 → 1.8.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 +70 -7
- package/CHANGELOG.md +14 -0
- package/CLAUDE.md +17 -2
- package/CONTRIBUTING.md +3 -2
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/adapters/chatgpt/browser-delivery-host.ts +7 -1
- package/adapters/chatgpt/browser-delivery-runtime.ts +529 -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 +228 -1
- package/adapters/chatgpt/work-conversation-binding-store.ts +79 -53
- package/adapters/computer/chatgpt-extension-target.ts +463 -0
- package/adapters/computer/chatgpt-target-router.ts +103 -0
- package/adapters/computer/chrome-extension/background.js +385 -0
- package/adapters/computer/chrome-extension/content.js +378 -0
- package/adapters/computer/chrome-extension/core.js +24 -0
- package/adapters/computer/chrome-extension/manifest.json +30 -0
- package/adapters/computer/desktop-operator-discovery.ts +11 -31
- package/adapters/computer/interaction-target-authority.ts +142 -18
- package/adapters/mcp/auth.ts +0 -1
- package/adapters/mcp/instructions.ts +5 -4
- package/adapters/mcp/multi-repository.ts +3 -19
- package/adapters/mcp/oauth.ts +73 -0
- package/adapters/mcp/paths.ts +4 -1
- package/adapters/mcp/runtime-gateway/automation-receipt-adapter.ts +87 -0
- 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 +411 -73
- package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +91 -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 +8 -42
- package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +117 -45
- package/adapters/mcp/runtime-gateway/process-tools.ts +190 -22
- 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 +18 -504
- package/adapters/mcp/runtime-gateway/routing-policy.ts +499 -0
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +14 -65
- package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +113 -173
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +15 -5
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +1 -0
- package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +358 -266
- package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +136 -0
- package/adapters/mcp/runtime-gateway/work-adapter.ts +261 -3122
- 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 +246 -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 +263 -0
- package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
- package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +156 -0
- package/adapters/mcp/server.ts +67 -23
- package/adapters/mcp/setup.ts +1 -3
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +44 -170
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +4 -9
- package/adapters/mcp/tool-mapping/repository-tools.ts +133 -142
- package/adapters/mcp/toolset-names.ts +5 -0
- package/adapters/mcp/toolset.ts +6 -5
- package/adapters/mcp/transports/http-observation.ts +365 -0
- package/adapters/mcp/transports/http.ts +154 -677
- 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/assets/plugin-registry.v1.json +6 -4
- package/assets/reference-configs/agentic-development-flow.md +25 -0
- package/assets/reference-configs/global-working-rules.md +19 -0
- package/assets/skill-version.json +2 -2
- package/docs/architecture/CURRENT.md +111 -41
- 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/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 +221 -0
- package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
- package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +72 -0
- package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +237 -0
- package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
- package/docs/architecture/domains/verification.md +1 -0
- package/docs/architecture/domains/workflow-engine.md +6 -0
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
- package/docs/forge-plugin-management.md +2 -2
- package/docs/operations/controller-performance-and-502.md +17 -0
- package/docs/operations/controller-reliability-runbook.md +2 -2
- package/docs/operations/features.md +1 -1
- package/docs/operations/features.zh-CN.md +1 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +2 -0
- package/docs/operations/releasing.md +2 -0
- package/docs/operations/standalone-disaster-recovery.md +14 -6
- package/docs/wiki/Implementation.md +1 -1
- package/package.json +25 -14
- 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 +297 -71
- 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 +77 -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/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 +153 -133
- package/packages/kernel/work/api/index.ts +3 -2
- package/packages/kernel/work/application/work-service.ts +17 -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 +25 -63
- package/packages/kernel/work/domain/types.ts +57 -51
- package/packages/kernel/work/infrastructure/work-contract-store.ts +819 -728
- package/packages/kernel/work/ports/work-contract-store.ts +5 -2
- 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 +143 -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/canary-controller-semantic-wait.ts +12 -24
- package/scripts/check-mcp-compatibility.ts +48 -136
- package/scripts/check-runtime-architecture.mjs +622 -217
- package/scripts/forge-local-recovery-helper.mjs +93 -15
- package/scripts/lib/project-init-lib.sh +3 -0
- package/scripts/open-source-audit-allowlist.txt +1 -2
- package/scripts/run-bounded-command.mjs +5 -0
- package/scripts/run-governed-gate.ts +0 -1
- package/scripts/run-mobile-monitor-bridge.ts +0 -1
- package/scripts/smoke-control-plane-failure-domain.ts +94 -0
- package/scripts/smoke-mcp-http-runtime.ts +5 -0
- 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 +92 -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/verify-forge-runtime.sh +2 -1
- package/src/cli/agent-jobs/executor-health.ts +11 -34
- package/src/cli/agent-jobs/integration.ts +18 -49
- package/src/cli/agent-jobs/job-manager.ts +7 -3
- 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/recovery.ts +135 -121
- package/src/cli/commands/runtime.ts +3 -3
- 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 +4 -43
- package/src/cli/controller/completion-target.ts +3 -72
- package/src/cli/controller/context/source-materializer.ts +81 -100
- package/src/cli/controller/context-pack.ts +10 -8
- 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 +24 -51
- 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 +39 -1
- package/src/cli/editing/edit-session.ts +1 -7
- package/src/cli/local-bridge/console-automations.ts +18 -13
- package/src/cli/local-bridge/console-view-models.ts +3 -12
- package/src/cli/local-bridge/facade-api.ts +64 -191
- 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-executor.ts +29 -23
- package/src/cli/repositories/command-scope.ts +35 -16
- 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/registry.ts +77 -11
- package/src/cli/repositories/structured-git.ts +62 -2
- package/src/cli/repository/session-cache.ts +92 -6
- 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/semantic-navigation-contract.ts +9 -0
- package/src/runtime/context/semantic-navigation.ts +6 -34
- 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 +212 -9
- 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 +497 -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 +188 -109
- package/src/runtime/control-plane/execution/work-handle-store.ts +19 -43
- 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 +43 -27
- package/src/runtime/control-plane/execution/work-preparation-service.ts +126 -266
- 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 +173 -186
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -84
- package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
- package/src/runtime/control-plane/facade/capability-registry.ts +362 -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 +8 -8
- package/src/runtime/control-plane/generated-cache-retention.ts +97 -1
- 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 +239 -112
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +2 -1
- 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/launcher/chatgpt-round-continuation.ts +63 -300
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +28 -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 +290 -21
- 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/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 +79 -27
- 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 +35 -2
- package/src/runtime/execution/process-runtime/store.ts +30 -2
- package/src/runtime/execution/process-runtime/types.ts +6 -1
- package/src/runtime/execution/workers/executor.ts +2 -6
- 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 +85 -28
- package/src/runtime/plugins/app-store-connect-adapter.ts +38 -14
- package/src/runtime/plugins/browser-adapter.ts +757 -34
- package/src/runtime/plugins/browser-automation-service.ts +23 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +321 -29
- package/src/runtime/plugins/browser-manifest-surface.ts +45 -11
- package/src/runtime/plugins/browser-native-session-service.ts +63 -13
- package/src/runtime/plugins/browser-registration.ts +16 -0
- package/src/runtime/plugins/browser-runtime.ts +14 -1
- 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 +219 -0
- package/src/runtime/plugins/computer-chatgpt-macos-target.ts +891 -0
- package/src/runtime/plugins/computer-registration.ts +222 -11
- 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/gmail-adapter.ts +23 -2
- package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
- package/src/runtime/plugins/google-shared.ts +14 -7
- package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
- package/src/runtime/plugins/ios-adapter.ts +1 -1
- package/src/runtime/plugins/lightweight-action.ts +208 -2
- package/src/runtime/plugins/local-system-adapter.ts +12 -2
- 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 +602 -428
- package/src/runtime/plugins/types.ts +20 -0
- package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
- package/src/runtime/projections/invalidation.ts +7 -3
- package/src/runtime/projections/materialized-view.ts +80 -36
- package/src/runtime/recovery/actions.ts +3 -3
- package/src/runtime/recovery/capability-action-application.ts +46 -45
- package/src/runtime/recovery/lifecycle-inventory.ts +29 -29
- package/src/runtime/recovery/maintenance-executor.ts +374 -123
- package/src/runtime/recovery/store.ts +29 -11
- package/src/runtime/release/release-coordinator.ts +296 -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 +192 -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 +105 -19
- package/src/runtime/root/package-runtime-release.ts +117 -18
- package/src/runtime/root/package-runtime-service.ts +17 -11
- package/src/runtime/root/release-execution-canary.ts +44 -12
- package/src/runtime/root/release-loader.ts +90 -8
- package/src/runtime/root/release-manifest.ts +80 -6
- package/src/runtime/root/release-materialize.ts +372 -28
- package/src/runtime/root/release-store.ts +395 -36
- package/src/runtime/root/runtime-lane.ts +191 -0
- package/src/runtime/root/runtime.ts +159 -27
- package/src/runtime/root/scheduled-controller-composition.ts +28 -3
- package/src/runtime/root/service-runner.ts +2 -2
- package/src/runtime/root/service.ts +36 -33
- package/src/runtime/root/status.ts +48 -0
- package/src/runtime/root/types.ts +32 -3
- package/src/runtime/root/workflow-supervisor-composition.ts +493 -0
- package/src/runtime/root/workflow-supervisor-runtime.ts +209 -0
- package/src/runtime/root/write-fence.ts +50 -2
- package/src/runtime/safe-tooling/google-credential-store.ts +76 -21
- package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
- package/src/runtime/safe-tooling/workspace-auth.ts +1 -1
- package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
- 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 +3702 -342
- package/src/runtime/standalone-recovery/entry.ts +469 -39
- 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 +1 -1
- 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 +10 -3
- package/src/runtime/workflow/schedules/engine.ts +138 -172
- package/src/runtime/workflow/schedules/work-continuation.ts +44 -5
- 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 +201 -0
- package/supervisor/control-plane.ts +868 -0
- package/supervisor/entry.ts +15 -0
- package/supervisor/forge-validators.ts +80 -0
- package/supervisor/index.ts +5 -0
- package/supervisor/native-browser-adapter.ts +786 -0
- package/supervisor/native-messaging/host.ts +39 -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 +202 -0
- package/supervisor/server.ts +404 -0
- package/supervisor/store.ts +1451 -0
- package/supervisor/tsconfig.json +8 -0
- package/supervisor/types.ts +255 -0
- 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/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-tarball-install-smoke.sh +0 -150
- 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/stage-runtime-release.ts +0 -44
- 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/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
|
@@ -90,6 +90,24 @@ export interface AssistantPluginManifest {
|
|
|
90
90
|
duplicateStateAllowed: false;
|
|
91
91
|
sourceOfTruth: string[];
|
|
92
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* A temporary transport projection. It is descriptive only: the replacement
|
|
95
|
+
* owner remains the sole execution and persistence authority.
|
|
96
|
+
*/
|
|
97
|
+
compatibility?: {
|
|
98
|
+
replacementOwner: string;
|
|
99
|
+
boundedConsumers: Array<{
|
|
100
|
+
surface: 'plugin_action_execute';
|
|
101
|
+
pluginId: string;
|
|
102
|
+
actionIds: string[];
|
|
103
|
+
}>;
|
|
104
|
+
removalCondition: {
|
|
105
|
+
kind: 'no_supported_frozen_contract_actions';
|
|
106
|
+
surface: 'plugin_action_execute';
|
|
107
|
+
pluginId: string;
|
|
108
|
+
actionIds: string[];
|
|
109
|
+
};
|
|
110
|
+
};
|
|
93
111
|
enabled: boolean;
|
|
94
112
|
lifecycle: {
|
|
95
113
|
state: AssistantPluginLifecycleState;
|
|
@@ -140,6 +158,8 @@ export interface AssistantPluginActionRequest {
|
|
|
140
158
|
|
|
141
159
|
export interface AssistantPluginActionExecutionInput {
|
|
142
160
|
controllerHome: string;
|
|
161
|
+
/** Explicit per-invocation authorization for protected plugin actions. */
|
|
162
|
+
confirmAuthorization?: boolean;
|
|
143
163
|
repoId: string;
|
|
144
164
|
repoRoot: string;
|
|
145
165
|
pluginId: string;
|
|
@@ -158,6 +158,22 @@ export function buildXiaohongshuPluginManifest(previousRevision = 0, previousUpd
|
|
|
158
158
|
'browser-profile:authentication-and-session',
|
|
159
159
|
],
|
|
160
160
|
},
|
|
161
|
+
compatibility: {
|
|
162
|
+
replacementOwner: 'Workflow Runtime (rh_work workflow_execute) and the versioned xiaohongshu Workflow assets',
|
|
163
|
+
boundedConsumers: [
|
|
164
|
+
{
|
|
165
|
+
surface: 'plugin_action_execute',
|
|
166
|
+
pluginId: PLUGIN_ID,
|
|
167
|
+
actionIds: ['get_publish_recipe', 'publish_note'],
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
removalCondition: {
|
|
171
|
+
kind: 'no_supported_frozen_contract_actions',
|
|
172
|
+
surface: 'plugin_action_execute',
|
|
173
|
+
pluginId: PLUGIN_ID,
|
|
174
|
+
actionIds: ['get_publish_recipe', 'publish_note'],
|
|
175
|
+
},
|
|
176
|
+
},
|
|
161
177
|
enabled: true,
|
|
162
178
|
lifecycle: { state: 'enabled', reason: 'Compatibility translation is available; all publishing effects are Workflow-owned.' },
|
|
163
179
|
health: health(), permissions: permissions(), capabilities: capabilities(), actions: actions(), updatedAt: previousUpdatedAt ?? now(),
|
|
@@ -146,7 +146,7 @@ export function updateRepositoryProjectionRefreshRequest(
|
|
|
146
146
|
sourceRevision?: string;
|
|
147
147
|
nowMs?: number;
|
|
148
148
|
},
|
|
149
|
-
options: { lock?: boolean } = {},
|
|
149
|
+
options: { lock?: boolean; supersedeAttempt?: boolean } = {},
|
|
150
150
|
): ProjectionDirtyMarker | undefined {
|
|
151
151
|
try {
|
|
152
152
|
const fence = assertRuntimeMayWrite('update_active_projection', controllerHome);
|
|
@@ -170,7 +170,11 @@ export function updateRepositoryProjectionRefreshRequest(
|
|
|
170
170
|
),
|
|
171
171
|
);
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
const supersedeAttempt = options.supersedeAttempt === true
|
|
174
|
+
&& current?.refreshStatus !== undefined
|
|
175
|
+
&& current.refreshStatus !== 'pending';
|
|
176
|
+
|
|
177
|
+
if (current && sameSource && !supersedeAttempt) {
|
|
174
178
|
const normalized = normalizeMarker(current);
|
|
175
179
|
const enriched: ProjectionDirtyMarker = {
|
|
176
180
|
...normalized,
|
|
@@ -214,7 +218,7 @@ export function markRepositoryProjectionDirty(
|
|
|
214
218
|
reason,
|
|
215
219
|
sourceRevision: options.sourceRevision,
|
|
216
220
|
nowMs: options.nowMs,
|
|
217
|
-
});
|
|
221
|
+
}, { supersedeAttempt: true });
|
|
218
222
|
}
|
|
219
223
|
|
|
220
224
|
export function readRepositoryProjectionDirty(controllerHome: string, repoId: string): ProjectionDirtyMarker | undefined {
|
|
@@ -27,7 +27,7 @@ import type { ProjectionObservation, ProjectionSourceReconciliation } from '../h
|
|
|
27
27
|
import { RUNTIME_HEALTH_THRESHOLDS } from '../health/evaluator';
|
|
28
28
|
import { isProcessAlive } from '../shared/process-tree';
|
|
29
29
|
import type { TaskLedgerProjection } from '../../cli/controller/task-ledger';
|
|
30
|
-
import { collectWorkLifecycleAttention } from '../control-plane/execution/work-lifecycle-audit';
|
|
30
|
+
import { collectWorkLifecycleAttention, workLifecycleAttentionBlocksReadiness } from '../control-plane/execution/work-lifecycle-audit';
|
|
31
31
|
|
|
32
32
|
export interface ProjectionMetadata {
|
|
33
33
|
contentRevision: number;
|
|
@@ -164,7 +164,9 @@ function projectionWithExecutionIndexOverlay(
|
|
|
164
164
|
const activeJobIds = new Set(activeJobSummaries.map((job) => job.jobId));
|
|
165
165
|
const attentionJobs = recentJobs?.filter((job) => ATTENTION_JOB_STATUSES.has(job.status));
|
|
166
166
|
const materializedLifecycleAttention = base.attention.filter((entry) => entry.jobId.startsWith('lifecycle:'));
|
|
167
|
-
const materializedCurrentLifecycleAttention = base.currentAttention
|
|
167
|
+
const materializedCurrentLifecycleAttention = base.currentAttention
|
|
168
|
+
.filter((entry) => entry.jobId.startsWith('lifecycle:'))
|
|
169
|
+
.filter(workLifecycleAttentionBlocksReadiness);
|
|
168
170
|
const attention = attentionJobs
|
|
169
171
|
? attentionJobs.map(attentionSummary)
|
|
170
172
|
: base.attention.filter((entry) => !entry.jobId.startsWith('lifecycle:'));
|
|
@@ -190,6 +192,8 @@ function projectionWithExecutionIndexOverlay(
|
|
|
190
192
|
// Lifecycle attention is producer-owned materialized state. Hot reads overlay
|
|
191
193
|
// only lightweight ExecutionJob/Lease indexes and must never synchronously
|
|
192
194
|
// re-run Git/Work lifecycle reconciliation on the MCP request event loop.
|
|
195
|
+
// Re-apply the current readiness classifier to persisted lifecycle entries so
|
|
196
|
+
// a policy cutover cannot leave obsolete blockers stuck in currentAttention.
|
|
193
197
|
currentAttention: [...currentAttention, ...materializedCurrentLifecycleAttention].slice(0, 100),
|
|
194
198
|
attention: [...attention, ...materializedLifecycleAttention].slice(0, 100),
|
|
195
199
|
};
|
|
@@ -247,7 +251,7 @@ function buildRepositoryProjection(
|
|
|
247
251
|
activeLeases: leases.length,
|
|
248
252
|
currentAttention: [
|
|
249
253
|
...currentAttentionJobs.map((job) => ({ jobId: job.jobId, status: job.status, message: job.error?.message })),
|
|
250
|
-
...lifecycleAttention,
|
|
254
|
+
...lifecycleAttention.filter(workLifecycleAttentionBlocksReadiness),
|
|
251
255
|
].slice(0, 100),
|
|
252
256
|
attention: [
|
|
253
257
|
...attentionJobs.map((job) => ({ jobId: job.jobId, status: job.status, message: job.error?.message })),
|
|
@@ -474,10 +478,15 @@ function refreshRepositoryProjection(
|
|
|
474
478
|
const nowMs = options.nowMs ?? Date.now();
|
|
475
479
|
const acquiredAt = nowIso(nowMs);
|
|
476
480
|
const owner = refreshOwner(options, acquiredAt);
|
|
477
|
-
|
|
481
|
+
const lockOwner = `projection-refresh:${owner.pid}`;
|
|
482
|
+
|
|
483
|
+
// Claim one refresh generation under the repository projection lock, then release
|
|
484
|
+
// it before the expensive materialization. Real jobs/leases/finalizers must be
|
|
485
|
+
// able to invalidate the projection while a refresh is building.
|
|
486
|
+
const claim = withRepositoryProjectionRefreshLock(
|
|
478
487
|
controllerHome,
|
|
479
488
|
repoId,
|
|
480
|
-
|
|
489
|
+
lockOwner,
|
|
481
490
|
() => {
|
|
482
491
|
dirtyProjectionReadCache.delete(dirtyProjectionReadCacheKey(controllerHome, repoId));
|
|
483
492
|
const previous = readJsonFile<RepositoryRuntimeProjection | undefined>(projectionPath(controllerHome, repoId), undefined);
|
|
@@ -497,13 +506,26 @@ function refreshRepositoryProjection(
|
|
|
497
506
|
sourceRevision,
|
|
498
507
|
nowMs,
|
|
499
508
|
}, { lock: false });
|
|
500
|
-
if (!marker)
|
|
509
|
+
if (!marker) {
|
|
510
|
+
return {
|
|
511
|
+
kind: 'skip' as const,
|
|
512
|
+
result: { refreshed: false, skippedReason: 'passive_runtime' as const },
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
if (!marker) {
|
|
517
|
+
return {
|
|
518
|
+
kind: 'skip' as const,
|
|
519
|
+
result: { refreshed: false, skippedReason: 'clean' as const, projection: previous },
|
|
520
|
+
};
|
|
501
521
|
}
|
|
502
|
-
if (!marker) return { refreshed: false, skippedReason: 'clean', projection: previous };
|
|
503
522
|
|
|
504
523
|
const currentOwner = refreshOwner(options, acquiredAt);
|
|
505
524
|
if (ownerStillOwnsRefresh(marker, nowMs, currentOwner)) {
|
|
506
|
-
return {
|
|
525
|
+
return {
|
|
526
|
+
kind: 'skip' as const,
|
|
527
|
+
result: { refreshed: false, skippedReason: 'running' as const, marker, projection: previous },
|
|
528
|
+
};
|
|
507
529
|
}
|
|
508
530
|
if (marker.refreshStatus === 'running' && !ownerStillOwnsRefresh(marker, nowMs, currentOwner)) {
|
|
509
531
|
marker = recoverStaleOwner(controllerHome, repoId, marker, acquiredAt, 'stale_owner_or_restart');
|
|
@@ -514,42 +536,64 @@ function refreshRepositoryProjection(
|
|
|
514
536
|
&& marker.nextAttemptAt
|
|
515
537
|
&& Date.parse(marker.nextAttemptAt) > nowMs
|
|
516
538
|
) {
|
|
517
|
-
return {
|
|
539
|
+
return {
|
|
540
|
+
kind: 'skip' as const,
|
|
541
|
+
result: { refreshed: false, skippedReason: 'retry_deferred' as const, marker, projection: previous },
|
|
542
|
+
};
|
|
518
543
|
}
|
|
519
544
|
|
|
520
545
|
const running = markRunning(controllerHome, repoId, {
|
|
521
546
|
...marker,
|
|
522
547
|
sourceRevision: marker.sourceRevision ?? sourceRevision,
|
|
523
548
|
}, owner, acquiredAt);
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
!current
|
|
531
|
-
|| current.nonce !== running.nonce
|
|
532
|
-
|| (
|
|
533
|
-
running.sourceRevision
|
|
534
|
-
&& current.sourceRevision
|
|
535
|
-
&& !gitRevisionsEquivalent(running.sourceRevision, current.sourceRevision)
|
|
536
|
-
)
|
|
537
|
-
) {
|
|
538
|
-
return { refreshed: false, skippedReason: 'superseded', marker: current, projection: latestPrevious };
|
|
539
|
-
}
|
|
540
|
-
writeJsonAtomic(projectionPath(controllerHome, repoId), projection);
|
|
541
|
-
clearRepositoryProjectionDirty(controllerHome, repoId, current, projection.metadata?.generatedFromRevision);
|
|
542
|
-
dirtyProjectionReadCache.delete(dirtyProjectionReadCacheKey(controllerHome, repoId));
|
|
543
|
-
return { refreshed: true, projection };
|
|
544
|
-
} catch (error) {
|
|
545
|
-
const current = readRepositoryProjectionDirty(controllerHome, repoId);
|
|
546
|
-
if (current?.nonce === running.nonce) {
|
|
547
|
-
markFailed(controllerHome, repoId, running, owner, error, options.nowMs ?? Date.now());
|
|
548
|
-
}
|
|
549
|
-
throw error;
|
|
550
|
-
}
|
|
549
|
+
return {
|
|
550
|
+
kind: 'build' as const,
|
|
551
|
+
running,
|
|
552
|
+
previous: readJsonFile<RepositoryRuntimeProjection | undefined>(projectionPath(controllerHome, repoId), undefined),
|
|
553
|
+
buildRevision: normalizeGitRevision(running.sourceRevision) ?? sourceRevision,
|
|
554
|
+
};
|
|
551
555
|
},
|
|
552
556
|
);
|
|
557
|
+
|
|
558
|
+
if (claim.kind === 'skip') return claim.result;
|
|
559
|
+
|
|
560
|
+
let projection: RepositoryRuntimeProjection;
|
|
561
|
+
try {
|
|
562
|
+
projection = buildRepositoryProjection(controllerHome, repoId, claim.previous, claim.buildRevision);
|
|
563
|
+
} catch (error) {
|
|
564
|
+
// Failure bookkeeping is another short CAS section. If a real mutation already
|
|
565
|
+
// superseded this nonce, it owns the dirty marker and must not be overwritten.
|
|
566
|
+
withRepositoryProjectionRefreshLock(controllerHome, repoId, lockOwner, () => {
|
|
567
|
+
const current = readRepositoryProjectionDirty(controllerHome, repoId);
|
|
568
|
+
if (current?.nonce === claim.running.nonce) {
|
|
569
|
+
markFailed(controllerHome, repoId, claim.running, owner, error, options.nowMs ?? Date.now());
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
throw error;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
// Publish only if the exact claimed nonce still owns the refresh. A concurrent
|
|
576
|
+
// mutation either superseded it while build ran or will mark dirty after this
|
|
577
|
+
// short publish section, so no invalidation can be lost.
|
|
578
|
+
return withRepositoryProjectionRefreshLock(controllerHome, repoId, lockOwner, () => {
|
|
579
|
+
const current = readRepositoryProjectionDirty(controllerHome, repoId);
|
|
580
|
+
const currentProjection = readJsonFile<RepositoryRuntimeProjection | undefined>(projectionPath(controllerHome, repoId), undefined);
|
|
581
|
+
if (
|
|
582
|
+
!current
|
|
583
|
+
|| current.nonce !== claim.running.nonce
|
|
584
|
+
|| (
|
|
585
|
+
claim.running.sourceRevision
|
|
586
|
+
&& current.sourceRevision
|
|
587
|
+
&& !gitRevisionsEquivalent(claim.running.sourceRevision, current.sourceRevision)
|
|
588
|
+
)
|
|
589
|
+
) {
|
|
590
|
+
return { refreshed: false, skippedReason: 'superseded', marker: current, projection: currentProjection };
|
|
591
|
+
}
|
|
592
|
+
writeJsonAtomic(projectionPath(controllerHome, repoId), projection);
|
|
593
|
+
clearRepositoryProjectionDirty(controllerHome, repoId, current, projection.metadata?.generatedFromRevision);
|
|
594
|
+
dirtyProjectionReadCache.delete(dirtyProjectionReadCacheKey(controllerHome, repoId));
|
|
595
|
+
return { refreshed: true, projection };
|
|
596
|
+
});
|
|
553
597
|
}
|
|
554
598
|
|
|
555
599
|
export function refreshRepositoryProjectionForRepository(
|
|
@@ -93,13 +93,13 @@ export const RECOVERY_ACTIONS = {
|
|
|
93
93
|
},
|
|
94
94
|
stageAndActivateRuntimeRelease: {
|
|
95
95
|
id: 'recovery.stage_and_activate_runtime_release',
|
|
96
|
-
title: '
|
|
97
|
-
description: '
|
|
96
|
+
title: 'Prepare isolated Runtime ReleaseSession',
|
|
97
|
+
description: 'Compatibility action id: ask standalone Recovery to freeze its configured source and Stable A authority, create isolated Candidate B, and build a portable release. It no longer activates Stable A.',
|
|
98
98
|
class: 'stale_runtime_state',
|
|
99
99
|
risk: 'medium',
|
|
100
100
|
confirmation: 'authorization',
|
|
101
101
|
localOnly: true,
|
|
102
|
-
boundedTo: ['registered_repository', 'runtime_release_storage'
|
|
102
|
+
boundedTo: ['registered_repository', 'runtime_release_storage'],
|
|
103
103
|
},
|
|
104
104
|
restartPrimaryConnector: {
|
|
105
105
|
id: 'recovery.restart_primary_connector',
|
|
@@ -3,15 +3,14 @@ import { ensureRepositoryRuntimeStorage } from '../../cli/repositories/runtime-s
|
|
|
3
3
|
import { prepareTransferArtifacts } from '../../cli/repositories/selected-path-actions';
|
|
4
4
|
import { applyRuntimeCleanup, previewRuntimeCleanup } from '../maintenance/cleanup';
|
|
5
5
|
import { rebuildRepositoryProjection } from '../projections/materialized-view';
|
|
6
|
-
import { assertRuntimeReleaseFiles, stageRuntimeReleaseFromCandidateSource } from '../root/release-materialize';
|
|
7
6
|
import { recoveryActionById } from './actions';
|
|
8
7
|
import { assertRecoveryAuthorized, buildRecoveryAuditRecord } from './audit';
|
|
9
8
|
import { applyRuntimeMaintenance } from './maintenance-executor';
|
|
10
|
-
import { writeRecoveryAuditRecord } from './store';
|
|
9
|
+
import { writeInstanceRecoveryAuditRecord, writeRecoveryAuditRecord } from './store';
|
|
11
10
|
|
|
12
11
|
export interface CapabilityRecoveryApplicationInput {
|
|
13
12
|
controllerHome: string;
|
|
14
|
-
repository
|
|
13
|
+
repository?: RepositoryRecord;
|
|
15
14
|
actionId: string;
|
|
16
15
|
reason: string;
|
|
17
16
|
confirmAuthorization: boolean;
|
|
@@ -23,17 +22,30 @@ export interface CapabilityRecoveryApplicationInput {
|
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
export interface CapabilityRecoveryApplicationResult {
|
|
26
|
-
repoId
|
|
25
|
+
repoId?: string;
|
|
26
|
+
scope: 'forge_instance' | 'repository';
|
|
27
27
|
action: NonNullable<ReturnType<typeof recoveryActionById>>;
|
|
28
28
|
audit: ReturnType<typeof writeRecoveryAuditRecord>;
|
|
29
29
|
result: Record<string, unknown>;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
const INSTANCE_RECOVERY_ACTION_IDS = new Set([
|
|
33
|
+
'recovery.stage_and_activate_runtime_release',
|
|
34
|
+
'recovery.restart_primary_connector',
|
|
35
|
+
'recovery.probe_again',
|
|
36
|
+
'recovery.workspace_auth_login_prepare',
|
|
37
|
+
'recovery.external_filesystem_grant_preview',
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
export function recoveryActionScope(actionId: string): 'forge_instance' | 'repository' {
|
|
41
|
+
return INSTANCE_RECOVERY_ACTION_IDS.has(actionId) ? 'forge_instance' : 'repository';
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
export class RecoveryApplicationError extends Error {
|
|
33
|
-
readonly code: 'RECOVERY_ACTION_UNKNOWN';
|
|
45
|
+
readonly code: 'RECOVERY_ACTION_UNKNOWN' | 'RECOVERY_REPOSITORY_CONTEXT_REQUIRED';
|
|
34
46
|
readonly actionId: string;
|
|
35
47
|
|
|
36
|
-
constructor(code: '
|
|
48
|
+
constructor(code: RecoveryApplicationError['code'], actionId: string) {
|
|
37
49
|
super(`${code}: ${actionId}`);
|
|
38
50
|
this.name = 'RecoveryApplicationError';
|
|
39
51
|
this.code = code;
|
|
@@ -85,29 +97,19 @@ export async function executeCapabilityRecoveryAction(
|
|
|
85
97
|
: undefined,
|
|
86
98
|
);
|
|
87
99
|
|
|
100
|
+
const scope = recoveryActionScope(action.id);
|
|
101
|
+
const repository = scope === 'repository'
|
|
102
|
+
? input.repository ?? (() => { throw new RecoveryApplicationError('RECOVERY_REPOSITORY_CONTEXT_REQUIRED', action.id); })()
|
|
103
|
+
: undefined;
|
|
104
|
+
|
|
88
105
|
let payload: Record<string, unknown>;
|
|
89
106
|
let affectedPaths: string[] = [];
|
|
90
107
|
switch (action.id) {
|
|
91
108
|
case 'recovery.stage_and_activate_runtime_release': {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
sourceRoot: input.repository.canonicalRoot,
|
|
95
|
-
sourceRepositoryId: input.repository.repoId,
|
|
109
|
+
payload = await input.callStandaloneRecoveryTool('prepare_runtime_release_session', {
|
|
110
|
+
request_id: `runtime-release-session-${Date.now()}`,
|
|
96
111
|
});
|
|
97
|
-
|
|
98
|
-
payload = {
|
|
99
|
-
staged: {
|
|
100
|
-
releaseId: staged.releaseId,
|
|
101
|
-
sourceCommit: staged.sourceCommit,
|
|
102
|
-
artifactIdentity: staged.artifactIdentity,
|
|
103
|
-
manifestSha256: staged.manifestSha256,
|
|
104
|
-
},
|
|
105
|
-
activation: await input.callStandaloneRecoveryTool('activate_runtime_release', {
|
|
106
|
-
request_id: `runtime-cutover-${Date.now()}`,
|
|
107
|
-
release_path: staged.manifestPath,
|
|
108
|
-
}),
|
|
109
|
-
};
|
|
110
|
-
affectedPaths = ['controllerHome/runtime/releases', 'controllerHome/runtime/releases/authority.json'];
|
|
112
|
+
affectedPaths = ['controllerHome/recovery/state/release-sessions', 'candidate-runtime-lanes'];
|
|
111
113
|
break;
|
|
112
114
|
}
|
|
113
115
|
case 'recovery.restart_primary_connector': {
|
|
@@ -121,20 +123,20 @@ export async function executeCapabilityRecoveryAction(
|
|
|
121
123
|
payload = { recovery: await input.recoverySnapshot() };
|
|
122
124
|
break;
|
|
123
125
|
case 'recovery.rebuild_projection': {
|
|
124
|
-
const projection = rebuildRepositoryProjection(input.controllerHome,
|
|
126
|
+
const projection = rebuildRepositoryProjection(input.controllerHome, repository!.repoId);
|
|
125
127
|
payload = { projection };
|
|
126
128
|
affectedPaths = ['.ai/harness/controller/projections'];
|
|
127
129
|
break;
|
|
128
130
|
}
|
|
129
131
|
case 'recovery.refresh_repository': {
|
|
130
|
-
const runtimeStorage = ensureRepositoryRuntimeStorage(
|
|
131
|
-
const projection = rebuildRepositoryProjection(input.controllerHome,
|
|
132
|
+
const runtimeStorage = ensureRepositoryRuntimeStorage(repository!, input.controllerHome);
|
|
133
|
+
const projection = rebuildRepositoryProjection(input.controllerHome, repository!.repoId);
|
|
132
134
|
payload = { runtimeStorage, projection };
|
|
133
135
|
affectedPaths = ['.ai/harness/controller', '.ai/harness/local-bridge'];
|
|
134
136
|
break;
|
|
135
137
|
}
|
|
136
138
|
case 'recovery.cleanup_preview': {
|
|
137
|
-
payload = previewRuntimeCleanup(
|
|
139
|
+
payload = previewRuntimeCleanup(repository!.canonicalRoot, {
|
|
138
140
|
minAgeMinutes: input.minAgeMinutes,
|
|
139
141
|
includeTempDirs: true,
|
|
140
142
|
includeTerminalLocalJobs: true,
|
|
@@ -145,7 +147,7 @@ export async function executeCapabilityRecoveryAction(
|
|
|
145
147
|
break;
|
|
146
148
|
}
|
|
147
149
|
case 'recovery.cleanup_apply': {
|
|
148
|
-
payload = applyRuntimeCleanup(
|
|
150
|
+
payload = applyRuntimeCleanup(repository!.canonicalRoot, {
|
|
149
151
|
minAgeMinutes: input.minAgeMinutes,
|
|
150
152
|
includeTempDirs: true,
|
|
151
153
|
includeTerminalLocalJobs: true,
|
|
@@ -159,7 +161,7 @@ export async function executeCapabilityRecoveryAction(
|
|
|
159
161
|
}
|
|
160
162
|
case 'recovery.reconcile_jobs':
|
|
161
163
|
case 'recovery.local_jobs_reconcile': {
|
|
162
|
-
const maintenance = applyRuntimeMaintenance(
|
|
164
|
+
const maintenance = applyRuntimeMaintenance(repository!, input.controllerHome, {
|
|
163
165
|
actionId: 'local_jobs_reconcile',
|
|
164
166
|
confirmMaintenance: true,
|
|
165
167
|
minAgeMinutes: input.minAgeMinutes ?? 10,
|
|
@@ -170,7 +172,7 @@ export async function executeCapabilityRecoveryAction(
|
|
|
170
172
|
break;
|
|
171
173
|
}
|
|
172
174
|
case 'recovery.local_jobs_quarantine_unreadable': {
|
|
173
|
-
const maintenance = applyRuntimeMaintenance(
|
|
175
|
+
const maintenance = applyRuntimeMaintenance(repository!, input.controllerHome, {
|
|
174
176
|
actionId: 'quarantine_unreadable_local_jobs',
|
|
175
177
|
confirmMaintenance: true,
|
|
176
178
|
minAgeMinutes: input.minAgeMinutes ?? 0,
|
|
@@ -181,7 +183,7 @@ export async function executeCapabilityRecoveryAction(
|
|
|
181
183
|
break;
|
|
182
184
|
}
|
|
183
185
|
case 'recovery.runtime_storage_finalize_relocation': {
|
|
184
|
-
const maintenance = applyRuntimeMaintenance(
|
|
186
|
+
const maintenance = applyRuntimeMaintenance(repository!, input.controllerHome, {
|
|
185
187
|
actionId: 'runtime_storage_finalize_relocation',
|
|
186
188
|
confirmMaintenance: true,
|
|
187
189
|
minAgeMinutes: input.minAgeMinutes ?? 0,
|
|
@@ -192,7 +194,7 @@ export async function executeCapabilityRecoveryAction(
|
|
|
192
194
|
break;
|
|
193
195
|
}
|
|
194
196
|
case 'recovery.create_patch_handoff':
|
|
195
|
-
payload = prepareTransferArtifacts(
|
|
197
|
+
payload = prepareTransferArtifacts(repository!, { reason: input.reason }) as unknown as Record<string, unknown>;
|
|
196
198
|
affectedPaths = ['.ai/harness/transfers', '.ai/harness/session'];
|
|
197
199
|
break;
|
|
198
200
|
case 'recovery.workspace_auth_login_prepare':
|
|
@@ -213,16 +215,15 @@ export async function executeCapabilityRecoveryAction(
|
|
|
213
215
|
payload = { skipped: true, reason: `No executor is registered for ${action.id}.` };
|
|
214
216
|
}
|
|
215
217
|
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
);
|
|
227
|
-
return { repoId: input.repository.repoId, action, audit, result: payload };
|
|
218
|
+
const auditRecord = buildRecoveryAuditRecord({
|
|
219
|
+
actor: 'capability_recovery_apply',
|
|
220
|
+
action,
|
|
221
|
+
result: payload.skipped === true ? 'skipped' : 'succeeded',
|
|
222
|
+
reason: input.reason,
|
|
223
|
+
affectedPaths,
|
|
224
|
+
});
|
|
225
|
+
const audit = repository
|
|
226
|
+
? writeRecoveryAuditRecord(input.controllerHome, repository.repoId, auditRecord)
|
|
227
|
+
: writeInstanceRecoveryAuditRecord(input.controllerHome, auditRecord);
|
|
228
|
+
return { ...(repository ? { repoId: repository.repoId } : {}), scope, action, audit, result: payload };
|
|
228
229
|
}
|
|
@@ -44,31 +44,31 @@ export const RUNTIME_LIFECYCLE_INVENTORY: readonly RuntimeLifecycleClassDefiniti
|
|
|
44
44
|
lifecycle({
|
|
45
45
|
id: 'requirement', owner: 'Goal / Requirement authority', scope: 'controller', dataClass: 'semantic_authority',
|
|
46
46
|
storage: 'Controller Home SQLite requirement namespace',
|
|
47
|
-
terminalCondition: 'Requirement reaches
|
|
48
|
-
activeProtection: '
|
|
47
|
+
terminalCondition: 'Requirement semantic state reaches completed or cancelled through revisioned Requirement CAS.',
|
|
48
|
+
activeProtection: 'Stable Requirement identity plus expected-revision CAS serializes authored semantic updates; execution evidence and Controller dispositions cannot mutate Requirement state.',
|
|
49
49
|
retentionCapacity: 'Permanent semantic/audit retention is the explicit policy: SQLite stores exactly one current row per requirementId and revisions update that row in place. Cardinality grows only when a new Requirement identity is deliberately admitted, never from retry/recovery cycles.',
|
|
50
50
|
cleanupAuthority: 'Requirement authority owns semantic retention. Runtime GC does not delete Requirement rows; replaceable execution evidence is reclaimed by its own lifecycle classes.',
|
|
51
|
-
recoverySemantics: '
|
|
51
|
+
recoverySemantics: 'Recovery reads the retained Requirement identity/revision and never infers completion, continuation or reopening from Work, Plan, Controller or provider state.',
|
|
52
52
|
closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/persistence/requirement-store.ts','packages/kernel/goal/api/index.ts','tests/runtime/requirement-portfolio-migration.test.ts'],
|
|
53
53
|
}),
|
|
54
54
|
lifecycle({
|
|
55
55
|
id: 'plan', owner: 'Goal / Plan authority', scope: 'repository', dataClass: 'semantic_authority',
|
|
56
56
|
storage: 'Controller Home SQLite plan namespace',
|
|
57
|
-
terminalCondition: 'Plan
|
|
58
|
-
activeProtection: '
|
|
59
|
-
retentionCapacity: 'Permanent semantic/audit retention
|
|
60
|
-
cleanupAuthority: 'Plan
|
|
61
|
-
recoverySemantics: 'Recovery
|
|
62
|
-
closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/facade/plan-contract-store.ts','
|
|
57
|
+
terminalCondition: 'Plan has no Runtime-owned terminal lifecycle; it remains model-authored revisioned working memory until the model/user revises or stops referencing it.',
|
|
58
|
+
activeProtection: 'Stable Plan identity plus expected-revision CAS protects each authored revision. Approval, PlanStep acceptance, supersession and predecessor obligations are not execution authority.',
|
|
59
|
+
retentionCapacity: 'Permanent semantic/audit retention stores one current semantic row per planId plus bounded revision history; retries/recovery do not create replacement Plan identities.',
|
|
60
|
+
cleanupAuthority: 'Plan semantic retention is independent from disposable execution/process evidence; Runtime cleanup never rewrites Plan progress.',
|
|
61
|
+
recoverySemantics: 'Recovery re-reads the same Plan identity/revision and never derives Plan progress or execution admission from receipts, Work lifecycle, ControllerRound or compatibility fields.',
|
|
62
|
+
closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/control-plane/facade/plan-contract-store.ts','tests/runtime/goal-authority-convergence.test.ts'],
|
|
63
63
|
}),
|
|
64
64
|
lifecycle({
|
|
65
|
-
id: 'work', owner: 'Kernel Work authority', scope: 'work', dataClass: '
|
|
66
|
-
storage: 'Controller Home SQLite
|
|
67
|
-
terminalCondition: 'Work
|
|
68
|
-
activeProtection: 'Work state
|
|
69
|
-
retentionCapacity: '
|
|
70
|
-
cleanupAuthority: '
|
|
71
|
-
recoverySemantics: '
|
|
65
|
+
id: 'work', owner: 'Kernel Work semantic authority', scope: 'work', dataClass: 'semantic_authority',
|
|
66
|
+
storage: 'Controller Home SQLite Work semantic records; concrete checkout/process/resource placement is owned by its domain stores',
|
|
67
|
+
terminalCondition: 'Work semantic state is exactly open, completed or cancelled; only revisioned work_revise/work_complete CAS changes that semantic state.',
|
|
68
|
+
activeProtection: 'Stable Work identity plus expected-revision CAS protects model-authored objective/state/result refs. Controller claims, delivery receipts, verification/review evidence and Plan provenance cannot complete Work.',
|
|
69
|
+
retentionCapacity: 'SQLite stores one current semantic row per workId plus bounded revision history. Retry, delivery, provider recovery and resource cleanup do not manufacture successor Work identities.',
|
|
70
|
+
cleanupAuthority: 'OwnedResource/process/worktree domains clean up their own physical resources. Cleanup and delivery never rewrite semantic Work completion.',
|
|
71
|
+
recoverySemantics: 'Recovery resumes mechanical operations around the same retained Work when appropriate; it never infers semantic completion/cancellation/reopen from physical evidence.',
|
|
72
72
|
closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/work/api/index.ts','src/runtime/control-plane/execution/work-terminal-cleanup.ts','tests/runtime/repository-work-admission.test.ts'],
|
|
73
73
|
}),
|
|
74
74
|
lifecycle({
|
|
@@ -95,20 +95,20 @@ export const RUNTIME_LIFECYCLE_INVENTORY: readonly RuntimeLifecycleClassDefiniti
|
|
|
95
95
|
id: 'check_receipt', owner: 'Verification / Process evidence authority', scope: 'work', dataClass: 'evidence',
|
|
96
96
|
storage: 'Controller Home Process/check receipt evidence',
|
|
97
97
|
terminalCondition: 'Check Process reaches terminal outcome and receipt is bound to exact input/source identity.',
|
|
98
|
-
activeProtection: 'Receipts
|
|
98
|
+
activeProtection: 'Receipts referenced by active Work evidence or Operational Memory are protected; they are evidence only and never completion/review authority.',
|
|
99
99
|
retentionCapacity: 'A Process check receipt has no separate mutable authority: it is derived from one terminal Process record and copied into Work VerificationRecord when consumed. Process records are bounded by the 7-day/500 policy; persisted check-result sidecars use 30-day/500 retention, a 5000-entry scan bound and at most 50 removals per selected-repository cleanup pass.',
|
|
100
100
|
cleanupAuthority: 'Process GC owns terminal Process/log source, Scheduler maintenance owns replaceable check-result sidecars, and Work lifecycle owns accepted VerificationRecord copies; none becomes a second receipt authority.',
|
|
101
101
|
recoverySemantics: 'Active Work cache identities protect required sidecars; truncated/malformed scans fail closed, and missing or changed evidence becomes stale/replay-gap rather than synthetic success.',
|
|
102
102
|
closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/execution/process-runtime/check-receipt.ts','src/runtime/execution/process-runtime/gc.ts','src/runtime/execution/process-runtime/check-result-retention.ts','packages/kernel/work/api/index.ts','tests/runtime/check-result-retention.test.ts'],
|
|
103
103
|
}),
|
|
104
104
|
lifecycle({
|
|
105
|
-
id: 'controller_round', owner: 'Kernel
|
|
105
|
+
id: 'controller_round', owner: 'Kernel autonomous-continuation mechanics', scope: 'work', dataClass: 'execution_authority',
|
|
106
106
|
storage: 'Controller Home SQLite controller-round relay records',
|
|
107
|
-
terminalCondition: '
|
|
108
|
-
activeProtection: 'Relay scope, claim generation and opaque authority fence
|
|
109
|
-
retentionCapacity: '
|
|
110
|
-
cleanupAuthority: '
|
|
111
|
-
recoverySemantics: '
|
|
107
|
+
terminalCondition: 'One explicit continuation attempt reaches a mechanical disposition/dispatch boundary; no disposition changes Requirement, Plan or Work semantic state.',
|
|
108
|
+
activeProtection: 'Relay scope, claim generation, stable provider-effect identity and opaque authority fence only continuation dispatch/recovery mechanics.',
|
|
109
|
+
retentionCapacity: 'controller_round_relay uses one current row per continuation scope/work and revision-updates it; audit/effect evidence records history without creating a parallel semantic authority.',
|
|
110
|
+
cleanupAuthority: 'Controller continuation mechanics own relay retention; session leases and provider/browser artifacts remain separate concrete-resource/effect domains.',
|
|
111
|
+
recoverySemantics: 'Transport/session replacement and ambiguous provider effect reconcile against the same fenced continuation/effect identity; outcome_unknown is never blind-replayed and recovery never fabricates semantic progress.',
|
|
112
112
|
closureStatus: 'existing_bounded', evidencePaths: ['packages/kernel/controller/api/index.ts','tests/runtime/autonomous-continuation-lifecycle.test.ts'],
|
|
113
113
|
}),
|
|
114
114
|
lifecycle({
|
|
@@ -313,12 +313,12 @@ export const RUNTIME_LIFECYCLE_INVENTORY: readonly RuntimeLifecycleClassDefiniti
|
|
|
313
313
|
}),
|
|
314
314
|
lifecycle({
|
|
315
315
|
id: 'runtime_temp', owner: 'Runtime diagnostics/process scratch lifecycle', scope: 'process', dataClass: 'temporary',
|
|
316
|
-
storage: 'OS temporary roots / Controller-observed Runtime temp entries',
|
|
317
|
-
terminalCondition: '
|
|
318
|
-
activeProtection: 'collectRuntimeProcesses protects scratch still
|
|
319
|
-
retentionCapacity: 'RUNTIME_TEMP_RETENTION_MINUTES age threshold and bounded maintenance candidate scan.',
|
|
320
|
-
cleanupAuthority: 'Central Runtime maintenance removeRuntimeTempEntry.',
|
|
321
|
-
recoverySemantics: '
|
|
316
|
+
storage: 'OS temporary roots / Controller-observed Runtime temp entries, including forge-runtime-release-source-* detached release snapshot containers.',
|
|
317
|
+
terminalCondition: 'Normal release snapshot scope removes its worktree/container immediately; orphaned Runtime temp is terminal after the owning live Process is gone and the retention threshold is exceeded.',
|
|
318
|
+
activeProtection: 'Release snapshot callbacks own their temp container until finally cleanup; collectRuntimeProcesses protects longer-lived scratch still attributable to a live Runtime process.',
|
|
319
|
+
retentionCapacity: 'Immediate release-snapshot finally cleanup plus RUNTIME_TEMP_RETENTION_MINUTES age threshold and bounded maintenance candidate scan for crash leftovers.',
|
|
320
|
+
cleanupAuthority: 'Release materialization owns immediate snapshot cleanup; Central Runtime maintenance removeRuntimeTempEntry owns stale crash-leftover cleanup.',
|
|
321
|
+
recoverySemantics: 'Release snapshot/temp cleanup is disposable, lives outside repository workspace authority, prunes stale Git worktree metadata after failed materialization/removal, and never participates in semantic completion or effect replay.',
|
|
322
322
|
closureStatus: 'existing_bounded', evidencePaths: ['src/runtime/diagnostics/performance.ts','src/runtime/recovery/maintenance-executor.ts'],
|
|
323
323
|
}),
|
|
324
324
|
]);
|