@moretea-labs/forge 1.8.0 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (695) hide show
  1. package/AGENTS.md +73 -7
  2. package/CHANGELOG.md +34 -0
  3. package/CLAUDE.md +17 -2
  4. package/CONTRIBUTING.md +3 -2
  5. package/README.en.md +24 -3
  6. package/README.md +10 -6
  7. package/README.zh-CN.md +5 -3
  8. package/THIRD_PARTY_NOTICES.md +1 -2
  9. package/adapters/chatgpt/browser-delivery-host.ts +7 -1
  10. package/adapters/chatgpt/browser-delivery-runtime.ts +531 -56
  11. package/adapters/chatgpt/controller-binding-store.ts +101 -22
  12. package/adapters/chatgpt/controller-round-host.ts +15 -25
  13. package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
  14. package/adapters/chatgpt/provider-delivery.ts +229 -2
  15. package/adapters/chatgpt/work-conversation-binding-store.ts +99 -54
  16. package/adapters/computer/chatgpt-extension-target.ts +708 -0
  17. package/adapters/computer/chrome-extension/background.js +541 -0
  18. package/adapters/computer/chrome-extension/content.js +402 -0
  19. package/adapters/computer/chrome-extension/core.js +24 -0
  20. package/adapters/computer/chrome-extension/manifest.json +32 -0
  21. package/adapters/computer/desktop-operator-discovery.ts +11 -31
  22. package/adapters/computer/desktop-operator-provider.ts +18 -6
  23. package/adapters/computer/interaction-target-authority.ts +178 -24
  24. package/adapters/mcp/access-mode.ts +18 -39
  25. package/adapters/mcp/auth.ts +2 -7
  26. package/adapters/mcp/instructions.ts +6 -5
  27. package/adapters/mcp/multi-repository.ts +10 -47
  28. package/adapters/mcp/oauth.ts +73 -0
  29. package/adapters/mcp/paths.ts +4 -1
  30. package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
  31. package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
  32. package/adapters/mcp/runtime-gateway/context-adapter.ts +490 -113
  33. package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +83 -0
  34. package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
  35. package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
  36. package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
  37. package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
  38. package/adapters/mcp/runtime-gateway/execution-tools.ts +14 -54
  39. package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
  40. package/adapters/mcp/runtime-gateway/plugin-adapter.ts +132 -47
  41. package/adapters/mcp/runtime-gateway/process-tools.ts +173 -23
  42. package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
  43. package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
  44. package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
  45. package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
  46. package/adapters/mcp/runtime-gateway/router.ts +19 -507
  47. package/adapters/mcp/runtime-gateway/routing-policy.ts +506 -0
  48. package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +15 -66
  49. package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
  50. package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +123 -178
  51. package/adapters/mcp/runtime-gateway/runtime-tools.ts +11 -5
  52. package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +37 -1
  53. package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
  54. package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +416 -270
  55. package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +140 -0
  56. package/adapters/mcp/runtime-gateway/work-adapter.ts +262 -3123
  57. package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
  58. package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
  59. package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +229 -0
  60. package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
  61. package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
  62. package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
  63. package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
  64. package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
  65. package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +320 -0
  66. package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
  67. package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +180 -0
  68. package/adapters/mcp/server.ts +91 -26
  69. package/adapters/mcp/setup.ts +5 -13
  70. package/adapters/mcp/tool-mapping/access-tools.ts +0 -6
  71. package/adapters/mcp/tool-mapping/legacy-tool-service.ts +703 -3092
  72. package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +5 -10
  73. package/adapters/mcp/tool-mapping/repository-tools.ts +170 -213
  74. package/adapters/mcp/toolset-names.ts +11 -37
  75. package/adapters/mcp/toolset.ts +19 -92
  76. package/{src/cli → adapters}/mcp/transports/AGENTS.md +5 -5
  77. package/{src/cli → adapters}/mcp/transports/CLAUDE.md +5 -5
  78. package/adapters/mcp/transports/http-observation.ts +377 -0
  79. package/adapters/mcp/transports/http-post-lifecycle.ts +19 -0
  80. package/adapters/mcp/transports/http.ts +200 -683
  81. package/adapters/mcp/transports/oauth-http.ts +322 -0
  82. package/adapters/mcp/transports/session-registry.ts +6 -0
  83. package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
  84. package/adapters/mcp/types.ts +0 -6
  85. package/assets/hooks/lib/session-state.sh +0 -38
  86. package/assets/hooks/post-bash.sh +1 -1
  87. package/assets/hooks/post-tool-observer.sh +0 -5
  88. package/assets/hooks/prompt-guard.sh +0 -55
  89. package/assets/partials/04-project-structure.partial.md +1 -1
  90. package/assets/partials/07-footer.partial.md +1 -1
  91. package/assets/partials-agents/02-operating-mode.partial.md +1 -1
  92. package/assets/partials-agents/08-deep-docs.partial.md +1 -1
  93. package/assets/plugin-registry.v1.json +6 -4
  94. package/assets/reference-configs/agentic-development-flow.md +26 -1
  95. package/assets/reference-configs/external-tooling.md +0 -76
  96. package/assets/reference-configs/global-working-rules.md +19 -0
  97. package/assets/reference-configs/release-deploy.md +1 -1
  98. package/assets/templates/helpers/architecture-queue.sh +1 -1
  99. package/assets/templates/helpers/check-agent-tooling.sh +1 -327
  100. package/assets/templates/helpers/check-task-workflow.sh +1 -1
  101. package/assets/templates/helpers/ensure-task-workflow.sh +0 -14
  102. package/assets/templates/helpers/migrate-project-template.sh +2 -2
  103. package/assets/workflow-contract.v1.json +0 -2
  104. package/docs/README.md +5 -2
  105. package/docs/architecture/CURRENT.md +205 -51
  106. package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
  107. package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
  108. package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +42 -0
  109. package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
  110. package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
  111. package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
  112. package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
  113. package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +234 -0
  114. package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
  115. package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +74 -0
  116. package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +342 -0
  117. package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
  118. package/docs/architecture/decisions/20261009-exact-code-context-discovery.md +19 -0
  119. package/docs/architecture/decisions/20261009-generated-xcode-cache-retention.md +37 -0
  120. package/docs/architecture/decisions/20261011-autonomous-continuation-convergence.md +597 -0
  121. package/docs/architecture/decisions/20261017-edit-session-finalization-reconciliation.md +17 -0
  122. package/docs/architecture/decisions/20261019-retire-host-skills.md +16 -0
  123. package/docs/architecture/diagrams/agentic-dev-plugin-architecture.html +1 -1
  124. package/docs/architecture/domains/public-surface.md +3 -5
  125. package/docs/architecture/domains/verification.md +6 -5
  126. package/docs/architecture/domains/workflow-engine.md +6 -0
  127. package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +3 -3
  128. package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +4 -4
  129. package/docs/architecture/reviews/20261015-code-search-runtime-acceptance.md +75 -0
  130. package/docs/forge-plugin-management.md +16 -4
  131. package/docs/operations/controller-browser-plugin.md +23 -0
  132. package/docs/operations/controller-performance-and-502.md +17 -0
  133. package/docs/operations/controller-reliability-runbook.md +2 -2
  134. package/docs/operations/features.md +6 -7
  135. package/docs/operations/features.zh-CN.md +1 -1
  136. package/docs/operations/github-repository.md +4 -4
  137. package/docs/operations/github-semantic-release-projection.md +20 -0
  138. package/docs/operations/homebrew.md +2 -2
  139. package/docs/operations/mcp-tool-exposure.md +13 -52
  140. package/docs/operations/releasing.md +2 -0
  141. package/docs/operations/runtime-performance-diagnostics.md +8 -0
  142. package/docs/operations/standalone-disaster-recovery.md +15 -7
  143. package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
  144. package/docs/tutorials/03-first-repository-task.md +2 -0
  145. package/docs/wiki/Computer-and-Plugins.md +78 -0
  146. package/docs/wiki/Computer-and-Plugins.zh-CN.md +88 -0
  147. package/docs/wiki/Home.md +16 -2
  148. package/docs/wiki/Implementation.md +25 -13
  149. package/docs/wiki/Installation.md +28 -32
  150. package/docs/wiki/Integrations.md +4 -0
  151. package/docs/wiki/Quick-Start.md +35 -22
  152. package/docs/wiki/Releases-and-Upgrades.md +15 -25
  153. package/docs/wiki/_Sidebar.md +5 -1
  154. package/package.json +25 -25
  155. package/packages/kernel/cognition/api/index.ts +6 -0
  156. package/packages/kernel/cognition/application/activation-service.ts +451 -0
  157. package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
  158. package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
  159. package/packages/kernel/cognition/application/memory-service.ts +64 -0
  160. package/packages/kernel/cognition/domain/learning.ts +106 -0
  161. package/packages/kernel/cognition/domain/memory.ts +254 -0
  162. package/packages/kernel/controller/api/index.ts +1 -0
  163. package/packages/kernel/controller/application/continuation-service.ts +281 -0
  164. package/packages/kernel/controller/application/controller-round-service.ts +12 -0
  165. package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
  166. package/packages/kernel/controller/domain/controller-round.ts +4 -1
  167. package/packages/kernel/controller/domain/execution-quality.ts +3 -1
  168. package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
  169. package/packages/kernel/controller/infrastructure/controller-session-store.ts +348 -97
  170. package/packages/kernel/controller/ports/controller-host.ts +2 -0
  171. package/packages/kernel/identity/api/index.ts +10 -0
  172. package/packages/kernel/identity/domain/activity-projection.ts +43 -0
  173. package/packages/kernel/identity/domain/capability-broker.ts +60 -0
  174. package/packages/kernel/identity/domain/grant.ts +72 -0
  175. package/packages/kernel/identity/domain/owned-resource.ts +116 -0
  176. package/packages/kernel/identity/domain/user-request.ts +93 -0
  177. package/packages/kernel/identity/infrastructure/activity-projection-store.ts +87 -0
  178. package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
  179. package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
  180. package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
  181. package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
  182. package/packages/kernel/scheduler/api/index.ts +0 -2
  183. package/packages/kernel/scheduler/application/eligibility.ts +4 -1
  184. package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
  185. package/packages/kernel/scheduler/application/settlement.ts +0 -15
  186. package/packages/kernel/scheduler/domain/schedule.ts +87 -0
  187. package/packages/kernel/scheduler/infrastructure/schedule-store.ts +166 -143
  188. package/packages/kernel/work/api/index.ts +3 -2
  189. package/packages/kernel/work/application/work-service.ts +18 -42
  190. package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
  191. package/packages/kernel/work/domain/engineering-design.ts +10 -5
  192. package/packages/kernel/work/domain/engineering-profile.ts +8 -12
  193. package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
  194. package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
  195. package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
  196. package/packages/kernel/work/domain/implementation-review.ts +14 -331
  197. package/packages/kernel/work/domain/objective-graph.ts +119 -0
  198. package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
  199. package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
  200. package/packages/kernel/work/domain/state-machine.ts +34 -65
  201. package/packages/kernel/work/domain/types.ts +57 -51
  202. package/packages/kernel/work/infrastructure/work-contract-store.ts +847 -729
  203. package/packages/kernel/work/ports/work-contract-store.ts +5 -2
  204. package/packages/plugin-runtime/browser/provider-registry.ts +12 -36
  205. package/packages/plugin-runtime/browser/session-authority.ts +2 -1
  206. package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
  207. package/packages/plugin-runtime/computer/conversation-target.ts +153 -0
  208. package/packages/plugin-runtime/computer/index.ts +2 -0
  209. package/packages/plugin-runtime/computer/target-authority.ts +26 -1
  210. package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
  211. package/packages/protocols/computer/contract.ts +27 -1
  212. package/scripts/activate-source-baseline.ts +7 -9
  213. package/scripts/assemble-template.ts +11 -72
  214. package/scripts/canary-controller-semantic-wait.ts +12 -24
  215. package/scripts/check-mcp-compatibility.ts +94 -201
  216. package/scripts/check-package-identity.mjs +0 -5
  217. package/scripts/check-runtime-architecture.mjs +921 -239
  218. package/scripts/forge-local-recovery-helper.mjs +93 -15
  219. package/scripts/init-project.sh +0 -46
  220. package/scripts/install-ios-hid-toolchain.sh +60 -0
  221. package/scripts/install-standalone-recovery.ts +1 -1
  222. package/scripts/lib/project-init-lib.sh +6 -3
  223. package/scripts/migrate-windows-wsl-controller-home.ts +2 -0
  224. package/scripts/open-source-audit-allowlist.txt +1 -3
  225. package/scripts/run-bounded-command.mjs +5 -0
  226. package/scripts/run-governed-gate.ts +2 -1
  227. package/scripts/run-mobile-monitor-bridge.ts +0 -1
  228. package/scripts/smoke-control-plane-failure-domain.ts +94 -0
  229. package/scripts/smoke-ios-physical-device.ts +38 -10
  230. package/scripts/smoke-mcp-http-runtime.ts +12 -8
  231. package/scripts/smoke-mcp-tool-surface.ts +27 -41
  232. package/scripts/smoke-runtime-recovery.ts +12 -43
  233. package/scripts/smoke-schedule-engine.ts +23 -15
  234. package/scripts/smoke-unattended-transport-recovery.ts +223 -0
  235. package/scripts/smoke-user-request-continuation-restart.ts +232 -0
  236. package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +95 -0
  237. package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
  238. package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
  239. package/scripts/smoke-workflow-supervisor.ts +103 -0
  240. package/scripts/sync-generated-authority.mjs +0 -1
  241. package/scripts/verify-forge-runtime.sh +2 -1
  242. package/src/cli/agent-jobs/executor-health.ts +12 -35
  243. package/src/cli/agent-jobs/integration.ts +20 -51
  244. package/src/cli/agent-jobs/job-manager.ts +7 -3
  245. package/src/cli/chatgpt-browser/file-policy.ts +2 -2
  246. package/src/cli/commands/brain-assistant.ts +27 -13
  247. package/src/cli/commands/brain.ts +13 -15
  248. package/src/cli/commands/chatgpt.ts +1 -163
  249. package/src/cli/commands/doctor.ts +1 -143
  250. package/src/cli/commands/global-runtime.ts +3 -196
  251. package/src/cli/commands/init-hook.ts +6 -23
  252. package/src/cli/commands/init.ts +3 -252
  253. package/src/cli/commands/mcp.ts +0 -5
  254. package/src/cli/commands/prompt-guard-decision.ts +0 -2
  255. package/src/cli/commands/recovery.ts +137 -135
  256. package/src/cli/commands/repository.ts +17 -1
  257. package/src/cli/commands/runtime.ts +3 -3
  258. package/src/cli/commands/setup-execution.ts +41 -0
  259. package/src/cli/commands/setup-profile.ts +8 -0
  260. package/src/cli/controller/check-runner.ts +13 -2
  261. package/src/cli/controller/completion-backlog.ts +3 -3
  262. package/src/cli/controller/completion-orchestrator.ts +5 -44
  263. package/src/cli/controller/completion-target.ts +3 -72
  264. package/src/cli/controller/composite-operations.ts +1 -1
  265. package/src/cli/controller/context/instruction-context.ts +1 -1
  266. package/src/cli/controller/context/known-paths.ts +2 -2
  267. package/src/cli/controller/context/query-planning.ts +11 -4
  268. package/src/cli/controller/context/rule-resolution.ts +2 -2
  269. package/src/cli/controller/context/source-materializer.ts +83 -102
  270. package/src/cli/controller/context/structural-provider.ts +84 -0
  271. package/src/cli/controller/context/structural.ts +6 -6
  272. package/src/cli/controller/context/types.ts +8 -9
  273. package/src/cli/controller/context-pack.ts +107 -84
  274. package/src/cli/controller/execution-completion.ts +4 -7
  275. package/src/cli/controller/execution-policy.ts +36 -153
  276. package/src/cli/controller/governance.ts +2 -3
  277. package/src/cli/controller/issue-store.ts +4 -99
  278. package/src/cli/controller/launch-agents.ts +59 -18
  279. package/src/cli/controller/operational-plan.ts +25 -52
  280. package/src/cli/controller/runtime-config.ts +5 -1
  281. package/src/cli/controller/stuck-state-migration.ts +2 -3
  282. package/src/cli/controller/systemd-user.ts +42 -10
  283. package/src/cli/editing/edit-session.ts +18 -12
  284. package/src/cli/github/github.ts +4 -4
  285. package/src/cli/github/semantic-projection.ts +174 -0
  286. package/src/cli/hook/prompt-intents.ts +0 -9
  287. package/src/cli/index.ts +1 -43
  288. package/src/cli/local-bridge/connector-freshness.ts +1 -12
  289. package/src/cli/local-bridge/console-automations.ts +19 -14
  290. package/src/cli/local-bridge/console-view-models.ts +4 -13
  291. package/src/cli/local-bridge/facade-api.ts +64 -193
  292. package/src/cli/local-bridge/server.ts +24 -147
  293. package/src/cli/local-bridge/types.ts +0 -1
  294. package/src/cli/mcp/oauth-client-retirement.ts +74 -0
  295. package/src/cli/repositories/command-classifier.ts +0 -9
  296. package/src/cli/repositories/command-executor.ts +29 -23
  297. package/src/cli/repositories/command-scope.ts +37 -18
  298. package/src/cli/repositories/controller-home.ts +48 -0
  299. package/src/cli/repositories/ephemeral-workspace.ts +20 -30
  300. package/src/cli/repositories/git-command-executor.ts +2 -2
  301. package/src/cli/repositories/locks.ts +20 -0
  302. package/src/cli/repositories/registry.ts +79 -12
  303. package/src/cli/repositories/safe-patch.ts +2 -12
  304. package/src/cli/repositories/structured-git.ts +101 -5
  305. package/src/cli/repository/inspector.ts +185 -343
  306. package/src/cli/repository/session-cache.ts +92 -6
  307. package/src/effects/process-runner.ts +17 -1
  308. package/src/runtime/context/assistant-context.ts +20 -7
  309. package/src/runtime/context/assistant-work-context.ts +89 -27
  310. package/src/runtime/context/automatic-learning.ts +565 -0
  311. package/src/runtime/context/cognitive-attention.ts +173 -0
  312. package/src/runtime/context/cognitive-skill-canary.ts +158 -0
  313. package/src/runtime/context/context-closure.ts +46 -9
  314. package/src/runtime/context/context-pack-process.ts +103 -0
  315. package/src/runtime/context/context-plane.ts +1 -9
  316. package/src/runtime/context/direct-controller-learning.ts +298 -0
  317. package/src/runtime/context/generic-lsp-provider.ts +1 -1
  318. package/src/runtime/context/semantic-navigation-contract.ts +16 -0
  319. package/src/runtime/context/semantic-navigation.ts +7 -35
  320. package/src/runtime/context/typescript-navigation-process.ts +145 -0
  321. package/src/runtime/context/typescript-navigation.ts +89 -3
  322. package/src/runtime/control-plane/cleanup-artifact-retention.ts +215 -12
  323. package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
  324. package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
  325. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
  326. package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
  327. package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
  328. package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
  329. package/src/runtime/control-plane/execution/session-store.ts +31 -1
  330. package/src/runtime/control-plane/execution/validation.ts +6 -8
  331. package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
  332. package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
  333. package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
  334. package/src/runtime/control-plane/execution/work-delivery-service.ts +616 -0
  335. package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
  336. package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
  337. package/src/runtime/control-plane/execution/work-handle-authority.ts +197 -110
  338. package/src/runtime/control-plane/execution/work-handle-store.ts +72 -44
  339. package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
  340. package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
  341. package/src/runtime/control-plane/execution/work-operation-service.ts +60 -34
  342. package/src/runtime/control-plane/execution/work-preparation-service.ts +231 -267
  343. package/src/runtime/control-plane/execution/work-process-evidence.ts +2 -2
  344. package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
  345. package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
  346. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +201 -199
  347. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +33 -85
  348. package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
  349. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +6 -2
  350. package/src/runtime/control-plane/facade/capability-registry.ts +364 -37
  351. package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
  352. package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
  353. package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
  354. package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
  355. package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
  356. package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
  357. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
  358. package/src/runtime/control-plane/facade/index.ts +0 -1
  359. package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
  360. package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
  361. package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
  362. package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
  363. package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
  364. package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
  365. package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
  366. package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
  367. package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
  368. package/src/runtime/control-plane/facade/types.ts +49 -108
  369. package/src/runtime/control-plane/facade/work-continuation.ts +9 -9
  370. package/src/runtime/control-plane/generated-cache-retention.ts +206 -59
  371. package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
  372. package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
  373. package/src/runtime/control-plane/global-scheduler/maintenance.ts +256 -117
  374. package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -12
  375. package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
  376. package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
  377. package/src/runtime/control-plane/governance/access-policy.ts +19 -2
  378. package/src/runtime/control-plane/governance/authorization.ts +20 -3
  379. package/src/runtime/control-plane/governance/external-effects.ts +1 -1
  380. package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
  381. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +29 -300
  382. package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
  383. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
  384. package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
  385. package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
  386. package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
  387. package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
  388. package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
  389. package/src/runtime/control-plane/release-retention.ts +135 -47
  390. package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
  391. package/src/runtime/control-plane/runtime-cleanup.ts +295 -107
  392. package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
  393. package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
  394. package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
  395. package/src/runtime/diagnostics/incident-repair.ts +313 -146
  396. package/src/runtime/diagnostics/mcp-timing.ts +114 -0
  397. package/src/runtime/evidence/artifact-store.ts +158 -40
  398. package/src/runtime/evidence/evidence-store.ts +112 -8
  399. package/src/runtime/evidence/output-handle-index.ts +225 -0
  400. package/src/runtime/evidence/result-store.ts +158 -44
  401. package/src/runtime/evidence/sensitive-output.ts +22 -2
  402. package/src/runtime/execution/jobs/child-reference.ts +11 -0
  403. package/src/runtime/execution/jobs/receipt-recovery.ts +1 -11
  404. package/src/runtime/execution/jobs/store.ts +3 -4
  405. package/src/runtime/execution/managed-workspace.ts +57 -0
  406. package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
  407. package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
  408. package/src/runtime/execution/process-runtime/check-result.ts +105 -1
  409. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
  410. package/src/runtime/execution/process-runtime/command-facade.ts +82 -30
  411. package/src/runtime/execution/process-runtime/gc.ts +15 -2
  412. package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
  413. package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
  414. package/src/runtime/execution/process-runtime/index.ts +3 -0
  415. package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
  416. package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
  417. package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
  418. package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
  419. package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
  420. package/src/runtime/execution/process-runtime/runtime.ts +55 -18
  421. package/src/runtime/execution/process-runtime/store.ts +30 -2
  422. package/src/runtime/execution/process-runtime/types.ts +6 -1
  423. package/src/runtime/execution/thin-harness/execution-router.ts +16 -16
  424. package/src/runtime/execution/thin-harness/fast-executor.ts +2 -2
  425. package/src/runtime/execution/thin-harness/search-worker.ts +2 -2
  426. package/src/runtime/execution/workers/executor.ts +3 -8
  427. package/src/runtime/maintenance/cleanup.ts +41 -5
  428. package/src/runtime/platform/service-inventory.ts +130 -0
  429. package/src/runtime/platform/service-manager.ts +8 -0
  430. package/src/runtime/plugins/action-application.ts +97 -29
  431. package/src/runtime/plugins/app-store-connect-adapter.ts +290 -18
  432. package/src/runtime/plugins/browser-adapter.ts +1124 -333
  433. package/src/runtime/plugins/browser-automation-service.ts +23 -3
  434. package/src/runtime/plugins/browser-macos-bridge.ts +431 -137
  435. package/src/runtime/plugins/browser-manifest-surface.ts +47 -12
  436. package/src/runtime/plugins/browser-native-session-service.ts +63 -13
  437. package/src/runtime/plugins/browser-registration.ts +18 -0
  438. package/src/runtime/plugins/browser-runtime.ts +40 -36
  439. package/src/runtime/plugins/browser-session-authority.ts +2 -2
  440. package/src/runtime/plugins/browser-session-store.ts +46 -76
  441. package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
  442. package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +228 -0
  443. package/src/runtime/plugins/computer-registration.ts +298 -20
  444. package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
  445. package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
  446. package/src/runtime/plugins/external-adapter.ts +42 -6
  447. package/src/runtime/plugins/external-registration.ts +21 -1
  448. package/src/runtime/plugins/github-adapter.ts +30 -3
  449. package/src/runtime/plugins/gmail-adapter.ts +189 -3
  450. package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
  451. package/src/runtime/plugins/google-shared.ts +24 -12
  452. package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
  453. package/src/runtime/plugins/ios/remote-xpc-hid.ts +70 -30
  454. package/src/runtime/plugins/ios-adapter.ts +46 -41
  455. package/src/runtime/plugins/ios-agent-device.ts +54 -4
  456. package/src/runtime/plugins/ios-device-ownership.ts +103 -0
  457. package/src/runtime/plugins/ios-physical-device.ts +497 -79
  458. package/src/runtime/plugins/lightweight-action.ts +208 -2
  459. package/src/runtime/plugins/local-system-adapter.ts +12 -100
  460. package/src/runtime/plugins/managed-process-adapter.ts +12 -5
  461. package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
  462. package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
  463. package/src/runtime/plugins/store.ts +682 -435
  464. package/src/runtime/plugins/types.ts +24 -0
  465. package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
  466. package/src/runtime/projections/git-status-sampler.ts +2 -19
  467. package/src/runtime/projections/invalidation.ts +7 -3
  468. package/src/runtime/projections/materialized-view.ts +80 -36
  469. package/src/runtime/recovery/actions.ts +4 -4
  470. package/src/runtime/recovery/capability-action-application.ts +46 -45
  471. package/src/runtime/recovery/lifecycle-inventory.ts +30 -40
  472. package/src/runtime/recovery/maintenance-executor.ts +374 -123
  473. package/src/runtime/recovery/probe.ts +2 -2
  474. package/src/runtime/recovery/store.ts +29 -11
  475. package/src/runtime/release/release-coordinator.ts +312 -0
  476. package/src/runtime/release/release-session.ts +716 -0
  477. package/src/runtime/release/release-state-migration.ts +25 -0
  478. package/src/runtime/resources/leases/store.ts +56 -25
  479. package/src/runtime/root/computer-composition.ts +191 -6
  480. package/src/runtime/root/controller-progression-composition.ts +254 -0
  481. package/src/runtime/root/controller-round-composition.ts +20 -1
  482. package/src/runtime/root/deployment-topology.ts +106 -0
  483. package/src/runtime/root/entry.ts +4 -3
  484. package/src/runtime/root/known-good-recovery.ts +184 -0
  485. package/src/runtime/root/local-bridge.ts +0 -1
  486. package/src/runtime/root/mcp-transport.ts +111 -18
  487. package/src/runtime/root/ownership.ts +261 -9
  488. package/src/runtime/root/package-connector-service.ts +227 -29
  489. package/src/runtime/root/package-runtime-release.ts +117 -30
  490. package/src/runtime/root/package-runtime-service.ts +24 -24
  491. package/src/runtime/root/release-execution-canary.ts +57 -12
  492. package/src/runtime/root/release-loader.ts +90 -8
  493. package/src/runtime/root/release-manifest.ts +80 -40
  494. package/src/runtime/root/release-materialize.ts +372 -106
  495. package/src/runtime/root/release-store.ts +395 -36
  496. package/src/runtime/root/runtime-lane.ts +191 -0
  497. package/src/runtime/root/runtime.ts +160 -29
  498. package/src/runtime/root/scheduled-controller-composition.ts +29 -3
  499. package/src/runtime/root/service-runner.ts +2 -2
  500. package/src/runtime/root/service.ts +126 -44
  501. package/src/runtime/root/status.ts +48 -0
  502. package/src/runtime/root/types.ts +32 -9
  503. package/src/runtime/root/workflow-supervisor-composition.ts +681 -0
  504. package/src/runtime/root/workflow-supervisor-runtime.ts +564 -0
  505. package/src/runtime/root/write-fence.ts +50 -2
  506. package/src/runtime/safe-tooling/google-credential-store.ts +67 -22
  507. package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
  508. package/src/runtime/safe-tooling/ios-development.ts +22 -8
  509. package/src/runtime/safe-tooling/job-summary.ts +1 -1
  510. package/src/runtime/safe-tooling/workspace-auth.ts +5 -2
  511. package/src/runtime/shared/atomic-text-file.ts +21 -0
  512. package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
  513. package/src/runtime/shared/json-files.ts +8 -3
  514. package/src/runtime/shared/process-environment.ts +20 -9
  515. package/src/runtime/shared/response-budget.ts +1 -3
  516. package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
  517. package/src/runtime/standalone-recovery/core.ts +3792 -417
  518. package/src/runtime/standalone-recovery/entry.ts +507 -45
  519. package/src/runtime/standalone-recovery/installer.ts +262 -148
  520. package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
  521. package/src/runtime/standalone-recovery/operation-lock.ts +12 -2
  522. package/src/runtime/standalone-recovery/performance.ts +54 -16
  523. package/src/runtime/standalone-recovery/release.ts +53 -5
  524. package/src/runtime/standalone-recovery/service-labels.ts +5 -2
  525. package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
  526. package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
  527. package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +11 -3
  528. package/src/runtime/workflow/schedules/engine.ts +166 -178
  529. package/src/runtime/workflow/schedules/pending-activation.ts +11 -4
  530. package/src/runtime/workflow/schedules/work-continuation.ts +95 -11
  531. package/src/runtime/workflows/runtime.ts +15 -19
  532. package/src/testing/test-governance.ts +5 -1
  533. package/supervisor/chatgpt-conversation.ts +23 -0
  534. package/supervisor/client.ts +218 -0
  535. package/supervisor/control-plane.ts +963 -0
  536. package/supervisor/entry.ts +15 -0
  537. package/supervisor/forge-validators.ts +147 -0
  538. package/supervisor/index.ts +5 -0
  539. package/supervisor/native-browser-adapter.ts +1151 -0
  540. package/supervisor/native-messaging/host.ts +58 -0
  541. package/supervisor/native-messaging/manifest.ts +26 -0
  542. package/supervisor/native-messaging/protocol.ts +27 -0
  543. package/supervisor/paths.ts +18 -0
  544. package/supervisor/protocol.ts +250 -0
  545. package/supervisor/server.ts +412 -0
  546. package/supervisor/store.ts +1870 -0
  547. package/supervisor/tsconfig.json +8 -0
  548. package/supervisor/types.ts +261 -0
  549. package/SKILL.md +0 -427
  550. package/adapters/chatgpt/controller-host.ts +0 -119
  551. package/adapters/mcp/controller-round-compatibility.ts +0 -184
  552. package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
  553. package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
  554. package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +0 -1
  555. package/adapters/mcp/toolset-selection.ts +0 -41
  556. package/agents/openai.yaml +0 -4
  557. package/assets/skill-hooks.json +0 -41
  558. package/assets/skill-version.json +0 -189
  559. package/assets/skills/claude-review/SKILL.md +0 -231
  560. package/assets/skills/codex-review/SKILL.md +0 -103
  561. package/assets/templates/helpers/check-skill-version.ts +0 -193
  562. package/packages/kernel/progression/api/index.ts +0 -2
  563. package/packages/kernel/progression/application/projector.ts +0 -211
  564. package/packages/kernel/progression/domain/types.ts +0 -116
  565. package/packages/kernel/progression/index.ts +0 -1
  566. package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
  567. package/packages/kernel/scheduler/domain/continuation.ts +0 -38
  568. package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
  569. package/packages/kernel/work/domain/admission-policy.ts +0 -34
  570. package/scripts/benchmark-background-check-overlap.ts +0 -228
  571. package/scripts/benchmark-computer-hotpath.ts +0 -255
  572. package/scripts/benchmark-controller-hotpath.ts +0 -212
  573. package/scripts/benchmark-controller-round2.ts +0 -191
  574. package/scripts/benchmark-ios-agent-device.ts +0 -511
  575. package/scripts/benchmark-mcp-host.sh +0 -117
  576. package/scripts/benchmark-mcp-transport.ts +0 -169
  577. package/scripts/benchmark-operational-memory-activation.ts +0 -235
  578. package/scripts/benchmark-operational-shadow.ts +0 -28
  579. package/scripts/benchmark-quality-harness.ts +0 -146
  580. package/scripts/benchmark-route-session-concurrency.ts +0 -915
  581. package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
  582. package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
  583. package/scripts/benchmark-thin-harness.ts +0 -251
  584. package/scripts/benchmark-typescript-navigation.ts +0 -186
  585. package/scripts/benchmark-work-efficiency.ts +0 -334
  586. package/scripts/build-controller-ui.ts +0 -28
  587. package/scripts/check-npm-release.sh +0 -32
  588. package/scripts/check-public-release-surface.sh +0 -19
  589. package/scripts/check-release-published.sh +0 -57
  590. package/scripts/check-release-readiness.sh +0 -37
  591. package/scripts/check-release-version.mjs +0 -74
  592. package/scripts/check-skill-version.ts +0 -5
  593. package/scripts/check-tarball-install-smoke.sh +0 -150
  594. package/scripts/ensure-codegraph.sh +0 -16
  595. package/scripts/package-source-archive.sh +0 -147
  596. package/scripts/public-release-files.txt +0 -39
  597. package/scripts/public-release.ts +0 -174
  598. package/scripts/publish-release-tarball.sh +0 -27
  599. package/scripts/route-nl-vs-ts-eval.ts +0 -679
  600. package/scripts/run-skill-hook.ts +0 -244
  601. package/scripts/stage-runtime-release.ts +0 -44
  602. package/scripts/sync-codex-installed-copies.sh +0 -182
  603. package/src/cli/commands/tools.ts +0 -167
  604. package/src/cli/controller/progress.ts +0 -656
  605. package/src/cli/controller/work-mode.ts +0 -181
  606. package/src/cli/local-bridge/console-assets.ts +0 -17
  607. package/src/cli/local-bridge/dashboard.ts +0 -17
  608. package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
  609. package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
  610. package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
  611. package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
  612. package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
  613. package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
  614. package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
  615. package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
  616. package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
  617. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
  618. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
  619. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
  620. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
  621. package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
  622. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
  623. package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
  624. package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
  625. package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
  626. package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
  627. package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
  628. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
  629. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
  630. package/src/cli/local-bridge/frontend/src/styles.css +0 -28
  631. package/src/cli/local-bridge/frontend/src/types.ts +0 -15
  632. package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
  633. package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
  634. package/src/cli/local-bridge/ui-dist/app.css +0 -1
  635. package/src/cli/local-bridge/ui-dist/app.js +0 -11228
  636. package/src/cli/mcp/access-mode.ts +0 -2
  637. package/src/cli/mcp/access-tools.ts +0 -2
  638. package/src/cli/mcp/audit.ts +0 -2
  639. package/src/cli/mcp/auth.ts +0 -2
  640. package/src/cli/mcp/instructions.ts +0 -2
  641. package/src/cli/mcp/legacy-context.ts +0 -2
  642. package/src/cli/mcp/legacy-tool-service.ts +0 -2
  643. package/src/cli/mcp/multi-repository.ts +0 -2
  644. package/src/cli/mcp/oauth.ts +0 -2
  645. package/src/cli/mcp/openai-secure-tunnel.ts +0 -2
  646. package/src/cli/mcp/paths.ts +0 -2
  647. package/src/cli/mcp/policy.ts +0 -2
  648. package/src/cli/mcp/post-finalize-work-attribution.ts +0 -2
  649. package/src/cli/mcp/proxy-env.ts +0 -2
  650. package/src/cli/mcp/readiness-projection.ts +0 -2
  651. package/src/cli/mcp/redaction.ts +0 -2
  652. package/src/cli/mcp/repo.ts +0 -2
  653. package/src/cli/mcp/repository-tools.ts +0 -2
  654. package/src/cli/mcp/server.ts +0 -2
  655. package/src/cli/mcp/setup.ts +0 -2
  656. package/src/cli/mcp/tool-capability-cache.ts +0 -2
  657. package/src/cli/mcp/tool-contract.ts +0 -2
  658. package/src/cli/mcp/tools.ts +0 -2
  659. package/src/cli/mcp/toolset-names.ts +0 -2
  660. package/src/cli/mcp/toolset-selection.ts +0 -2
  661. package/src/cli/mcp/toolset.ts +0 -2
  662. package/src/cli/mcp/transports/http.ts +0 -2
  663. package/src/cli/mcp/transports/session-registry.ts +0 -2
  664. package/src/cli/mcp/transports/stdio.ts +0 -2
  665. package/src/cli/mcp/types.ts +0 -2
  666. package/src/cli/mcp/umbrella-tools.ts +0 -2
  667. package/src/cli/tools/codegraph.ts +0 -695
  668. package/src/core/adoption/helper-wrapper-plan.ts +0 -159
  669. package/src/runtime/context/codegraph-cache-boundary.ts +0 -255
  670. package/src/runtime/context/codegraph-read-provider.ts +0 -611
  671. package/src/runtime/context/codegraph-sidecar.cjs +0 -248
  672. package/src/runtime/control-plane/codegraph-cache-retention.ts +0 -164
  673. package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
  674. package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
  675. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
  676. package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
  677. package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
  678. package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
  679. package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
  680. package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
  681. package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
  682. package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
  683. package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
  684. package/src/runtime/control-plane/routing/index.ts +0 -1
  685. package/src/runtime/control-plane/routing/route-policy.ts +0 -401
  686. package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
  687. package/src/runtime/gateway/mcp/execution-tools.ts +0 -2
  688. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +0 -2
  689. package/src/runtime/gateway/mcp/persisted-check-process.ts +0 -2
  690. package/src/runtime/gateway/mcp/process-tools.ts +0 -2
  691. package/src/runtime/gateway/mcp/router.ts +0 -2
  692. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +0 -2
  693. package/src/runtime/gateway/mcp/runtime-tools.ts +0 -2
  694. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +0 -2
  695. package/src/runtime/plugins/browser-provider-registry.ts +0 -2
@@ -5,19 +5,13 @@ import {
5
5
  searchRepositoryManyAsync,
6
6
  searchRepositoryManyCacheIdentity,
7
7
  } from "../repository/inspector";
8
- import { globMatches } from "../mcp/paths";
8
+ import { globMatches } from "../../../adapters/mcp/paths";
9
9
  import { posix } from "path";
10
- import type { McpPolicy } from "../mcp/types";
10
+ import type { McpPolicy } from "../../../adapters/mcp/types";
11
11
  import { materializeSource } from "./context/source-materializer";
12
12
  import { projectBoard } from "./issue-store";
13
13
  import { buildControllerTaskLedgerProjection } from "./task-ledger";
14
14
  import { legacyIssueAuthorityRetired } from "./legacy-issue-cutover";
15
- import {
16
- queryCodeGraphReadProvider,
17
- queryCodeGraphReadProviderAsync,
18
- type CodeGraphNodeSummary,
19
- type CodeGraphReadProviderResponse,
20
- } from "../../runtime/context/codegraph-read-provider";
21
15
  import {
22
16
  CONTEXT_PACK_SCHEMA_VERSION,
23
17
  CONTROLLER_CONTEXT_IMPACT_DOMAINS,
@@ -38,7 +32,7 @@ import {
38
32
  clamp,
39
33
  cleanList,
40
34
  gitStatusChangedPaths,
41
- isCodeShapedTerm,
35
+ explicitCodeQueries,
42
36
  pathNoisePenalty,
43
37
  structuralIntentQuery,
44
38
  textTokens,
@@ -46,6 +40,11 @@ import {
46
40
  import { issueTaskFocus, ledgerTask } from './context/focus';
47
41
  import { addReason, coveredByGlob, expandKnownPath, looksLikeGlob, readableFile } from './context/known-paths';
48
42
  import { structuralResult } from './context/structural';
43
+ import {
44
+ unavailableStructuralProvider,
45
+ unavailableStructuralProviderAsync,
46
+ type StructuralReadProviderResponse,
47
+ } from './context/structural-provider';
49
48
  import { buildRepositoryInstructionContext } from './context/instruction-context';
50
49
  import { resolveRepositoryGovernance } from './context/rule-resolution';
51
50
  import { controllerCheckSelection, listControllerChecks } from './check-runner';
@@ -100,7 +99,7 @@ function resolveSourceReference(repoRoot: string, policy: McpPolicy, sourcePath:
100
99
  function contextPathPriority(path: string, reasons: string[]): number {
101
100
  const testBonus = /(^|\/)(__tests__|tests?|spec)(\/|$)|\.(test|spec)\.[^.]+$/i.test(path) ? 6 : 0;
102
101
  const sourceBonus = reasons.some((reason) => reason.startsWith('source-reference:')) ? 5 : 0;
103
- const structuralBonus = reasons.some((reason) => reason.startsWith('codegraph:')) ? 3 : 0;
102
+ const structuralBonus = reasons.some((reason) => reason.startsWith('structural:')) ? 3 : 0;
104
103
  return testBonus + sourceBonus + structuralBonus;
105
104
  }
106
105
 
@@ -148,7 +147,8 @@ export function buildControllerContextPack(
148
147
  focus.task?.objective,
149
148
  ].filter((entry): entry is string => typeof entry === "string" && entry.trim().length > 0);
150
149
  const goal = goalParts.join("\n").trim();
151
- const terms = cleanList([...(options.searchTerms ?? []), ...textTokens(goal)]).slice(0, 14);
150
+ const requiredSearchQueries = explicitCodeQueries(options.searchTerms);
151
+ const terms = cleanList([...requiredSearchQueries, ...(options.searchTerms ?? []), ...(options.searchTerms ?? []).flatMap(textTokens), ...textTokens(goal)]).slice(0, 14);
152
152
  const impactDomains = cleanList(options.impactDomains)
153
153
  .filter((domain): domain is ControllerContextImpactDomain => CONTROLLER_CONTEXT_IMPACT_DOMAINS.includes(domain as ControllerContextImpactDomain))
154
154
  .slice(0, 6);
@@ -168,9 +168,6 @@ export function buildControllerContextPack(
168
168
  ]).slice(0, 32);
169
169
  // Preserve the guarantee for explicit code symbols while broad natural-
170
170
  // language terms remain eligible for early discovery completion.
171
- const requiredSearchQueries = cleanList(options.searchTerms)
172
- .filter(isCodeShapedTerm)
173
- .slice(0, 2);
174
171
  const impactCandidatePaths = new Map<ControllerContextImpactDomain, Set<string>>(impactDomains.map((domain) => [domain, new Set<string>()]));
175
172
  const candidates = new Map<string, { reasons: Set<string>; lines: Set<number> }>();
176
173
  const deniedPaths: Array<{ path: string; reason: string }> = [];
@@ -192,7 +189,7 @@ export function buildControllerContextPack(
192
189
  const baselineRevisionMatches = indexSource === "current_checkout" || gitSnapshot(structuralIndexRoot).head === git.head;
193
190
  const graphImpactFiles = new Set<string>();
194
191
  let structuralContext: ControllerContextPackProjection["structuralContext"] = {
195
- provider: "codegraph",
192
+ provider: "none",
196
193
  requestedMode: structuralMode,
197
194
  status: "disabled",
198
195
  requiredSatisfied: structuralMode !== "required",
@@ -204,17 +201,17 @@ export function buildControllerContextPack(
204
201
  truncated: false,
205
202
  };
206
203
  const repositorySessionCache = getRepositoryReadSessionCache(repoRoot, options.session);
207
- const queryCodeGraph = dependencies.queryCodeGraph ?? queryCodeGraphReadProvider;
208
- const queryStructural = (queryRoot: string, request: Parameters<typeof queryCodeGraphReadProvider>[1]): CodeGraphReadProviderResponse => {
204
+ const structuralProvider = dependencies.queryStructural ?? unavailableStructuralProvider;
205
+ const queryStructural = (queryRoot: string, request: Parameters<typeof unavailableStructuralProvider>[1]): StructuralReadProviderResponse => {
209
206
  const key = JSON.stringify({ queryRoot, request });
210
207
  const cached = repositorySessionCache?.getStructural(key);
211
208
  if (cached && typeof cached === "object") {
212
209
  structuralCacheHits += 1;
213
- return cached as CodeGraphReadProviderResponse;
210
+ return cached as StructuralReadProviderResponse;
214
211
  }
215
212
  structuralCacheMisses += 1;
216
- const response = queryCodeGraph(queryRoot, request);
217
- if (response.error?.code !== CODEGRAPH_PREFETCH_DEFERRED_CODE) {
213
+ const response = structuralProvider(queryRoot, request);
214
+ if (response.error?.code !== STRUCTURAL_PREFETCH_DEFERRED_CODE) {
218
215
  repositorySessionCache?.putStructural(key, response);
219
216
  }
220
217
  return response;
@@ -262,7 +259,7 @@ export function buildControllerContextPack(
262
259
  ? "stale"
263
260
  : structural.status;
264
261
  structuralContext = {
265
- provider: "codegraph",
262
+ provider: "none",
266
263
  requestedMode: structuralMode,
267
264
  status: structuralStatus,
268
265
  requiredSatisfied: structuralMode !== "required" || structuralEvidenceCurrent,
@@ -304,12 +301,12 @@ export function buildControllerContextPack(
304
301
  // must never steer which raw source GPT sees first.
305
302
  if (structuralEvidenceCurrent) {
306
303
  for (const node of graph.nodes.slice(0, maxFiles * 6)) {
307
- addStructuralPath(node.filePath, `codegraph:context:${node.kind}:${node.name}`, node.startLine);
304
+ addStructuralPath(node.filePath, `structural:context:${node.kind}:${node.name}`, node.startLine);
308
305
  }
309
306
  for (const node of graph.entryPoints) {
310
- addStructuralPath(node.filePath, `codegraph:entry:${node.name}`, node.startLine);
307
+ addStructuralPath(node.filePath, `structural:entry:${node.name}`, node.startLine);
311
308
  }
312
- for (const path of graph.relatedFiles.slice(0, maxFiles * 6)) addStructuralPath(path, "codegraph:related");
309
+ for (const path of graph.relatedFiles.slice(0, maxFiles * 6)) addStructuralPath(path, "structural:related");
313
310
  // Context search identifies the structural entry points. For a bounded
314
311
  // number of those files, enrich the same Context Plane call with direct
315
312
  // file dependencies/dependents. This is impact evidence, not a second
@@ -326,18 +323,18 @@ export function buildControllerContextPack(
326
323
  : [];
327
324
  for (const path of dependencies.slice(0, 40)) {
328
325
  graphImpactFiles.add(path);
329
- addStructuralPath(path, `codegraph:dependency:${filePath}`);
326
+ addStructuralPath(path, `structural:dependency:${filePath}`);
330
327
  }
331
328
  for (const path of dependents.slice(0, 40)) {
332
329
  graphImpactFiles.add(path);
333
- addStructuralPath(path, `codegraph:dependent:${filePath}`);
330
+ addStructuralPath(path, `structural:dependent:${filePath}`);
334
331
  }
335
332
  }
336
333
  }
337
- for (const path of metadata?.changedFiles.removed ?? []) omitted.push({ path, reason: "codegraph reports file removed since index" });
334
+ for (const path of metadata?.changedFiles.removed ?? []) omitted.push({ path, reason: "structural provider reports file removed since index" });
338
335
  // A repository-baseline graph deliberately runs against another checkout.
339
336
  // Current worktree changes are still authoritative raw-source evidence,
340
- // but they come from Git rather than stale CodeGraph metadata.
337
+ // but they come from Git rather than stale structural metadata.
341
338
  if (indexSource === "repository_baseline") {
342
339
  for (const path of gitStatusChangedPaths(git.status)) addStructuralPath(path, "worktree:changed-file", 1);
343
340
  }
@@ -349,16 +346,17 @@ export function buildControllerContextPack(
349
346
  let exactKnownFileScope = explicitKnownPaths.length > 0;
350
347
  for (const path of explicitKnownPaths) {
351
348
  const expanded = expandKnownPath(repoRoot, policy, path, Math.max(maxFiles * 4, 40));
352
- for (const file of expanded.files) {
349
+ const allowedFiles = expanded.files.filter((file) => !excludeGlobs.some((glob) => globMatches(glob, file)));
350
+ for (const file of allowedFiles) {
353
351
  addReason(candidates, file, expanded.directory ? `explicit-known-directory:${expanded.directory}` : "explicit-known-path");
354
352
  }
355
- if (!expanded.directory && expanded.files.length === 1 && expanded.denied.length === 0 && !expanded.truncated) {
356
- exactKnownFiles.push(expanded.files[0]!);
353
+ if (!expanded.directory && allowedFiles.length === 1 && expanded.denied.length === 0 && !expanded.truncated) {
354
+ exactKnownFiles.push(allowedFiles[0]!);
357
355
  } else {
358
356
  exactKnownFileScope = false;
359
357
  }
360
358
  deniedPaths.push(...expanded.denied);
361
- scannedFiles += expanded.files.length;
359
+ scannedFiles += allowedFiles.length;
362
360
  searchTruncated = searchTruncated || expanded.truncated;
363
361
  }
364
362
  // Exact caller-selected files own a reserved file slot. The inferred-file
@@ -381,7 +379,7 @@ export function buildControllerContextPack(
381
379
  // though inventory itself was cached.
382
380
  const lexicalStartedAt = performance.now();
383
381
  const requiredStructuralFallbackNeedsLexical = structuralMode === "required" && !structuralContext.requiredSatisfied;
384
- if (searchQueries.length > 0 && (requiredStructuralFallbackNeedsLexical || candidates.size < maxFiles * 3)) {
382
+ if (searchQueries.length > 0 && (requiredSearchQueries.length > 0 || requiredStructuralFallbackNeedsLexical || candidates.size < maxFiles * 3)) {
385
383
  const search = searchRepositoryMany(repoRoot, policy, {
386
384
  queries: searchQueries,
387
385
  files: scopedExactKnownFileSearch ? exactKnownFiles : undefined,
@@ -407,6 +405,14 @@ export function buildControllerContextPack(
407
405
  searchTruncated = searchTruncated || search.truncated;
408
406
  for (const hit of search.results) {
409
407
  if (!coveredByGlob(hit.path, searchIncludeGlobs) || excludeGlobs.some((glob) => globMatches(glob, hit.path))) continue;
408
+ if (candidates.size >= maxFiles * 3 && !candidates.has(hit.path) && !requiredSearchQueries.includes(hit.query)) continue;
409
+ if (requiredSearchQueries.includes(hit.query)) {
410
+ const source = hit.text.trimStart();
411
+ const declared = /^(?:(?:export|declare|default|async)\s+)*(?:function|class|interface|type|const|let|enum)\s+([\w$]+)/.exec(source)?.[1];
412
+ if (declared?.toLowerCase() === hit.query.toLowerCase()) {
413
+ addReason(candidates, hit.path, `${source.startsWith('export ') ? 'exported' : 'local'}-definition:${hit.query}`, hit.line);
414
+ }
415
+ }
410
416
  if (terms.includes(hit.query)) {
411
417
  addReason(candidates, hit.path, `search:${hit.query}`, hit.line);
412
418
  } else {
@@ -417,12 +423,14 @@ export function buildControllerContextPack(
417
423
  addReason(candidates, hit.path, `impact:${domain}:${hit.query}`, hit.line);
418
424
  }
419
425
  }
420
- if (candidates.size >= maxFiles * 3) break;
421
426
  }
422
427
  }
423
428
 
424
429
  timingsMs.lexical = Math.round((performance.now() - lexicalStartedAt) * 100) / 100;
425
430
  const primarySearchReason = terms.length > 0 ? `search:${terms[0]}` : undefined;
431
+ const definitionPriority = (reasons: readonly string[]): number =>
432
+ reasons.some((reason) => reason.startsWith('exported-definition:')) ? 2
433
+ : reasons.some((reason) => reason.startsWith('local-definition:')) ? 1 : 0;
426
434
  const rankedCandidates = Array.from(candidates.entries())
427
435
  .map(([path, entry]) => ({ path, reasons: Array.from(entry.reasons), lines: Array.from(entry.lines) }))
428
436
  .sort((left, right) => {
@@ -433,6 +441,8 @@ export function buildControllerContextPack(
433
441
  ? 2
434
442
  : right.reasons.some((reason) => reason.startsWith("explicit-known-directory:")) ? 1 : 0;
435
443
  if (leftExplicit !== rightExplicit) return rightExplicit - leftExplicit;
444
+ const definitionDelta = definitionPriority(right.reasons) - definitionPriority(left.reasons);
445
+ if (definitionDelta !== 0) return definitionDelta;
436
446
  const leftPrimary = primarySearchReason && left.reasons.includes(primarySearchReason) ? 1 : 0;
437
447
  const rightPrimary = primarySearchReason && right.reasons.includes(primarySearchReason) ? 1 : 0;
438
448
  if (leftPrimary !== rightPrimary) return rightPrimary - leftPrimary;
@@ -451,15 +461,21 @@ export function buildControllerContextPack(
451
461
  // implementation mode a permanent evidence-closure blind spot.
452
462
  const multiWaveEligible = retrievalMode !== "implementation"
453
463
  || structuralMode !== "off"
454
- || impactDomains.length > 0
455
- || explicitKnownPaths.length > 1;
464
+ || impactDomains.length > 0;
456
465
  timingsMs.expansionBudgetMax = multiWaveEligible ? Math.min(6, Math.max(2, Math.ceil(maxFiles / 2))) : 0;
457
- const rankedExactKnownCount = rankedCandidates.filter(isExactKnownCandidate).length;
466
+ // Reserve one best file per explicit symbol before broad hits can consume
467
+ // the result window. Caller-selected exact paths retain first priority.
468
+ const prioritizedCandidates = Array.from(new Map([
469
+ ...rankedCandidates.filter(isExactKnownCandidate),
470
+ ...requiredSearchQueries.flatMap((query) => rankedCandidates.filter((entry) => entry.reasons.includes(`search:${query}`)).slice(0, 1)),
471
+ ...rankedCandidates,
472
+ ].map((entry) => [entry.path, entry] as const)).values());
473
+ const rankedExactKnownCount = prioritizedCandidates.filter(isExactKnownCandidate).length;
458
474
  const initialCandidateLimit = multiWaveEligible
459
475
  ? Math.min(maxFiles, Math.max(rankedExactKnownCount, Math.max(1, maxFiles - timingsMs.expansionBudgetMax)))
460
476
  : maxFiles;
461
- const selected = rankedCandidates.slice(0, initialCandidateLimit);
462
- const deferredSelected = rankedCandidates.slice(initialCandidateLimit, maxFiles);
477
+ const selected = prioritizedCandidates.slice(0, initialCandidateLimit);
478
+ const deferredSelected = prioritizedCandidates.slice(initialCandidateLimit, maxFiles);
463
479
  const selectedExactKnownCount = selected.filter(isExactKnownCandidate).length;
464
480
  // Reserve at least one materialization for every selected exact known file.
465
481
  // This may raise a caller's inferred snippet budget, but never beyond the
@@ -478,7 +494,7 @@ export function buildControllerContextPack(
478
494
  status: selectedFiles.length > 0 ? "selected" as const : matchedFiles.length > 0 ? "matched_not_selected" as const : "no_evidence" as const,
479
495
  };
480
496
  });
481
- for (const entry of rankedCandidates.slice(maxFiles)) omitted.push({ path: entry.path, reason: "max_files" });
497
+ for (const entry of prioritizedCandidates.slice(maxFiles)) omitted.push({ path: entry.path, reason: "max_files" });
482
498
 
483
499
  let remainingSnippets = maxSnippets;
484
500
  const files: ControllerContextPackFile[] = [];
@@ -499,9 +515,12 @@ export function buildControllerContextPack(
499
515
  const waveOnePerFileCap = multiWaveEligible
500
516
  ? Math.max(1, Math.ceil(maxSnippets / Math.max(1, initialCandidateLimit + timingsMs.expansionBudgetMax)))
501
517
  : remainingSnippets;
518
+ // A caller-increased max_snippets budget must not let the first broad
519
+ // candidate consume every snippet and erase other selected source files.
520
+ const inferredFairShare = Math.max(1, Math.ceil(remainingSnippets / (selected.length - selectedIndex)));
502
521
  const fileSnippetBudget = exactKnown
503
522
  ? Math.max(1, remainingSnippets - exactKnownAfter)
504
- : Math.min(remainingSnippets, waveOnePerFileCap);
523
+ : Math.min(remainingSnippets, waveOnePerFileCap, inferredFairShare);
505
524
  let snippets: ControllerContextPackSnippet[] = [];
506
525
  try {
507
526
  snippets = materializeSource({
@@ -510,8 +529,11 @@ export function buildControllerContextPack(
510
529
  path: entry.path,
511
530
  hitLines: entry.lines.length > 0 ? entry.lines : [1],
512
531
  reasons: entry.reasons,
513
- maxSnippets: Math.min(fileSnippetBudget, remainingSnippets),
514
- maxCharsPerSnippet,
532
+ // Discovery should cover multiple entry points rather than dump one huge file.
533
+ // Explicit known files retain their full evidence budget; only inferred
534
+ // candidates receive the cheap two-snippet discovery default.
535
+ maxSnippets: Math.min(options.maxSnippets === undefined && !exactKnown ? 2 : fileSnippetBudget, remainingSnippets),
536
+ maxCharsPerSnippet: exactKnown && options.maxCharsPerSnippet === undefined ? 8000 : maxCharsPerSnippet,
515
537
  session: options.session,
516
538
  });
517
539
  for (const snippet of snippets) {
@@ -535,7 +557,7 @@ export function buildControllerContextPack(
535
557
 
536
558
  // Evidence-closure eligible requests perform bounded internal waves after
537
559
  // Wave 1 raw source materialization. Each later wave derives concrete paths
538
- // from the source that was just read plus current CodeGraph adjacency, then
560
+ // from the source that was just read plus current structural adjacency, then
539
561
  // materializes those paths in the same context request.
540
562
  const materializedPathSet = new Set(files.map((file) => file.path));
541
563
  let frontier = files.slice();
@@ -573,11 +595,11 @@ export function buildControllerContextPack(
573
595
  : [];
574
596
  for (const path of dependencies.slice(0, 40)) {
575
597
  graphImpactFiles.add(path);
576
- addExpansionCandidate(path, `codegraph:dependency:${file.path}`);
598
+ addExpansionCandidate(path, `structural:dependency:${file.path}`);
577
599
  }
578
600
  for (const path of dependents.slice(0, 40)) {
579
601
  graphImpactFiles.add(path);
580
- addExpansionCandidate(path, `codegraph:dependent:${file.path}`);
602
+ addExpansionCandidate(path, `structural:dependent:${file.path}`);
581
603
  }
582
604
  }
583
605
 
@@ -753,7 +775,7 @@ export function buildControllerContextPack(
753
775
  architectureContracts,
754
776
  coverageGaps: Array.from(new Set(coverageGaps)).slice(0, 40),
755
777
  relationSources: [
756
- ...(structuralMode !== "off" ? ["codegraph" as const] : []),
778
+ ...(structuralMode !== "off" ? ["structural" as const] : []),
757
779
  ...(files.length > 0 ? ["lexical" as const] : []),
758
780
  ...(taskChecks.length > 0 ? ["forge_checks" as const] : []),
759
781
  ],
@@ -812,16 +834,19 @@ export function buildControllerContextPack(
812
834
  .map((file) => file.path);
813
835
  const materializedExactKnownSet = new Set(materializedExactKnownPaths);
814
836
  const omittedCandidateCount = rankedCandidates.filter((entry) => !inspectedSet.has(entry.path)).length;
815
- const exactKnownFilesFullyMaterialized = scopedExactKnownFileSearch
837
+ const exactKnownFilesLosslesslyMaterialized = scopedExactKnownFileSearch
816
838
  && exactKnownFiles.length > 0
817
839
  && exactKnownFiles.every((path) => files.some((file) => file.path === path
818
- && file.snippets.some((snippet) => snippet.materialization === "complete_file" && !snippet.truncated)));
840
+ && file.snippets.length > 0
841
+ && file.snippets.every((snippet) => !snippet.truncated)));
819
842
  // `search.truncated` records that lexical hit collection reached a result cap.
820
843
  // That is not automatically an evidence gap. For an exact-known implementation
821
- // scope, if every requested file is fully materialized and there are no omitted
822
- // or denied candidates, the cap only discarded redundant hit lines.
844
+ // scope, bounded symbol/window materialization is still authoritative raw-source
845
+ // evidence as long as every requested file was materialized without snippet loss
846
+ // and no candidate was omitted or denied. Actual raw snippet truncation remains a
847
+ // separate readiness failure through `rawSnippetTruncated`.
823
848
  const evidenceSearchTruncated = searchTruncated
824
- && !(exactKnownFilesFullyMaterialized
849
+ && !(exactKnownFilesLosslesslyMaterialized
825
850
  && omittedCandidateCount === 0
826
851
  && policyDeniedFiles === 0
827
852
  && deniedPaths.length === 0
@@ -983,7 +1008,7 @@ export function buildControllerContextPack(
983
1008
  retrievalMode === "implementation"
984
1009
  ? "The pack contains policy-approved current raw source with file SHA identities, but returned snippets are bounded evidence rather than proof of semantic completeness. After reading this evidence, derive new exact paths, symbols, tests, or relationships from the source itself. A guessed lexical term with no result is not by itself a reason to keep scanning or repeat the same broad query."
985
1010
  : `Investigation mode performed ${timingsMs.waveCount} bounded evidence wave(s) inside this request; expansion budget ${timingsMs.expansionBudgetUsed}/${timingsMs.expansionBudgetMax}.`,
986
- "Search/CodeGraph ranking is discovery evidence, not a business-semantics authority. readiness and impactContext make the bounded evidence surface and unresolved gaps explicit; ChatGPT still decides semantic sufficiency.",
1011
+ "Search/structural ranking is discovery evidence, not a business-semantics authority. readiness and impactContext make the bounded evidence surface and unresolved gaps explicit; ChatGPT still decides semantic sufficiency.",
987
1012
  instructionContext.contracts.length > 0
988
1013
  ? `Applicable repository guidance was resolved hierarchically for selected source paths: ${instructionContext.contracts.map((entry) => entry.path).join(", ")}. These AGENTS.md/CLAUDE.md files are guidance-only evidence and do not define semantic scope.`
989
1014
  : "No applicable AGENTS.md/CLAUDE.md guidance file was found for the selected source paths.",
@@ -991,15 +1016,15 @@ export function buildControllerContextPack(
991
1016
  governanceContext.status === 'none'
992
1017
  ? "No repository governance rule registry is present; existing guidance and explicit Task checks behave as before."
993
1018
  : `Repository governance resolved ${governanceContext.activeRules.length} active rule(s), ${governanceContext.suppressedRules.length} suppressed rule(s), and ${governanceContext.recommendedCheckIds.length} recommended check(s) through bounded local matching. Recommendations are evidence only and never execute checks or create Work by themselves.`,
994
- "CodeGraph structural evidence is discovery evidence. Raw source access still passes through Forge repository policy and current-file reads.",
995
- structuralContext.status === "stale" ? "CodeGraph reports stale structural evidence. Treat graph relationships as hints and prefer the returned current raw source for changed files." : structuralContext.status === "unavailable" || structuralContext.status === "degraded" ? "Structural context was unavailable or degraded; bounded text search remains the fallback." : structuralContext.status === "ready" ? "CodeGraph structural context was queried read-only with index sync disabled." : "Structural context was not requested.",
1019
+ "Structural evidence is discovery evidence. Raw source access still passes through Forge repository policy and current-file reads.",
1020
+ structuralContext.status === "stale" ? "Structural provider reports stale evidence. Treat relationships as hints and prefer the returned current raw source for changed files." : structuralContext.status === "unavailable" || structuralContext.status === "degraded" ? "Structural context was unavailable or degraded; bounded text search remains the fallback." : structuralContext.status === "ready" ? "Structural context was queried read-only." : "Structural context was not requested.",
996
1021
  "Run focused validation after a coherent edit batch; expensive full-suite checks belong at candidate/release boundaries unless debugging specifically needs them earlier.",
997
1022
  taskChecks.length > 0 ? `Task checks advertised by the board: ${taskChecks.join(", ")}.` : "No task-specific checks were found in the compact ledger.",
998
1023
  ],
999
1024
  },
1000
1025
  next: [
1001
1026
  ...(structuralMode === "required" && !structuralContext.requiredSatisfied
1002
- ? ["Structural context was required but is not current/ready. Refresh CodeGraph explicitly or continue only with the degraded-plan warning visible."]
1027
+ ? ["Structural context was required but is not current/ready. Continue only with the degraded-plan warning visible or use current raw source / semantic navigation instead."]
1003
1028
  : []),
1004
1029
  files.length > 0
1005
1030
  ? retrievalMode === "implementation"
@@ -1014,26 +1039,26 @@ export function buildControllerContextPack(
1014
1039
 
1015
1040
  /**
1016
1041
  * Broad first-call fan-in for the canonical rh_context path. Lexical retrieval
1017
- * remains required evidence. Auto CodeGraph is opportunistic enrichment: it may
1042
+ * remains required evidence. Auto structural retrieval is opportunistic enrichment: it may
1018
1043
  * finish inside the first-call latency budget, otherwise the request returns
1019
1044
  * bounded lexical/raw evidence while the same source-bound structural request
1020
1045
  * continues warming the session cache. Required structural mode still waits.
1021
1046
  */
1022
1047
  export const AUTO_STRUCTURAL_PREFETCH_BUDGET_MS = 100;
1023
1048
  export const AUTO_STRUCTURAL_PREFETCH_TIMEOUT_MS = 1_000;
1024
- const CODEGRAPH_PREFETCH_DEFERRED_CODE = 'CODEGRAPH_PREFETCH_DEFERRED';
1025
- const structuralPrefetchInflight = new Map<string, Promise<CodeGraphReadProviderResponse>>();
1049
+ const STRUCTURAL_PREFETCH_DEFERRED_CODE = 'STRUCTURAL_PREFETCH_DEFERRED';
1050
+ const structuralPrefetchInflight = new Map<string, Promise<StructuralReadProviderResponse>>();
1026
1051
 
1027
- function codeGraphPrefetchDeferredResponse(elapsedMs: number): CodeGraphReadProviderResponse {
1052
+ function structuralPrefetchDeferredResponse(elapsedMs: number): StructuralReadProviderResponse {
1028
1053
  return {
1029
1054
  schemaVersion: 1,
1030
- provider: 'codegraph',
1055
+ provider: 'none',
1031
1056
  operation: 'context',
1032
1057
  ok: false,
1033
1058
  status: 'degraded',
1034
1059
  error: {
1035
- code: CODEGRAPH_PREFETCH_DEFERRED_CODE,
1036
- message: `Optional CodeGraph enrichment exceeded the ${AUTO_STRUCTURAL_PREFETCH_BUDGET_MS}ms first-call budget and continues warming the source-bound session cache.`,
1060
+ code: STRUCTURAL_PREFETCH_DEFERRED_CODE,
1061
+ message: `Optional structural enrichment exceeded the ${AUTO_STRUCTURAL_PREFETCH_BUDGET_MS}ms first-call budget and continues warming the source-bound session cache.`,
1037
1062
  },
1038
1063
  timingsMs: { total: Math.round(elapsedMs * 100) / 100 },
1039
1064
  };
@@ -1059,10 +1084,10 @@ function cacheDeferredStructuralResult(
1059
1084
  sessionCache: ReturnType<typeof getRepositoryReadSessionCache>,
1060
1085
  structuralCacheKey: string,
1061
1086
  sourceIdentity: string | undefined,
1062
- response: CodeGraphReadProviderResponse,
1087
+ response: StructuralReadProviderResponse,
1063
1088
  ): void {
1064
1089
  if (!sessionCache || !sourceIdentity) return;
1065
- if (response.error?.code === 'CODEGRAPH_TIMEOUT' || response.error?.code === CODEGRAPH_PREFETCH_DEFERRED_CODE) return;
1090
+ if (response.error?.code === 'STRUCTURAL_TIMEOUT' || response.error?.code === STRUCTURAL_PREFETCH_DEFERRED_CODE) return;
1066
1091
  if (JSON.stringify(sessionCache.currentIdentity()) !== sourceIdentity) return;
1067
1092
  sessionCache.putStructural(structuralCacheKey, response);
1068
1093
  }
@@ -1074,7 +1099,7 @@ export async function buildControllerContextPackAsync(
1074
1099
  dependencies: ControllerContextPackDependencies = {},
1075
1100
  ): Promise<ControllerContextPackProjection> {
1076
1101
  const structuralMode = options.structuralContext ?? 'off';
1077
- if ((dependencies.queryCodeGraph && !dependencies.queryCodeGraphAsync) || !options.session || options.issueId || options.taskId) {
1102
+ if ((dependencies.queryStructural && !dependencies.queryStructuralAsync) || !options.session || options.issueId || options.taskId) {
1078
1103
  return buildControllerContextPack(repoRoot, policy, options, dependencies);
1079
1104
  }
1080
1105
  const prefetchStartedAt = performance.now();
@@ -1085,7 +1110,8 @@ export async function buildControllerContextPackAsync(
1085
1110
  const explicitKnownPaths = knownPaths.filter((path) => !looksLikeGlob(path));
1086
1111
  const includeGlobs = cleanList([...(options.includeGlobs ?? []), ...knownGlobs]);
1087
1112
  const excludeGlobs = cleanList([...DEFAULT_SEARCH_EXCLUDE_GLOBS, ...(options.excludeGlobs ?? [])]);
1088
- const terms = cleanList([...(options.searchTerms ?? []), ...textTokens(options.description ?? '')]).slice(0, 14);
1113
+ const requiredSearchQueries = explicitCodeQueries(options.searchTerms);
1114
+ const terms = cleanList([...requiredSearchQueries, ...(options.searchTerms ?? []), ...(options.searchTerms ?? []).flatMap(textTokens), ...textTokens(options.description ?? '')]).slice(0, 14);
1089
1115
  const impactDomains = cleanList(options.impactDomains)
1090
1116
  .filter((domain): domain is ControllerContextImpactDomain => CONTROLLER_CONTEXT_IMPACT_DOMAINS.includes(domain as ControllerContextImpactDomain))
1091
1117
  .slice(0, 6);
@@ -1093,8 +1119,9 @@ export async function buildControllerContextPackAsync(
1093
1119
  let exactKnownFileScope = explicitKnownPaths.length > 0;
1094
1120
  for (const path of explicitKnownPaths) {
1095
1121
  const expanded = expandKnownPath(repoRoot, policy, path, Math.max(requestedMaxFiles * 4, 40));
1096
- if (!expanded.directory && expanded.files.length === 1 && expanded.denied.length === 0 && !expanded.truncated) {
1097
- exactKnownFiles.push(expanded.files[0]!);
1122
+ const allowedFiles = expanded.files.filter((file) => !excludeGlobs.some((glob) => globMatches(glob, file)));
1123
+ if (!expanded.directory && allowedFiles.length === 1 && expanded.denied.length === 0 && !expanded.truncated) {
1124
+ exactKnownFiles.push(allowedFiles[0]!);
1098
1125
  } else {
1099
1126
  exactKnownFileScope = false;
1100
1127
  }
@@ -1110,9 +1137,6 @@ export async function buildControllerContextPackAsync(
1110
1137
  ...impactDomains.flatMap((domain) => IMPACT_DOMAIN_TERMS[domain]),
1111
1138
  ...terms.slice(1),
1112
1139
  ]).slice(0, 32);
1113
- const requiredSearchQueries = cleanList(options.searchTerms)
1114
- .filter(isCodeShapedTerm)
1115
- .slice(0, 2);
1116
1140
  const structuralQuery = structuralMode === 'off'
1117
1141
  ? ''
1118
1142
  : structuralIntentQuery(options.description ?? '', terms, impactDomains);
@@ -1129,7 +1153,7 @@ export async function buildControllerContextPackAsync(
1129
1153
  const sessionCache = getRepositoryReadSessionCache(repoRoot, options.session);
1130
1154
  const structuralSourceIdentity = sessionCache ? JSON.stringify(sessionCache.currentIdentity()) : undefined;
1131
1155
  const cachedStructural = structuralQuery
1132
- ? sessionCache?.peekStructural(structuralCacheKey) as CodeGraphReadProviderResponse | undefined
1156
+ ? sessionCache?.peekStructural(structuralCacheKey) as StructuralReadProviderResponse | undefined
1133
1157
  : undefined;
1134
1158
  const lexicalOptions = searchQueries.length > 0
1135
1159
  ? (() => {
@@ -1166,18 +1190,18 @@ export async function buildControllerContextPackAsync(
1166
1190
  return pack;
1167
1191
  }
1168
1192
 
1169
- const noStructuralResponse: CodeGraphReadProviderResponse = {
1193
+ const noStructuralResponse: StructuralReadProviderResponse = {
1170
1194
  schemaVersion: 1,
1171
- provider: 'codegraph',
1195
+ provider: 'none',
1172
1196
  operation: 'context',
1173
1197
  ok: false,
1174
1198
  status: 'degraded',
1175
- error: { code: 'CODEGRAPH_QUERY_REQUIRED', message: 'No context query was provided.' },
1199
+ error: { code: 'STRUCTURAL_QUERY_REQUIRED', message: 'No context query was provided.' },
1176
1200
  timingsMs: { total: 0 },
1177
1201
  };
1178
1202
  let structuralSettled = Boolean(cachedStructural) || !structuralQuery;
1179
- let structuralSettledValue: CodeGraphReadProviderResponse | undefined = cachedStructural || (!structuralQuery ? noStructuralResponse : undefined);
1180
- const queryCodeGraphAsync = dependencies.queryCodeGraphAsync ?? queryCodeGraphReadProviderAsync;
1203
+ let structuralSettledValue: StructuralReadProviderResponse | undefined = cachedStructural || (!structuralQuery ? noStructuralResponse : undefined);
1204
+ const queryStructuralAsync = dependencies.queryStructuralAsync ?? unavailableStructuralProviderAsync;
1181
1205
  const structuralInflightKey = structuralQuery && structuralSourceIdentity
1182
1206
  ? JSON.stringify({ structuralCacheKey, sourceIdentity: structuralSourceIdentity, structuralMode })
1183
1207
  : undefined;
@@ -1186,10 +1210,9 @@ export async function buildControllerContextPackAsync(
1186
1210
  const launchedStructuralPromise = cachedStructural
1187
1211
  ? Promise.resolve(cachedStructural)
1188
1212
  : structuralQuery
1189
- ? existingStructuralInflight ?? queryCodeGraphAsync(
1213
+ ? existingStructuralInflight ?? queryStructuralAsync(
1190
1214
  structuralIndexRoot,
1191
1215
  structuralRequest,
1192
- structuralMode === 'auto' ? { timeoutMs: AUTO_STRUCTURAL_PREFETCH_TIMEOUT_MS } : {},
1193
1216
  )
1194
1217
  : Promise.resolve(noStructuralResponse);
1195
1218
  if (structuralInflightKey && structuralQuery && !cachedStructural && !existingStructuralInflight) {
@@ -1240,16 +1263,16 @@ export async function buildControllerContextPackAsync(
1240
1263
  prefetched = outcome.value;
1241
1264
  } else {
1242
1265
  structuralPrefetchDeferred = true;
1243
- prefetched = codeGraphPrefetchDeferredResponse(performance.now() - prefetchStartedAt);
1266
+ prefetched = structuralPrefetchDeferredResponse(performance.now() - prefetchStartedAt);
1244
1267
  }
1245
1268
  }
1246
1269
  }
1247
1270
 
1248
- const fallbackQueryCodeGraph = dependencies.queryCodeGraph ?? queryCodeGraphReadProvider;
1271
+ const fallbackQueryStructural = dependencies.queryStructural ?? unavailableStructuralProvider;
1249
1272
  const pack = buildControllerContextPack(repoRoot, policy, options, {
1250
- queryCodeGraph: (queryRoot, request) => request.operation === 'context' && queryRoot === structuralIndexRoot
1273
+ queryStructural: (queryRoot, request) => request.operation === 'context' && queryRoot === structuralIndexRoot
1251
1274
  ? prefetched
1252
- : fallbackQueryCodeGraph(queryRoot, request),
1275
+ : fallbackQueryStructural(queryRoot, request),
1253
1276
  });
1254
1277
  pack.timingsMs.parallelFirstPass = true;
1255
1278
  pack.timingsMs.parallelPrefetch = Math.round((performance.now() - prefetchStartedAt) * 100) / 100;
@@ -3,7 +3,7 @@ import { existsSync, readFileSync } from 'fs';
3
3
  import { join } from 'path';
4
4
  import type { AgentJobMeta } from '../agent-jobs/types';
5
5
  import { runControllerCheck } from './check-runner';
6
- import { cleanupEvidenceResourceBlockers, completionEvidenceComplete, taskExecutionPolicy } from './execution-policy';
6
+ import { cleanupEvidenceResourceBlockers, completionEvidenceComplete } from './execution-policy';
7
7
  import { acceptVerifiedTask, getIssue, recordTaskVerification, updateTask } from './issue-store';
8
8
  import type { CompletionReceipt, CompletionReceiptSource, TaskCommandEvidence, TaskVerification } from './types';
9
9
  import { legacyIssueAuthorityRetired } from './legacy-issue-cutover';
@@ -92,9 +92,7 @@ export function continueTaskAfterSuccessfulRun(
92
92
  if (['done', 'cancelled', 'superseded'].includes(task.status)) {
93
93
  return { continued: false, status: task.status, reason: 'Task is already terminal.' };
94
94
  }
95
- const policy = taskExecutionPolicy(task);
96
- const checkResults = policy.autoRunDeclaredChecks
97
- ? task.checks.map((checkId) => {
95
+ const checkResults = task.checks.map((checkId) => {
98
96
  try {
99
97
  const result = runControllerCheck(repoRoot, checkId);
100
98
  return {
@@ -105,8 +103,7 @@ export function continueTaskAfterSuccessfulRun(
105
103
  } catch (error) {
106
104
  return { checkId, ok: false, summary: error instanceof Error ? error.message : String(error) };
107
105
  }
108
- })
109
- : [];
106
+ });
110
107
 
111
108
  const commandEvidence: TaskCommandEvidence[] = [{
112
109
  command: ['forge', 'agent-run', run.runId],
@@ -148,7 +145,7 @@ export function continueTaskAfterSuccessfulRun(
148
145
  });
149
146
  return { continued: true, status, checkCount: checkResults.length };
150
147
  }
151
- if (status === 'verified' && policy.autoCompleteAfterSuccessfulRun && !policy.requiresHumanAcceptance) {
148
+ if (status === 'verified' && task.acceptanceCriteria.length === 0) {
152
149
  const closureComplete = run.closureState === 'completed' && completionEvidenceComplete(verification, {
153
150
  issueId: run.issueId,
154
151
  taskId: run.taskId,