@moretea-labs/forge 1.6.0 → 1.7.0

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.
Files changed (396) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +26 -0
  3. package/CLAUDE.md +2 -0
  4. package/README.md +2 -2
  5. package/README.zh-CN.md +1 -1
  6. package/SKILL.md +2 -2
  7. package/THIRD_PARTY_NOTICES.md +1 -1
  8. package/agents/openai.yaml +1 -1
  9. package/assets/hooks/hook-input.sh +11 -8
  10. package/assets/hooks/lib/session-state.sh +10 -7
  11. package/assets/hooks/lib/workflow-state.sh +13 -177
  12. package/assets/hooks/post-tool-observer.sh +8 -2
  13. package/assets/hooks/prompt-guard.sh +5 -81
  14. package/assets/hooks/session-start-context.sh +56 -1
  15. package/assets/partials/05-workflow.partial.md +1 -1
  16. package/assets/partials-agents/03-orchestration.partial.md +1 -1
  17. package/assets/plugin-registry.v1.json +1 -1
  18. package/assets/reference-configs/document-generation.md +1 -1
  19. package/assets/reference-configs/harness-overview.md +1 -1
  20. package/assets/reference-configs/sprint-contracts.md +3 -3
  21. package/assets/skill-version.json +2 -2
  22. package/assets/templates/contract.template.md +2 -7
  23. package/assets/templates/helpers/capture-plan.sh +2 -2
  24. package/assets/templates/helpers/check-task-workflow.sh +4 -4
  25. package/assets/templates/helpers/contract-worktree.sh +1 -21
  26. package/assets/templates/helpers/ensure-task-workflow.sh +11 -36
  27. package/assets/templates/helpers/migrate-project-template.sh +22 -45
  28. package/assets/templates/helpers/new-plan.sh +1 -1
  29. package/assets/templates/helpers/plan-to-todo.sh +12 -37
  30. package/assets/templates/helpers/ship-worktrees.sh +2 -29
  31. package/assets/templates/helpers/verify-contract.sh +1 -111
  32. package/assets/templates/helpers/verify-sprint.sh +3 -180
  33. package/assets/templates/plan.template.md +1 -1
  34. package/assets/templates/review.template.md +9 -34
  35. package/assets/workflow-contract.v1.json +10 -19
  36. package/docs/README.md +10 -10
  37. package/docs/architecture/CURRENT.md +170 -0
  38. package/docs/architecture/EVOLUTION.md +42 -0
  39. package/docs/architecture/current/README.md +4 -156
  40. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
  41. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
  42. package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
  43. package/docs/architecture/history/README.md +7 -0
  44. package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
  45. package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
  46. package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
  47. package/docs/architecture/history.md +3 -34
  48. package/docs/architecture/index.md +15 -98
  49. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
  50. package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
  51. package/docs/architecture/versions/1.6.md +38 -0
  52. package/docs/architecture/versions/1.7.md +41 -0
  53. package/docs/forge-chatgpt-browser-engine.md +2 -2
  54. package/docs/forge-chatgpt-mcp-setup.md +4 -28
  55. package/docs/forge-chatgpt-supervised-automation.md +3 -3
  56. package/docs/forge-github-issue-launcher.md +1 -1
  57. package/docs/forge-runtime-self-healing-loop.md +1 -1
  58. package/docs/operations/controller-browser-plugin.md +26 -6
  59. package/docs/operations/controller-performance-and-502.md +124 -0
  60. package/docs/operations/controller-reliability-runbook.md +1 -1
  61. package/docs/operations/features.md +2 -2
  62. package/docs/operations/github-repository.md +1 -1
  63. package/docs/operations/homebrew.md +2 -2
  64. package/docs/operations/mcp-tool-exposure.md +5 -3
  65. package/docs/wiki/Architecture.md +6 -6
  66. package/docs/wiki/Implementation.md +2 -2
  67. package/docs/wiki/Integrations.md +2 -2
  68. package/docs/wiki/Work-Lifecycle.md +1 -1
  69. package/package.json +29 -10
  70. package/scripts/activate-source-baseline.ts +17 -13
  71. package/scripts/benchmark-background-check-overlap.ts +228 -0
  72. package/scripts/benchmark-mcp-host.sh +117 -0
  73. package/scripts/benchmark-mcp-transport.ts +170 -0
  74. package/scripts/benchmark-quality-harness.ts +146 -0
  75. package/scripts/benchmark-route-session-concurrency.ts +207 -6
  76. package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
  77. package/scripts/benchmark-typescript-navigation.ts +186 -0
  78. package/scripts/benchmark-work-efficiency.ts +334 -0
  79. package/scripts/capture-plan.sh +3 -3
  80. package/scripts/check-agent-tooling.sh +8 -35
  81. package/scripts/check-architecture-sync.sh +17 -86
  82. package/scripts/check-mcp-compatibility.ts +14 -0
  83. package/scripts/check-runtime-architecture.mjs +107 -64
  84. package/scripts/check-stable-baseline.ts +92 -0
  85. package/scripts/check-task-workflow.sh +4 -4
  86. package/scripts/contract-worktree.sh +1 -21
  87. package/scripts/ensure-task-workflow.sh +22 -55
  88. package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
  89. package/scripts/install-standalone-recovery.ts +24 -0
  90. package/scripts/lib/project-init-lib.sh +15 -44
  91. package/scripts/migrate-project-template.sh +23 -1179
  92. package/scripts/new-plan.sh +1 -1
  93. package/scripts/plan-to-todo.sh +11 -36
  94. package/scripts/run-governed-gate.ts +2 -1
  95. package/scripts/ship-worktrees.sh +2 -29
  96. package/scripts/smoke-ios-physical-device.ts +4 -2
  97. package/scripts/smoke-runtime-recovery.ts +1 -35
  98. package/scripts/smoke-schedule-engine.ts +1 -20
  99. package/scripts/verify-contract.sh +1 -111
  100. package/scripts/verify-forge-runtime.sh +0 -1
  101. package/scripts/verify-sprint.sh +3 -180
  102. package/scripts/workflow-contract.ts +1 -5
  103. package/src/cli/commands/init-hook.ts +3 -3
  104. package/src/cli/commands/mcp.ts +9 -5
  105. package/src/cli/commands/plugin.ts +1 -1
  106. package/src/cli/commands/recovery.ts +25 -3
  107. package/src/cli/commands/runtime.ts +55 -3
  108. package/src/cli/commands/security.ts +12 -1
  109. package/src/cli/commands/setup-profile.ts +31 -21
  110. package/src/cli/controller/check-runner.ts +106 -3
  111. package/src/cli/controller/composite-result.ts +1 -1
  112. package/src/cli/controller/context/focus.ts +51 -0
  113. package/src/cli/controller/context/instruction-context.ts +114 -0
  114. package/src/cli/controller/context/known-paths.ts +76 -0
  115. package/src/cli/controller/context/query-planning.ts +110 -0
  116. package/src/cli/controller/context/rule-resolution.ts +532 -0
  117. package/src/cli/controller/context/source-materializer.ts +278 -0
  118. package/src/cli/controller/context/structural.ts +16 -0
  119. package/src/cli/controller/context/types.ts +286 -0
  120. package/src/cli/controller/context-pack.ts +785 -469
  121. package/src/cli/controller/launch-agents.ts +77 -2
  122. package/src/cli/controller/operational-plan.ts +2 -2
  123. package/src/cli/controller/work-mode.ts +6 -4
  124. package/src/cli/editing/edit-session.ts +60 -7
  125. package/src/cli/github/github.ts +133 -0
  126. package/src/cli/installer/managed-entries.ts +15 -1
  127. package/src/cli/local-bridge/console-automations.ts +54 -78
  128. package/src/cli/local-bridge/console-view-models.ts +1 -35
  129. package/src/cli/local-bridge/facade-api.ts +0 -217
  130. package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
  131. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +23 -13
  132. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
  133. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +6 -4
  134. package/src/cli/local-bridge/frontend/src/lib/api.ts +1 -6
  135. package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
  136. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +2 -2
  137. package/src/cli/local-bridge/frontend/src/styles.css +1 -1
  138. package/src/cli/local-bridge/frontend/src/types.ts +5 -8
  139. package/src/cli/local-bridge/job-store.ts +1 -490
  140. package/src/cli/local-bridge/server.ts +0 -513
  141. package/src/cli/local-bridge/ui-dist/app.css +1 -1
  142. package/src/cli/local-bridge/ui-dist/app.js +3703 -3757
  143. package/src/cli/mcp/auth.ts +5 -5
  144. package/src/cli/mcp/instructions.ts +3 -2
  145. package/src/cli/mcp/legacy-tool-service.ts +0 -189
  146. package/src/cli/mcp/multi-repository.ts +16 -5
  147. package/src/cli/mcp/oauth.ts +175 -26
  148. package/src/cli/mcp/repository-tools.ts +247 -107
  149. package/src/cli/mcp/server.ts +537 -111
  150. package/src/cli/mcp/tool-capability-cache.ts +1 -1
  151. package/src/cli/mcp/toolset-selection.ts +1 -1
  152. package/src/cli/mcp/toolset.ts +42 -5
  153. package/src/cli/mcp/transports/http.ts +101 -14
  154. package/src/cli/mcp/transports/session-registry.ts +43 -5
  155. package/src/cli/mcp/types.ts +3 -3
  156. package/src/cli/repositories/command-classifier.ts +101 -19
  157. package/src/cli/repositories/command-executor.ts +55 -521
  158. package/src/cli/repositories/command-process.ts +108 -0
  159. package/src/cli/repositories/command-scope.ts +99 -41
  160. package/src/cli/repositories/controller-home.ts +7 -8
  161. package/src/cli/repositories/git-command-executor.ts +2 -0
  162. package/src/cli/repositories/locks.ts +53 -16
  163. package/src/cli/repositories/repository-snapshot.ts +121 -0
  164. package/src/cli/repositories/selected-path-actions.ts +17 -9
  165. package/src/cli/repositories/structured-git.ts +61 -3
  166. package/src/cli/repository/inspector.ts +553 -63
  167. package/src/cli/repository/session-cache.ts +58 -17
  168. package/src/cli/v81-entry.ts +1 -4
  169. package/src/effects/fs-transaction.ts +85 -17
  170. package/src/runtime/context/codegraph-read-provider.ts +233 -2
  171. package/src/runtime/context/codegraph-sidecar.cjs +74 -40
  172. package/src/runtime/context/generic-lsp-provider.ts +355 -0
  173. package/src/runtime/context/lsp-client.ts +283 -0
  174. package/src/runtime/context/semantic-navigation.ts +275 -0
  175. package/src/runtime/context/swift-navigation.ts +565 -0
  176. package/src/runtime/context/typescript-navigation.ts +226 -0
  177. package/src/runtime/control-plane/dispatch-priority.ts +28 -0
  178. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +47 -8
  179. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
  180. package/src/runtime/control-plane/execution/session-store.ts +18 -0
  181. package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
  182. package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
  183. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
  184. package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
  185. package/src/runtime/control-plane/execution/work-task-receipt.ts +54 -11
  186. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +143 -8
  187. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +22 -14
  188. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +85 -8
  189. package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
  190. package/src/runtime/control-plane/facade/controller-round-relay.ts +991 -0
  191. package/src/runtime/control-plane/facade/controller-session-store.ts +132 -1
  192. package/src/runtime/control-plane/facade/goal-workloop-access.ts +2 -0
  193. package/src/runtime/control-plane/facade/goal-workloop.ts +686 -129
  194. package/src/runtime/control-plane/facade/index.ts +1 -0
  195. package/src/runtime/control-plane/facade/plan-contract-store.ts +185 -20
  196. package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
  197. package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
  198. package/src/runtime/control-plane/facade/types.ts +22 -5
  199. package/src/runtime/control-plane/facade/work-contract-store.ts +175 -73
  200. package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
  201. package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
  202. package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
  203. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
  204. package/src/runtime/control-plane/global-scheduler/maintenance.ts +145 -0
  205. package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
  206. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
  207. package/src/runtime/control-plane/global-scheduler/scheduler.ts +273 -542
  208. package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
  209. package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
  210. package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
  211. package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
  212. package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
  213. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
  214. package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
  215. package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
  216. package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
  217. package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
  218. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +50 -0
  219. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +355 -116
  220. package/src/runtime/control-plane/launcher/launch-reservation-store.ts +40 -0
  221. package/src/runtime/control-plane/launcher/thin-launcher.ts +194 -10
  222. package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
  223. package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
  224. package/src/runtime/control-plane/release-retention.ts +62 -2
  225. package/src/runtime/control-plane/routing/route-policy.ts +7 -16
  226. package/src/runtime/control-plane/runtime-status-client.ts +0 -2
  227. package/src/runtime/diagnostics/mcp-timing.ts +13 -0
  228. package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
  229. package/src/runtime/diagnostics/performance.ts +24 -1
  230. package/src/runtime/evidence/event-ledger.ts +1 -1
  231. package/src/runtime/execution/jobs/store.ts +58 -4
  232. package/src/runtime/execution/jobs/types.ts +1 -1
  233. package/src/runtime/execution/managed-workspace.ts +203 -1
  234. package/src/runtime/execution/process-runtime/check-facade.ts +51 -4
  235. package/src/runtime/execution/process-runtime/check-result.ts +53 -0
  236. package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
  237. package/src/runtime/execution/process-runtime/command-facade.ts +345 -40
  238. package/src/runtime/execution/process-runtime/gc.ts +38 -6
  239. package/src/runtime/execution/process-runtime/lightweight-managed.ts +1184 -0
  240. package/src/runtime/execution/process-runtime/persisted-check.ts +47 -4
  241. package/src/runtime/execution/process-runtime/resource-claims.ts +10 -6
  242. package/src/runtime/execution/process-runtime/runtime.ts +43 -3
  243. package/src/runtime/execution/process-runtime/store.ts +1 -0
  244. package/src/runtime/execution/process-runtime/types.ts +2 -0
  245. package/src/runtime/execution/thin-harness/async-process.ts +12 -2
  246. package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
  247. package/src/runtime/execution/workers/executor.ts +0 -48
  248. package/src/runtime/gateway/mcp/execution-tools.ts +1192 -114
  249. package/src/runtime/gateway/mcp/process-tools.ts +83 -37
  250. package/src/runtime/gateway/mcp/router.ts +184 -82
  251. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +546 -0
  252. package/src/runtime/gateway/mcp/runtime-tools.ts +2224 -1589
  253. package/src/runtime/plugins/app-store-connect-adapter.ts +123 -19
  254. package/src/runtime/plugins/browser-adapter.ts +2901 -241
  255. package/src/runtime/plugins/browser-automation-service.ts +10 -0
  256. package/src/runtime/plugins/browser-handoff.ts +92 -2
  257. package/src/runtime/plugins/browser-macos-bridge.ts +582 -49
  258. package/src/runtime/plugins/browser-node-bridge.ts +6 -34
  259. package/src/runtime/plugins/browser-provider-registry.ts +109 -0
  260. package/src/runtime/plugins/browser-runtime-contract.ts +152 -0
  261. package/src/runtime/plugins/browser-runtime.ts +183 -0
  262. package/src/runtime/plugins/browser-session-authority.ts +332 -0
  263. package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
  264. package/src/runtime/plugins/desktop-operator-registration.ts +8 -2
  265. package/src/runtime/plugins/external-adapter.ts +324 -3
  266. package/src/runtime/plugins/external-unix-socket.ts +7 -1
  267. package/src/runtime/plugins/first-party-registry.ts +2 -0
  268. package/src/runtime/plugins/github-adapter.ts +125 -0
  269. package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
  270. package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
  271. package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
  272. package/src/runtime/plugins/ios-adapter.ts +106 -16
  273. package/src/runtime/plugins/ios-agent-device.ts +234 -64
  274. package/src/runtime/plugins/ios-physical-device.ts +1143 -392
  275. package/src/runtime/plugins/lightweight-action.ts +153 -0
  276. package/src/runtime/plugins/local-system-adapter.ts +123 -6
  277. package/src/runtime/plugins/macos-capability-broker.ts +55 -9
  278. package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
  279. package/src/runtime/plugins/plugin-management-adapter.ts +49 -8
  280. package/src/runtime/plugins/resend-adapter.ts +1 -1
  281. package/src/runtime/plugins/store.ts +269 -29
  282. package/src/runtime/plugins/types.ts +35 -2
  283. package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
  284. package/src/runtime/projections/git-status-sampler.ts +16 -16
  285. package/src/runtime/projections/materialized-view.ts +28 -10
  286. package/src/runtime/recovery/maintenance-executor.ts +393 -28
  287. package/src/runtime/root/mcp-transport.ts +180 -10
  288. package/src/runtime/root/package-connector-service.ts +186 -8
  289. package/src/runtime/root/package-runtime-release.ts +143 -17
  290. package/src/runtime/root/package-runtime-service.ts +430 -22
  291. package/src/runtime/root/release-manifest.ts +7 -2
  292. package/src/runtime/root/release-materialize.ts +19 -0
  293. package/src/runtime/root/release-store.ts +48 -11
  294. package/src/runtime/root/runtime.ts +23 -5
  295. package/src/runtime/root/service.ts +100 -29
  296. package/src/runtime/root/types.ts +2 -0
  297. package/src/runtime/safe-tooling/ios-development.ts +321 -63
  298. package/src/runtime/shared/trusted-executable.ts +62 -0
  299. package/src/runtime/shared/trusted-node-executable.ts +48 -0
  300. package/src/runtime/standalone-recovery/core.ts +700 -92
  301. package/src/runtime/standalone-recovery/entry.ts +99 -23
  302. package/src/runtime/standalone-recovery/installer.ts +19 -3
  303. package/src/runtime/standalone-recovery/service-labels.ts +2 -0
  304. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
  305. package/src/runtime/workflow/schedules/browser-probe.ts +81 -3
  306. package/src/runtime/workflow/schedules/engine.ts +287 -151
  307. package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
  308. package/src/runtime/workflow/schedules/settlement.ts +48 -4
  309. package/src/runtime/workflow/schedules/store.ts +131 -10
  310. package/src/runtime/workflow/schedules/types.ts +2 -4
  311. package/src/runtime/workflow/schedules/work-continuation.ts +26 -13
  312. package/src/testing/test-governance.ts +8 -40
  313. package/assets/reference-configs/heartbeat-triage.md +0 -57
  314. package/assets/templates/helpers/harness-trace-grade.sh +0 -150
  315. package/assets/templates/helpers/heartbeat-triage.sh +0 -361
  316. package/assets/templates/helpers/maintenance-triage.sh +0 -167
  317. package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
  318. package/docs/architecture/current/architecture-invariants.md +0 -331
  319. package/docs/architecture/current/automation-and-schedule-engine.md +0 -459
  320. package/docs/architecture/current/codegraph-context-provider.md +0 -238
  321. package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
  322. package/docs/architecture/current/controller-repository-decoupling.md +0 -148
  323. package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -373
  324. package/docs/architecture/current/entity-model.md +0 -612
  325. package/docs/architecture/current/external-plugin-governance.md +0 -396
  326. package/docs/architecture/current/failure-recovery.md +0 -447
  327. package/docs/architecture/current/governance.md +0 -213
  328. package/docs/architecture/current/human-interaction-plane.md +0 -87
  329. package/docs/architecture/current/implementation-status.md +0 -128
  330. package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
  331. package/docs/architecture/current/legacy-governance.md +0 -58
  332. package/docs/architecture/current/local-workspace-target-grants.md +0 -70
  333. package/docs/architecture/current/migration-roadmap.md +0 -105
  334. package/docs/architecture/current/multi-repository-execution.md +0 -371
  335. package/docs/architecture/current/operations-runbook.md +0 -45
  336. package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
  337. package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
  338. package/docs/architecture/current/repository-access-modes.md +0 -102
  339. package/docs/architecture/current/route-policy.md +0 -15
  340. package/docs/architecture/current/route-session-concurrency.md +0 -85
  341. package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
  342. package/docs/architecture/current/runtime-directory-map.md +0 -49
  343. package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
  344. package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
  345. package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
  346. package/docs/architecture/current/system-overview.md +0 -169
  347. package/docs/architecture/current/target-requirements-traceability.md +0 -202
  348. package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
  349. package/docs/architecture/current/thin-harness-v1.md +0 -321
  350. package/docs/architecture/current/verification-and-release-gates.md +0 -391
  351. package/docs/forge-autonomous-goal-loop.md +0 -9
  352. package/docs/forge-provider-configuration.md +0 -7
  353. package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -93
  354. package/docs/operations/gmail-assistant-routines.md +0 -186
  355. package/docs/operations/personal-assistant-operator-guide.md +0 -61
  356. package/docs/operations/provider-configuration.md +0 -31
  357. package/scripts/harness-trace-grade.sh +0 -150
  358. package/scripts/heartbeat-triage.sh +0 -361
  359. package/scripts/maintenance-triage.sh +0 -167
  360. package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
  361. package/src/cli/repositories/goal-registry.ts +0 -239
  362. package/src/runtime/assistant/action-proposals.ts +0 -279
  363. package/src/runtime/assistant/intent.ts +0 -395
  364. package/src/runtime/assistant/model-provider.ts +0 -460
  365. package/src/runtime/assistant/openapi.ts +0 -223
  366. package/src/runtime/assistant/policy.ts +0 -89
  367. package/src/runtime/assistant/readiness.ts +0 -258
  368. package/src/runtime/assistant/routine-runtime.ts +0 -477
  369. package/src/runtime/assistant/schedule-binding.ts +0 -171
  370. package/src/runtime/assistant/standing-grants.ts +0 -375
  371. package/src/runtime/assistant/store.ts +0 -243
  372. package/src/runtime/assistant/types.ts +0 -135
  373. package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
  374. package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
  375. package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
  376. package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
  377. package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
  378. package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
  379. package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
  380. package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
  381. package/src/runtime/control-plane/goal-loop/index.ts +0 -13
  382. package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
  383. package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
  384. package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
  385. package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
  386. package/src/runtime/control-plane/goal-loop/types.ts +0 -378
  387. package/src/runtime/control-plane/startup-recovery.ts +0 -198
  388. package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
  389. package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
  390. package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
  391. package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
  392. package/src/runtime/workflow/findings/store.ts +0 -204
  393. package/src/runtime/workflow/findings/types.ts +0 -58
  394. package/src/runtime/workflow/portfolio/engine.ts +0 -20
  395. package/src/runtime/workflow/portfolio/store.ts +0 -185
  396. package/src/runtime/workflow/portfolio/types.ts +0 -29
@@ -19,85 +19,6 @@ target_branch=""
19
19
  changed_files_file=""
20
20
  format="text"
21
21
 
22
- required_current_docs=(
23
- "docs/architecture/current/README.md"
24
- "docs/architecture/current/governance.md"
25
- "docs/architecture/current/system-overview.md"
26
- "docs/architecture/current/architecture-invariants.md"
27
- "docs/architecture/current/entity-model.md"
28
- "docs/architecture/current/job-and-run-lifecycle.md"
29
- "docs/architecture/current/dispatch-and-agent-strategy.md"
30
- "docs/architecture/current/scheduler-and-resource-claims.md"
31
- "docs/architecture/current/multi-repository-execution.md"
32
- "docs/architecture/current/automation-and-schedule-engine.md"
33
- "docs/architecture/current/failure-recovery.md"
34
- "docs/architecture/current/verification-and-release-gates.md"
35
- "docs/architecture/current/implementation-status.md"
36
- "docs/architecture/current/migration-roadmap.md"
37
- "docs/architecture/current/runtime-directory-map.md"
38
- "docs/architecture/current/operations-runbook.md"
39
- )
40
-
41
- historical_runtime_docs=(
42
- "docs/architecture/history.md"
43
- )
44
-
45
- runtime_architecture_gate_enabled() {
46
- [[ -d "docs/architecture/current" ]] && return 0
47
- local file
48
- for file in "${historical_runtime_docs[@]}"; do
49
- [[ -f "$file" ]] && return 0
50
- done
51
- [[ -f "docs/architecture/index.md" ]] && grep -Fq -- "Controller Runtime" "docs/architecture/index.md"
52
- }
53
-
54
- architecture_baseline_fail() {
55
- echo "[ArchitectureSync] current Controller Runtime architecture baseline failed: $1" >&2
56
- return 1
57
- }
58
-
59
- require_architecture_file() {
60
- local file="$1"
61
- [[ -f "$file" ]] || architecture_baseline_fail "missing required file $file"
62
- }
63
-
64
- require_architecture_text() {
65
- local file="$1"
66
- local text="$2"
67
- if ! require_architecture_file "$file"; then
68
- return 1
69
- fi
70
- grep -Fq -- "$text" "$file" || architecture_baseline_fail "$file must contain: $text"
71
- }
72
-
73
- check_runtime_architecture_baseline() {
74
- local file
75
- local failed=0
76
- require_architecture_text "docs/architecture/index.md" "Runtime Authority" || failed=1
77
- require_architecture_text "docs/architecture/index.md" "docs/architecture/current/" || failed=1
78
- require_architecture_text "docs/architecture/current/README.md" "Runtime Authority" || failed=1
79
- require_architecture_text "docs/architecture/current/governance.md" "Runtime Authority" || failed=1
80
-
81
- for file in "${required_current_docs[@]}"; do
82
- require_architecture_file "$file" || failed=1
83
- done
84
-
85
- for file in "${historical_runtime_docs[@]}"; do
86
- require_architecture_text "$file" "Historical Design" || failed=1
87
- require_architecture_text "$file" "Not Runtime Authority" || failed=1
88
- require_architecture_text "$file" "docs/architecture/current/README.md" || failed=1
89
- done
90
-
91
- require_architecture_text "docs/architecture/current/architecture-invariants.md" "Invariant 2 — Persist Before Execute" || failed=1
92
- require_architecture_text "docs/architecture/current/architecture-invariants.md" "Invariant 4 — Task Is Intent; Run Is Attempt" || failed=1
93
- require_architecture_text "docs/architecture/current/architecture-invariants.md" "Invariant 16 — Evidence Binds to Exact Revision" || failed=1
94
- require_architecture_text "docs/architecture/current/architecture-invariants.md" "Invariant 21 — Scheduled Work Is Bounded" || failed=1
95
- require_architecture_text "docs/architecture/current/implementation-status.md" "## Completion Statement" || failed=1
96
- require_architecture_text "docs/architecture/current/migration-roadmap.md" "## P0" || failed=1
97
- require_architecture_text "docs/architecture/current/migration-roadmap.md" "## P5" || failed=1
98
- return "$failed"
99
- }
100
-
101
22
  while [[ $# -gt 0 ]]; do
102
23
  case "$1" in
103
24
  --mode)
@@ -277,13 +198,6 @@ case "$mode" in
277
198
  ;;
278
199
  esac
279
200
 
280
- # Structural authority checks are invariant and must run even when freshness gating is disabled.
281
- if runtime_architecture_gate_enabled; then
282
- if ! check_runtime_architecture_baseline; then
283
- exit 1
284
- fi
285
- fi
286
-
287
201
  if [[ ! -x "scripts/architecture-queue.sh" ]]; then
288
202
  if [[ "$mode" == "strict" ]]; then
289
203
  echo "[ArchitectureSync] strict gate failed: missing scripts/architecture-queue.sh" >&2
@@ -298,6 +212,23 @@ if ! bash scripts/architecture-queue.sh reindex --check >/dev/null; then
298
212
  exit 1
299
213
  fi
300
214
 
215
+ if [[ -f "docs/architecture/current/README.md" ]]; then
216
+ if [[ ! -f "docs/architecture/CURRENT.md" ]]; then
217
+ echo "[ArchitectureSync] architecture baseline failed: missing required file docs/architecture/CURRENT.md" >&2
218
+ exit 1
219
+ fi
220
+
221
+ if ! grep -Fq "Runtime Authority" "docs/architecture/CURRENT.md"; then
222
+ echo "[ArchitectureSync] architecture baseline failed: docs/architecture/CURRENT.md must contain: Runtime Authority" >&2
223
+ exit 1
224
+ fi
225
+
226
+ if ! grep -Fq "Not Runtime Authority" "docs/architecture/current/README.md"; then
227
+ echo "[ArchitectureSync] architecture baseline failed: docs/architecture/current/README.md must contain: Not Runtime Authority" >&2
228
+ exit 1
229
+ fi
230
+ fi
231
+
301
232
  if [[ "$mode" == "off" ]]; then
302
233
  case "$format" in
303
234
  json) printf '{"mode":"off","changed_capabilities":0,"blocking":0}\n' ;;
@@ -1,3 +1,4 @@
1
+ import { readFileSync } from 'fs';
1
2
  import { FORGE_TOOL_SURFACE, FORGE_VERSION, forgeToolSurfaceFingerprint } from '../src/cli/controller/runtime-config';
2
3
  import { runtimePolicy } from '../src/cli/mcp/multi-repository';
3
4
  import { buildMcpToolDefinitions } from '../src/cli/mcp/tools';
@@ -48,6 +49,16 @@ const missingCatalog = catalogNames.filter((name) => !fullNames.includes(name));
48
49
  const sourceCollisions = Object.entries(sourceGroups).flatMap(([group, names], groupIndex, entries) =>
49
50
  names.filter((name) => entries.slice(0, groupIndex).some(([, earlier]) => earlier.includes(name)))
50
51
  .map((name) => `${group}:${name}`));
52
+ const currentToolNames = new Set([
53
+ ...sourceGroups.runtime,
54
+ ...sourceGroups.execution,
55
+ ...sourceGroups.process,
56
+ ...sourceGroups.access,
57
+ ...sourceGroups.repository,
58
+ ]);
59
+ const legacyHandlerSource = readFileSync(new URL('../src/cli/mcp/legacy-tool-service.ts', import.meta.url), 'utf8');
60
+ const legacyHandlerNames = [...legacyHandlerSource.matchAll(/case\s+["']([^"']+)["']\s*:/g)].map((match) => match[1]);
61
+ const legacyHandlerCollisions = [...new Set(legacyHandlerNames.filter((name) => currentToolNames.has(name)))].sort();
51
62
 
52
63
  const failures: string[] = [];
53
64
  if (defaultNames.length > MAX_DEFAULT_TOOL_COUNT) {
@@ -56,6 +67,8 @@ if (defaultNames.length > MAX_DEFAULT_TOOL_COUNT) {
56
67
  if (duplicateDefault.length) failures.push(`default duplicate names: ${[...new Set(duplicateDefault)].join(', ')}`);
57
68
  if (missingDefault.length) failures.push(`default tools missing from registered definitions: ${missingDefault.join(', ')}`);
58
69
  if (missingCatalog.length) failures.push(`compatibility catalog tools missing from registered definitions: ${missingCatalog.join(', ')}`);
70
+ if (sourceCollisions.length) failures.push(`tool schema authority collisions: ${sourceCollisions.join(', ')}`);
71
+ if (legacyHandlerCollisions.length) failures.push(`legacy execution authority collisions: ${legacyHandlerCollisions.join(', ')}`);
59
72
  if (coreNames.join('\n') !== defaultNames.join('\n')) {
60
73
  failures.push('core surface must alias the bounded default ChatGPT surface');
61
74
  }
@@ -89,5 +102,6 @@ console.log(JSON.stringify({
89
102
  fullCompatibilityFingerprint: fullFingerprint,
90
103
  sourceToolCounts: Object.fromEntries(Object.entries(sourceGroups).map(([name, tools]) => [name, tools.length])),
91
104
  sourceCollisions: [...new Set(sourceCollisions)].sort(),
105
+ legacyHandlerCollisions,
92
106
  accessModeChangesSchema: false,
93
107
  }, null, 2));
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { readFileSync, existsSync, readdirSync } from 'node:fs';
2
+ import { readFileSync, existsSync, lstatSync, readdirSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
4
 
5
5
  const root = resolve(new URL('..', import.meta.url).pathname);
@@ -15,8 +15,16 @@ function text(path) {
15
15
  function requireText(path, needle) {
16
16
  if (!text(path).includes(needle)) failures.push(`${path} must contain ${JSON.stringify(needle)}`);
17
17
  }
18
+ function hasFilesystemContent(path) {
19
+ const absolute = resolve(root, path);
20
+ if (!existsSync(absolute)) return false;
21
+ if (!lstatSync(absolute).isDirectory()) return true;
22
+ return readdirSync(absolute, { withFileTypes: true }).some((entry) =>
23
+ entry.isDirectory() ? hasFilesystemContent(`${path}/${entry.name}`) : true,
24
+ );
25
+ }
18
26
  function requireMissing(path) {
19
- if (existsSync(resolve(root, path))) failures.push(`${path} must be deleted`);
27
+ if (hasFilesystemContent(path)) failures.push(`${path} must be deleted`);
20
28
  }
21
29
  function requireMatch(path, expression, description) {
22
30
  if (!expression.test(text(path))) failures.push(`${path} must ${description}`);
@@ -44,10 +52,42 @@ function sourceFiles(directory) {
44
52
  return files;
45
53
  }
46
54
 
55
+ const allowedArchitectureRootMarkdown = new Set(['CURRENT.md', 'EVOLUTION.md', 'history.md', 'index.md']);
56
+ const architectureRootMarkdown = readdirSync(resolve(root, 'docs/architecture'), { withFileTypes: true })
57
+ .filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
58
+ .map((entry) => entry.name)
59
+ .sort();
60
+ for (const name of architectureRootMarkdown) {
61
+ if (!allowedArchitectureRootMarkdown.has(name)) {
62
+ failures.push(`docs/architecture/${name} must be archived under docs/architecture/history/ instead of acting as parallel root architecture authority`);
63
+ }
64
+ }
65
+
66
+ for (const path of ['README.md', 'docs/ROADMAP.md', 'docs/architecture/CURRENT.md', 'docs/architecture/index.md']) {
67
+ forbid(path, /\/Users\//, 'maintained documentation must not contain personal absolute macOS paths');
68
+ forbid(path, /\bRepo Harness\b/i, 'maintained documentation must use the current Forge product identity');
69
+ forbid(path, /(?:^|\n)\s*(?:>\s*)?(?:\*\*)?Status(?:\*\*)?\s*:\s*[^\n]*(?:implementation in progress|Phase\s+\d+)/i, 'maintained documentation must not carry transient execution status; use Plan/Work/evidence or history');
70
+ }
71
+
47
72
  const required = [
48
73
  'src/runtime/gateway/mcp/router.ts',
49
74
  'src/cli/agent-jobs/executable-resolver.ts',
50
75
  'src/runtime/control-plane/global-scheduler/scheduler.ts',
76
+ 'src/runtime/control-plane/global-scheduler/config.ts',
77
+ 'src/runtime/control-plane/global-scheduler/state.ts',
78
+ 'src/runtime/control-plane/global-scheduler/worker-launch.ts',
79
+ 'src/runtime/control-plane/global-scheduler/dispatch-capacity.ts',
80
+ 'src/runtime/control-plane/global-scheduler/projection-refresh.ts',
81
+ 'src/runtime/control-plane/global-scheduler/worker-lifecycle.ts',
82
+ 'src/runtime/control-plane/global-scheduler/worker-stderr.ts',
83
+ 'src/runtime/control-plane/global-scheduler/worker-attachment.ts',
84
+ 'src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts',
85
+ 'src/runtime/control-plane/global-scheduler/maintenance.ts',
86
+ 'src/runtime/control-plane/global-scheduler/source-scan.ts',
87
+ 'src/runtime/control-plane/global-scheduler/durable-admission.ts',
88
+ 'src/runtime/control-plane/global-scheduler/worker-exit-decision.ts',
89
+ 'src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts',
90
+ 'src/runtime/control-plane/global-scheduler/worker-process.ts',
51
91
  'src/runtime/control-plane/repo-actor/actor.ts',
52
92
  'src/runtime/execution/jobs/store.ts',
53
93
  'src/runtime/execution/jobs/timeouts.ts',
@@ -56,8 +96,7 @@ const required = [
56
96
  'src/runtime/execution/thin-harness/index.ts',
57
97
  'src/runtime/execution/thin-harness/execution-router.ts',
58
98
  'src/runtime/control-plane/routing/route-policy.ts',
59
- 'docs/architecture/current/route-policy.md',
60
- 'docs/architecture/current/thin-harness-v1.md',
99
+ 'docs/architecture/CURRENT.md',
61
100
  'src/runtime/resources/leases/store.ts',
62
101
  'src/runtime/evidence/event-ledger.ts',
63
102
  'src/runtime/evidence/evidence-store.ts',
@@ -70,8 +109,6 @@ const required = [
70
109
  'src/runtime/workflow/schedules/work-continuation.ts',
71
110
  'scripts/smoke-runtime-recovery.ts',
72
111
  'scripts/smoke-schedule-engine.ts',
73
- 'src/runtime/workflow/portfolio/engine.ts',
74
- 'src/runtime/workflow/findings/store.ts',
75
112
  'src/runtime/release/release-gate.ts',
76
113
  'src/runtime/root/runtime.ts',
77
114
  'src/runtime/root/readiness.ts',
@@ -85,12 +122,6 @@ const required = [
85
122
  'src/cli/commands/init-hook.ts',
86
123
  'src/cli/commands/runtime.ts',
87
124
  'src/cli/index.ts',
88
- 'docs/architecture/current/runtime-architecture-simplification.md',
89
- 'docs/architecture/current/implementation-status.md',
90
- 'docs/architecture/current/runtime-directory-map.md',
91
- 'docs/architecture/current/operations-runbook.md',
92
- 'docs/architecture/current/target-requirements-traceability.md',
93
- 'docs/architecture/current/approved-target-architecture.zh-CN.md',
94
125
  ];
95
126
  for (const path of required) text(path);
96
127
  requireText('src/runtime/control-plane/routing/route-policy.ts', "export function decideRoute");
@@ -110,7 +141,6 @@ forbidBetween(
110
141
  for (const adapter of [
111
142
  'src/cli/controller/work-mode.ts',
112
143
  'src/runtime/control-plane/facade/types.ts',
113
- 'src/runtime/control-plane/goal-loop/executor-router.ts',
114
144
  ]) {
115
145
  requireText(adapter, '@deprecated Compatibility adapter');
116
146
  requireText(adapter, 'decideRoute(');
@@ -126,6 +156,16 @@ requireMissing('src/runtime/control-plane/daemon-entry.ts');
126
156
  requireMissing('scripts/smoke-runtime-control-plane.ts');
127
157
  requireMissing('src/cli/controller/lifecycle.ts');
128
158
  requireMissing('src/cli/commands/supervisor.ts');
159
+ requireMissing('src/runtime/control-plane/goal-loop');
160
+ requireMissing('src/cli/repositories/goal-registry.ts');
161
+ requireMissing('src/runtime/assistant');
162
+ requireMissing('src/runtime/personal-assistant');
163
+ requireMissing('src/runtime/workflow/findings');
164
+ forbid(
165
+ 'src/runtime/control-plane/global-scheduler/scheduler.ts',
166
+ /tickGoalLoopsForController|lastGoalLoopTick/,
167
+ 'Scheduler must not restore autonomous Goal Loop polling',
168
+ );
129
169
  requireMissing('src/cli/controller/restart-coordinator-entry.ts');
130
170
  requireMissing('scripts/controller-runtime.sh');
131
171
  requireMissing('scripts/activate-source-baseline.command');
@@ -145,6 +185,13 @@ requireMissing('OPTIMIZATION_REPORT.md');
145
185
  requireMissing('docs/architecture/RELIABILITY-PROGRAM.md');
146
186
  requireMissing('docs/architecture/p0-canonical-single-runtime-plan.md');
147
187
  requireMissing('docs/architecture/transactional-adoption-planner.md');
188
+ requireMissing('docs/architecture/global-hook-runtime.md');
189
+ requireMissing('docs/architecture/ios-semantic-automation-provider-v2.md');
190
+ requireMissing('docs/architecture/chatgpt-handoff-facade.md');
191
+ requireText('docs/architecture/history/global-hook-runtime.md', 'Status: **Historical Evidence — Not Runtime Authority**');
192
+ requireText('docs/architecture/history/ios-semantic-automation-provider-v2.md', 'Status: **Historical Design Evidence — Not Runtime Authority**');
193
+ requireText('docs/architecture/history/chatgpt-handoff-facade.md', 'Status: **Historical Design Rationale — Not Runtime Authority**');
194
+ requireText('docs/architecture/history/README.md', 'Status: **Historical Evidence — Not Runtime Authority**');
148
195
  requireMissing('docs/operations/20260802-requirement-portfolio-migration.md');
149
196
  requireMissing('docs/runbooks/RELIABILITY-SESSION-PROTOCOL.md');
150
197
  requireMissing('docs/architecture/decisions/20260718-mcp-session-lifecycle-and-ingress-isolation.md');
@@ -156,6 +203,7 @@ requireMissing('bin/repo-harness-hook.mjs');
156
203
  requireMissing('bin/repo-harness-runtime.mjs');
157
204
  requireMissing('src/runtime/control-plane/daemon-client.ts');
158
205
  requireMissing('src/runtime/control-plane/daemon-ownership.ts');
206
+ requireMissing('src/runtime/workflow/portfolio');
159
207
  for (const path of sourceFiles('src')) {
160
208
  const source = text(path);
161
209
  for (const retiredAuthority of [
@@ -209,24 +257,16 @@ for (const projectionPath of [
209
257
  }
210
258
  requireText('src/runtime/projections/invalidation.ts', 'runtimeInstanceId?: string');
211
259
  requireText('src/runtime/projections/materialized-view.ts', 'currentOwner.runtimeInstanceId !== owner.runtimeInstanceId');
212
- requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'getRuntimeWriteClaim()?.runtimeInstanceId');
260
+ requireText('src/runtime/control-plane/global-scheduler/projection-refresh.ts', 'getRuntimeWriteClaim()?.runtimeInstanceId');
213
261
  forbid(
214
262
  'src/runtime/execution/jobs/receipt-store.ts',
215
263
  /ownerEpoch|releaseFencingToken/,
216
264
  'persist only non-secret Canonical Runtime/release identity in OperationReceipt ownership evidence',
217
265
  );
218
266
 
219
- requireText('docs/architecture/current/runtime-architecture-simplification.md', 'one local MCP application');
220
- requireText('docs/architecture/current/runtime-architecture-simplification.md', 'one active Runtime');
221
- requireText('docs/architecture/current/runtime-architecture-simplification.md', 'one whole-Runtime readiness result');
222
- requireText('docs/architecture/current/runtime-architecture-simplification.md', 'Legacy code may receive only deletion-enabling or safety-fencing changes.');
223
- forbidBetween(
224
- 'docs/architecture/current/runtime-architecture-simplification.md',
225
- '## 2. Target Runtime',
226
- '## 3. Seven phases',
227
- /Stable Supervisor|Stable Ingress|blue\/green|candidate\/current\/previous/i,
228
- 'define the target Runtime without Supervisor, ingress, slots, or component rollback',
229
- );
267
+ requireText('docs/architecture/CURRENT.md', 'Canonical Runtime is activated as one immutable whole release');
268
+ requireText('docs/architecture/CURRENT.md', 'Runtime availability/recovery keeps Forge itself healthy');
269
+ requireText('docs/architecture/CURRENT.md', 'Historical Issue/Task/Local Job and compatibility projections must not become second mutable authorities.');
230
270
  requireText('src/runtime/root/runtime.ts', 'export class CanonicalForgeRuntime');
231
271
  forbid('src/runtime/control-plane/runtime-status-client.ts', /ensureControllerDaemon|child_process|daemon-entry|StableSupervisor|ownerEpoch|slot\?:/, 'keep Forge Runtime status observation read-only and free of legacy lifecycle authority');
232
272
  requireText('src/runtime/root/runtime.ts', "startInProcessScheduler");
@@ -354,21 +394,11 @@ forbid(
354
394
  /\bcreateExecutionJob\b/,
355
395
  'Runtime MCP tools must not retain dormant ExecutionJob creation paths',
356
396
  );
357
- forbid(
358
- 'src/runtime/assistant/intent.ts',
359
- /\bcreateExecutionJob\b/,
360
- 'Assistant intent and routine triggers must use direct plugin actions or external-Controller handoffs',
361
- );
362
397
  forbid(
363
398
  'src/runtime/execution/jobs/legacy-adapter.ts',
364
399
  /\bcreateExecutionJob\b|\bdispatchLegacyLocalJob\b/,
365
400
  'Legacy Local Bridge compatibility must be read-only and must not dispatch new ExecutionJobs',
366
401
  );
367
- forbid(
368
- 'src/runtime/workflow/portfolio/engine.ts',
369
- /\bcreateExecutionJob\b|\bfindExecutionJob\b/,
370
- 'Portfolio definitions are planning records; Kernel-owned Portfolio execution is retired',
371
- );
372
402
  forbid(
373
403
  'src/cli/local-bridge/server.ts',
374
404
  /\bsubmitLocalBridgeJob\b|\bdispatchLocalBridgeJob\b|\basyncExecute\b/,
@@ -425,16 +455,6 @@ forbid(
425
455
  /\bretryAgentJob\b/,
426
456
  'Legacy MCP must not call Agent Run retry',
427
457
  );
428
- forbid(
429
- 'src/runtime/workflow/portfolio/engine.ts',
430
- /\bacceptTaskJob\b|\bstartTaskJob\b|\bretryAgentJob\b/,
431
- 'Portfolio Engine must not start or retry Kernel-managed Agent Runs',
432
- );
433
- forbid(
434
- 'src/runtime/control-plane/goal-loop/goal-loop-engine.ts',
435
- /\bcreateExecutionJob\b|\bsubmitLocalBridgeJob\b|\bacceptTaskJob\b|\bstartTaskJob\b|\bdispatchProvider\b/,
436
- 'Goal Loop must not create Jobs, Agent Runs, or invoke Kernel Provider dispatch',
437
- );
438
458
  forbid('src/runtime/gateway/mcp/router.ts', /Use process_get \/ process_wait \/ process_logs/, 'Gateway follow-up instructions must use an always-exposed neutral Work facade');
439
459
  requireMatch(
440
460
  'src/runtime/gateway/mcp/router.ts',
@@ -446,12 +466,6 @@ requireText('src/runtime/gateway/mcp/runtime-tools.ts', "case 'local_bridge_stat
446
466
  requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'readAgentExecutableReadinessSnapshot');
447
467
  requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'connectorExposedTools');
448
468
  requireText('src/runtime/gateway/mcp/runtime-tools.ts', 'currentCallableTools');
449
- forbid(
450
- 'docs/architecture/current/implementation-status.md',
451
- /Stable external lifecycle Supervisor \| Implemented|Stable ingress event-loop isolation \| Implemented/,
452
- 'legacy Supervisor or Stable Ingress must not be reported as the target implementation',
453
- );
454
- requireText('docs/architecture/current/implementation-status.md', 'Canonical Single Runtime vertical slice');
455
469
  forbid('src/runtime/gateway/mcp/runtime-tools.ts', /inspectAgentExecutableReadiness|resolveAgentExecutable|writeAgentExecutableReadinessSnapshot/, 'Gateway readiness must only read the Daemon-produced Agent executable snapshot');
456
470
  forbidBetween(
457
471
  'src/runtime/gateway/mcp/runtime-tools.ts',
@@ -491,15 +505,50 @@ requireText('src/runtime/execution/jobs/receipt-store.ts', "state: 'started' | '
491
505
  requireText('src/runtime/execution/thin-harness/execution-router.ts', "mode: 'fast'");
492
506
  requireText('src/runtime/execution/thin-harness/execution-router.ts', 'routeExecution');
493
507
  requireText('src/runtime/execution/thin-harness/types.ts', 'FastExecutionReceipt');
494
- requireText('docs/architecture/current/thin-harness-v1.md', 'Default to direct Fast Path execution');
508
+ requireText('docs/architecture/CURRENT.md', '### Ephemeral Direct — default');
495
509
  requireText('src/runtime/resources/leases/types.ts', 'fencingToken: number');
496
510
  requireText('src/runtime/resources/leases/store.ts', 'assertFencingToken');
497
511
  requireText('src/runtime/resources/leases/store.ts', 'expectedLeaseMap');
498
512
  requireText('src/runtime/resources/claims/conflicts.ts', "'repo-content:*'");
499
513
  requireText('src/runtime/control-plane/repo-actor/actor.ts', 'repo-actor-mailbox');
500
514
  requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'maxConcurrentRepositories');
501
- requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'maxHeavyChecks');
502
- requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'maxAgentProcesses');
515
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'createSchedulerDispatchCapacity');
516
+ requireText('src/runtime/control-plane/global-scheduler/dispatch-capacity.ts', 'maxHeavyChecks');
517
+ requireText('src/runtime/control-plane/global-scheduler/dispatch-capacity.ts', 'maxAgentProcesses');
518
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'normalizeSchedulerConfig');
519
+ requireText('src/runtime/control-plane/global-scheduler/config.ts', 'normalizeSchedulerConfig');
520
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'writeSchedulerHealthSnapshot');
521
+ requireText('src/runtime/control-plane/global-scheduler/state.ts', 'writeSchedulerHealthSnapshot');
522
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'buildSchedulerWorkerLaunchDescriptor');
523
+ requireText('src/runtime/control-plane/global-scheduler/worker-launch.ts', 'buildSchedulerWorkerLaunchDescriptor');
524
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'refreshSchedulerRepositoryProjections');
525
+ requireText('src/runtime/control-plane/global-scheduler/projection-refresh.ts', 'refreshRepositoryProjectionForRepository');
526
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'buildSchedulerWorkerSpawnedLifecycle');
527
+ requireText('src/runtime/control-plane/global-scheduler/worker-lifecycle.ts', 'buildSchedulerWorkerExitFailure');
528
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'createSchedulerWorkerStderrCapture');
529
+ requireText('src/runtime/control-plane/global-scheduler/worker-stderr.ts', 'MAX_SCHEDULER_WORKER_STDERR_BYTES');
530
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'persistSchedulerWorkerAttachment');
531
+ requireText('src/runtime/control-plane/global-scheduler/worker-attachment.ts', 'attachExecutionWorker');
532
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'runSchedulerPeriodicCleanup');
533
+ requireText('src/runtime/control-plane/global-scheduler/maintenance.ts', 'runSchedulerValidationReconciliation');
534
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'planSchedulerSourceSampling');
535
+ requireText('src/runtime/control-plane/global-scheduler/source-scan.ts', 'selectSchedulerSourceScanRepositories');
536
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'runSchedulerDurableAdmission');
537
+ requireText('src/runtime/control-plane/global-scheduler/durable-admission.ts', 'markExecutionJobSchedulerObserved');
538
+ requireText('src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts', 'persistSchedulerTerminalWorkerLifecycle');
539
+ requireText('src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts', 'TERMINAL_JOB_STATUSES');
540
+ requireText('src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts', 'evaluateSchedulerWorkerExitCandidate');
541
+ requireText('src/runtime/control-plane/global-scheduler/worker-exit-decision.ts', 'TERMINAL_JOB_STATUSES');
542
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'reconcileSchedulerWorkerExit');
543
+ requireText('src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts', 'releaseExecutionLeases');
544
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'cleanupSchedulerWorkerProcesses');
545
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'registerSchedulerWorkerProcess');
546
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'spawnSchedulerWorkerProcess');
547
+ requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'wireSchedulerWorkerProcess');
548
+ requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', 'cleanupSchedulerWorkerProcesses');
549
+ requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', 'dependencies.spawnProcess');
550
+ requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', 'terminateProcessTree');
551
+ requireText('src/runtime/control-plane/global-scheduler/worker-process.ts', "child.once('close'");
503
552
  requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'writeAgentExecutableReadinessSnapshot');
504
553
  requireText('src/runtime/control-plane/global-scheduler/scheduler.ts', 'sampleRepositoryGitStatusForRepositories');
505
554
  requireText('src/cli/agent-jobs/executable-resolver.ts', 'revalidateAgentExecutable');
@@ -533,7 +582,7 @@ forbidBetween(
533
582
  requireText('src/runtime/control-plane/execution/session-store.ts', 'lastValidatedAt: now');
534
583
  requireText('src/runtime/control-plane/execution/validation.ts', 'warnings.push');
535
584
  requireText('src/runtime/control-plane/execution/work-handle-store.ts', "failed: ['validating', 'editing', 'committed', 'merged', 'cleaned', 'failed_terminal_cleanup']");
536
- requireText('src/runtime/gateway/mcp/execution-tools.ts', 'resetFailedFinalizationStages');
585
+ requireText('src/runtime/gateway/mcp/execution-tools.ts', 'resetFinalizationStagesForRequest');
537
586
  requireText('src/runtime/gateway/mcp/execution-tools.ts', 'finalizationComplete');
538
587
  forbidBetween(
539
588
  'src/runtime/gateway/mcp/execution-tools.ts',
@@ -546,9 +595,6 @@ requireText('src/runtime/workflow/schedules/types.ts', "'repository-event'");
546
595
  requireText('src/runtime/workflow/schedules/types.ts', "'dependency-checkpoint'");
547
596
  requireText('src/runtime/workflow/schedules/store.ts', 'saveScheduleDecision');
548
597
  requireText('src/runtime/workflow/schedules/settlement.ts', 'backoffMinutes');
549
- requireText('src/runtime/workflow/portfolio/store.ts', "'workflows.json'");
550
- requireText('src/runtime/workflow/portfolio/store.ts', 'PORTFOLIO_DEPENDENCY_CYCLE');
551
- requireText('src/runtime/workflow/findings/store.ts', 'observationCount');
552
598
  requireText('src/runtime/release/release-gate.ts', 'releaseReady');
553
599
  requireText('src/cli/mcp/transports/http.ts', "'/ready'");
554
600
  requireText('src/cli/mcp/transports/http.ts', "'/repos/:repoId/health'");
@@ -568,12 +614,9 @@ for (const path of [
568
614
  forbid(path, /\b(?:spawnSync|execSync|execFileSync)\s*\(/, 'the non-blocking Gateway/Controller hot-path rule');
569
615
  }
570
616
 
571
- requireText('docs/architecture/current/implementation-status.md', 'Thin MCP Gateway | Implemented');
572
- requireText('docs/architecture/current/implementation-status.md', 'Per-Repository Actor | Implemented');
573
- requireText('docs/architecture/current/implementation-status.md', 'Schedule, Trigger, Decision and Occurrence | Implemented');
574
- requireText('docs/architecture/current/implementation-status.md', 'Release Freeze and Gate | Implemented');
575
- requireText('docs/architecture/current/target-requirements-traceability.md', '## 4. Architecture constitution');
576
- requireText('docs/architecture/current/target-requirements-traceability.md', '## 16. Standard execution flow');
617
+ requireText('docs/architecture/CURRENT.md', '## State ownership');
618
+ requireText('docs/architecture/CURRENT.md', '## Runtime and MCP boundary');
619
+ requireText('docs/architecture/CURRENT.md', '## Testing and verification');
577
620
  requireText('plans/README.md', 'not the runtime execution queue');
578
621
  if (text('src/cli/mcp/tools.ts').split(/\r?\n/).length > 40) failures.push('src/cli/mcp/tools.ts must remain a thin compatibility facade');
579
622
 
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env bun
2
+ import { createHash } from 'crypto';
3
+ import { mkdirSync, renameSync, writeFileSync } from 'fs';
4
+ import { dirname, join } from 'path';
5
+ import { resolveControllerHome } from '../src/cli/repositories/controller-home';
6
+ import { recoveryConnectorDescriptor, verifyRecoveryConnector } from '../src/cli/commands/recovery';
7
+ import { loadRecoveryConfig, verifyStableRuntime } from '../src/runtime/standalone-recovery/core';
8
+ import { observeRuntimeStatus } from '../src/runtime/root/status';
9
+
10
+ interface BaselineReceipt {
11
+ schemaVersion: 1;
12
+ status: 'passed' | 'failed';
13
+ controllerHome: string;
14
+ observedAt: string;
15
+ runtime: ReturnType<typeof observeRuntimeStatus>;
16
+ recovery: {
17
+ connector: ReturnType<typeof recoveryConnectorDescriptor>;
18
+ runtimeVerify: Awaited<ReturnType<typeof verifyStableRuntime>>;
19
+ connectorVerify: Awaited<ReturnType<typeof verifyRecoveryConnector>>;
20
+ };
21
+ blockers: string[];
22
+ receiptId: string;
23
+ }
24
+
25
+ function argValue(name: string): string | undefined {
26
+ const index = process.argv.indexOf(name);
27
+ return index >= 0 ? process.argv[index + 1] : undefined;
28
+ }
29
+
30
+ function atomicJson(path: string, value: unknown): void {
31
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
32
+ const temporary = `${path}.${process.pid}.tmp`;
33
+ writeFileSync(temporary, `${JSON.stringify(value, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
34
+ renameSync(temporary, path);
35
+ }
36
+
37
+ export async function checkStableBaseline(controllerHomeInput?: string): Promise<BaselineReceipt> {
38
+ const controllerHome = resolveControllerHome(controllerHomeInput);
39
+ const config = loadRecoveryConfig(controllerHome);
40
+ const runtime = observeRuntimeStatus(controllerHome);
41
+ const connector = recoveryConnectorDescriptor(controllerHome);
42
+ const runtimeVerify = await verifyStableRuntime(config);
43
+ const connectorVerify = await verifyRecoveryConnector(controllerHome);
44
+ const blockers: string[] = [];
45
+
46
+ if (!runtime.running || !runtime.ready) blockers.push(`runtime_not_ready:${runtime.reasonCodes.join(',') || 'unknown'}`);
47
+ if (!runtimeVerify.ok) blockers.push('recovery_runtime_verify_failed');
48
+ if (!runtimeVerify.releases.coherent) blockers.push('runtime_release_not_coherent');
49
+ if (!connector.readyForChatGPT) blockers.push(...connector.warnings.map((warning) => `recovery_connector:${warning}`));
50
+ if (!connectorVerify.ok) blockers.push(...connectorVerify.failures.map((failure) => `recovery_connector_verify:${failure}`));
51
+ if (!connector.currentRelease) blockers.push('recovery_release_missing');
52
+
53
+ const observedAt = new Date().toISOString();
54
+ const identity = {
55
+ schemaVersion: 1,
56
+ controllerHome,
57
+ runtimeInstanceId: runtime.snapshot?.runtimeInstanceId,
58
+ runtimeRelease: runtimeVerify.releases.active?.revision,
59
+ runtimeManifest: runtimeVerify.releases.active?.manifestSha256,
60
+ runtimeToolSurfaceFingerprint: runtime.snapshot?.toolSurfaceFingerprint,
61
+ runtimeEndpoint: runtime.snapshot?.endpoint,
62
+ recoveryRelease: connector.currentRelease,
63
+ recoveryUrl: connector.url,
64
+ runtimeReady: runtime.ready,
65
+ runtimeVerifyOk: runtimeVerify.ok,
66
+ connectorVerifyOk: connectorVerify.ok,
67
+ };
68
+ const receiptId = createHash('sha256').update(JSON.stringify(identity)).digest('hex');
69
+ const receipt: BaselineReceipt = {
70
+ schemaVersion: 1,
71
+ status: blockers.length === 0 ? 'passed' : 'failed',
72
+ controllerHome,
73
+ observedAt,
74
+ runtime,
75
+ recovery: { connector, runtimeVerify, connectorVerify },
76
+ blockers,
77
+ receiptId,
78
+ };
79
+
80
+ const root = join(controllerHome, 'recovery', 'stable-baseline');
81
+ atomicJson(join(root, `${receiptId}.json`), receipt);
82
+ atomicJson(join(root, 'latest.json'), receipt);
83
+ return receipt;
84
+ }
85
+
86
+ if (import.meta.main) {
87
+ const explicit = argValue('--controller-home');
88
+ if (process.argv.includes('--controller-home') && !explicit) throw new Error('STABLE_BASELINE_CONTROLLER_HOME_REQUIRED');
89
+ const receipt = await checkStableBaseline(explicit);
90
+ process.stdout.write(`${JSON.stringify(receipt, null, 2)}\n`);
91
+ if (receipt.status !== 'passed') process.exitCode = 1;
92
+ }
@@ -161,7 +161,7 @@ plan_evidence_contract_error() {
161
161
  fi
162
162
 
163
163
  local label line value
164
- for label in "State/progress path" "Verification evidence" "Evaluator rubric" "Stop condition" "Rollback surface"; do
164
+ for label in "State/progress path" "Verification evidence" "Impact review|Evaluator rubric" "Stop condition" "Rollback surface"; do
165
165
  line="$(printf '%s\n' "$section" | grep -Ei "^[[:space:]]*-[[:space:]]*(\\*\\*)?${label}(\\*\\*)?[[:space:]]*:" | head -1 || true)"
166
166
  if [[ -z "$line" ]]; then
167
167
  echo "missing field: ${label}"
@@ -189,7 +189,7 @@ check_plan_template_evidence_contract() {
189
189
  return
190
190
  }
191
191
 
192
- for label in "State/progress path" "Verification evidence" "Evaluator rubric" "Stop condition" "Rollback surface"; do
192
+ for label in "State/progress path" "Verification evidence" "Impact review" "Stop condition" "Rollback surface"; do
193
193
  if ! grep -Eiq "^[[:space:]]*-[[:space:]]*(\\*\\*)?${label}(\\*\\*)?[[:space:]]*:" "$file"; then
194
194
  report_issue "Plan template Evidence Contract is missing field '${label}': $file"
195
195
  fi
@@ -668,11 +668,11 @@ check_helper_runtime_files() {
668
668
  new-spec.sh new-sprint.sh new-plan.sh capture-plan.sh plan-to-todo.sh
669
669
  contract-run.ts contract-worktree.sh ship-worktrees.sh archive-workflow.sh
670
670
  refresh-current-status.sh prepare-handoff.sh verify-contract.sh summarize-failures.sh
671
- verify-sprint.sh harness-trace-grade.sh sprint-backlog.sh check-task-sync.sh check-deploy-sql-order.sh
671
+ verify-sprint.sh sprint-backlog.sh check-task-sync.sh check-deploy-sql-order.sh
672
672
  check-architecture-sync.sh check-agent-tooling.sh check-context-files.sh
673
673
  check-brain-manifest.sh sync-brain-docs.sh check-skill-version.ts
674
674
  select-agent-context-blocks.sh ensure-task-workflow.sh check-task-workflow.sh
675
- maintenance-triage.sh heartbeat-triage.sh switch-plan.sh workflow-contract.ts
675
+ switch-plan.sh workflow-contract.ts
676
676
  inspect-project-state.ts migrate-workflow-docs.ts migrate-project-template.sh
677
677
  capability-resolver.ts architecture-event.ts capability-config.ts architecture-queue.sh
678
678
  archive-architecture-request.sh context-contract-sync.sh workstream-sync.sh