@moretea-labs/forge 1.6.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -0
- package/CHANGELOG.md +39 -0
- package/CLAUDE.md +4 -0
- package/README.md +2 -2
- package/README.zh-CN.md +1 -1
- package/SKILL.md +2 -2
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/agents/openai.yaml +1 -1
- package/assets/hooks/hook-input.sh +11 -8
- package/assets/hooks/lib/session-state.sh +10 -7
- package/assets/hooks/lib/workflow-state.sh +13 -177
- package/assets/hooks/post-tool-observer.sh +8 -2
- package/assets/hooks/prompt-guard.sh +5 -81
- package/assets/hooks/session-start-context.sh +56 -1
- package/assets/partials/05-workflow.partial.md +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +2 -0
- package/assets/partials-agents/03-orchestration.partial.md +1 -1
- package/assets/plugin-registry.v1.json +3 -3
- package/assets/reference-configs/document-generation.md +1 -1
- package/assets/reference-configs/harness-overview.md +1 -1
- package/assets/reference-configs/sprint-contracts.md +3 -3
- package/assets/skill-version.json +2 -2
- package/assets/templates/contract.template.md +2 -7
- package/assets/templates/helpers/capture-plan.sh +2 -2
- package/assets/templates/helpers/check-architecture-sync.sh +17 -0
- package/assets/templates/helpers/check-task-workflow.sh +4 -4
- package/assets/templates/helpers/contract-worktree.sh +1 -21
- package/assets/templates/helpers/ensure-task-workflow.sh +11 -36
- package/assets/templates/helpers/inspect-project-state.ts +8 -6
- package/assets/templates/helpers/migrate-project-template.sh +22 -45
- package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
- package/assets/templates/helpers/new-plan.sh +1 -1
- package/assets/templates/helpers/plan-to-todo.sh +12 -37
- package/assets/templates/helpers/ship-worktrees.sh +2 -29
- package/assets/templates/helpers/verify-contract.sh +1 -111
- package/assets/templates/helpers/verify-sprint.sh +3 -180
- package/assets/templates/helpers/workflow-contract.ts +5 -1
- package/assets/templates/plan.template.md +1 -1
- package/assets/templates/review.template.md +9 -34
- package/assets/workflow-contract.v1.json +10 -19
- package/docs/README.md +10 -10
- package/docs/architecture/CURRENT.md +178 -0
- package/docs/architecture/EVOLUTION.md +42 -0
- package/docs/architecture/current/README.md +4 -156
- package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
- package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
- package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
- package/docs/architecture/history/README.md +7 -0
- package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
- package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
- package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
- package/docs/architecture/history.md +3 -34
- package/docs/architecture/index.md +15 -98
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
- package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
- package/docs/architecture/versions/1.6.md +38 -0
- package/docs/architecture/versions/1.7.md +41 -0
- package/docs/forge-chatgpt-browser-engine.md +2 -2
- package/docs/forge-chatgpt-mcp-setup.md +4 -28
- package/docs/forge-chatgpt-supervised-automation.md +3 -3
- package/docs/forge-github-issue-launcher.md +1 -1
- package/docs/forge-plugin-management.md +1 -1
- package/docs/forge-runtime-self-healing-loop.md +1 -1
- package/docs/operations/controller-browser-plugin.md +26 -6
- package/docs/operations/controller-performance-and-502.md +143 -0
- package/docs/operations/controller-reliability-runbook.md +1 -1
- package/docs/operations/features.md +2 -2
- package/docs/operations/github-repository.md +1 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +5 -3
- package/docs/wiki/Architecture.md +6 -6
- package/docs/wiki/Implementation.md +2 -2
- package/docs/wiki/Integrations.md +2 -2
- package/docs/wiki/Work-Lifecycle.md +1 -1
- package/package.json +33 -11
- package/scripts/activate-source-baseline.ts +17 -13
- package/scripts/architecture-event.ts +2 -820
- package/scripts/architecture-queue.sh +2 -645
- package/scripts/archive-architecture-request.sh +2 -242
- package/scripts/archive-workflow.sh +1 -291
- package/scripts/benchmark-background-check-overlap.ts +228 -0
- package/scripts/benchmark-mcp-host.sh +117 -0
- package/scripts/benchmark-mcp-transport.ts +170 -0
- package/scripts/benchmark-quality-harness.ts +146 -0
- package/scripts/benchmark-route-session-concurrency.ts +207 -6
- package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
- package/scripts/benchmark-typescript-navigation.ts +186 -0
- package/scripts/benchmark-work-efficiency.ts +334 -0
- package/scripts/capability-config.ts +2 -392
- package/scripts/capability-resolver.ts +2 -503
- package/scripts/capture-plan.sh +1 -332
- package/scripts/check-agent-tooling.sh +2 -1558
- package/scripts/check-architecture-sync.sh +2 -371
- package/scripts/check-brain-manifest.sh +2 -253
- package/scripts/check-context-files.sh +2 -47
- package/scripts/check-deploy-sql-order.sh +2 -115
- package/scripts/check-mcp-compatibility.ts +14 -0
- package/scripts/check-runtime-architecture.mjs +349 -79
- package/scripts/check-skill-version.ts +3 -191
- package/scripts/check-source-duplication.mjs +61 -0
- package/scripts/check-stable-baseline.ts +92 -0
- package/scripts/check-task-sync.sh +2 -63
- package/scripts/check-task-workflow.sh +2 -1000
- package/scripts/codex-handoff-resume.sh +2 -267
- package/scripts/context-contract-sync.sh +2 -514
- package/scripts/contract-run.ts +2 -463
- package/scripts/contract-worktree.sh +1 -722
- package/scripts/ensure-task-workflow.sh +1 -1225
- package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
- package/scripts/inspect-project-state.ts +4 -279
- package/scripts/install-standalone-recovery.ts +24 -0
- package/scripts/lib/project-init-lib.sh +22 -46
- package/scripts/lib/run-forge-helper.sh +19 -0
- package/scripts/lib/run-forge-helper.ts +26 -0
- package/scripts/migrate-project-template.sh +1 -1189
- package/scripts/migrate-workflow-docs.ts +4 -412
- package/scripts/new-plan.sh +1 -180
- package/scripts/new-spec.sh +1 -47
- package/scripts/new-sprint.sh +1 -46
- package/scripts/plan-to-todo.sh +1 -796
- package/scripts/prepare-codex-handoff.sh +2 -201
- package/scripts/prepare-handoff.sh +1 -78
- package/scripts/refresh-current-status.sh +2 -467
- package/scripts/run-governed-gate.ts +5 -1
- package/scripts/select-agent-context-blocks.sh +2 -64
- package/scripts/ship-worktrees.sh +1 -558
- package/scripts/smoke-ios-physical-device.ts +4 -2
- package/scripts/smoke-runtime-recovery.ts +1 -35
- package/scripts/smoke-schedule-engine.ts +1 -20
- package/scripts/sprint-backlog.sh +1 -834
- package/scripts/stage-runtime-release.ts +2 -1
- package/scripts/summarize-failures.sh +2 -123
- package/scripts/switch-plan.sh +1 -150
- package/scripts/sync-brain-docs.sh +2 -379
- package/scripts/sync-generated-authority.mjs +175 -0
- package/scripts/verify-contract.sh +2 -703
- package/scripts/verify-forge-runtime.sh +0 -1
- package/scripts/verify-sprint.sh +1 -677
- package/scripts/workflow-contract.ts +4 -205
- package/scripts/workstream-sync.sh +2 -261
- package/src/cli/agent-jobs/executor-health.ts +1 -1
- package/src/cli/commands/init-hook.ts +3 -3
- package/src/cli/commands/mcp.ts +9 -5
- package/src/cli/commands/plugin.ts +12 -3
- package/src/cli/commands/recovery.ts +25 -3
- package/src/cli/commands/runtime.ts +55 -3
- package/src/cli/commands/security.ts +12 -1
- package/src/cli/commands/setup-profile.ts +31 -21
- package/src/cli/controller/check-runner.ts +113 -5
- package/src/cli/controller/composite-result.ts +1 -1
- package/src/cli/controller/context/focus.ts +51 -0
- package/src/cli/controller/context/instruction-context.ts +114 -0
- package/src/cli/controller/context/known-paths.ts +76 -0
- package/src/cli/controller/context/query-planning.ts +110 -0
- package/src/cli/controller/context/rule-resolution.ts +532 -0
- package/src/cli/controller/context/source-materializer.ts +278 -0
- package/src/cli/controller/context/structural.ts +16 -0
- package/src/cli/controller/context/types.ts +286 -0
- package/src/cli/controller/context-pack.ts +828 -487
- package/src/cli/controller/launch-agents.ts +77 -2
- package/src/cli/controller/operational-plan.ts +2 -2
- package/src/cli/controller/work-mode.ts +6 -4
- package/src/cli/editing/edit-session.ts +60 -7
- package/src/cli/github/contracts.ts +16 -0
- package/src/cli/github/github.ts +135 -16
- package/src/cli/github/session.ts +2 -1
- package/src/cli/installer/managed-entries.ts +15 -1
- package/src/cli/local-bridge/console-automations.ts +54 -78
- package/src/cli/local-bridge/console-view-models.ts +1 -35
- package/src/cli/local-bridge/facade-api.ts +37 -264
- package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +23 -13
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +6 -4
- package/src/cli/local-bridge/frontend/src/lib/api.ts +1 -6
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +2 -2
- package/src/cli/local-bridge/frontend/src/styles.css +1 -1
- package/src/cli/local-bridge/frontend/src/types.ts +5 -8
- package/src/cli/local-bridge/job-store.ts +1 -490
- package/src/cli/local-bridge/server.ts +2 -515
- package/src/cli/local-bridge/ui-dist/app.css +1 -1
- package/src/cli/local-bridge/ui-dist/app.js +3703 -3757
- package/src/cli/mcp/auth.ts +5 -5
- package/src/cli/mcp/instructions.ts +3 -2
- package/src/cli/mcp/legacy-tool-service.ts +10 -222
- package/src/cli/mcp/multi-repository.ts +16 -5
- package/src/cli/mcp/oauth.ts +175 -26
- package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
- package/src/cli/mcp/repository-tools.ts +282 -146
- package/src/cli/mcp/server.ts +586 -116
- package/src/cli/mcp/tool-capability-cache.ts +1 -1
- package/src/cli/mcp/tool-contract.ts +14 -0
- package/src/cli/mcp/toolset-selection.ts +1 -1
- package/src/cli/mcp/toolset.ts +44 -7
- package/src/cli/mcp/transports/http.ts +124 -14
- package/src/cli/mcp/transports/session-registry.ts +43 -5
- package/src/cli/mcp/types.ts +3 -3
- package/src/cli/repositories/command-classifier.ts +103 -21
- package/src/cli/repositories/command-executor.ts +78 -526
- package/src/cli/repositories/command-process.ts +108 -0
- package/src/cli/repositories/command-scope.ts +99 -41
- package/src/cli/repositories/controller-home.ts +7 -8
- package/src/cli/repositories/git-command-executor.ts +2 -0
- package/src/cli/repositories/locks.ts +53 -16
- package/src/cli/repositories/repository-snapshot.ts +124 -0
- package/src/cli/repositories/selected-path-actions.ts +17 -9
- package/src/cli/repositories/structured-git.ts +118 -6
- package/src/cli/repository/inspector.ts +563 -65
- package/src/cli/repository/session-cache.ts +58 -17
- package/src/cli/v81-entry.ts +1 -4
- package/src/effects/fs-transaction.ts +85 -17
- package/src/runtime/context/codegraph-read-provider.ts +233 -2
- package/src/runtime/context/codegraph-sidecar.cjs +74 -40
- package/src/runtime/context/generic-lsp-provider.ts +355 -0
- package/src/runtime/context/lsp-client.ts +283 -0
- package/src/runtime/context/semantic-navigation-contract.ts +61 -0
- package/src/runtime/context/semantic-navigation.ts +223 -0
- package/src/runtime/context/swift-navigation.ts +565 -0
- package/src/runtime/context/typescript-navigation.ts +226 -0
- package/src/runtime/control-plane/dispatch-priority.ts +28 -0
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +48 -16
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
- package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
- package/src/runtime/control-plane/execution/session-store.ts +18 -0
- package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
- package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
- package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
- package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
- package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
- package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
- package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
- package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
- package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
- package/src/runtime/control-plane/execution/work-task-receipt.ts +22 -18
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +156 -11
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +22 -14
- package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
- package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +90 -9
- package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
- package/src/runtime/control-plane/facade/controller-round-relay.ts +1118 -0
- package/src/runtime/control-plane/facade/controller-session-store.ts +302 -12
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +17 -1
- package/src/runtime/control-plane/facade/goal-workloop.ts +928 -190
- package/src/runtime/control-plane/facade/index.ts +3 -0
- package/src/runtime/control-plane/facade/plan-contract-store.ts +275 -42
- package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
- package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
- package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
- package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
- package/src/runtime/control-plane/facade/types.ts +90 -10
- package/src/runtime/control-plane/facade/work-contract-store.ts +157 -261
- package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
- package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
- package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
- package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +152 -0
- package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +278 -543
- package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
- package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
- package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
- package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
- package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
- package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
- package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
- package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
- package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
- package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +63 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +365 -117
- package/src/runtime/control-plane/launcher/launch-reservation-store.ts +89 -0
- package/src/runtime/control-plane/launcher/thin-launcher.ts +244 -11
- package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
- package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
- package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
- package/src/runtime/control-plane/release-retention.ts +62 -2
- package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
- package/src/runtime/control-plane/routing/route-policy.ts +24 -21
- package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
- package/src/runtime/control-plane/runtime-status-client.ts +0 -2
- package/src/runtime/diagnostics/mcp-timing.ts +13 -0
- package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
- package/src/runtime/diagnostics/performance.ts +24 -1
- package/src/runtime/evidence/event-ledger.ts +1 -1
- package/src/runtime/evidence/process-check-execution.ts +18 -0
- package/src/runtime/execution/jobs/child-reference.ts +6 -2
- package/src/runtime/execution/jobs/store.ts +58 -4
- package/src/runtime/execution/jobs/types.ts +1 -1
- package/src/runtime/execution/managed-workspace.ts +203 -1
- package/src/runtime/execution/process-runtime/check-facade.ts +51 -4
- package/src/runtime/execution/process-runtime/check-result.ts +88 -0
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
- package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
- package/src/runtime/execution/process-runtime/command-facade.ts +367 -40
- package/src/runtime/execution/process-runtime/gc.ts +38 -6
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +1201 -0
- package/src/runtime/execution/process-runtime/persisted-check.ts +51 -5
- package/src/runtime/execution/process-runtime/resource-claims.ts +10 -6
- package/src/runtime/execution/process-runtime/runtime.ts +53 -3
- package/src/runtime/execution/process-runtime/store.ts +1 -0
- package/src/runtime/execution/process-runtime/types.ts +4 -12
- package/src/runtime/execution/thin-harness/async-process.ts +12 -2
- package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
- package/src/runtime/execution/work-activity.ts +21 -0
- package/src/runtime/execution/workers/executor.ts +18 -61
- package/src/runtime/gateway/mcp/execution-tools.ts +35 -1852
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
- package/src/runtime/gateway/mcp/process-tools.ts +83 -37
- package/src/runtime/gateway/mcp/router.ts +186 -84
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +565 -0
- package/src/runtime/gateway/mcp/runtime-tools.ts +2378 -1947
- package/src/runtime/plugins/app-store-connect-adapter.ts +216 -47
- package/src/runtime/plugins/browser-adapter.ts +2662 -829
- package/src/runtime/plugins/browser-automation-service.ts +10 -0
- package/src/runtime/plugins/browser-handoff-host.ts +2 -25
- package/src/runtime/plugins/browser-handoff.ts +110 -5
- package/src/runtime/plugins/browser-macos-bridge.ts +701 -63
- package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
- package/src/runtime/plugins/browser-native-session-service.ts +222 -0
- package/src/runtime/plugins/browser-node-bridge.ts +6 -34
- package/src/runtime/plugins/browser-provider-registry.ts +109 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +154 -0
- package/src/runtime/plugins/browser-runtime.ts +193 -0
- package/src/runtime/plugins/browser-session-authority.ts +332 -0
- package/src/runtime/plugins/browser-session-store.ts +121 -0
- package/src/runtime/plugins/browser-session-types.ts +98 -0
- package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +10 -4
- package/src/runtime/plugins/external-adapter.ts +358 -3
- package/src/runtime/plugins/external-unix-socket.ts +7 -1
- package/src/runtime/plugins/first-party-registry.ts +2 -0
- package/src/runtime/plugins/github-adapter.ts +125 -0
- package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
- package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
- package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
- package/src/runtime/plugins/ios-adapter.ts +106 -16
- package/src/runtime/plugins/ios-agent-device.ts +234 -64
- package/src/runtime/plugins/ios-physical-device.ts +1143 -392
- package/src/runtime/plugins/lightweight-action.ts +153 -0
- package/src/runtime/plugins/local-system-adapter.ts +123 -6
- package/src/runtime/plugins/macos-capability-broker.ts +47 -9
- package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
- package/src/runtime/plugins/plugin-management-adapter.ts +49 -8
- package/src/runtime/plugins/resend-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +330 -33
- package/src/runtime/plugins/types.ts +38 -3
- package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
- package/src/runtime/projections/git-status-sampler.ts +16 -16
- package/src/runtime/projections/materialized-view.ts +28 -10
- package/src/runtime/recovery/maintenance-executor.ts +426 -25
- package/src/runtime/root/mcp-transport.ts +180 -10
- package/src/runtime/root/package-connector-service.ts +230 -10
- package/src/runtime/root/package-runtime-release.ts +143 -17
- package/src/runtime/root/package-runtime-service.ts +461 -22
- package/src/runtime/root/release-manifest.ts +144 -18
- package/src/runtime/root/release-materialize.ts +125 -32
- package/src/runtime/root/release-store.ts +48 -11
- package/src/runtime/root/runtime.ts +23 -5
- package/src/runtime/root/service.ts +100 -29
- package/src/runtime/root/types.ts +12 -0
- package/src/runtime/safe-tooling/ios-development.ts +321 -63
- package/src/runtime/shared/trusted-executable.ts +62 -0
- package/src/runtime/shared/trusted-node-executable.ts +48 -0
- package/src/runtime/standalone-recovery/core.ts +1079 -240
- package/src/runtime/standalone-recovery/entry.ts +100 -24
- package/src/runtime/standalone-recovery/installer.ts +20 -4
- package/src/runtime/standalone-recovery/service-labels.ts +2 -0
- package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
- package/src/runtime/workflow/schedules/browser-probe.ts +81 -3
- package/src/runtime/workflow/schedules/engine.ts +364 -202
- package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
- package/src/runtime/workflow/schedules/settlement.ts +64 -17
- package/src/runtime/workflow/schedules/store.ts +209 -19
- package/src/runtime/workflow/schedules/types.ts +2 -4
- package/src/runtime/workflow/schedules/work-continuation.ts +26 -13
- package/src/testing/test-governance.ts +8 -40
- package/assets/reference-configs/heartbeat-triage.md +0 -57
- package/assets/templates/helpers/harness-trace-grade.sh +0 -150
- package/assets/templates/helpers/heartbeat-triage.sh +0 -361
- package/assets/templates/helpers/maintenance-triage.sh +0 -167
- package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
- package/docs/architecture/current/architecture-invariants.md +0 -331
- package/docs/architecture/current/automation-and-schedule-engine.md +0 -459
- package/docs/architecture/current/codegraph-context-provider.md +0 -238
- package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
- package/docs/architecture/current/controller-repository-decoupling.md +0 -148
- package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -373
- package/docs/architecture/current/entity-model.md +0 -612
- package/docs/architecture/current/external-plugin-governance.md +0 -396
- package/docs/architecture/current/failure-recovery.md +0 -447
- package/docs/architecture/current/governance.md +0 -213
- package/docs/architecture/current/human-interaction-plane.md +0 -87
- package/docs/architecture/current/implementation-status.md +0 -128
- package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
- package/docs/architecture/current/legacy-governance.md +0 -58
- package/docs/architecture/current/local-workspace-target-grants.md +0 -70
- package/docs/architecture/current/migration-roadmap.md +0 -105
- package/docs/architecture/current/multi-repository-execution.md +0 -371
- package/docs/architecture/current/operations-runbook.md +0 -45
- package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
- package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
- package/docs/architecture/current/repository-access-modes.md +0 -102
- package/docs/architecture/current/route-policy.md +0 -15
- package/docs/architecture/current/route-session-concurrency.md +0 -85
- package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
- package/docs/architecture/current/runtime-directory-map.md +0 -49
- package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
- package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
- package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
- package/docs/architecture/current/system-overview.md +0 -169
- package/docs/architecture/current/target-requirements-traceability.md +0 -202
- package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
- package/docs/architecture/current/thin-harness-v1.md +0 -321
- package/docs/architecture/current/verification-and-release-gates.md +0 -391
- package/docs/forge-autonomous-goal-loop.md +0 -9
- package/docs/forge-provider-configuration.md +0 -7
- package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -93
- package/docs/operations/gmail-assistant-routines.md +0 -186
- package/docs/operations/personal-assistant-operator-guide.md +0 -61
- package/docs/operations/provider-configuration.md +0 -31
- package/scripts/harness-trace-grade.sh +0 -150
- package/scripts/heartbeat-triage.sh +0 -361
- package/scripts/maintenance-triage.sh +0 -167
- package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
- package/src/cli/repositories/goal-registry.ts +0 -239
- package/src/runtime/assistant/action-proposals.ts +0 -279
- package/src/runtime/assistant/intent.ts +0 -395
- package/src/runtime/assistant/model-provider.ts +0 -460
- package/src/runtime/assistant/openapi.ts +0 -223
- package/src/runtime/assistant/policy.ts +0 -89
- package/src/runtime/assistant/readiness.ts +0 -258
- package/src/runtime/assistant/routine-runtime.ts +0 -477
- package/src/runtime/assistant/schedule-binding.ts +0 -171
- package/src/runtime/assistant/standing-grants.ts +0 -375
- package/src/runtime/assistant/store.ts +0 -243
- package/src/runtime/assistant/types.ts +0 -135
- package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
- package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
- package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
- package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
- package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
- package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
- package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
- package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
- package/src/runtime/control-plane/goal-loop/index.ts +0 -13
- package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
- package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
- package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
- package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
- package/src/runtime/control-plane/goal-loop/types.ts +0 -378
- package/src/runtime/control-plane/startup-recovery.ts +0 -198
- package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
- package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
- package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
- package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
- package/src/runtime/workflow/findings/store.ts +0 -204
- package/src/runtime/workflow/findings/types.ts +0 -58
- package/src/runtime/workflow/portfolio/engine.ts +0 -20
- package/src/runtime/workflow/portfolio/store.ts +0 -185
- package/src/runtime/workflow/portfolio/types.ts +0 -29
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
# Automation and Schedule Engine
|
|
2
|
-
|
|
3
|
-
> Status: **Runtime Authority**
|
|
4
|
-
|
|
5
|
-
## 1. Objective
|
|
6
|
-
|
|
7
|
-
The Schedule Engine enables recurring discovery, repair, verification, reporting, and release-readiness workflows without creating an unbounded autonomous Agent.
|
|
8
|
-
|
|
9
|
-
The central rule is:
|
|
10
|
-
|
|
11
|
-
> A Schedule is policy. An Occurrence is one bounded execution window.
|
|
12
|
-
|
|
13
|
-
The system must be able to conclude that nothing should be done.
|
|
14
|
-
|
|
15
|
-
## 2. Non-Goals
|
|
16
|
-
|
|
17
|
-
The Schedule Engine is not:
|
|
18
|
-
|
|
19
|
-
- a forever-running Agent process;
|
|
20
|
-
- permission to bypass repository conflict rules;
|
|
21
|
-
- permission to create unlimited Issues;
|
|
22
|
-
- permission to auto-publish or deploy;
|
|
23
|
-
- a replacement for repository-owned CI;
|
|
24
|
-
- an excuse to retry external failures indefinitely;
|
|
25
|
-
- a global lock across selected repositories.
|
|
26
|
-
|
|
27
|
-
## 3. Schedule Entity
|
|
28
|
-
|
|
29
|
-
A Schedule stores:
|
|
30
|
-
|
|
31
|
-
```text
|
|
32
|
-
scheduleId
|
|
33
|
-
title
|
|
34
|
-
enabled
|
|
35
|
-
repositorySelector or portfolioSelector
|
|
36
|
-
trigger
|
|
37
|
-
workTemplate
|
|
38
|
-
triagePolicy
|
|
39
|
-
executionPolicy
|
|
40
|
-
budget
|
|
41
|
-
retryPolicy
|
|
42
|
-
backoffPolicy
|
|
43
|
-
notificationPolicy
|
|
44
|
-
stopConditions
|
|
45
|
-
createdBy
|
|
46
|
-
createdAt
|
|
47
|
-
updatedAt
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Trigger Types
|
|
51
|
-
|
|
52
|
-
Implemented trigger classes:
|
|
53
|
-
|
|
54
|
-
- fixed interval;
|
|
55
|
-
- cron/calendar expression;
|
|
56
|
-
- condition watch;
|
|
57
|
-
- repository event;
|
|
58
|
-
- dependency checkpoint;
|
|
59
|
-
- manual run-now.
|
|
60
|
-
|
|
61
|
-
Trigger delivery creates an Occurrence request. It does not directly start an Agent.
|
|
62
|
-
|
|
63
|
-
## 4. Occurrence Identity
|
|
64
|
-
|
|
65
|
-
One trigger window produces at most one Occurrence per repository.
|
|
66
|
-
|
|
67
|
-
```text
|
|
68
|
-
occurrenceKey = scheduleId + repoId + normalizedWindow
|
|
69
|
-
requestId = occurrenceKey
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
The normalized window is deterministic for the trigger type. Repeated delivery, reconnect, or scheduler restart returns the same Occurrence.
|
|
73
|
-
|
|
74
|
-
## 5. Occurrence State Machine
|
|
75
|
-
|
|
76
|
-
```text
|
|
77
|
-
created
|
|
78
|
-
-> triaging
|
|
79
|
-
-> nothing_to_do
|
|
80
|
-
-> candidate_recorded
|
|
81
|
-
-> waiting_for_resource
|
|
82
|
-
-> work_dispatched
|
|
83
|
-
-> verifying
|
|
84
|
-
-> completed
|
|
85
|
-
|
|
86
|
-
created/triaging/waiting_for_resource/work_dispatched/verifying
|
|
87
|
-
-> failed
|
|
88
|
-
-> timed_out
|
|
89
|
-
-> budget_exhausted
|
|
90
|
-
-> human_attention_required
|
|
91
|
-
-> external_blocker
|
|
92
|
-
-> cancelled
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
An Occurrence reaches terminal state. A later trigger creates a new Occurrence rather than reviving the old one.
|
|
96
|
-
|
|
97
|
-
## 6. Trigger Processing
|
|
98
|
-
|
|
99
|
-
```text
|
|
100
|
-
1. receive trigger delivery
|
|
101
|
-
2. resolve selected repositories
|
|
102
|
-
3. deduplicate occurrence window
|
|
103
|
-
4. acquire short Schedule admission lock
|
|
104
|
-
5. persist Occurrence
|
|
105
|
-
6. submit repository-scoped triage command to Repo Actor
|
|
106
|
-
7. release admission lock
|
|
107
|
-
8. triage from compact snapshot
|
|
108
|
-
9. persist Decision
|
|
109
|
-
10. dispatch bounded Jobs or finish with no-op outcome
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
The trigger handler must return quickly and must not wait for implementation or checks.
|
|
113
|
-
|
|
114
|
-
## 7. Triage Before Execution
|
|
115
|
-
|
|
116
|
-
Every automated Occurrence begins with triage.
|
|
117
|
-
|
|
118
|
-
Triage inputs should be bounded:
|
|
119
|
-
|
|
120
|
-
```text
|
|
121
|
-
repository health
|
|
122
|
-
active Jobs and Runs
|
|
123
|
-
current Requirement/Work queue
|
|
124
|
-
recent failed checks
|
|
125
|
-
recent accepted work
|
|
126
|
-
Git summary and dirty ownership
|
|
127
|
-
release state
|
|
128
|
-
existing Candidate Findings
|
|
129
|
-
Schedule history and budget
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Triage produces one normalized Decision:
|
|
133
|
-
|
|
134
|
-
```text
|
|
135
|
-
nothing_to_do
|
|
136
|
-
continue_existing_task
|
|
137
|
-
retry_infrastructure_failure
|
|
138
|
-
create_candidate_finding
|
|
139
|
-
promote_existing_finding
|
|
140
|
-
run_readonly_check
|
|
141
|
-
run_repair_task
|
|
142
|
-
release_ready
|
|
143
|
-
external_blocker
|
|
144
|
-
human_attention_required
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
The Decision and evidence are persisted before any write Job is dispatched.
|
|
148
|
-
|
|
149
|
-
## 8. Deterministic vs Agent Triage
|
|
150
|
-
|
|
151
|
-
Deterministic rules are preferred for:
|
|
152
|
-
|
|
153
|
-
- active conflict detection;
|
|
154
|
-
- known failed checks;
|
|
155
|
-
- stale/orphan reconciliation;
|
|
156
|
-
- duplicate Issue or Finding detection;
|
|
157
|
-
- budget and cooldown enforcement;
|
|
158
|
-
- release gate status;
|
|
159
|
-
- repository disabled/frozen state.
|
|
160
|
-
|
|
161
|
-
Semantic analysis remains external-controller-owned. Forge does not invent the next product or code decision inside the Schedule Engine. A Schedule may use the deterministic `external_controller_wake` action to resume an already bounded Work through Thin Launcher. The wake operation only transports the persisted Work/Handoff context to an external Controller; it does not interpret the model response inside the Kernel.
|
|
162
|
-
|
|
163
|
-
Work-bound continuation is one Schedule subtype, not the universal Schedule model. Long-lived policy belongs to the Schedule; one firing belongs to the terminal Occurrence; a Work remains a finite objective. Generic Schedules may therefore finish with `nothing_to_do`, run an explicitly allowlisted deterministic operation/check, or wake an existing finite Work. If an external Controller observes a genuinely new semantic objective, that later request returns through the normal Route Policy and Work admission path rather than turning the Schedule itself into a forever-running Work.
|
|
164
|
-
|
|
165
|
-
For external systems that do not expose a reliable event API, a Work-bound Schedule may instead use the deterministic `browser_probe` operation. The Kernel may navigate or reload one allowed browser target, extract bounded text, normalize a caller-selected projection, compute a stable fingerprint, compare it with the previous persisted observation, and detect explicitly configured login markers. It must not classify the business meaning of the page. The first observation is a silent baseline by default, unchanged observations are `nothing_to_do`, and only a changed observation (or an explicit authentication-required condition) may wake the bound external Controller.
|
|
166
|
-
|
|
167
|
-
`external_controller_wake` accepts a `work_id`, `controller_type`, and optional launcher/session metadata. For ChatGPT, Thin Launcher prefers a saved Forge browser session (`browser_session_id`), then an explicit `https://chatgpt.com/...` conversation URL, then a new browser consult. Codex/Claude remain external CLI controllers. If the Work already has an active Controller lease, the Occurrence is a deterministic no-op rather than spawning a competing controller.
|
|
168
|
-
|
|
169
|
-
The stable ChatGPT tool surface manages this policy through `rh_work` rather than exposing another Schedule tool. `rh_work.schedule_create/list/get/pause/resume/trigger` binds only an existing non-terminal Work to one of three bounded modes: `continuation` (`external_controller_wake`), `browser_watch` (`browser_probe` with change-triggered wake), or `browser_keepalive` (`browser_probe` without content-change wake). Callers cannot use the facade to schedule an arbitrary MCP or repository operation. Creation is idempotent by a stable schedule request identity, defaults to `shadow_mode=true`, limits active occurrences to one, and carries explicit failure/cooldown/daily-budget/backoff policy.
|
|
170
|
-
|
|
171
|
-
A Work-bound Schedule is acceptance-driven, not perpetual. Before every wake **or browser probe**, Forge re-reads the bound Work. A missing Work pauses the Schedule; a terminal Work (`completed`, `cancelled`, or another terminal Work state) deterministically disables the Schedule and returns `nothing_to_do` before touching the external browser target. An active Controller lease also suppresses a competing wake. Therefore recurring triggers are only observation/continuation policy for unfinished bounded Work, never a forever-running agent.
|
|
172
|
-
|
|
173
|
-
`browser_watch` persists only normalized observation metadata (fingerprint, observation time/status, and bounded diagnostics), not the extracted page body as Schedule state. Callers may provide `include_terms` and `ignore_patterns` to exclude unrelated or volatile text such as relative timestamps. `browser_keepalive` refreshes the configured browser session and checks explicit login URL/text markers; it can wake ChatGPT when re-authentication is required, but a successful refresh is not treated as a guarantee that a third-party session can never expire.
|
|
174
|
-
|
|
175
|
-
Thin Launcher does not pre-claim Controller ownership. It records a short Controller-Home launch reservation (configured with `launch_reservation_ms`) only to fence duplicate spawns while the provider starts. The external provider must connect to Forge MCP and call `rh_work continue` with its authenticated transport identity; that authenticated principal/session becomes the Work owner. This separation prevents the scheduler from impersonating ChatGPT/Codex/Claude and preserves the Controller-session identity fence. Detached CLI providers also use their non-interactive execution contracts (`codex ... exec` and `claude --print`) instead of launching interactive TUIs with ignored stdio.
|
|
176
|
-
|
|
177
|
-
For Codex, Thin Launcher injects the currently ready Canonical Runtime MCP endpoint per invocation instead of mutating `~/.codex/config.toml`. The Runtime bearer token is passed only through the child environment (`FORGE_RUNTIME_MCP_TOKEN`); the temporary Codex MCP configuration references that environment variable and sends non-secret forwarded principal/session headers derived from the launch reservation. This makes a scheduled Codex self-contained while keeping authentication material out of argv, logs, and durable provider config. CLI providers without a safe Forge MCP bootstrap must fail closed rather than launch detached work that cannot report ownership/evidence back to Runtime.
|
|
178
|
-
|
|
179
|
-
## 9. Candidate Finding Governance
|
|
180
|
-
|
|
181
|
-
Automation does not immediately convert every observation into an Issue.
|
|
182
|
-
|
|
183
|
-
A Candidate Finding records:
|
|
184
|
-
|
|
185
|
-
```text
|
|
186
|
-
semanticKey
|
|
187
|
-
category
|
|
188
|
-
evidence
|
|
189
|
-
confidence
|
|
190
|
-
firstSeenAt
|
|
191
|
-
lastSeenAt
|
|
192
|
-
occurrenceCount
|
|
193
|
-
existingIssueIds
|
|
194
|
-
recommendedAction
|
|
195
|
-
status
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
Promotion policy may require one or more:
|
|
199
|
-
|
|
200
|
-
- reproducible failure;
|
|
201
|
-
- named check failure;
|
|
202
|
-
- explicit policy violation;
|
|
203
|
-
- repeated observation across multiple Occurrences;
|
|
204
|
-
- high-confidence static diagnosis with evidence;
|
|
205
|
-
- user-configured auto-promotion category;
|
|
206
|
-
- human approval.
|
|
207
|
-
|
|
208
|
-
Speculative “could be improved” observations remain candidates and deduplicate by semantic key.
|
|
209
|
-
|
|
210
|
-
## 10. Existing Work First
|
|
211
|
-
|
|
212
|
-
Before creating new work, triage checks:
|
|
213
|
-
|
|
214
|
-
1. Is an equivalent Issue active?
|
|
215
|
-
2. Is an equivalent Task ready, running, under review, or blocked?
|
|
216
|
-
3. Is an equivalent Job active?
|
|
217
|
-
4. Did a recent terminal attempt fail and require explicit retry?
|
|
218
|
-
5. Is the finding already resolved by the current Revision?
|
|
219
|
-
6. Is another Schedule responsible for the same semantic key?
|
|
220
|
-
|
|
221
|
-
Default priority is to continue or repair existing accepted work rather than create duplicates.
|
|
222
|
-
|
|
223
|
-
## 11. Budget Contract
|
|
224
|
-
|
|
225
|
-
Each Schedule defines bounded budgets, for example:
|
|
226
|
-
|
|
227
|
-
```text
|
|
228
|
-
maxActiveOccurrences
|
|
229
|
-
maxJobsPerOccurrence
|
|
230
|
-
maxAgentRunsPerOccurrence
|
|
231
|
-
maxRetriesPerOccurrence
|
|
232
|
-
maxWallClockPerOccurrence
|
|
233
|
-
maxDailyWallClock
|
|
234
|
-
maxDailyAgentRuns
|
|
235
|
-
maxChangedFiles
|
|
236
|
-
maxChangedLines
|
|
237
|
-
optional token/cost budget
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
Budget is reserved before dispatch and settled from actual usage.
|
|
241
|
-
|
|
242
|
-
Budget exhaustion is a valid terminal outcome. It may notify or defer to the next eligible window; it must not silently expand.
|
|
243
|
-
|
|
244
|
-
## 12. Concurrency Policy
|
|
245
|
-
|
|
246
|
-
Default:
|
|
247
|
-
|
|
248
|
-
```text
|
|
249
|
-
maxActiveOccurrences per schedule + repo = 1
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
If a trigger arrives while one is active:
|
|
253
|
-
|
|
254
|
-
- return the existing Occurrence;
|
|
255
|
-
- coalesce the trigger into a pending signal;
|
|
256
|
-
- or skip according to Schedule policy.
|
|
257
|
-
|
|
258
|
-
It must not create parallel duplicate loops.
|
|
259
|
-
|
|
260
|
-
Cross-repository Schedules create independent repository Occurrences and use Global Scheduler fairness.
|
|
261
|
-
|
|
262
|
-
## 13. Backoff and Cooldown
|
|
263
|
-
|
|
264
|
-
Retry policy distinguishes failure classes.
|
|
265
|
-
|
|
266
|
-
### Infrastructure failure
|
|
267
|
-
|
|
268
|
-
May retry with bounded exponential backoff:
|
|
269
|
-
|
|
270
|
-
```text
|
|
271
|
-
baseDelay * 2^attempt, capped by maxDelay
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
### Scope or resource conflict
|
|
275
|
-
|
|
276
|
-
Waits for resource or next eligibility; does not consume implementation retry count unless deadline expires.
|
|
277
|
-
|
|
278
|
-
### Implementation or acceptance failure
|
|
279
|
-
|
|
280
|
-
Creates or updates durable Task state and normally stops the Occurrence for review or a separately authorized retry.
|
|
281
|
-
|
|
282
|
-
### External blocker
|
|
283
|
-
|
|
284
|
-
Enters cooldown and notifies only when meaningful state changes or the configured reminder interval passes.
|
|
285
|
-
|
|
286
|
-
### Repeated no-op
|
|
287
|
-
|
|
288
|
-
May reduce frequency through quiet backoff when the Schedule repeatedly returns `nothing_to_do`.
|
|
289
|
-
|
|
290
|
-
## 14. Stop Conditions
|
|
291
|
-
|
|
292
|
-
A Schedule or Occurrence stops dispatching mutation work when any configured condition is true:
|
|
293
|
-
|
|
294
|
-
```text
|
|
295
|
-
release_ready
|
|
296
|
-
human_review_required
|
|
297
|
-
external_blocker
|
|
298
|
-
budget_exhausted
|
|
299
|
-
maximum_failures_reached
|
|
300
|
-
repository_disabled
|
|
301
|
-
release_freeze
|
|
302
|
-
user_paused
|
|
303
|
-
end_date or occurrence_count reached
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
A stop condition may disable the Schedule, pause it, or only terminate the current Occurrence according to policy.
|
|
307
|
-
|
|
308
|
-
## 15. Dirty Workspace Policy
|
|
309
|
-
|
|
310
|
-
Automation must not treat a dirty Workspace as disposable.
|
|
311
|
-
|
|
312
|
-
Before mutation:
|
|
313
|
-
|
|
314
|
-
- identify whether changes belong to an active Controller entity;
|
|
315
|
-
- preserve unrelated user changes;
|
|
316
|
-
- use a Worktree when isolation is safe;
|
|
317
|
-
- otherwise record `human_attention_required` or wait.
|
|
318
|
-
|
|
319
|
-
Automatic `git reset`, `git clean`, stash mutation, or overwrite is forbidden.
|
|
320
|
-
|
|
321
|
-
## 16. Release Freeze Policy
|
|
322
|
-
|
|
323
|
-
During Release Freeze:
|
|
324
|
-
|
|
325
|
-
- read-only triage may run;
|
|
326
|
-
- release checks may run;
|
|
327
|
-
- Candidate Findings may be recorded;
|
|
328
|
-
- new mutation Jobs are not dispatched;
|
|
329
|
-
- existing approved release workflow continues according to the release contract.
|
|
330
|
-
|
|
331
|
-
## 17. Notification Policy
|
|
332
|
-
|
|
333
|
-
Schedules should be quiet by default.
|
|
334
|
-
|
|
335
|
-
Notify on:
|
|
336
|
-
|
|
337
|
-
- material progress;
|
|
338
|
-
- new confirmed failure;
|
|
339
|
-
- external blocker requiring action;
|
|
340
|
-
- human review requirement;
|
|
341
|
-
- release readiness;
|
|
342
|
-
- budget exhaustion that changes expected outcome;
|
|
343
|
-
- newly promoted Requirement/Work.
|
|
344
|
-
|
|
345
|
-
Do not notify repeatedly for unchanged no-op or unchanged blocker state.
|
|
346
|
-
|
|
347
|
-
Every notification links to durable Occurrence, Job, Task, or Finding identities.
|
|
348
|
-
|
|
349
|
-
## 18. Shadow Mode
|
|
350
|
-
|
|
351
|
-
New mutation-capable Schedule policies should first run in Shadow Mode.
|
|
352
|
-
|
|
353
|
-
Shadow Mode:
|
|
354
|
-
|
|
355
|
-
- performs trigger, snapshot, triage, deduplication, budget, and policy decisions;
|
|
356
|
-
- records what Jobs it would have dispatched;
|
|
357
|
-
- does not create mutation Jobs;
|
|
358
|
-
- may run explicitly safe read-only checks;
|
|
359
|
-
- produces divergence and usefulness reports.
|
|
360
|
-
|
|
361
|
-
Recommended graduation evidence:
|
|
362
|
-
|
|
363
|
-
- sufficient number of Occurrences or time window;
|
|
364
|
-
- no critical unsafe dispatch decisions;
|
|
365
|
-
- acceptable duplicate and false-positive rate;
|
|
366
|
-
- useful human adoption of findings;
|
|
367
|
-
- bounded cost and latency;
|
|
368
|
-
- explicit user enablement.
|
|
369
|
-
|
|
370
|
-
## 19. Schedule Types
|
|
371
|
-
|
|
372
|
-
### Health and Availability Watch
|
|
373
|
-
|
|
374
|
-
Checks Controller/Gateway/Worker health and creates incidents only for confirmed changes.
|
|
375
|
-
|
|
376
|
-
### Repair Loop
|
|
377
|
-
|
|
378
|
-
Continues a known Issue through one bounded Task or retry per Occurrence until release-ready, blocked, or budget-exhausted.
|
|
379
|
-
|
|
380
|
-
### Bug Discovery
|
|
381
|
-
|
|
382
|
-
Runs deterministic scans and creates Candidate Findings. Promotion threshold should be strict.
|
|
383
|
-
|
|
384
|
-
### Dependency or Release Watch
|
|
385
|
-
|
|
386
|
-
Monitors an external condition and notifies or unlocks a Task when it changes.
|
|
387
|
-
|
|
388
|
-
### Report Schedule
|
|
389
|
-
|
|
390
|
-
Builds compact summaries without mutation.
|
|
391
|
-
|
|
392
|
-
Each type uses the same Occurrence and Job model rather than a custom forever loop.
|
|
393
|
-
|
|
394
|
-
## 20. Self-Improvement Limits
|
|
395
|
-
|
|
396
|
-
A Schedule may propose changes to its own policy only as a Candidate Finding or Governance Issue. It cannot silently:
|
|
397
|
-
|
|
398
|
-
- increase its budget;
|
|
399
|
-
- shorten its interval;
|
|
400
|
-
- broaden repository selection;
|
|
401
|
-
- broaden write scope;
|
|
402
|
-
- remove human stop conditions;
|
|
403
|
-
- enable destructive or remote actions;
|
|
404
|
-
- modify acceptance criteria to make itself pass.
|
|
405
|
-
|
|
406
|
-
## 21. Recovery
|
|
407
|
-
|
|
408
|
-
After Controller restart:
|
|
409
|
-
|
|
410
|
-
1. reload enabled Schedules;
|
|
411
|
-
2. rebuild active Occurrence index;
|
|
412
|
-
3. deduplicate due trigger windows;
|
|
413
|
-
4. reconcile active child Jobs;
|
|
414
|
-
5. terminalize expired or orphaned Occurrences when appropriate;
|
|
415
|
-
6. preserve completed Decisions and outcomes;
|
|
416
|
-
7. resume only from durable boundaries.
|
|
417
|
-
|
|
418
|
-
In-memory timers are delivery optimizations, not Schedule truth.
|
|
419
|
-
|
|
420
|
-
## 22. Audit and Metrics
|
|
421
|
-
|
|
422
|
-
Track:
|
|
423
|
-
|
|
424
|
-
```text
|
|
425
|
-
occurrences by outcome
|
|
426
|
-
no-op rate
|
|
427
|
-
candidate promotion rate
|
|
428
|
-
duplicate suppression
|
|
429
|
-
jobs and runs per occurrence
|
|
430
|
-
retry classifications
|
|
431
|
-
budget usage
|
|
432
|
-
mean wait and execution time
|
|
433
|
-
human adoption rate
|
|
434
|
-
false-positive or rollback rate
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
The purpose is to remove unhelpful automation, not merely prove it is active.
|
|
438
|
-
|
|
439
|
-
## 23. Current Implementation
|
|
440
|
-
|
|
441
|
-
The runtime implements first-class `RepositorySchedule`, `ScheduleDecision` and `ScheduleOccurrence` records under `src/runtime/workflow/schedules/`. Supported triggers are interval, manual, five-field UTC cron, one-shot calendar timestamp, condition watch, repository event and dependency checkpoint.
|
|
442
|
-
|
|
443
|
-
Every due trigger uses a deterministic window or event identity. The Decision is persisted before executable work is admitted. Occurrences are indexed, Shadow Mode defaults on, one Occurrence creates at most one durable Job, and repeated trigger delivery returns the existing Occurrence. Work-bound continuation/browser-watch helpers remain specialized views over this same Schedule/Occurrence engine rather than a second Workflow lifecycle.
|
|
444
|
-
|
|
445
|
-
Budgets, cooldown, maximum active Occurrences, consecutive-failure circuit breaking and exponential backoff are persisted. Dirty Workspaces, release barriers, repository disablement, human-attention state and recent external/infrastructure failures suppress unattended writes. Candidate Findings deduplicate observations and require explicit human promotion before Issue creation.
|
|
446
|
-
|
|
447
|
-
The in-process Scheduler owned by the Canonical Runtime ticks timer/condition/dependency triggers and resumes from durable state after a whole-Runtime restart. Repository events and manual triggers enter through the same idempotent path. Worker and Reconciler settlement keep Job, Occurrence and Schedule failure state consistent.
|
|
448
|
-
|
|
449
|
-
## 24. Safety Boundary
|
|
450
|
-
|
|
451
|
-
Schedules may perform bounded repository work but cannot push, merge, publish, deploy, close remote Issues, remove repositories, or run arbitrary repository commands. The policy is checked at creation and again in the Worker.
|
|
452
|
-
|
|
453
|
-
## 25. Rollout Rule
|
|
454
|
-
|
|
455
|
-
New mutation Schedules begin in Shadow Mode until their decisions are reviewed. This is an operational rollout rule, not an implementation gap.
|
|
456
|
-
|
|
457
|
-
### Deferred activation across a natural Runtime restart
|
|
458
|
-
|
|
459
|
-
A continuation Schedule may be deliberately created with `shadowMode=true` while the currently running immutable Runtime predates the Controller-wake implementation required by that Schedule. Forge can persist a one-time pending continuation activation marker in Controller Home. Old Runtime releases do not read this marker. The first naturally restarted Runtime containing the pending-activation implementation consumes the marker before starting its sole Scheduler, verifies that the Schedule is still enabled and still targets the same `external_controller_wake` Work, flips only `shadowMode` to `false`, and removes the marker. If the Schedule was explicitly disabled in the meantime, the marker is cancelled instead. This preserves one Scheduler authority and avoids introducing a second cron/LaunchAgent or forcing a rollout solely to enable continuation.
|