@moretea-labs/forge 1.5.1 → 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 (434) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +46 -0
  3. package/CLAUDE.md +2 -0
  4. package/DESIGN.md +7 -2
  5. package/README.md +4 -4
  6. package/README.zh-CN.md +2 -2
  7. package/SKILL.md +2 -2
  8. package/THIRD_PARTY_NOTICES.md +1 -1
  9. package/agents/openai.yaml +1 -1
  10. package/assets/hooks/hook-input.sh +11 -8
  11. package/assets/hooks/lib/session-state.sh +10 -7
  12. package/assets/hooks/lib/workflow-state.sh +13 -177
  13. package/assets/hooks/post-tool-observer.sh +8 -2
  14. package/assets/hooks/pre-edit-guard.sh +8 -39
  15. package/assets/hooks/prompt-guard.sh +7 -83
  16. package/assets/hooks/session-start-context.sh +56 -1
  17. package/assets/partials/05-workflow.partial.md +1 -1
  18. package/assets/partials-agents/03-orchestration.partial.md +1 -1
  19. package/assets/plugin-registry.v1.json +54 -3
  20. package/assets/reference-configs/document-generation.md +1 -1
  21. package/assets/reference-configs/harness-overview.md +1 -1
  22. package/assets/reference-configs/hook-operations.md +1 -1
  23. package/assets/reference-configs/sprint-contracts.md +3 -3
  24. package/assets/skill-version.json +2 -2
  25. package/assets/templates/contract.template.md +2 -7
  26. package/assets/templates/helpers/capture-plan.sh +2 -2
  27. package/assets/templates/helpers/check-task-workflow.sh +4 -4
  28. package/assets/templates/helpers/contract-worktree.sh +1 -21
  29. package/assets/templates/helpers/ensure-task-workflow.sh +13 -38
  30. package/assets/templates/helpers/migrate-project-template.sh +22 -45
  31. package/assets/templates/helpers/new-plan.sh +1 -1
  32. package/assets/templates/helpers/plan-to-todo.sh +12 -37
  33. package/assets/templates/helpers/ship-worktrees.sh +2 -29
  34. package/assets/templates/helpers/sprint-backlog.sh +6 -6
  35. package/assets/templates/helpers/verify-contract.sh +1 -111
  36. package/assets/templates/helpers/verify-sprint.sh +3 -180
  37. package/assets/templates/plan.template.md +1 -1
  38. package/assets/templates/review.template.md +9 -34
  39. package/assets/workflow-contract.v1.json +10 -19
  40. package/docs/README.md +10 -10
  41. package/docs/architecture/CURRENT.md +170 -0
  42. package/docs/architecture/EVOLUTION.md +42 -0
  43. package/docs/architecture/current/README.md +4 -156
  44. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
  45. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
  46. package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
  47. package/docs/architecture/history/README.md +7 -0
  48. package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
  49. package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
  50. package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
  51. package/docs/architecture/history.md +3 -34
  52. package/docs/architecture/index.md +15 -98
  53. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
  54. package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
  55. package/docs/architecture/versions/1.6.md +38 -0
  56. package/docs/architecture/versions/1.7.md +41 -0
  57. package/docs/forge-chatgpt-browser-engine.md +2 -2
  58. package/docs/forge-chatgpt-mcp-setup.md +4 -28
  59. package/docs/forge-chatgpt-supervised-automation.md +3 -3
  60. package/docs/forge-github-issue-launcher.md +1 -1
  61. package/docs/forge-runtime-self-healing-loop.md +1 -1
  62. package/docs/operations/controller-browser-plugin.md +38 -22
  63. package/docs/operations/controller-performance-and-502.md +124 -0
  64. package/docs/operations/controller-reliability-runbook.md +1 -1
  65. package/docs/operations/features.md +3 -3
  66. package/docs/operations/github-repository.md +1 -1
  67. package/docs/operations/homebrew.md +2 -2
  68. package/docs/operations/mcp-tool-exposure.md +5 -3
  69. package/docs/tutorials/01-install-and-start.md +1 -1
  70. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  71. package/docs/wiki/Architecture.md +6 -6
  72. package/docs/wiki/Implementation.md +2 -2
  73. package/docs/wiki/Installation.md +1 -1
  74. package/docs/wiki/Integrations.md +2 -2
  75. package/docs/wiki/Quick-Start.md +1 -1
  76. package/docs/wiki/Work-Lifecycle.md +1 -1
  77. package/package.json +29 -10
  78. package/scripts/activate-source-baseline.ts +17 -13
  79. package/scripts/benchmark-background-check-overlap.ts +228 -0
  80. package/scripts/benchmark-mcp-host.sh +117 -0
  81. package/scripts/benchmark-mcp-transport.ts +170 -0
  82. package/scripts/benchmark-quality-harness.ts +146 -0
  83. package/scripts/benchmark-route-session-concurrency.ts +207 -6
  84. package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
  85. package/scripts/benchmark-typescript-navigation.ts +186 -0
  86. package/scripts/benchmark-work-efficiency.ts +334 -0
  87. package/scripts/capture-plan.sh +3 -3
  88. package/scripts/check-agent-tooling.sh +8 -35
  89. package/scripts/check-architecture-sync.sh +17 -86
  90. package/scripts/check-mcp-compatibility.ts +14 -0
  91. package/scripts/check-public-docs.sh +14 -1
  92. package/scripts/check-runtime-architecture.mjs +107 -64
  93. package/scripts/check-stable-baseline.ts +92 -0
  94. package/scripts/check-task-workflow.sh +4 -4
  95. package/scripts/contract-worktree.sh +1 -21
  96. package/scripts/ensure-task-workflow.sh +22 -55
  97. package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
  98. package/scripts/install-standalone-recovery.ts +24 -0
  99. package/scripts/lib/project-init-lib.sh +15 -44
  100. package/scripts/migrate-chatgpt-automation-schedules.ts +64 -0
  101. package/scripts/migrate-project-template.sh +23 -1179
  102. package/scripts/new-plan.sh +1 -1
  103. package/scripts/plan-to-todo.sh +11 -36
  104. package/scripts/run-governed-gate.ts +2 -1
  105. package/scripts/ship-worktrees.sh +2 -29
  106. package/scripts/smoke-ios-physical-device.ts +4 -2
  107. package/scripts/smoke-runtime-recovery.ts +1 -35
  108. package/scripts/smoke-schedule-engine.ts +1 -20
  109. package/scripts/sprint-backlog.sh +1 -1
  110. package/scripts/verify-contract.sh +1 -111
  111. package/scripts/verify-forge-runtime.sh +0 -1
  112. package/scripts/verify-sprint.sh +3 -180
  113. package/scripts/workflow-contract.ts +1 -5
  114. package/src/cli/commands/chatgpt.ts +31 -2
  115. package/src/cli/commands/init-hook.ts +3 -3
  116. package/src/cli/commands/mcp.ts +9 -5
  117. package/src/cli/commands/plugin.ts +37 -10
  118. package/src/cli/commands/recovery.ts +25 -3
  119. package/src/cli/commands/runtime.ts +55 -3
  120. package/src/cli/commands/security.ts +12 -1
  121. package/src/cli/commands/setup-profile.ts +31 -21
  122. package/src/cli/controller/check-runner.ts +106 -3
  123. package/src/cli/controller/composite-result.ts +1 -1
  124. package/src/cli/controller/context/focus.ts +51 -0
  125. package/src/cli/controller/context/instruction-context.ts +114 -0
  126. package/src/cli/controller/context/known-paths.ts +76 -0
  127. package/src/cli/controller/context/query-planning.ts +110 -0
  128. package/src/cli/controller/context/rule-resolution.ts +532 -0
  129. package/src/cli/controller/context/source-materializer.ts +278 -0
  130. package/src/cli/controller/context/structural.ts +16 -0
  131. package/src/cli/controller/context/types.ts +286 -0
  132. package/src/cli/controller/context-pack.ts +898 -430
  133. package/src/cli/controller/launch-agents.ts +77 -2
  134. package/src/cli/controller/operational-plan.ts +2 -2
  135. package/src/cli/controller/work-mode.ts +6 -4
  136. package/src/cli/editing/edit-session.ts +60 -7
  137. package/src/cli/github/github.ts +133 -0
  138. package/src/cli/hook/prompt-guard-decision.ts +17 -18
  139. package/src/cli/hook/prompt-intents.ts +1 -1
  140. package/src/cli/installer/managed-entries.ts +15 -1
  141. package/src/cli/local-bridge/console-automations.ts +225 -67
  142. package/src/cli/local-bridge/console-view-models.ts +3 -35
  143. package/src/cli/local-bridge/facade-api.ts +2 -217
  144. package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
  145. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +153 -3
  146. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
  147. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +183 -3
  148. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +1 -1
  149. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +4 -3
  150. package/src/cli/local-bridge/frontend/src/lib/api.ts +18 -11
  151. package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
  152. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +1 -1
  153. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +4 -3
  154. package/src/cli/local-bridge/frontend/src/styles.css +27 -11
  155. package/src/cli/local-bridge/frontend/src/types.ts +8 -7
  156. package/src/cli/local-bridge/job-store.ts +1 -490
  157. package/src/cli/local-bridge/server.ts +29 -532
  158. package/src/cli/local-bridge/ui-dist/app.css +1 -1
  159. package/src/cli/local-bridge/ui-dist/app.js +5101 -4967
  160. package/src/cli/mcp/auth.ts +5 -5
  161. package/src/cli/mcp/instructions.ts +3 -2
  162. package/src/cli/mcp/legacy-tool-service.ts +0 -189
  163. package/src/cli/mcp/multi-repository.ts +16 -5
  164. package/src/cli/mcp/oauth.ts +175 -26
  165. package/src/cli/mcp/paths.ts +8 -2
  166. package/src/cli/mcp/repository-tools.ts +356 -101
  167. package/src/cli/mcp/server.ts +625 -54
  168. package/src/cli/mcp/tool-capability-cache.ts +1 -1
  169. package/src/cli/mcp/toolset-selection.ts +1 -1
  170. package/src/cli/mcp/toolset.ts +42 -5
  171. package/src/cli/mcp/transports/http.ts +125 -15
  172. package/src/cli/mcp/transports/session-registry.ts +67 -5
  173. package/src/cli/mcp/types.ts +3 -3
  174. package/src/cli/repositories/command-classifier.ts +209 -14
  175. package/src/cli/repositories/command-executor.ts +55 -521
  176. package/src/cli/repositories/command-process.ts +108 -0
  177. package/src/cli/repositories/command-scope.ts +99 -41
  178. package/src/cli/repositories/controller-home.ts +7 -8
  179. package/src/cli/repositories/git-command-executor.ts +2 -0
  180. package/src/cli/repositories/locks.ts +53 -16
  181. package/src/cli/repositories/repository-snapshot.ts +121 -0
  182. package/src/cli/repositories/safe-patch.ts +6 -4
  183. package/src/cli/repositories/selected-path-actions.ts +17 -9
  184. package/src/cli/repositories/structured-git.ts +110 -10
  185. package/src/cli/repository/inspector.ts +565 -62
  186. package/src/cli/repository/session-cache.ts +58 -17
  187. package/src/cli/v81-entry.ts +1 -4
  188. package/src/effects/fs-transaction.ts +85 -17
  189. package/src/runtime/context/codegraph-read-provider.ts +233 -2
  190. package/src/runtime/context/codegraph-sidecar.cjs +74 -40
  191. package/src/runtime/context/generic-lsp-provider.ts +355 -0
  192. package/src/runtime/context/lsp-client.ts +283 -0
  193. package/src/runtime/context/semantic-navigation.ts +275 -0
  194. package/src/runtime/context/swift-navigation.ts +565 -0
  195. package/src/runtime/context/typescript-navigation.ts +226 -0
  196. package/src/runtime/control-plane/dispatch-priority.ts +28 -0
  197. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +196 -2
  198. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
  199. package/src/runtime/control-plane/execution/execution-identity.ts +65 -14
  200. package/src/runtime/control-plane/execution/session-store.ts +18 -0
  201. package/src/runtime/control-plane/execution/validation.ts +15 -2
  202. package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
  203. package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
  204. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
  205. package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
  206. package/src/runtime/control-plane/execution/work-task-receipt.ts +54 -11
  207. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +175 -8
  208. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -21
  209. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +87 -9
  210. package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
  211. package/src/runtime/control-plane/facade/controller-round-relay.ts +991 -0
  212. package/src/runtime/control-plane/facade/controller-session-store.ts +144 -14
  213. package/src/runtime/control-plane/facade/goal-workloop-access.ts +9 -2
  214. package/src/runtime/control-plane/facade/goal-workloop.ts +885 -105
  215. package/src/runtime/control-plane/facade/index.ts +1 -0
  216. package/src/runtime/control-plane/facade/plan-contract-store.ts +211 -26
  217. package/src/runtime/control-plane/facade/requirement-board.ts +24 -8
  218. package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
  219. package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
  220. package/src/runtime/control-plane/facade/types.ts +55 -11
  221. package/src/runtime/control-plane/facade/work-contract-store.ts +204 -73
  222. package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
  223. package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
  224. package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
  225. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
  226. package/src/runtime/control-plane/global-scheduler/maintenance.ts +145 -0
  227. package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
  228. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
  229. package/src/runtime/control-plane/global-scheduler/scheduler.ts +273 -542
  230. package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
  231. package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
  232. package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
  233. package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
  234. package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
  235. package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
  236. package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
  237. package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
  238. package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
  239. package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
  240. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +50 -0
  241. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +642 -51
  242. package/src/runtime/control-plane/launcher/launch-reservation-store.ts +40 -0
  243. package/src/runtime/control-plane/launcher/thin-launcher.ts +194 -10
  244. package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
  245. package/src/runtime/control-plane/persistence/requirement-store.ts +15 -11
  246. package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
  247. package/src/runtime/control-plane/release-retention.ts +62 -2
  248. package/src/runtime/control-plane/routing/route-policy.ts +7 -16
  249. package/src/runtime/control-plane/runtime-status-client.ts +0 -2
  250. package/src/runtime/diagnostics/mcp-timing.ts +19 -0
  251. package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
  252. package/src/runtime/diagnostics/performance.ts +24 -1
  253. package/src/runtime/evidence/event-ledger.ts +1 -1
  254. package/src/runtime/execution/jobs/store.ts +58 -4
  255. package/src/runtime/execution/jobs/types.ts +1 -1
  256. package/src/runtime/execution/managed-workspace.ts +203 -1
  257. package/src/runtime/execution/process-runtime/check-facade.ts +52 -14
  258. package/src/runtime/execution/process-runtime/check-result.ts +63 -2
  259. package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
  260. package/src/runtime/execution/process-runtime/command-facade.ts +346 -40
  261. package/src/runtime/execution/process-runtime/gc.ts +98 -12
  262. package/src/runtime/execution/process-runtime/lightweight-managed.ts +1184 -0
  263. package/src/runtime/execution/process-runtime/persisted-check.ts +57 -6
  264. package/src/runtime/execution/process-runtime/resource-claims.ts +97 -8
  265. package/src/runtime/execution/process-runtime/runtime.ts +59 -4
  266. package/src/runtime/execution/process-runtime/store.ts +7 -0
  267. package/src/runtime/execution/process-runtime/types.ts +2 -0
  268. package/src/runtime/execution/thin-harness/async-process.ts +12 -2
  269. package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
  270. package/src/runtime/execution/workers/executor.ts +0 -48
  271. package/src/runtime/gateway/mcp/execution-tools.ts +1219 -126
  272. package/src/runtime/gateway/mcp/process-tools.ts +83 -37
  273. package/src/runtime/gateway/mcp/router.ts +185 -83
  274. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +546 -0
  275. package/src/runtime/gateway/mcp/runtime-tools.ts +2555 -1616
  276. package/src/runtime/model-clients/deepseek-adapter.ts +0 -32
  277. package/src/runtime/plugins/app-store-connect-adapter.ts +123 -19
  278. package/src/runtime/plugins/browser-adapter.ts +2925 -318
  279. package/src/runtime/plugins/browser-automation-service.ts +10 -0
  280. package/src/runtime/plugins/browser-handoff-host.ts +6 -31
  281. package/src/runtime/plugins/browser-handoff.ts +92 -5
  282. package/src/runtime/plugins/browser-macos-bridge.ts +586 -45
  283. package/src/runtime/plugins/browser-node-bridge.ts +6 -34
  284. package/src/runtime/plugins/browser-provider-registry.ts +109 -0
  285. package/src/runtime/plugins/browser-runtime-contract.ts +152 -0
  286. package/src/runtime/plugins/browser-runtime.ts +183 -0
  287. package/src/runtime/plugins/browser-session-authority.ts +332 -0
  288. package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
  289. package/src/runtime/plugins/desktop-operator-registration.ts +15 -12
  290. package/src/runtime/plugins/external-adapter.ts +324 -3
  291. package/src/runtime/plugins/external-registration.ts +84 -5
  292. package/src/runtime/plugins/external-unix-socket.ts +7 -1
  293. package/src/runtime/plugins/first-party-registry.ts +4 -2
  294. package/src/runtime/plugins/github-adapter.ts +125 -0
  295. package/src/runtime/plugins/gmail-adapter.ts +28 -2
  296. package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
  297. package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
  298. package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
  299. package/src/runtime/plugins/ios-adapter.ts +106 -16
  300. package/src/runtime/plugins/ios-agent-device.ts +234 -64
  301. package/src/runtime/plugins/ios-physical-device.ts +1143 -392
  302. package/src/runtime/plugins/lightweight-action.ts +153 -0
  303. package/src/runtime/plugins/local-system-adapter.ts +125 -8
  304. package/src/runtime/plugins/macos-capability-broker.ts +55 -9
  305. package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
  306. package/src/runtime/plugins/plugin-management-adapter.ts +181 -0
  307. package/src/runtime/plugins/resend-adapter.ts +1 -1
  308. package/src/runtime/plugins/store.ts +366 -24
  309. package/src/runtime/plugins/types.ts +39 -2
  310. package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
  311. package/src/runtime/projections/git-status-sampler.ts +16 -16
  312. package/src/runtime/projections/materialized-view.ts +28 -10
  313. package/src/runtime/recovery/actions.ts +0 -10
  314. package/src/runtime/recovery/classifier.ts +0 -9
  315. package/src/runtime/recovery/maintenance-executor.ts +415 -18
  316. package/src/runtime/recovery/probe.ts +0 -1
  317. package/src/runtime/recovery/types.ts +0 -1
  318. package/src/runtime/root/mcp-transport.ts +180 -10
  319. package/src/runtime/root/package-connector-service.ts +186 -8
  320. package/src/runtime/root/package-runtime-release.ts +143 -17
  321. package/src/runtime/root/package-runtime-service.ts +430 -22
  322. package/src/runtime/root/release-manifest.ts +7 -2
  323. package/src/runtime/root/release-materialize.ts +162 -19
  324. package/src/runtime/root/release-store.ts +48 -11
  325. package/src/runtime/root/runtime.ts +23 -5
  326. package/src/runtime/root/service.ts +100 -27
  327. package/src/runtime/root/types.ts +2 -0
  328. package/src/runtime/safe-tooling/index.ts +0 -1
  329. package/src/runtime/safe-tooling/ios-development.ts +321 -63
  330. package/src/runtime/safe-tooling/types.ts +0 -30
  331. package/src/runtime/shared/trusted-executable.ts +62 -0
  332. package/src/runtime/shared/trusted-node-executable.ts +48 -0
  333. package/src/runtime/standalone-recovery/core.ts +702 -94
  334. package/src/runtime/standalone-recovery/entry.ts +99 -23
  335. package/src/runtime/standalone-recovery/installer.ts +19 -3
  336. package/src/runtime/standalone-recovery/service-labels.ts +2 -0
  337. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
  338. package/src/runtime/workflow/schedules/browser-probe.ts +258 -0
  339. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +40 -0
  340. package/src/runtime/workflow/schedules/engine.ts +509 -80
  341. package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
  342. package/src/runtime/workflow/schedules/settlement.ts +48 -4
  343. package/src/runtime/workflow/schedules/store.ts +131 -10
  344. package/src/runtime/workflow/schedules/types.ts +6 -3
  345. package/src/runtime/workflow/schedules/work-continuation.ts +120 -34
  346. package/src/testing/test-governance.ts +8 -40
  347. package/assets/reference-configs/heartbeat-triage.md +0 -57
  348. package/assets/templates/helpers/harness-trace-grade.sh +0 -150
  349. package/assets/templates/helpers/heartbeat-triage.sh +0 -361
  350. package/assets/templates/helpers/maintenance-triage.sh +0 -167
  351. package/bin/forge-desktop-helper.mjs +0 -204
  352. package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
  353. package/docs/architecture/current/architecture-invariants.md +0 -331
  354. package/docs/architecture/current/automation-and-schedule-engine.md +0 -453
  355. package/docs/architecture/current/codegraph-context-provider.md +0 -226
  356. package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
  357. package/docs/architecture/current/controller-repository-decoupling.md +0 -148
  358. package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -354
  359. package/docs/architecture/current/entity-model.md +0 -592
  360. package/docs/architecture/current/external-plugin-governance.md +0 -396
  361. package/docs/architecture/current/failure-recovery.md +0 -447
  362. package/docs/architecture/current/governance.md +0 -213
  363. package/docs/architecture/current/human-interaction-plane.md +0 -87
  364. package/docs/architecture/current/implementation-status.md +0 -128
  365. package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
  366. package/docs/architecture/current/legacy-governance.md +0 -58
  367. package/docs/architecture/current/local-workspace-target-grants.md +0 -70
  368. package/docs/architecture/current/migration-roadmap.md +0 -105
  369. package/docs/architecture/current/multi-repository-execution.md +0 -371
  370. package/docs/architecture/current/operations-runbook.md +0 -45
  371. package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
  372. package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
  373. package/docs/architecture/current/repository-access-modes.md +0 -102
  374. package/docs/architecture/current/route-policy.md +0 -15
  375. package/docs/architecture/current/route-session-concurrency.md +0 -85
  376. package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
  377. package/docs/architecture/current/runtime-directory-map.md +0 -49
  378. package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
  379. package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
  380. package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
  381. package/docs/architecture/current/system-overview.md +0 -144
  382. package/docs/architecture/current/target-requirements-traceability.md +0 -202
  383. package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
  384. package/docs/architecture/current/thin-harness-v1.md +0 -311
  385. package/docs/architecture/current/verification-and-release-gates.md +0 -391
  386. package/docs/forge-autonomous-goal-loop.md +0 -9
  387. package/docs/forge-provider-configuration.md +0 -7
  388. package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -83
  389. package/docs/operations/controller-desktop-plugin.md +0 -112
  390. package/docs/operations/gmail-assistant-routines.md +0 -186
  391. package/docs/operations/personal-assistant-operator-guide.md +0 -61
  392. package/docs/operations/provider-configuration.md +0 -31
  393. package/scripts/harness-trace-grade.sh +0 -150
  394. package/scripts/heartbeat-triage.sh +0 -361
  395. package/scripts/maintenance-triage.sh +0 -167
  396. package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
  397. package/src/cli/repositories/goal-registry.ts +0 -239
  398. package/src/runtime/assistant/action-proposals.ts +0 -279
  399. package/src/runtime/assistant/intent.ts +0 -395
  400. package/src/runtime/assistant/model-provider.ts +0 -460
  401. package/src/runtime/assistant/openapi.ts +0 -223
  402. package/src/runtime/assistant/policy.ts +0 -89
  403. package/src/runtime/assistant/readiness.ts +0 -258
  404. package/src/runtime/assistant/routine-runtime.ts +0 -477
  405. package/src/runtime/assistant/schedule-binding.ts +0 -171
  406. package/src/runtime/assistant/standing-grants.ts +0 -375
  407. package/src/runtime/assistant/store.ts +0 -243
  408. package/src/runtime/assistant/types.ts +0 -135
  409. package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
  410. package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
  411. package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
  412. package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
  413. package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
  414. package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
  415. package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
  416. package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
  417. package/src/runtime/control-plane/goal-loop/index.ts +0 -13
  418. package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
  419. package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
  420. package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
  421. package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
  422. package/src/runtime/control-plane/goal-loop/types.ts +0 -378
  423. package/src/runtime/control-plane/startup-recovery.ts +0 -198
  424. package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
  425. package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
  426. package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
  427. package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
  428. package/src/runtime/plugins/desktop-adapter.ts +0 -374
  429. package/src/runtime/safe-tooling/browser-safe.ts +0 -133
  430. package/src/runtime/workflow/findings/store.ts +0 -204
  431. package/src/runtime/workflow/findings/types.ts +0 -58
  432. package/src/runtime/workflow/portfolio/engine.ts +0 -20
  433. package/src/runtime/workflow/portfolio/store.ts +0 -185
  434. package/src/runtime/workflow/portfolio/types.ts +0 -29
@@ -141,7 +141,7 @@ Complete this inventory before implementation. If any line is unknown, keep the
141
141
 
142
142
  - **State/progress path**:
143
143
  - **Verification evidence**:
144
- - **Evaluator rubric**:
144
+ - **Impact review**:
145
145
  - **Stop condition**:
146
146
  - **Rollback surface**:
147
147
 
@@ -63,7 +63,7 @@ plan_evidence_contract_error() {
63
63
  fi
64
64
 
65
65
  local label line value
66
- for label in "State/progress path" "Verification evidence" "Evaluator rubric" "Stop condition" "Rollback surface"; do
66
+ for label in "State/progress path" "Verification evidence" "Impact review|Evaluator rubric" "Stop condition" "Rollback surface"; do
67
67
  line="$(printf '%s\n' "$section" | grep -Ei "^[[:space:]]*-[[:space:]]*(\\*\\*)?${label}(\\*\\*)?[[:space:]]*:" | head -1 || true)"
68
68
  if [[ -z "$line" ]]; then
69
69
  echo "missing field: ${label}"
@@ -323,7 +323,7 @@ Describe the exact outcome this task must deliver.
323
323
  - Checks file: `.ai/harness/checks/latest.json`
324
324
  - Run snapshots: `.ai/harness/runs/`
325
325
  - Scope gate: edit only paths listed under `allowed_paths`; update this contract before widening scope.
326
- - Completion gate: `scripts/verify-sprint.sh` must see this contract pass, the review recommend pass, and `## External Acceptance Advice` pass or record a manual override.
326
+ - Completion evidence: `scripts/verify-sprint.sh` reports this contract's direct checks and declared scope. Then perform a fresh semantic impact review.
327
327
 
328
328
  ## Allowed Paths
329
329
 
@@ -691,19 +691,15 @@ else
691
691
  > **Notes File**: {{NOTES_FILE}}
692
692
  > **Checks File**: {{CHECKS_FILE}}
693
693
  > **Last Updated**: {{TIMESTAMP}}
694
- > **Recommendation**: fail
694
+ > **Summary**:
695
695
 
696
- ## Human Review Card
696
+ ## Semantic Impact Review
697
697
 
698
- - Verdict: pending
699
- - Change type: code-change | docs-only | ledger-closeout | migration | eval-only | delegated-run
700
- - Intended files changed:
701
- - Actual files changed:
702
- - Commands passed:
703
- - External acceptance: unavailable
704
- - Residual risks:
705
- - Reviewer action required: inspect diff and card
706
- - Rollback:
698
+ - User intent:
699
+ - Affected domains and downstream consumers:
700
+ - State transitions and persistence/restart impact:
701
+ - Missing impact areas or uncertainty:
702
+ - Residual risks and recovery:
707
703
 
708
704
  ## Mode Evidence
709
705
 
@@ -713,26 +709,14 @@ else
713
709
 
714
710
  ## Verification Evidence
715
711
 
716
- - Forge /review run:
712
+ - Focused/full checks:
717
713
  - Commands run:
718
714
  - Manual checks:
719
715
  - Supporting artifacts:
720
716
  - Implementation notes reviewed:
721
717
  - Run snapshot:
722
718
 
723
- ## External Acceptance Advice
724
-
725
- > **External Acceptance**: unavailable
726
- > **External Reviewer**:
727
- > **External Source**:
728
- > **External Started**:
729
- > **External Completed**:
730
-
731
- - P1 blockers:
732
- - P2 advisories:
733
- - Acceptance checklist:
734
-
735
- ## Behavior Diff Notes
719
+ ## Scenario Evidence
736
720
 
737
721
  - ...
738
722
 
@@ -740,15 +724,6 @@ else
740
724
 
741
725
  - ...
742
726
 
743
- ## Scorecard
744
-
745
- | Dimension | Score | Notes |
746
- |-----------|-------|-------|
747
- | Functionality | 0/10 | |
748
- | Product depth | 0/10 | |
749
- | Design quality | 0/10 | |
750
- | Code quality | 0/10 | |
751
-
752
727
  ## Failing Items
753
728
 
754
729
  - ...
@@ -17,11 +17,12 @@ export function stepsFor(gate: Gate): Step[] {
17
17
  if (gate === 'task') return [
18
18
  { label: 'typecheck', command: 'bun', args: ['run', 'check:type'], timeoutMs: 10 * 60_000 },
19
19
  { label: 'static architecture', command: 'bun', args: ['run', 'check:runtime-architecture'], timeoutMs: 5 * 60_000 },
20
- { label: 'test budget', command: 'bun', args: ['run', 'check:test-governance'], timeoutMs: 5 * 60_000 },
20
+ { label: 'test manifest', command: 'bun', args: ['run', 'check:test-governance'], timeoutMs: 5 * 60_000 },
21
21
  { label: 'affected tests', command: 'bun', args: ['run', 'test'], timeoutMs: 30 * 60_000 },
22
22
  ];
23
23
  if (gate === 'main') return [
24
24
  { label: 'focused task receipt', gate: 'task' },
25
+ { label: 'core regression', command: 'bun', args: ['run', 'test:core'], timeoutMs: 20 * 60_000 },
25
26
  { label: 'runtime smoke', command: 'bun', args: ['run', 'check:smoke'], timeoutMs: 10 * 60_000 },
26
27
  ];
27
28
  return [
@@ -224,19 +224,8 @@ active_slug_or_empty() {
224
224
  plan_slug_from_path "$active_plan"
225
225
  }
226
226
 
227
- review_recommends_pass_fallback() {
228
- local review_file="$1"
229
- grep -Eq '^> \*\*Recommendation\*\*:[[:space:]]*pass([[:space:]]*)$' "$review_file"
230
- }
231
-
232
- external_acceptance_pass_fallback() {
233
- local review_file="$1"
234
- grep -Eq '^> \*\*External Acceptance\*\*:[[:space:]]*(pass|manual_override)([[:space:]]*)$' "$review_file" \
235
- && grep -Eq '^-?[[:space:]]*P1 blockers:[[:space:]]*none([[:space:]]*)$' "$review_file"
236
- }
237
-
238
227
  require_finish_ready() {
239
- local contract_file="" review_file="" checks_file=".ai/harness/checks/latest.json" checks_error=""
228
+ local contract_file="" checks_file=".ai/harness/checks/latest.json" checks_error=""
240
229
 
241
230
  [[ -x "scripts/contract-worktree.sh" ]] || fail "scripts/contract-worktree.sh is missing or not executable"
242
231
  [[ -x "scripts/verify-sprint.sh" ]] || fail "scripts/verify-sprint.sh is missing or not executable"
@@ -245,27 +234,11 @@ require_finish_ready() {
245
234
  if declare -F workflow_active_contract >/dev/null 2>&1; then
246
235
  contract_file="$(workflow_active_contract 2>/dev/null || true)"
247
236
  fi
248
- if declare -F workflow_active_review >/dev/null 2>&1; then
249
- review_file="$(workflow_active_review 2>/dev/null || true)"
250
- fi
251
237
  if declare -F workflow_checks_file >/dev/null 2>&1; then
252
238
  checks_file="$(workflow_checks_file)"
253
239
  fi
254
240
 
255
241
  [[ -n "$contract_file" && -f "$contract_file" ]] || fail "active sprint contract is missing"
256
- [[ -n "$review_file" && -f "$review_file" ]] || fail "active sprint review is missing"
257
-
258
- if declare -F workflow_review_recommends_pass >/dev/null 2>&1; then
259
- workflow_review_recommends_pass "$review_file" || fail "$review_file does not recommend pass"
260
- else
261
- review_recommends_pass_fallback "$review_file" || fail "$review_file does not recommend pass"
262
- fi
263
-
264
- if declare -F workflow_external_acceptance_pass >/dev/null 2>&1; then
265
- workflow_external_acceptance_pass "$review_file" || fail "$review_file has no passing external acceptance"
266
- else
267
- external_acceptance_pass_fallback "$review_file" || fail "$review_file has no passing external acceptance"
268
- fi
269
242
 
270
243
  run_cmd bash "scripts/verify-sprint.sh"
271
244
  if [[ "$DRY_RUN" -eq 1 ]]; then
@@ -273,7 +246,7 @@ require_finish_ready() {
273
246
  fi
274
247
 
275
248
  if declare -F workflow_checks_pass >/dev/null 2>&1; then
276
- if ! checks_error="$(workflow_checks_pass "$checks_file" "$contract_file" "$review_file")"; then
249
+ if ! checks_error="$(workflow_checks_pass "$checks_file" "$contract_file")"; then
277
250
  fail "$checks_error"
278
251
  fi
279
252
  elif ! grep -Eq '"status"[[:space:]]*:[[:space:]]*"pass"' "$checks_file"; then
@@ -24,7 +24,6 @@ if (!/^[A-Za-z0-9][A-Za-z0-9.-]+$/.test(bundleId) || !bundleId.includes('.') ||
24
24
  throw new Error('FORGE_IOS_DEVICE_SMOKE_BUNDLE_ID must be an exact bundle identifier, not a URL or deep link.');
25
25
  }
26
26
 
27
- delete process.env.FORGE_IOS_DEVICE_RUNNER_URL;
28
27
 
29
28
  const common = {
30
29
  controllerHome,
@@ -51,6 +50,7 @@ try {
51
50
  entry.identifier === deviceSelector || entry.udid === deviceSelector || entry.name === deviceSelector);
52
51
  if (matches.length !== 1) throw new Error(`Expected exactly one physical iPhone for selector ${deviceSelector}; found ${matches.length}.`);
53
52
  const device = matches[0]!;
53
+ const info = await invoke('physical_device_info', { device: device.identifier });
54
54
  const apps = await invoke('physical_device_apps', { device: device.identifier, bundle_id: bundleId });
55
55
  const installed = Array.isArray(apps.apps) ? apps.apps as Array<Record<string, unknown>> : [];
56
56
  if (installed.length !== 1) throw new Error(`The exact bundle identifier ${bundleId} is not installed on the selected iPhone.`);
@@ -97,7 +97,9 @@ try {
97
97
  version: app.version,
98
98
  },
99
99
  launchStatus: interaction?.status,
100
- uiAutomation: opened.uiAutomation,
100
+ controlPlane: opened.controlPlane,
101
+ coreDeviceCapabilities: info.capabilities,
102
+ screenViewingURLAvailable: typeof info.screenViewingURL === 'string',
101
103
  screenshot: {
102
104
  created: true,
103
105
  width: width ? Number(width) : undefined,
@@ -25,8 +25,6 @@ import {
25
25
  } from '../src/runtime/execution/process-runtime';
26
26
  import { executionIdentityForRepository } from '../src/runtime/control-plane/execution/execution-identity';
27
27
  import { createSchedule } from '../src/runtime/workflow/schedules/store';
28
- import { createPortfolioWorkflow } from '../src/runtime/workflow/portfolio/store';
29
- import { recordCandidateFinding } from '../src/runtime/workflow/findings/store';
30
28
  import { assertAutomatedOperationAllowed } from '../src/runtime/control-plane/governance/external-effects';
31
29
 
32
30
  const root = mkdtempSync(join(tmpdir(), 'forge-recovery-smoke-'));
@@ -169,38 +167,9 @@ try {
169
167
  const scheduleB = createSchedule(controllerHome, scheduleInput);
170
168
  assert(scheduleA.scheduleId === scheduleB.scheduleId, 'Schedule requestId was not idempotent');
171
169
 
172
- const portfolioInput = {
173
- name: 'portfolio-idempotency', requestId: 'portfolio-idempotency', failurePolicy: 'stop' as const,
174
- steps: [{ stepId: 'one', repoId: repository.repoId, operation: 'controller_context', dependsOn: [], priority: 'P2' as const, resourceClaims: [], status: 'pending' as const }],
175
- };
176
- const portfolioA = createPortfolioWorkflow(controllerHome, portfolioInput);
177
- const portfolioB = createPortfolioWorkflow(controllerHome, portfolioInput);
178
- assert(portfolioA.workflowId === portfolioB.workflowId, 'Portfolio requestId was not idempotent');
179
-
180
- const candidateA = recordCandidateFinding(controllerHome, {
181
- repoId: repository.repoId, requestId: 'candidate-observation-1', semanticKey: 'frequent-502:mcp-timeout',
182
- title: 'Frequent MCP 502', summary: 'Observed during bounded triage.', evidence: { source: 'schedule', reference: 'OCC-1' },
183
- });
184
- const candidateB = recordCandidateFinding(controllerHome, {
185
- repoId: repository.repoId, requestId: 'candidate-observation-2', semanticKey: 'frequent-502:mcp-timeout',
186
- title: 'Frequent MCP 502', summary: 'Observed again.', evidence: { source: 'schedule', reference: 'OCC-2' },
187
- });
188
- assert(candidateA.findingId === candidateB.findingId && candidateB.observationCount === 2, 'candidate finding was not deduplicated');
189
170
  let automaticIssueBlocked = false;
190
171
  try { assertAutomatedOperationAllowed('create_issue'); } catch { automaticIssueBlocked = true; }
191
- assert(automaticIssueBlocked, 'Schedule/Portfolio could create an Issue without candidate promotion');
192
-
193
- let cycleRejected = false;
194
- try {
195
- createPortfolioWorkflow(controllerHome, {
196
- name: 'cycle', requestId: 'portfolio-cycle', failurePolicy: 'stop',
197
- steps: [
198
- { stepId: 'a', repoId: repository.repoId, operation: 'controller_context', dependsOn: ['b'], priority: 'P2', resourceClaims: [], status: 'pending' },
199
- { stepId: 'b', repoId: repository.repoId, operation: 'controller_context', dependsOn: ['a'], priority: 'P2', resourceClaims: [], status: 'pending' },
200
- ],
201
- });
202
- } catch { cycleRejected = true; }
203
- assert(cycleRejected, 'Portfolio dependency cycle was accepted');
172
+ assert(automaticIssueBlocked, 'Kernel automation could create an Issue without an explicit external-effect path');
204
173
 
205
174
  console.log(JSON.stringify({
206
175
  status: 'ok',
@@ -208,10 +177,7 @@ try {
208
177
  processRecovered,
209
178
  replacementController: replacement.controllerId,
210
179
  scheduleId: scheduleA.scheduleId,
211
- portfolioWorkflowId: portfolioA.workflowId,
212
- candidateFindingDeduplicated: candidateB.observationCount,
213
180
  automaticIssueBlocked,
214
- portfolioCycleRejected: cycleRejected,
215
181
  executionJobCount: listExecutionJobs(controllerHome, repository.repoId, 20).length,
216
182
  }, null, 2));
217
183
  } finally {
@@ -6,7 +6,6 @@ import { registerRepository } from '../src/cli/repositories/registry';
6
6
  import { listHandoffItems } from '../src/runtime/control-plane/facade/handoff-inbox-store';
7
7
  import { listExecutionJobs } from '../src/runtime/execution/jobs/store';
8
8
  import { evaluateSchedule } from '../src/runtime/workflow/schedules/engine';
9
- import { recordCandidateFinding } from '../src/runtime/workflow/findings/store';
10
9
  import { createSchedule, getSchedule, getScheduleDecision } from '../src/runtime/workflow/schedules/store';
11
10
 
12
11
  const root = mkdtempSync(join(tmpdir(), 'forge-schedule-smoke-'));
@@ -119,20 +118,6 @@ try {
119
118
  'missing historical dependency checkpoint fired',
120
119
  );
121
120
 
122
- recordCandidateFinding(controllerHome, {
123
- repoId: repository.repoId,
124
- requestId: 'schedule-candidate-1',
125
- semanticKey: 'schedule:condition',
126
- title: 'Condition finding',
127
- evidence: { source: 'smoke' },
128
- });
129
- recordCandidateFinding(controllerHome, {
130
- repoId: repository.repoId,
131
- requestId: 'schedule-candidate-2',
132
- semanticKey: 'schedule:condition',
133
- title: 'Condition finding',
134
- evidence: { source: 'smoke' },
135
- });
136
121
  const conditionSchedule = createSchedule(controllerHome, {
137
122
  ...semanticBase,
138
123
  requestId: 'schedule-condition',
@@ -140,11 +125,7 @@ try {
140
125
  trigger: {
141
126
  type: 'condition',
142
127
  everyMinutes: 1,
143
- condition: {
144
- kind: 'candidate_observation_threshold',
145
- semanticKey: 'schedule:condition',
146
- observationThreshold: 2,
147
- },
128
+ condition: { kind: 'repository_clean' },
148
129
  },
149
130
  });
150
131
  const conditionOccurrence = await evaluateSchedule(controllerHome, conditionSchedule);
@@ -21,7 +21,7 @@ Usage:
21
21
 
22
22
  Program-level sprint backlog helper. PRDs live in plans/prds/ as the upper
23
23
  planning layer; sprints live in plans/sprints/ as ordered execution backlogs.
24
- Each backlog row is expanded with $think before the existing plan -> contract
24
+ Each backlog row is expanded with /plan before the existing plan -> contract
25
25
  -> worktree flow. tasks/todos.md stays the deferred-goal ledger.
26
26
 
27
27
  start-task reserves the next (or named) pending backlog row and can capture a
@@ -69,24 +69,6 @@ read_contract_status() {
69
69
  awk '/^> \*\*Status\*\*:/ {sub(/^.*> \*\*Status\*\*: */, ""); gsub(/\r/, ""); print; exit}' "$file" | xargs
70
70
  }
71
71
 
72
- read_contract_review_file() {
73
- local file="$1"
74
- local line=""
75
- local value=""
76
-
77
- line="$(grep -m 1 -E '^> \*\*Review File\*\*:' "$file" || true)"
78
- [[ -n "$line" ]] || return 0
79
-
80
- if [[ "$line" == *\`* ]]; then
81
- value="${line#*\`}"
82
- value="${value%%\`*}"
83
- else
84
- value="${line#*> **Review File**:}"
85
- fi
86
-
87
- printf '%s' "$value" | tr -d '\r' | sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//'
88
- }
89
-
90
72
  read_contract_task_profile() {
91
73
  local file="$1"
92
74
  awk '/^> \*\*Task Profile\*\*:/ {sub(/^.*> \*\*Task Profile\*\*:[[:space:]]*/, ""); gsub(/\r/, ""); print; exit}' "$file" | xargs
@@ -130,36 +112,6 @@ contract_allowed_paths() {
130
112
  '
131
113
  }
132
114
 
133
- review_recommends_pass() {
134
- local review_file="$1"
135
- [[ -n "$review_file" && -f "$review_file" ]] || return 1
136
- grep -Eq '^> \*\*Recommendation\*\*:[[:space:]]*pass[[:space:]]*$' "$review_file"
137
- }
138
-
139
- review_score() {
140
- local review_file="$1"
141
- local dimension="$2"
142
-
143
- [[ -n "$review_file" && -f "$review_file" ]] || return 1
144
-
145
- awk -F'|' -v wanted="$dimension" '
146
- function trim(s) {
147
- gsub(/^[[:space:]]+/, "", s)
148
- gsub(/[[:space:]]+$/, "", s)
149
- return s
150
- }
151
- BEGIN { wanted = tolower(wanted) }
152
- /^\|/ {
153
- dim = tolower(trim($2))
154
- score = trim($3)
155
- if (dim == wanted && match(score, /[0-9]+/)) {
156
- print substr(score, RSTART, RLENGTH)
157
- exit
158
- }
159
- }
160
- ' "$review_file"
161
- }
162
-
163
115
  update_contract_status() {
164
116
  local file="$1"
165
117
  local status="$2"
@@ -385,14 +337,9 @@ declare -a contain_patterns=()
385
337
  declare -a files_not_exist=()
386
338
  declare -a not_contain_paths=()
387
339
  declare -a not_contain_patterns=()
388
- declare -a qa_dimensions=()
389
- declare -a qa_mins=()
390
- declare -a manual_checks=()
391
340
 
392
341
  section=""
393
342
  pending_path=""
394
- pending_dimension=""
395
- review_file="$(read_contract_review_file "$contract_file" || true)"
396
343
  task_profile="$(read_contract_task_profile "$contract_file" || true)"
397
344
  declare -a allowed_paths=()
398
345
  while IFS= read -r allowed_path; do
@@ -443,21 +390,10 @@ while IFS= read -r raw_line; do
443
390
  pending_path=""
444
391
  continue
445
392
  ;;
446
- qa_scores:)
447
- section="qa_scores"
448
- pending_path=""
449
- pending_dimension=""
450
- continue
451
- ;;
452
- manual_checks:)
453
- section="manual_checks"
454
- pending_path=""
455
- continue
456
- ;;
457
393
  esac
458
394
 
459
395
  case "$section" in
460
- files_exist|commands_succeed|files_not_exist|artifacts_exist|manual_checks)
396
+ files_exist|commands_succeed|files_not_exist|artifacts_exist)
461
397
  if [[ "$trimmed" =~ ^-[[:space:]]*(.+)$ ]]; then
462
398
  item="$(strip_quotes "${BASH_REMATCH[1]}")"
463
399
  [[ -n "$item" ]] || continue
@@ -467,8 +403,6 @@ while IFS= read -r raw_line; do
467
403
  commands_succeed+=("$item")
468
404
  elif [[ "$section" == "artifacts_exist" ]]; then
469
405
  artifacts_exist+=("$item")
470
- elif [[ "$section" == "manual_checks" ]]; then
471
- manual_checks+=("$item")
472
406
  else
473
407
  files_not_exist+=("$item")
474
408
  fi
@@ -497,19 +431,6 @@ while IFS= read -r raw_line; do
497
431
  fi
498
432
  fi
499
433
  ;;
500
- qa_scores)
501
- if [[ "$trimmed" =~ ^-[[:space:]]*dimension:[[:space:]]*(.+)$ ]]; then
502
- pending_dimension="$(strip_quotes "${BASH_REMATCH[1]}")"
503
- elif [[ "$trimmed" =~ ^dimension:[[:space:]]*(.+)$ ]]; then
504
- pending_dimension="$(strip_quotes "${BASH_REMATCH[1]}")"
505
- elif [[ "$trimmed" =~ ^min:[[:space:]]*([0-9]+)$ ]]; then
506
- if [[ -n "$pending_dimension" ]]; then
507
- qa_dimensions+=("$pending_dimension")
508
- qa_mins+=("${BASH_REMATCH[1]}")
509
- pending_dimension=""
510
- fi
511
- fi
512
- ;;
513
434
  esac
514
435
  done <<< "$yaml_block"
515
436
  if ((${#tests_pass[@]} || ${#commands_succeed[@]})); then
@@ -602,37 +523,6 @@ if ((${#commands_succeed[@]})); then
602
523
  done
603
524
  fi
604
525
 
605
- if ((${#qa_dimensions[@]})); then
606
- for idx in "${!qa_dimensions[@]}"; do
607
- dimension="${qa_dimensions[$idx]}"
608
- min_score="${qa_mins[$idx]}"
609
- score="$(review_score "$review_file" "$dimension" || true)"
610
-
611
- if [[ "$score" =~ ^[0-9]+$ && "$score" -ge "$min_score" ]]; then
612
- pass "qa_scores" "$dimension" "qa_scores: $dimension ${score}/${min_score}"
613
- else
614
- fail "qa_scores" "$dimension" "qa_scores: $dimension score ${score:-missing} < $min_score"
615
- fi
616
- done
617
- fi
618
-
619
- if ((${#manual_checks[@]})); then
620
- for check in "${manual_checks[@]}"; do
621
- case "$check" in
622
- "Evaluator review file recommends pass")
623
- if review_recommends_pass "$review_file"; then
624
- pass "manual_checks" "$check" "manual_checks: $check"
625
- else
626
- fail "manual_checks" "$check" "manual_checks: $check"
627
- fi
628
- ;;
629
- *)
630
- fail "manual_checks" "$check" "manual_checks unsupported: $check"
631
- ;;
632
- esac
633
- done
634
- fi
635
-
636
526
  if ((${#contain_paths[@]})); then
637
527
  for idx in "${!contain_paths[@]}"; do
638
528
  path="${contain_paths[$idx]}"
@@ -13,7 +13,6 @@ TEST_FILES=(
13
13
  "tests/runtime/facade-contracts.test.ts"
14
14
  "tests/runtime/route-policy.test.ts"
15
15
  "tests/runtime/forge-runtime-service.test.ts"
16
- "tests/cli/mcp-controller.test.ts"
17
16
  "tests/cli/local-bridge.test.ts"
18
17
  "tests/runtime/thin-harness-gateway-routing.test.ts"
19
18
  "tests/runtime/runtime-observability.test.ts"