toolroll 0.9.103 → 0.9.105

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 (1518) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +27 -27
  3. package/dist/accent-colors.js +0 -29
  4. package/dist/acp-agents.js +0 -3
  5. package/dist/acp-attest.js +0 -30
  6. package/dist/acp-check.js +3 -70
  7. package/dist/acp-client.js +3 -94
  8. package/dist/acp-inspect.js +1 -20
  9. package/dist/action-ledger.js +0 -8
  10. package/dist/activity-line.js +0 -14
  11. package/dist/actor.js +0 -15
  12. package/dist/advanced-schema.js +12 -0
  13. package/dist/advanced-view.js +26 -0
  14. package/dist/advanced.js +61 -0
  15. package/dist/agent-board.js +0 -117
  16. package/dist/agent-fence.js +11 -367
  17. package/dist/agent-onboard.js +12 -50
  18. package/dist/agent-pulse.js +5 -38
  19. package/dist/agent-state-words.js +0 -8
  20. package/dist/agent-state.js +1 -45
  21. package/dist/agent-turns.js +3 -17
  22. package/dist/agentconfig.js +1 -99
  23. package/dist/agents-board.js +0 -60
  24. package/dist/agents-live.js +1 -8
  25. package/dist/api-tokens.js +0 -27
  26. package/dist/approval-authority.js +0 -59
  27. package/dist/approval-password.js +0 -10
  28. package/dist/approval-policy.js +0 -29
  29. package/dist/approval-rules-ui.js +0 -9
  30. package/dist/assignment-adapters.js +0 -14
  31. package/dist/assignment-brief.js +1 -17
  32. package/dist/assignment-delivery.js +0 -22
  33. package/dist/assignment-presentation.js +0 -14
  34. package/dist/assignment-status.js +1 -30
  35. package/dist/assignment-ui.js +0 -12
  36. package/dist/assignment.js +117 -103
  37. package/dist/attest.js +0 -38
  38. package/dist/audit-cli.js +0 -9
  39. package/dist/backend.js +0 -59
  40. package/dist/backup-ui.js +0 -12
  41. package/dist/backup.js +8 -61
  42. package/dist/batch-checks.js +0 -20
  43. package/dist/batch-policy.js +0 -4
  44. package/dist/beads.js +0 -48
  45. package/dist/bin.js +0 -8
  46. package/dist/board.js +1 -36
  47. package/dist/boot-identity.js +0 -42
  48. package/dist/bounded-spawn.js +4 -28
  49. package/dist/brand-mark.js +0 -21
  50. package/dist/brief-fence.js +0 -16
  51. package/dist/browser/terminal.css +1 -1
  52. package/dist/browser/terminal.js +16 -16
  53. package/dist/browser/workspace.css +2 -2
  54. package/dist/browser/workspace.js +26 -26
  55. package/dist/browser-crew.js +0 -8
  56. package/dist/browser-shell.js +2 -15
  57. package/dist/browser-workspace.js +6 -30
  58. package/dist/budget-alerts.js +1 -4
  59. package/dist/build-review.js +2 -50
  60. package/dist/builder-restart.js +0 -13
  61. package/dist/builder.js +21 -1035
  62. package/dist/canonical-json.js +0 -12
  63. package/dist/capscan.js +1 -32
  64. package/dist/card-catalog.js +0 -12
  65. package/dist/card-cli.js +0 -1
  66. package/dist/card-render.js +0 -25
  67. package/dist/card-sources.js +0 -10
  68. package/dist/chat-acceptance.js +0 -7
  69. package/dist/chat-actions.js +5 -190
  70. package/dist/chat-admission.js +0 -7
  71. package/dist/chat-approval.js +0 -25
  72. package/dist/chat-ask.js +0 -17
  73. package/dist/chat-card-part.js +0 -3
  74. package/dist/chat-card.js +0 -6
  75. package/dist/chat-channel.js +2 -83
  76. package/dist/chat-continuity.js +0 -31
  77. package/dist/chat-controls.js +0 -7
  78. package/dist/chat-core.js +0 -55
  79. package/dist/chat-decide.js +2 -153
  80. package/dist/chat-delivery-state.js +0 -49
  81. package/dist/chat-delivery.js +2 -143
  82. package/dist/chat-display.js +0 -2
  83. package/dist/chat-evidence.js +0 -65
  84. package/dist/chat-flow.js +0 -72
  85. package/dist/chat-follow.js +0 -13
  86. package/dist/chat-inbox.js +0 -34
  87. package/dist/chat-live-schema.js +0 -14
  88. package/dist/chat-live.js +2 -87
  89. package/dist/chat-message-states.js +13 -40
  90. package/dist/chat-messages.js +0 -153
  91. package/dist/chat-migration.js +0 -57
  92. package/dist/chat-polish.js +0 -7
  93. package/dist/chat-quiet.js +0 -37
  94. package/dist/chat-review.js +0 -4
  95. package/dist/chat-rooms.js +0 -22
  96. package/dist/chat-settings-page.js +0 -4
  97. package/dist/chat-task-actions.js +0 -7
  98. package/dist/chat-terms.js +0 -21
  99. package/dist/chat-voice.js +0 -38
  100. package/dist/chat-warmth.js +1 -3
  101. package/dist/check-access.js +0 -30
  102. package/dist/check-facts.js +2 -62
  103. package/dist/check-failure.js +0 -98
  104. package/dist/check-levels-ui.js +4 -10
  105. package/dist/check-levels.js +3 -35
  106. package/dist/check-load.js +1 -49
  107. package/dist/check-only-standing.js +0 -6
  108. package/dist/check-only.js +0 -22
  109. package/dist/check-progress.js +0 -32
  110. package/dist/check-repair.js +2 -35
  111. package/dist/check-report.js +1 -108
  112. package/dist/check-stamp.js +0 -20
  113. package/dist/checkout-cleanup.js +0 -84
  114. package/dist/checkout-proof.js +1 -13
  115. package/dist/child-database.js +0 -3
  116. package/dist/claim.js +4 -508
  117. package/dist/claude-print.js +0 -10
  118. package/dist/cli-fast.js +0 -8
  119. package/dist/cli-help.js +90 -78
  120. package/dist/cli-http.js +0 -10
  121. package/dist/cli.js +26 -241
  122. package/dist/code-extract.js +0 -6
  123. package/dist/code-map-acts.js +0 -7
  124. package/dist/code-map-admission.js +2 -26
  125. package/dist/code-map-build.js +3 -24
  126. package/dist/code-map-cli.js +0 -4
  127. package/dist/code-map-main.js +0 -6
  128. package/dist/code-map-read.js +0 -12
  129. package/dist/code-map-report.js +0 -9
  130. package/dist/code-map-shape.js +0 -19
  131. package/dist/code-map-store.js +0 -26
  132. package/dist/codex-limits.js +1 -17
  133. package/dist/coding-context.js +0 -10
  134. package/dist/coding-handoff.js +0 -14
  135. package/dist/coding-provider.js +0 -39
  136. package/dist/coding-shipping-ui.js +0 -1
  137. package/dist/coding-ui.js +0 -1
  138. package/dist/coding-update.js +1 -18
  139. package/dist/coding-workspace.js +0 -27
  140. package/dist/commit-extract.js +0 -83
  141. package/dist/connect-cli.js +0 -19
  142. package/dist/console-chrome.js +1 -34
  143. package/dist/console-instance.js +2 -91
  144. package/dist/container-state.js +0 -4
  145. package/dist/containment.js +2 -105
  146. package/dist/contract-changes.js +0 -6
  147. package/dist/contracts/acceptance-terms.js +0 -7
  148. package/dist/contracts/chat-actions.js +0 -46
  149. package/dist/contracts/chat-callback-rows.js +0 -8
  150. package/dist/contracts/chat-card.js +0 -14
  151. package/dist/contracts/chat-content.js +0 -55
  152. package/dist/contracts/chat-tables.js +0 -7
  153. package/dist/contracts/cli.js +0 -59
  154. package/dist/contracts/coding-activity.js +0 -15
  155. package/dist/contracts/coding-context.js +0 -15
  156. package/dist/contracts/coding-handoff.js +0 -11
  157. package/dist/contracts/coding-workspace.js +0 -14
  158. package/dist/contracts/console-api.js +3 -54
  159. package/dist/contracts/contract-test.js +0 -14
  160. package/dist/contracts/contract.js +0 -48
  161. package/dist/contracts/decision.js +0 -20
  162. package/dist/contracts/diff-stat.js +0 -16
  163. package/dist/contracts/discord-callback.js +0 -9
  164. package/dist/contracts/flow-card.js +0 -18
  165. package/dist/contracts/flow-propose.js +0 -8
  166. package/dist/contracts/flow-send.js +0 -31
  167. package/dist/contracts/flow.js +0 -112
  168. package/dist/contracts/gateway-tools.js +0 -22
  169. package/dist/contracts/handoff.js +0 -22
  170. package/dist/contracts/integration-metadata.js +0 -39
  171. package/dist/contracts/lead-context.js +0 -14
  172. package/dist/contracts/lead-tools.js +0 -49
  173. package/dist/contracts/mcp-oauth.js +0 -12
  174. package/dist/contracts/memory-pass.js +0 -21
  175. package/dist/contracts/model-catalog.js +0 -9
  176. package/dist/contracts/observation-request.js +0 -11
  177. package/dist/contracts/plan.js +0 -16
  178. package/dist/contracts/project-knowledge.js +0 -26
  179. package/dist/contracts/project-memory.js +0 -16
  180. package/dist/contracts/project-skills.js +0 -31
  181. package/dist/contracts/proof.js +0 -23
  182. package/dist/contracts/provider.js +0 -9
  183. package/dist/contracts/recipes.js +0 -16
  184. package/dist/contracts/release-check.js +0 -61
  185. package/dist/contracts/release-terms.js +0 -27
  186. package/dist/contracts/retention.js +0 -12
  187. package/dist/contracts/review-findings.js +0 -13
  188. package/dist/contracts/route-results.js +0 -15
  189. package/dist/contracts/route.js +0 -33
  190. package/dist/contracts/scope.js +0 -29
  191. package/dist/contracts/scout-report.js +0 -34
  192. package/dist/contracts/slack-callback.js +0 -11
  193. package/dist/contracts/sort-answer.js +0 -24
  194. package/dist/contracts/stage-output.js +0 -46
  195. package/dist/contracts/storage.js +0 -8
  196. package/dist/contracts/store-json.js +0 -41
  197. package/dist/contracts/subagent-turn.js +0 -23
  198. package/dist/contracts/task-sizing.js +0 -10
  199. package/dist/contracts/teams-callback.js +0 -7
  200. package/dist/contracts/telegram-callback.js +0 -27
  201. package/dist/contracts/trigger-payloads.js +0 -41
  202. package/dist/contracts/update-journal.js +0 -47
  203. package/dist/contracts/verification-receipt.js +0 -36
  204. package/dist/contracts/verification-view.js +0 -15
  205. package/dist/contracts/youiyoux-request.js +0 -26
  206. package/dist/control-setup.js +0 -7
  207. package/dist/control-ui.js +0 -3
  208. package/dist/controller-service.js +0 -4
  209. package/dist/controller-supervisor.js +0 -15
  210. package/dist/converse.js +3 -129
  211. package/dist/coordinator-proposals.js +1 -6
  212. package/dist/coordinator.js +0 -65
  213. package/dist/credentials-ui.js +0 -6
  214. package/dist/daemon.js +0 -137
  215. package/dist/database-reclaim.js +0 -3
  216. package/dist/decision.js +0 -78
  217. package/dist/demo-chat.js +4 -15
  218. package/dist/demo-sign-in.js +77 -0
  219. package/dist/demo.js +5 -194
  220. package/dist/deploy-gate.js +0 -20
  221. package/dist/deploy-lock.js +0 -4
  222. package/dist/deploy-phase.js +0 -22
  223. package/dist/deploy-rescue.js +0 -21
  224. package/dist/deprecations.js +0 -12
  225. package/dist/design/kit.css +9 -6
  226. package/dist/design/kit.js +2 -33
  227. package/dist/desktop-access.js +0 -9
  228. package/dist/desktop-bundle.js +1 -3
  229. package/dist/desktop-host.js +0 -34
  230. package/dist/desktop-update-gate.js +0 -8
  231. package/dist/desktop-update-recovery.js +1 -18
  232. package/dist/desktop-update.js +2 -48
  233. package/dist/digest-times.js +0 -2
  234. package/dist/disclosure.js +0 -5
  235. package/dist/discord-api.js +0 -6
  236. package/dist/discord-chat.js +0 -31
  237. package/dist/discord.js +0 -7
  238. package/dist/discover.js +0 -50
  239. package/dist/dispatch.js +61 -60
  240. package/dist/dispose.js +0 -208
  241. package/dist/doctor.js +0 -48
  242. package/dist/easy-start-args.js +7 -7
  243. package/dist/easy-start.js +32 -45
  244. package/dist/egress.js +1 -63
  245. package/dist/email-settings.js +0 -8
  246. package/dist/envelope.js +50 -86
  247. package/dist/eval-gate.js +1 -37
  248. package/dist/eval-hooks.js +0 -120
  249. package/dist/eval-oracle-main.js +0 -7
  250. package/dist/eval-oracle.js +3 -42
  251. package/dist/eval-world.js +1 -23
  252. package/dist/evals.js +6 -134
  253. package/dist/evidence-pack.js +0 -29
  254. package/dist/evidence-pair.js +0 -17
  255. package/dist/evidence.js +4 -280
  256. package/dist/exec.js +19 -404
  257. package/dist/exhaustion.js +0 -30
  258. package/dist/export-ui.js +0 -7
  259. package/dist/export.js +1 -38
  260. package/dist/failing-first.js +0 -6
  261. package/dist/fallback-schema.js +0 -5
  262. package/dist/fallback.js +0 -81
  263. package/dist/fast-start.js +0 -97
  264. package/dist/fast-terms.js +0 -3
  265. package/dist/fenced-check-coverage.js +0 -11
  266. package/dist/findings.js +1 -63
  267. package/dist/first-run.js +4 -57
  268. package/dist/first-tasks-child.js +0 -5
  269. package/dist/flaky-ci.js +1 -24
  270. package/dist/flaky-cli.js +0 -4
  271. package/dist/flaky.js +0 -43
  272. package/dist/fleet-schema.js +0 -11
  273. package/dist/flow-actions.js +0 -31
  274. package/dist/flow-browser.js +0 -42
  275. package/dist/flow-cadence.js +1 -24
  276. package/dist/flow-card-task.js +0 -11
  277. package/dist/flow-changed.js +0 -16
  278. package/dist/flow-code.js +1 -45
  279. package/dist/flow-draft.js +0 -17
  280. package/dist/flow-engine.js +2 -76
  281. package/dist/flow-gallery-ui.js +0 -28
  282. package/dist/flow-gallery.js +0 -54
  283. package/dist/flow-insights.js +0 -12
  284. package/dist/flow-items.js +0 -27
  285. package/dist/flow-live.js +0 -31
  286. package/dist/flow-people.js +0 -14
  287. package/dist/flow-pull-request.js +0 -32
  288. package/dist/flow-replies.js +0 -9
  289. package/dist/flow-result-card.js +0 -8
  290. package/dist/flow-schedule.js +0 -74
  291. package/dist/flow-scripts.js +0 -13
  292. package/dist/flow-secrets.js +0 -10
  293. package/dist/flow-send.js +0 -45
  294. package/dist/flow-share.js +0 -60
  295. package/dist/flow-sort.js +1 -24
  296. package/dist/flow-starters-ui.js +0 -2
  297. package/dist/flow-starters.js +0 -13
  298. package/dist/flow-steps.js +0 -80
  299. package/dist/flow-triggers.js +2 -256
  300. package/dist/flow-unattended-words.js +0 -13
  301. package/dist/flow-unattended.js +2 -115
  302. package/dist/flows-cli.js +2 -36
  303. package/dist/flows-ui.js +0 -51
  304. package/dist/flows.js +0 -158
  305. package/dist/folder-gate.js +0 -21
  306. package/dist/folder-look.js +0 -42
  307. package/dist/follow-through-brief.js +0 -6
  308. package/dist/follow-through-cli.js +0 -5
  309. package/dist/fonts.js +0 -13
  310. package/dist/gaps.js +0 -20
  311. package/dist/gate-failure.js +0 -7
  312. package/dist/git-floor.js +0 -12
  313. package/dist/git-incident.js +2 -38
  314. package/dist/git-views.js +0 -24
  315. package/dist/git.js +0 -31
  316. package/dist/github-import.js +0 -22
  317. package/dist/github-jobs.js +0 -12
  318. package/dist/google-mail.js +2 -27
  319. package/dist/grant.js +0 -110
  320. package/dist/graph.js +0 -108
  321. package/dist/guides.js +4 -15
  322. package/dist/handover-note.js +0 -12
  323. package/dist/health-cli.js +0 -2
  324. package/dist/home-groups.js +0 -15
  325. package/dist/html.js +0 -54
  326. package/dist/install-method.js +0 -12
  327. package/dist/integrations-ui.js +0 -15
  328. package/dist/integrations.js +7 -50
  329. package/dist/invoke.js +1 -381
  330. package/dist/is-record.js +0 -1
  331. package/dist/issues.js +0 -48
  332. package/dist/jsonl-discriminants.js +0 -6
  333. package/dist/keymap.js +2 -16
  334. package/dist/keys.js +0 -56
  335. package/dist/kits-ui.js +0 -3
  336. package/dist/kits.js +1 -24
  337. package/dist/knowledge-cli.js +0 -4
  338. package/dist/knowledge-ui.js +0 -8
  339. package/dist/landed-cleanup.js +0 -119
  340. package/dist/laptop-background.js +0 -85
  341. package/dist/laptop-service.js +0 -67
  342. package/dist/latency-timeline.js +2 -23
  343. package/dist/lead-about.js +0 -7
  344. package/dist/lead-answer-eval.js +0 -39
  345. package/dist/lead-capabilities.js +0 -19
  346. package/dist/lead-cli-live.js +0 -22
  347. package/dist/lead-cli.js +0 -27
  348. package/dist/lead-commitments.js +1 -27
  349. package/dist/lead-context.js +2 -42
  350. package/dist/lead-contract.js +0 -8
  351. package/dist/lead-doors.js +0 -105
  352. package/dist/lead-follow.js +0 -41
  353. package/dist/lead-identity.js +1 -4
  354. package/dist/lead-latency-schema.js +0 -13
  355. package/dist/lead-people.js +3 -18
  356. package/dist/lead-progress.js +0 -12
  357. package/dist/lead-queue-runtime.js +0 -26
  358. package/dist/lead-queue.js +0 -35
  359. package/dist/lead-route.js +0 -33
  360. package/dist/lead-status.js +0 -37
  361. package/dist/lead-sweep.js +0 -18
  362. package/dist/lead-tools.js +0 -160
  363. package/dist/lead-voice.js +0 -54
  364. package/dist/lead.js +2 -105
  365. package/dist/learning-child.js +0 -6
  366. package/dist/learning-look.js +0 -14
  367. package/dist/ledger-chain.js +0 -34
  368. package/dist/ledger-csv.js +0 -2
  369. package/dist/ledger-view.js +0 -3
  370. package/dist/lesson-notes.js +0 -56
  371. package/dist/limits-ui.js +0 -14
  372. package/dist/link.js +0 -79
  373. package/dist/live-backup.js +3 -33
  374. package/dist/live-bus.js +7 -81
  375. package/dist/live-children-read.js +4 -47
  376. package/dist/live-children.js +4 -44
  377. package/dist/live-detail.js +0 -17
  378. package/dist/live-input.js +5 -68
  379. package/dist/live-main-read.js +1 -14
  380. package/dist/live-notes.js +0 -12
  381. package/dist/live-open.js +1 -23
  382. package/dist/live-records.js +4 -151
  383. package/dist/live-reply.js +1 -51
  384. package/dist/live-terminal.js +12 -111
  385. package/dist/live.js +4 -130
  386. package/dist/local-owner-acts.js +168 -0
  387. package/dist/local-owner.js +15 -80
  388. package/dist/log.js +0 -8
  389. package/dist/login-secrets.js +2 -38
  390. package/dist/machine-check.js +0 -2
  391. package/dist/machine-identity.js +1 -46
  392. package/dist/mailbox.js +0 -30
  393. package/dist/maintenance.js +1 -3
  394. package/dist/mcp-connect.js +0 -88
  395. package/dist/mcp-core.js +0 -45
  396. package/dist/mcp-http.js +0 -13
  397. package/dist/mcp-oauth.js +0 -37
  398. package/dist/mcp-person.js +0 -11
  399. package/dist/mcp.js +3 -73
  400. package/dist/memory-cli.js +0 -3
  401. package/dist/memory-pass.js +0 -53
  402. package/dist/memory-tidy.js +0 -55
  403. package/dist/memory-use.js +2 -24
  404. package/dist/merge-checklist.js +21 -29
  405. package/dist/metrics.js +0 -10
  406. package/dist/mobile-viewport.js +0 -6
  407. package/dist/model-catalog.js +1 -33
  408. package/dist/model-choices.js +9 -84
  409. package/dist/model-names.js +0 -9
  410. package/dist/models-cli.js +0 -13
  411. package/dist/models-ui.js +0 -17
  412. package/dist/modes.js +0 -35
  413. package/dist/monitoring-settings.js +2 -27
  414. package/dist/monitoring-ui.js +2 -14
  415. package/dist/monitoring.js +2 -38
  416. package/dist/names.js +0 -39
  417. package/dist/needs-you.js +7 -70
  418. package/dist/never-index.js +0 -9
  419. package/dist/nightly-check.js +0 -74
  420. package/dist/nightly-github.js +0 -168
  421. package/dist/notification-delivery.js +0 -3
  422. package/dist/notification-rows.js +0 -17
  423. package/dist/oauth-run-token.js +1 -37
  424. package/dist/observations.js +0 -16
  425. package/dist/oidc.js +1 -20
  426. package/dist/onboard.js +4 -57
  427. package/dist/one-step-chat-schema.js +0 -15
  428. package/dist/openrouter-models.js +0 -6
  429. package/dist/operate-remote-arguments.js +2 -17
  430. package/dist/operate-remote.js +0 -33
  431. package/dist/operate.js +280 -2304
  432. package/dist/orphan-sweep.js +3 -37
  433. package/dist/page-work-contract.js +0 -3
  434. package/dist/password-bearer.js +1 -11
  435. package/dist/passwordless.js +0 -3
  436. package/dist/peek-cli.js +0 -46
  437. package/dist/peek.js +2 -61
  438. package/dist/people-audit-ui.js +0 -6
  439. package/dist/person-proof.js +0 -6
  440. package/dist/phase-routing.js +8 -183
  441. package/dist/plain-schema.js +0 -14
  442. package/dist/plain-words.js +18 -12
  443. package/dist/plan-auto.js +3 -18
  444. package/dist/plan-login.js +0 -16
  445. package/dist/plan.js +0 -68
  446. package/dist/plane-review.js +0 -56
  447. package/dist/planner-source.js +0 -96
  448. package/dist/planner.js +0 -117
  449. package/dist/policy-ui.js +0 -8
  450. package/dist/policy.js +0 -47
  451. package/dist/prepared-evidence.js +0 -5
  452. package/dist/principal.js +0 -29
  453. package/dist/probe.js +0 -30
  454. package/dist/process-custody.js +0 -15
  455. package/dist/process-liveness.js +0 -32
  456. package/dist/process-tree.js +3 -29
  457. package/dist/project-access.js +0 -10
  458. package/dist/project-admission.js +1 -41
  459. package/dist/project-cli.js +0 -6
  460. package/dist/project-concurrency.js +0 -35
  461. package/dist/project-delete-ui.js +4 -29
  462. package/dist/project-delete.js +1 -73
  463. package/dist/project-demo.js +0 -13
  464. package/dist/project-file.js +0 -2
  465. package/dist/project-identity.js +0 -41
  466. package/dist/project-knowledge.js +0 -39
  467. package/dist/project-learning.js +3 -55
  468. package/dist/project-memory.js +2 -45
  469. package/dist/project-outcomes.js +0 -6
  470. package/dist/project-sandbox.js +0 -23
  471. package/dist/project-skills.js +0 -12
  472. package/dist/project-tools.js +6 -184
  473. package/dist/project.js +0 -48
  474. package/dist/prompt.js +0 -31
  475. package/dist/proof.js +0 -220
  476. package/dist/proposal.js +0 -50
  477. package/dist/protected-storage-look.js +0 -6
  478. package/dist/protected-storage.js +1 -84
  479. package/dist/provider-auth.js +3 -69
  480. package/dist/provider-capture.js +1 -15
  481. package/dist/provider-connection.js +0 -8
  482. package/dist/provider-home.js +0 -25
  483. package/dist/provider-limits.js +0 -14
  484. package/dist/provider.js +0 -324
  485. package/dist/public-access.js +11 -30
  486. package/dist/public-check.js +0 -16
  487. package/dist/publish.js +1 -150
  488. package/dist/pull-request-flow.js +6 -74
  489. package/dist/pull-request-schema.js +0 -4
  490. package/dist/pull-request-ui.js +0 -5
  491. package/dist/pulls.js +0 -80
  492. package/dist/push.js +5 -89
  493. package/dist/quick-start.js +1 -23
  494. package/dist/read-executor-worker.js +0 -1
  495. package/dist/read-executor.js +0 -10
  496. package/dist/read-only-request.js +0 -7
  497. package/dist/recipe-ui.js +0 -6
  498. package/dist/recipes.js +0 -13
  499. package/dist/release-adapters.js +6 -214
  500. package/dist/release-approval.js +0 -74
  501. package/dist/release-authority.js +0 -42
  502. package/dist/release-auto.js +0 -142
  503. package/dist/release-card.js +26 -103
  504. package/dist/release-carry.js +0 -132
  505. package/dist/release-ci-hold.js +0 -20
  506. package/dist/release-cli.js +0 -46
  507. package/dist/release-coverage.js +0 -16
  508. package/dist/release-gate.js +0 -30
  509. package/dist/release-git.js +0 -24
  510. package/dist/release-links.js +0 -17
  511. package/dist/release-net.js +0 -42
  512. package/dist/release-next.js +0 -25
  513. package/dist/release-recheck.js +0 -89
  514. package/dist/release-refusal.js +0 -18
  515. package/dist/release-view.js +0 -5
  516. package/dist/release.js +7 -341
  517. package/dist/releases.js +0 -49
  518. package/dist/remote-audit.js +0 -25
  519. package/dist/remote-command.js +0 -16
  520. package/dist/remote-destination.js +5 -26
  521. package/dist/remote-exec.js +1 -27
  522. package/dist/remote-main.js +1 -53
  523. package/dist/remote-run.js +0 -5
  524. package/dist/remote.js +0 -49
  525. package/dist/render.js +0 -133
  526. package/dist/reply-shape.js +0 -85
  527. package/dist/reply-voice.js +0 -7
  528. package/dist/report-summary.js +0 -5
  529. package/dist/reported-usage.js +0 -30
  530. package/dist/repos.js +9 -62
  531. package/dist/repository-context.js +1 -24
  532. package/dist/request-budget-ui.js +0 -4
  533. package/dist/request-budget.js +0 -23
  534. package/dist/restart-certification.js +0 -37
  535. package/dist/result-actions.js +0 -62
  536. package/dist/result-acts.js +0 -34
  537. package/dist/result-completion.js +9 -28
  538. package/dist/result-evidence-readers.js +0 -3
  539. package/dist/result-follow-ups.js +1 -39
  540. package/dist/result-review.js +0 -86
  541. package/dist/result-shots.js +0 -39
  542. package/dist/retention-ui.js +0 -7
  543. package/dist/retention.js +2 -46
  544. package/dist/review-context.js +0 -129
  545. package/dist/review-evidence.js +0 -4
  546. package/dist/review-switch.js +1 -7
  547. package/dist/reviewer.js +0 -35
  548. package/dist/route-change-check.js +0 -2
  549. package/dist/route-change.js +0 -16
  550. package/dist/route-hooks.js +0 -27
  551. package/dist/route-results.js +2 -58
  552. package/dist/route-rules.js +1 -106
  553. package/dist/route-savings.js +0 -36
  554. package/dist/route-store.js +1 -133
  555. package/dist/run-closeout.js +2 -50
  556. package/dist/run-efficiency.js +2 -44
  557. package/dist/run-ending.js +0 -13
  558. package/dist/runner-process.js +0 -33
  559. package/dist/runner.js +17 -189
  560. package/dist/sample-project.js +2 -27
  561. package/dist/sandbox-launch.js +4 -25
  562. package/dist/sandbox-runtime.js +1 -88
  563. package/dist/scan.js +0 -27
  564. package/dist/scope.js +88 -566
  565. package/dist/scout-browser-lock.js +0 -6
  566. package/dist/scout-browser.js +2 -68
  567. package/dist/scout-net.js +1 -32
  568. package/dist/scout-report.js +0 -22
  569. package/dist/scout.js +1 -116
  570. package/dist/secret-mint.js +0 -6
  571. package/dist/serve.js +29 -564
  572. package/dist/server/agents-computers.js +0 -10
  573. package/dist/server/agents-live-filed.js +0 -13
  574. package/dist/server/agents-live-lead.js +0 -19
  575. package/dist/server/agents-live-room.js +0 -19
  576. package/dist/server/chat.js +2 -194
  577. package/dist/server/chrome.js +17 -263
  578. package/dist/server/console.css +4 -4
  579. package/dist/server/edge-refusal.js +0 -3
  580. package/dist/server/flows.js +5 -74
  581. package/dist/server/guards.js +9 -86
  582. package/dist/server/handler-registry.js +0 -2
  583. package/dist/server/home-asks.js +1 -22
  584. package/dist/server/home.js +1 -30
  585. package/dist/server/http.js +0 -82
  586. package/dist/server/in-place.js +0 -15
  587. package/dist/server/kit-standalone.js +0 -20
  588. package/dist/server/kit.js +2 -114
  589. package/dist/server/last-checks.js +0 -2
  590. package/dist/server/live.js +1 -36
  591. package/dist/server/merge-ready-view.js +0 -6
  592. package/dist/server/mutation-key.js +3 -40
  593. package/dist/server/pages-assets.js +0 -16
  594. package/dist/server/pages.js +7 -195
  595. package/dist/server/people-tokens.js +3 -101
  596. package/dist/server/remote-hooks.js +0 -13
  597. package/dist/server/remote.js +0 -28
  598. package/dist/server/render-chat.js +8 -144
  599. package/dist/server/render-code-map.js +0 -5
  600. package/dist/server/render-flaky.js +0 -8
  601. package/dist/server/render-follow-through.js +2 -5
  602. package/dist/server/render-history.js +2 -34
  603. package/dist/server/render-new-task.js +2 -29
  604. package/dist/server/render-pages.js +1 -111
  605. package/dist/server/render-people.js +2 -46
  606. package/dist/server/render-projects.js +15 -32
  607. package/dist/server/render-release.js +1 -14
  608. package/dist/server/render-results.js +4 -355
  609. package/dist/server/render-settings.js +0 -15
  610. package/dist/server/render-tasks.js +17 -497
  611. package/dist/server/request-context.js +2 -9
  612. package/dist/server/retired-routes.js +0 -11
  613. package/dist/server/route-policy.js +0 -3
  614. package/dist/server/route-table.js +8 -133
  615. package/dist/server/runtime.js +0 -1
  616. package/dist/server/session.js +0 -28
  617. package/dist/server/settings.js +40 -246
  618. package/dist/server/signup-gate.js +0 -11
  619. package/dist/server/sweeps.js +0 -6
  620. package/dist/server/task-views.js +12 -227
  621. package/dist/server/tasks.js +37 -531
  622. package/dist/server/terminals.js +2 -46
  623. package/dist/server/welcome.js +2 -22
  624. package/dist/server-telemetry.js +0 -9
  625. package/dist/settings-groups-ui.js +50 -63
  626. package/dist/settings-kit-script.js +0 -19
  627. package/dist/settings-kit.js +0 -63
  628. package/dist/settings-proofs.js +0 -23
  629. package/dist/setup-guide.js +1 -9
  630. package/dist/shared-deps.js +9 -84
  631. package/dist/sign-in-guard.js +0 -27
  632. package/dist/skills-ui.js +0 -2
  633. package/dist/skills.js +2 -54
  634. package/dist/slack-api.js +0 -3
  635. package/dist/slack-chat.js +0 -25
  636. package/dist/slack-settings.js +0 -1
  637. package/dist/slack-socket.js +0 -5
  638. package/dist/slack.js +0 -4
  639. package/dist/sleep.js +0 -1
  640. package/dist/source-key.js +0 -10
  641. package/dist/spend-report.js +0 -29
  642. package/dist/spend-ui.js +0 -26
  643. package/dist/spend.js +0 -40
  644. package/dist/sqlite-runtime.js +0 -2
  645. package/dist/sqlite-telemetry.js +0 -9
  646. package/dist/sso-settings.js +0 -13
  647. package/dist/sso-ui.js +0 -2
  648. package/dist/staged-runtimes.js +5 -39
  649. package/dist/steer-capabilities.js +1 -7
  650. package/dist/steer-controls.js +0 -10
  651. package/dist/steer-live.js +0 -31
  652. package/dist/steer-mailbox.js +4 -65
  653. package/dist/steer-status.js +0 -7
  654. package/dist/stop-proof.js +5 -62
  655. package/dist/storage-sweep-child.js +1 -5
  656. package/dist/storage-sweep-process.js +2 -20
  657. package/dist/storage-sweep-schedule.js +0 -32
  658. package/dist/storage-sweep.js +2 -51
  659. package/dist/storage-ui.js +0 -18
  660. package/dist/storage.js +0 -31
  661. package/dist/store-baseline.js +0 -14
  662. package/dist/store.js +109 -4763
  663. package/dist/stream-scope.js +0 -16
  664. package/dist/structured-output.js +0 -39
  665. package/dist/style-asset.js +0 -2
  666. package/dist/subagent-admin.js +0 -9
  667. package/dist/subagent-desk.js +0 -29
  668. package/dist/subagent-memory.js +0 -38
  669. package/dist/subagent-question.js +0 -29
  670. package/dist/subagent-tools.js +1 -60
  671. package/dist/subagent-week.js +0 -28
  672. package/dist/subagent-work.js +1 -39
  673. package/dist/subagents-ui.js +1 -13
  674. package/dist/subagents.js +0 -40
  675. package/dist/subscription-chat.js +1 -42
  676. package/dist/summary.js +0 -19
  677. package/dist/surface.js +8 -73
  678. package/dist/sweep-gate.js +0 -2
  679. package/dist/sweep-quarantine.js +2 -13
  680. package/dist/sync.js +0 -47
  681. package/dist/tailnet.js +0 -9
  682. package/dist/tamper-scan.js +0 -15
  683. package/dist/task-activity.js +1 -16
  684. package/dist/task-aliases.js +0 -3
  685. package/dist/task-archive.js +0 -7
  686. package/dist/task-base.js +0 -18
  687. package/dist/task-composer.js +0 -2
  688. package/dist/task-control.js +0 -74
  689. package/dist/task-live.js +0 -23
  690. package/dist/task-moves.js +0 -28
  691. package/dist/task-outcome-cli.js +66 -19
  692. package/dist/task-review-brief.js +0 -7
  693. package/dist/task-sizing.js +0 -47
  694. package/dist/task-source.js +0 -23
  695. package/dist/task-status.js +0 -106
  696. package/dist/task-text.js +0 -12
  697. package/dist/team-chat-authorization.js +0 -3
  698. package/dist/team-contract.js +0 -2
  699. package/dist/team-http.js +0 -4
  700. package/dist/team-leads.js +1 -16
  701. package/dist/team-runtime.js +0 -13
  702. package/dist/team-ui.js +0 -1
  703. package/dist/team-updates.js +0 -4
  704. package/dist/teams-api.js +0 -12
  705. package/dist/teams-chat.js +0 -28
  706. package/dist/teams.js +0 -12
  707. package/dist/teardown-git.js +6 -294
  708. package/dist/telegram-flow.js +0 -51
  709. package/dist/telegram-lead.js +2 -203
  710. package/dist/telegram-live.js +1 -42
  711. package/dist/telegram-progress.js +0 -18
  712. package/dist/telegram-settings.js +0 -7
  713. package/dist/telegram-status.js +0 -46
  714. package/dist/telegram-team.js +1 -33
  715. package/dist/telegram.js +6 -454
  716. package/dist/templates.js +0 -24
  717. package/dist/terminal-catalog.js +2 -20
  718. package/dist/terminal-text.js +0 -12
  719. package/dist/test-infra.js +0 -50
  720. package/dist/test-temp.js +3 -26
  721. package/dist/text-limits.js +0 -92
  722. package/dist/tidy.js +0 -76
  723. package/dist/tier-report.js +0 -2
  724. package/dist/token-notices.js +1 -9
  725. package/dist/tokens-cli.js +0 -13
  726. package/dist/tool-broker.js +2 -53
  727. package/dist/tool-launcher.js +0 -14
  728. package/dist/tool-secret-store.js +3 -125
  729. package/dist/toolroll-update-cli.js +0 -9
  730. package/dist/toolroll-update-ui.js +0 -14
  731. package/dist/toolroll-update.js +13 -252
  732. package/dist/tools-ui.js +0 -17
  733. package/dist/transitions-recipes.js +0 -2
  734. package/dist/tree-proof.js +0 -23
  735. package/dist/tui-contract.js +0 -8
  736. package/dist/tui-source.js +91 -40
  737. package/dist/tui.js +54 -54
  738. package/dist/typed-start.js +0 -27
  739. package/dist/unfenced-test-support.js +0 -5
  740. package/dist/up-processes.js +1 -40
  741. package/dist/up-role-child.js +1 -13
  742. package/dist/update-notice.js +0 -1
  743. package/dist/vanished-retry.js +0 -40
  744. package/dist/verification-evidence.js +0 -39
  745. package/dist/version.js +0 -1
  746. package/dist/wake-hub.js +0 -28
  747. package/dist/webhook-limits.js +0 -7
  748. package/dist/webhook-readers.js +0 -30
  749. package/dist/webhook-signing.js +0 -14
  750. package/dist/webhooks.js +0 -54
  751. package/dist/welcome-facts.js +2 -14
  752. package/dist/when-html.js +0 -27
  753. package/dist/work-index.js +26 -98
  754. package/dist/work-summary.js +2 -17
  755. package/dist/workspace-motion.js +0 -2
  756. package/dist/workspace-revision.js +1 -21
  757. package/dist/workspace-ui.js +15 -135
  758. package/dist/worktree-notices.js +0 -3
  759. package/dist/worktree.js +0 -308
  760. package/dist/writes-mode.js +0 -1
  761. package/dist/youiyoux-intake.js +4 -159
  762. package/package.json +5 -4
  763. package/dist/accent-colors.d.ts +0 -51
  764. package/dist/acp-agents.d.ts +0 -43
  765. package/dist/acp-attest.d.ts +0 -44
  766. package/dist/acp-check.d.ts +0 -37
  767. package/dist/acp-client.d.ts +0 -163
  768. package/dist/acp-inspect.d.ts +0 -23
  769. package/dist/action-ledger.d.ts +0 -27
  770. package/dist/activity-line.d.ts +0 -29
  771. package/dist/actor.d.ts +0 -11
  772. package/dist/agent-board.d.ts +0 -229
  773. package/dist/agent-fence.d.ts +0 -479
  774. package/dist/agent-onboard.d.ts +0 -158
  775. package/dist/agent-pulse.d.ts +0 -43
  776. package/dist/agent-state-words.d.ts +0 -19
  777. package/dist/agent-state.d.ts +0 -65
  778. package/dist/agent-turns.d.ts +0 -52
  779. package/dist/agentconfig.d.ts +0 -191
  780. package/dist/agents-board.d.ts +0 -145
  781. package/dist/agents-live.d.ts +0 -31
  782. package/dist/api-tokens.d.ts +0 -80
  783. package/dist/approval-authority.d.ts +0 -51
  784. package/dist/approval-password.d.ts +0 -31
  785. package/dist/approval-policy.d.ts +0 -69
  786. package/dist/approval-rules-ui.d.ts +0 -40
  787. package/dist/assignment-adapters.d.ts +0 -152
  788. package/dist/assignment-brief.d.ts +0 -83
  789. package/dist/assignment-delivery.d.ts +0 -86
  790. package/dist/assignment-presentation.d.ts +0 -37
  791. package/dist/assignment-status.d.ts +0 -71
  792. package/dist/assignment-ui.d.ts +0 -68
  793. package/dist/assignment.d.ts +0 -318
  794. package/dist/attest.d.ts +0 -59
  795. package/dist/audit-cli.d.ts +0 -17
  796. package/dist/backend.d.ts +0 -97
  797. package/dist/backup-ui.d.ts +0 -32
  798. package/dist/backup.d.ts +0 -92
  799. package/dist/batch-checks.d.ts +0 -15
  800. package/dist/batch-policy.d.ts +0 -23
  801. package/dist/beads.d.ts +0 -34
  802. package/dist/bin.d.ts +0 -2
  803. package/dist/board.d.ts +0 -134
  804. package/dist/boot-identity.d.ts +0 -64
  805. package/dist/bounded-spawn.d.ts +0 -57
  806. package/dist/brand-icons.d.ts +0 -168
  807. package/dist/brand-mark.d.ts +0 -28
  808. package/dist/brief-fence.d.ts +0 -9
  809. package/dist/browser-crew.d.ts +0 -12
  810. package/dist/browser-shell.d.ts +0 -9
  811. package/dist/browser-workspace.d.ts +0 -1972
  812. package/dist/budget-alerts.d.ts +0 -19
  813. package/dist/build-review.d.ts +0 -38
  814. package/dist/builder-restart.d.ts +0 -21
  815. package/dist/builder.d.ts +0 -409
  816. package/dist/canonical-json.d.ts +0 -14
  817. package/dist/capscan.d.ts +0 -35
  818. package/dist/card-catalog.d.ts +0 -209
  819. package/dist/card-cli.d.ts +0 -43
  820. package/dist/card-render.d.ts +0 -43
  821. package/dist/card-sources.d.ts +0 -68
  822. package/dist/chat-acceptance.d.ts +0 -74
  823. package/dist/chat-actions.d.ts +0 -460
  824. package/dist/chat-admission.d.ts +0 -19
  825. package/dist/chat-approval.d.ts +0 -58
  826. package/dist/chat-ask.d.ts +0 -32
  827. package/dist/chat-card-part.d.ts +0 -11
  828. package/dist/chat-card.d.ts +0 -46
  829. package/dist/chat-channel.d.ts +0 -126
  830. package/dist/chat-continuity.d.ts +0 -32
  831. package/dist/chat-controls.d.ts +0 -117
  832. package/dist/chat-core.d.ts +0 -177
  833. package/dist/chat-decide.d.ts +0 -269
  834. package/dist/chat-delivery-state.d.ts +0 -132
  835. package/dist/chat-delivery.d.ts +0 -71
  836. package/dist/chat-display.d.ts +0 -1
  837. package/dist/chat-evidence.d.ts +0 -123
  838. package/dist/chat-flow.d.ts +0 -70
  839. package/dist/chat-follow.d.ts +0 -20
  840. package/dist/chat-inbox.d.ts +0 -57
  841. package/dist/chat-live-schema.d.ts +0 -17
  842. package/dist/chat-live.d.ts +0 -161
  843. package/dist/chat-message-states.d.ts +0 -75
  844. package/dist/chat-messages.d.ts +0 -338
  845. package/dist/chat-migration.d.ts +0 -30
  846. package/dist/chat-polish.d.ts +0 -17
  847. package/dist/chat-quiet.d.ts +0 -40
  848. package/dist/chat-review.d.ts +0 -51
  849. package/dist/chat-rooms.d.ts +0 -123
  850. package/dist/chat-settings-page.d.ts +0 -43
  851. package/dist/chat-task-actions.d.ts +0 -59
  852. package/dist/chat-terms.d.ts +0 -29
  853. package/dist/chat-voice.d.ts +0 -69
  854. package/dist/chat-warmth.d.ts +0 -21
  855. package/dist/check-access.d.ts +0 -54
  856. package/dist/check-facts.d.ts +0 -126
  857. package/dist/check-failure.d.ts +0 -113
  858. package/dist/check-levels-ui.d.ts +0 -36
  859. package/dist/check-levels.d.ts +0 -70
  860. package/dist/check-load.d.ts +0 -85
  861. package/dist/check-only-standing.d.ts +0 -36
  862. package/dist/check-only.d.ts +0 -15
  863. package/dist/check-progress.d.ts +0 -78
  864. package/dist/check-repair.d.ts +0 -47
  865. package/dist/check-report.d.ts +0 -177
  866. package/dist/check-stamp.d.ts +0 -46
  867. package/dist/checkout-cleanup.d.ts +0 -157
  868. package/dist/checkout-proof.d.ts +0 -28
  869. package/dist/child-database.d.ts +0 -12
  870. package/dist/claim.d.ts +0 -627
  871. package/dist/claude-print.d.ts +0 -12
  872. package/dist/cli-fast.d.ts +0 -8
  873. package/dist/cli-help.d.ts +0 -8
  874. package/dist/cli-http.d.ts +0 -58
  875. package/dist/cli.d.ts +0 -149
  876. package/dist/code-extract.d.ts +0 -44
  877. package/dist/code-map-acts.d.ts +0 -24
  878. package/dist/code-map-admission.d.ts +0 -52
  879. package/dist/code-map-build.d.ts +0 -63
  880. package/dist/code-map-cli.d.ts +0 -153
  881. package/dist/code-map-main.d.ts +0 -1
  882. package/dist/code-map-read.d.ts +0 -106
  883. package/dist/code-map-report.d.ts +0 -37
  884. package/dist/code-map-shape.d.ts +0 -172
  885. package/dist/code-map-store.d.ts +0 -136
  886. package/dist/codex-limits.d.ts +0 -15
  887. package/dist/coding-context.d.ts +0 -18
  888. package/dist/coding-handoff.d.ts +0 -39
  889. package/dist/coding-provider.d.ts +0 -88
  890. package/dist/coding-shipping-ui.d.ts +0 -5
  891. package/dist/coding-types.d.ts +0 -16
  892. package/dist/coding-ui.d.ts +0 -19
  893. package/dist/coding-update.d.ts +0 -28
  894. package/dist/coding-workspace.d.ts +0 -141
  895. package/dist/commit-extract.d.ts +0 -135
  896. package/dist/connect-cli.d.ts +0 -34
  897. package/dist/console-chrome.d.ts +0 -41
  898. package/dist/console-instance.d.ts +0 -157
  899. package/dist/container-state.d.ts +0 -5
  900. package/dist/containment.d.ts +0 -205
  901. package/dist/contract-changes.d.ts +0 -52
  902. package/dist/contracts/acceptance-terms.d.ts +0 -14
  903. package/dist/contracts/chat-actions.d.ts +0 -465
  904. package/dist/contracts/chat-callback-rows.d.ts +0 -59
  905. package/dist/contracts/chat-card.d.ts +0 -91
  906. package/dist/contracts/chat-content.d.ts +0 -551
  907. package/dist/contracts/chat-tables.d.ts +0 -12
  908. package/dist/contracts/cli.d.ts +0 -987
  909. package/dist/contracts/coding-activity.d.ts +0 -64
  910. package/dist/contracts/coding-context.d.ts +0 -97
  911. package/dist/contracts/coding-handoff.d.ts +0 -44
  912. package/dist/contracts/coding-workspace.d.ts +0 -165
  913. package/dist/contracts/console-api.d.ts +0 -539
  914. package/dist/contracts/contract-test.d.ts +0 -45
  915. package/dist/contracts/contract.d.ts +0 -92
  916. package/dist/contracts/decision.d.ts +0 -45
  917. package/dist/contracts/diff-stat.d.ts +0 -58
  918. package/dist/contracts/discord-callback.d.ts +0 -45
  919. package/dist/contracts/flow-card.d.ts +0 -53
  920. package/dist/contracts/flow-propose.d.ts +0 -334
  921. package/dist/contracts/flow-send.d.ts +0 -245
  922. package/dist/contracts/flow.d.ts +0 -19565
  923. package/dist/contracts/gateway-tools.d.ts +0 -472
  924. package/dist/contracts/handoff.d.ts +0 -91
  925. package/dist/contracts/health.d.ts +0 -82
  926. package/dist/contracts/integration-metadata.d.ts +0 -100
  927. package/dist/contracts/lead-context.d.ts +0 -165
  928. package/dist/contracts/lead-tools.d.ts +0 -2312
  929. package/dist/contracts/mcp-oauth.d.ts +0 -53
  930. package/dist/contracts/memory-pass.d.ts +0 -157
  931. package/dist/contracts/model-catalog.d.ts +0 -21
  932. package/dist/contracts/observation-request.d.ts +0 -37
  933. package/dist/contracts/plan.d.ts +0 -58
  934. package/dist/contracts/project-knowledge.d.ts +0 -159
  935. package/dist/contracts/project-memory.d.ts +0 -119
  936. package/dist/contracts/project-skills.d.ts +0 -120
  937. package/dist/contracts/proof.d.ts +0 -136
  938. package/dist/contracts/provider.d.ts +0 -40
  939. package/dist/contracts/recipes.d.ts +0 -166
  940. package/dist/contracts/release-check.d.ts +0 -371
  941. package/dist/contracts/release-terms.d.ts +0 -107
  942. package/dist/contracts/retention.d.ts +0 -42
  943. package/dist/contracts/review-findings.d.ts +0 -46
  944. package/dist/contracts/route-results.d.ts +0 -121
  945. package/dist/contracts/route.d.ts +0 -897
  946. package/dist/contracts/scope.d.ts +0 -105
  947. package/dist/contracts/scout-report.d.ts +0 -234
  948. package/dist/contracts/slack-callback.d.ts +0 -43
  949. package/dist/contracts/sort-answer.d.ts +0 -83
  950. package/dist/contracts/stage-output.d.ts +0 -127
  951. package/dist/contracts/storage.d.ts +0 -37
  952. package/dist/contracts/store-json.d.ts +0 -313
  953. package/dist/contracts/subagent-turn.d.ts +0 -43
  954. package/dist/contracts/task-sizing.d.ts +0 -24
  955. package/dist/contracts/teams-callback.d.ts +0 -13
  956. package/dist/contracts/telegram-callback.d.ts +0 -120
  957. package/dist/contracts/trigger-payloads.d.ts +0 -389
  958. package/dist/contracts/update-journal.d.ts +0 -254
  959. package/dist/contracts/verification-receipt.d.ts +0 -200
  960. package/dist/contracts/verification-view.d.ts +0 -102
  961. package/dist/contracts/youiyoux-request.d.ts +0 -248
  962. package/dist/control-setup.d.ts +0 -44
  963. package/dist/control-ui.d.ts +0 -37
  964. package/dist/controller-service.d.ts +0 -1
  965. package/dist/controller-supervisor.d.ts +0 -38
  966. package/dist/converse.d.ts +0 -316
  967. package/dist/coordinator-proposals.d.ts +0 -29
  968. package/dist/coordinator.d.ts +0 -186
  969. package/dist/credentials-ui.d.ts +0 -33
  970. package/dist/daemon.d.ts +0 -226
  971. package/dist/database-reclaim.d.ts +0 -4
  972. package/dist/decision.d.ts +0 -119
  973. package/dist/demo-chat.d.ts +0 -32
  974. package/dist/demo.d.ts +0 -153
  975. package/dist/deploy-gate.d.ts +0 -20
  976. package/dist/deploy-lock.d.ts +0 -8
  977. package/dist/deploy-phase.d.ts +0 -37
  978. package/dist/deploy-rescue.d.ts +0 -42
  979. package/dist/deprecations.d.ts +0 -20
  980. package/dist/design/kit.d.ts +0 -216
  981. package/dist/desktop-access.d.ts +0 -28
  982. package/dist/desktop-bundle.d.ts +0 -16
  983. package/dist/desktop-host.d.ts +0 -54
  984. package/dist/desktop-update-gate.d.ts +0 -12
  985. package/dist/desktop-update-recovery.d.ts +0 -14
  986. package/dist/desktop-update.d.ts +0 -147
  987. package/dist/digest-times.d.ts +0 -3
  988. package/dist/disclosure.d.ts +0 -6
  989. package/dist/discord-api.d.ts +0 -24
  990. package/dist/discord-chat.d.ts +0 -27
  991. package/dist/discord-settings.d.ts +0 -4
  992. package/dist/discord.d.ts +0 -10
  993. package/dist/discover.d.ts +0 -75
  994. package/dist/dispatch.d.ts +0 -123
  995. package/dist/dispose.d.ts +0 -194
  996. package/dist/doctor.d.ts +0 -67
  997. package/dist/easy-start-args.d.ts +0 -13
  998. package/dist/easy-start.d.ts +0 -77
  999. package/dist/egress.d.ts +0 -121
  1000. package/dist/email-settings.d.ts +0 -34
  1001. package/dist/envelope.d.ts +0 -47
  1002. package/dist/eval-gate.d.ts +0 -51
  1003. package/dist/eval-hooks.d.ts +0 -94
  1004. package/dist/eval-oracle-main.d.ts +0 -1
  1005. package/dist/eval-oracle.d.ts +0 -60
  1006. package/dist/eval-world.d.ts +0 -17
  1007. package/dist/evals.d.ts +0 -299
  1008. package/dist/evidence-pack.d.ts +0 -186
  1009. package/dist/evidence-pair.d.ts +0 -53
  1010. package/dist/evidence.d.ts +0 -371
  1011. package/dist/exec.d.ts +0 -355
  1012. package/dist/exhaustion.d.ts +0 -58
  1013. package/dist/export-ui.d.ts +0 -11
  1014. package/dist/export.d.ts +0 -48
  1015. package/dist/failing-first.d.ts +0 -31
  1016. package/dist/fallback-schema.d.ts +0 -8
  1017. package/dist/fallback.d.ts +0 -138
  1018. package/dist/fast-start.d.ts +0 -213
  1019. package/dist/fast-terms.d.ts +0 -9
  1020. package/dist/fenced-check-coverage.d.ts +0 -62
  1021. package/dist/findings.d.ts +0 -224
  1022. package/dist/first-run.d.ts +0 -197
  1023. package/dist/first-tasks-child.d.ts +0 -1
  1024. package/dist/flaky-ci.d.ts +0 -31
  1025. package/dist/flaky-cli.d.ts +0 -60
  1026. package/dist/flaky.d.ts +0 -83
  1027. package/dist/fleet-schema.d.ts +0 -17
  1028. package/dist/flow-actions.d.ts +0 -79
  1029. package/dist/flow-browser.d.ts +0 -103
  1030. package/dist/flow-cadence.d.ts +0 -48
  1031. package/dist/flow-card-task.d.ts +0 -11
  1032. package/dist/flow-changed.d.ts +0 -14
  1033. package/dist/flow-code.d.ts +0 -84
  1034. package/dist/flow-draft.d.ts +0 -42
  1035. package/dist/flow-engine.d.ts +0 -82
  1036. package/dist/flow-gallery-ui.d.ts +0 -73
  1037. package/dist/flow-gallery.d.ts +0 -147
  1038. package/dist/flow-insights.d.ts +0 -104
  1039. package/dist/flow-items.d.ts +0 -37
  1040. package/dist/flow-live.d.ts +0 -16
  1041. package/dist/flow-people.d.ts +0 -23
  1042. package/dist/flow-pull-request.d.ts +0 -14
  1043. package/dist/flow-replies.d.ts +0 -48
  1044. package/dist/flow-result-card.d.ts +0 -22
  1045. package/dist/flow-schedule.d.ts +0 -154
  1046. package/dist/flow-scripts.d.ts +0 -31
  1047. package/dist/flow-secrets.d.ts +0 -13
  1048. package/dist/flow-send.d.ts +0 -54
  1049. package/dist/flow-share.d.ts +0 -78
  1050. package/dist/flow-sort.d.ts +0 -63
  1051. package/dist/flow-starters-ui.d.ts +0 -15
  1052. package/dist/flow-starters.d.ts +0 -63
  1053. package/dist/flow-steps.d.ts +0 -52
  1054. package/dist/flow-triggers.d.ts +0 -303
  1055. package/dist/flow-unattended-words.d.ts +0 -48
  1056. package/dist/flow-unattended.d.ts +0 -259
  1057. package/dist/flows-cli.d.ts +0 -358
  1058. package/dist/flows-ui.d.ts +0 -70
  1059. package/dist/flows.d.ts +0 -136
  1060. package/dist/folder-gate.d.ts +0 -32
  1061. package/dist/folder-look.d.ts +0 -110
  1062. package/dist/follow-through-brief.d.ts +0 -12
  1063. package/dist/follow-through-cli.d.ts +0 -23
  1064. package/dist/fonts.d.ts +0 -19
  1065. package/dist/gaps.d.ts +0 -35
  1066. package/dist/gate-failure.d.ts +0 -40
  1067. package/dist/git-floor.d.ts +0 -16
  1068. package/dist/git-incident.d.ts +0 -65
  1069. package/dist/git-views.d.ts +0 -20
  1070. package/dist/git.d.ts +0 -54
  1071. package/dist/github-import.d.ts +0 -62
  1072. package/dist/github-jobs.d.ts +0 -25
  1073. package/dist/google-mail.d.ts +0 -59
  1074. package/dist/grant.d.ts +0 -136
  1075. package/dist/graph.d.ts +0 -164
  1076. package/dist/guides.d.ts +0 -22
  1077. package/dist/handover-note.d.ts +0 -33
  1078. package/dist/health-cli.d.ts +0 -3
  1079. package/dist/home-groups.d.ts +0 -39
  1080. package/dist/html.d.ts +0 -85
  1081. package/dist/install-method.d.ts +0 -17
  1082. package/dist/integrations-ui.d.ts +0 -17
  1083. package/dist/integrations.d.ts +0 -138
  1084. package/dist/invoke.d.ts +0 -228
  1085. package/dist/is-record.d.ts +0 -2
  1086. package/dist/issues.d.ts +0 -41
  1087. package/dist/jsonl-discriminants.d.ts +0 -11
  1088. package/dist/keymap.d.ts +0 -41
  1089. package/dist/keys.d.ts +0 -108
  1090. package/dist/kits-ui.d.ts +0 -16
  1091. package/dist/kits.d.ts +0 -88
  1092. package/dist/knowledge-cli.d.ts +0 -132
  1093. package/dist/knowledge-ui.d.ts +0 -45
  1094. package/dist/landed-cleanup.d.ts +0 -175
  1095. package/dist/laptop-background.d.ts +0 -187
  1096. package/dist/laptop-service.d.ts +0 -111
  1097. package/dist/latency-timeline.d.ts +0 -46
  1098. package/dist/lead-about.d.ts +0 -35
  1099. package/dist/lead-answer-eval.d.ts +0 -93
  1100. package/dist/lead-capabilities.d.ts +0 -57
  1101. package/dist/lead-cli-live.d.ts +0 -56
  1102. package/dist/lead-cli.d.ts +0 -58
  1103. package/dist/lead-commitments.d.ts +0 -84
  1104. package/dist/lead-context.d.ts +0 -45
  1105. package/dist/lead-contract.d.ts +0 -10
  1106. package/dist/lead-doors.d.ts +0 -122
  1107. package/dist/lead-follow.d.ts +0 -26
  1108. package/dist/lead-identity.d.ts +0 -23
  1109. package/dist/lead-latency-schema.d.ts +0 -24
  1110. package/dist/lead-people.d.ts +0 -55
  1111. package/dist/lead-progress.d.ts +0 -67
  1112. package/dist/lead-queue-runtime.d.ts +0 -46
  1113. package/dist/lead-queue.d.ts +0 -104
  1114. package/dist/lead-route.d.ts +0 -56
  1115. package/dist/lead-status.d.ts +0 -116
  1116. package/dist/lead-sweep.d.ts +0 -67
  1117. package/dist/lead-tools.d.ts +0 -167
  1118. package/dist/lead-voice.d.ts +0 -85
  1119. package/dist/lead.d.ts +0 -142
  1120. package/dist/learning-child.d.ts +0 -1
  1121. package/dist/learning-look.d.ts +0 -25
  1122. package/dist/ledger-chain.d.ts +0 -46
  1123. package/dist/ledger-csv.d.ts +0 -4
  1124. package/dist/ledger-view.d.ts +0 -27
  1125. package/dist/lesson-notes.d.ts +0 -81
  1126. package/dist/limits-ui.d.ts +0 -34
  1127. package/dist/link.d.ts +0 -72
  1128. package/dist/live-backup.d.ts +0 -39
  1129. package/dist/live-bus.d.ts +0 -141
  1130. package/dist/live-children-read.d.ts +0 -52
  1131. package/dist/live-children.d.ts +0 -73
  1132. package/dist/live-detail.d.ts +0 -27
  1133. package/dist/live-input.d.ts +0 -68
  1134. package/dist/live-main-read.d.ts +0 -19
  1135. package/dist/live-notes.d.ts +0 -20
  1136. package/dist/live-open.d.ts +0 -28
  1137. package/dist/live-records.d.ts +0 -149
  1138. package/dist/live-reply.d.ts +0 -83
  1139. package/dist/live-terminal.d.ts +0 -273
  1140. package/dist/live.d.ts +0 -152
  1141. package/dist/local-owner.d.ts +0 -124
  1142. package/dist/log.d.ts +0 -7
  1143. package/dist/login-secrets.d.ts +0 -60
  1144. package/dist/machine-check.d.ts +0 -16
  1145. package/dist/machine-identity.d.ts +0 -75
  1146. package/dist/mailbox.d.ts +0 -57
  1147. package/dist/maintenance.d.ts +0 -13
  1148. package/dist/mcp-connect.d.ts +0 -181
  1149. package/dist/mcp-core.d.ts +0 -110
  1150. package/dist/mcp-http.d.ts +0 -32
  1151. package/dist/mcp-oauth.d.ts +0 -92
  1152. package/dist/mcp-person.d.ts +0 -22
  1153. package/dist/mcp.d.ts +0 -20
  1154. package/dist/memory-cli.d.ts +0 -768
  1155. package/dist/memory-pass.d.ts +0 -151
  1156. package/dist/memory-tidy.d.ts +0 -181
  1157. package/dist/memory-use.d.ts +0 -35
  1158. package/dist/merge-checklist.d.ts +0 -55
  1159. package/dist/metrics.d.ts +0 -6
  1160. package/dist/mobile-viewport.d.ts +0 -7
  1161. package/dist/model-catalog.d.ts +0 -123
  1162. package/dist/model-choices.d.ts +0 -235
  1163. package/dist/model-names.d.ts +0 -6
  1164. package/dist/models-cli.d.ts +0 -307
  1165. package/dist/models-ui.d.ts +0 -161
  1166. package/dist/modes.d.ts +0 -99
  1167. package/dist/monitoring-settings.d.ts +0 -44
  1168. package/dist/monitoring-ui.d.ts +0 -23
  1169. package/dist/monitoring.d.ts +0 -34
  1170. package/dist/names.d.ts +0 -67
  1171. package/dist/needs-you.d.ts +0 -164
  1172. package/dist/never-index.d.ts +0 -3
  1173. package/dist/nightly-check.d.ts +0 -107
  1174. package/dist/nightly-github.d.ts +0 -318
  1175. package/dist/notification-delivery.d.ts +0 -19
  1176. package/dist/notification-rows.d.ts +0 -30
  1177. package/dist/oauth-run-token.d.ts +0 -51
  1178. package/dist/observations.d.ts +0 -36
  1179. package/dist/oidc.d.ts +0 -71
  1180. package/dist/onboard.d.ts +0 -108
  1181. package/dist/one-step-chat-schema.d.ts +0 -22
  1182. package/dist/openrouter-models.d.ts +0 -34
  1183. package/dist/operate-remote-arguments.d.ts +0 -36
  1184. package/dist/operate-remote.d.ts +0 -98
  1185. package/dist/operate.d.ts +0 -401
  1186. package/dist/orphan-sweep.d.ts +0 -65
  1187. package/dist/page-work-contract.d.ts +0 -21
  1188. package/dist/password-bearer.d.ts +0 -25
  1189. package/dist/passwordless.d.ts +0 -23
  1190. package/dist/peek-cli.d.ts +0 -112
  1191. package/dist/peek.d.ts +0 -110
  1192. package/dist/people-audit-ui.d.ts +0 -16
  1193. package/dist/person-proof.d.ts +0 -2
  1194. package/dist/phase-routing.d.ts +0 -401
  1195. package/dist/plain-schema.d.ts +0 -23
  1196. package/dist/plain-words.d.ts +0 -20
  1197. package/dist/plan-auto.d.ts +0 -25
  1198. package/dist/plan-login.d.ts +0 -14
  1199. package/dist/plan.d.ts +0 -188
  1200. package/dist/plane-review.d.ts +0 -54
  1201. package/dist/planner-source.d.ts +0 -225
  1202. package/dist/planner.d.ts +0 -76
  1203. package/dist/policy-ui.d.ts +0 -22
  1204. package/dist/policy.d.ts +0 -92
  1205. package/dist/prepared-evidence.d.ts +0 -17
  1206. package/dist/principal.d.ts +0 -42
  1207. package/dist/probe.d.ts +0 -46
  1208. package/dist/process-custody.d.ts +0 -17
  1209. package/dist/process-liveness.d.ts +0 -13
  1210. package/dist/process-tree.d.ts +0 -39
  1211. package/dist/project-access.d.ts +0 -17
  1212. package/dist/project-activity.d.ts +0 -20
  1213. package/dist/project-admission.d.ts +0 -105
  1214. package/dist/project-cli.d.ts +0 -19
  1215. package/dist/project-concurrency.d.ts +0 -62
  1216. package/dist/project-delete-ui.d.ts +0 -96
  1217. package/dist/project-delete.d.ts +0 -59
  1218. package/dist/project-demo.d.ts +0 -12
  1219. package/dist/project-file.d.ts +0 -3
  1220. package/dist/project-identity.d.ts +0 -52
  1221. package/dist/project-knowledge.d.ts +0 -124
  1222. package/dist/project-learning.d.ts +0 -120
  1223. package/dist/project-memory.d.ts +0 -70
  1224. package/dist/project-outcomes.d.ts +0 -119
  1225. package/dist/project-sandbox.d.ts +0 -59
  1226. package/dist/project-skills.d.ts +0 -139
  1227. package/dist/project-tools.d.ts +0 -318
  1228. package/dist/project.d.ts +0 -65
  1229. package/dist/prompt.d.ts +0 -33
  1230. package/dist/proof.d.ts +0 -457
  1231. package/dist/proposal.d.ts +0 -70
  1232. package/dist/protected-storage-look.d.ts +0 -1
  1233. package/dist/protected-storage.d.ts +0 -98
  1234. package/dist/provider-auth.d.ts +0 -143
  1235. package/dist/provider-capture.d.ts +0 -34
  1236. package/dist/provider-connection.d.ts +0 -23
  1237. package/dist/provider-home.d.ts +0 -22
  1238. package/dist/provider-limits.d.ts +0 -37
  1239. package/dist/provider.d.ts +0 -369
  1240. package/dist/public-access.d.ts +0 -52
  1241. package/dist/public-check.d.ts +0 -37
  1242. package/dist/publish.d.ts +0 -146
  1243. package/dist/pull-request-flow.d.ts +0 -189
  1244. package/dist/pull-request-schema.d.ts +0 -5
  1245. package/dist/pull-request-ui.d.ts +0 -25
  1246. package/dist/pulls.d.ts +0 -121
  1247. package/dist/push.d.ts +0 -120
  1248. package/dist/quality.d.ts +0 -8
  1249. package/dist/quick-start.d.ts +0 -26
  1250. package/dist/read-executor-worker.d.ts +0 -1
  1251. package/dist/read-executor.d.ts +0 -66
  1252. package/dist/read-only-request.d.ts +0 -4
  1253. package/dist/recipe-ui.d.ts +0 -21
  1254. package/dist/recipes.d.ts +0 -56
  1255. package/dist/release-adapters.d.ts +0 -205
  1256. package/dist/release-approval.d.ts +0 -180
  1257. package/dist/release-authority.d.ts +0 -173
  1258. package/dist/release-auto.d.ts +0 -184
  1259. package/dist/release-card.d.ts +0 -156
  1260. package/dist/release-carry.d.ts +0 -261
  1261. package/dist/release-ci-hold.d.ts +0 -41
  1262. package/dist/release-cli.d.ts +0 -34
  1263. package/dist/release-coverage.d.ts +0 -16
  1264. package/dist/release-gate.d.ts +0 -84
  1265. package/dist/release-git.d.ts +0 -43
  1266. package/dist/release-links.d.ts +0 -29
  1267. package/dist/release-net.d.ts +0 -90
  1268. package/dist/release-next.d.ts +0 -48
  1269. package/dist/release-recheck.d.ts +0 -146
  1270. package/dist/release-refusal.d.ts +0 -32
  1271. package/dist/release-view.d.ts +0 -37
  1272. package/dist/release.d.ts +0 -806
  1273. package/dist/releases.d.ts +0 -94
  1274. package/dist/remote-audit.d.ts +0 -79
  1275. package/dist/remote-command.d.ts +0 -45
  1276. package/dist/remote-destination.d.ts +0 -36
  1277. package/dist/remote-exec.d.ts +0 -38
  1278. package/dist/remote-main.d.ts +0 -111
  1279. package/dist/remote-run.d.ts +0 -20
  1280. package/dist/remote.d.ts +0 -67
  1281. package/dist/render.d.ts +0 -64
  1282. package/dist/reply-shape.d.ts +0 -106
  1283. package/dist/reply-voice.d.ts +0 -23
  1284. package/dist/report-summary.d.ts +0 -22
  1285. package/dist/reported-usage.d.ts +0 -69
  1286. package/dist/repos.d.ts +0 -67
  1287. package/dist/repository-context-ui.d.ts +0 -3
  1288. package/dist/repository-context.d.ts +0 -66
  1289. package/dist/request-budget-ui.d.ts +0 -14
  1290. package/dist/request-budget.d.ts +0 -127
  1291. package/dist/restart-certification.d.ts +0 -133
  1292. package/dist/result-actions.d.ts +0 -36
  1293. package/dist/result-acts.d.ts +0 -112
  1294. package/dist/result-completion.d.ts +0 -35
  1295. package/dist/result-evidence-readers.d.ts +0 -42
  1296. package/dist/result-follow-ups.d.ts +0 -118
  1297. package/dist/result-review.d.ts +0 -220
  1298. package/dist/result-shots.d.ts +0 -59
  1299. package/dist/retention-ui.d.ts +0 -21
  1300. package/dist/retention.d.ts +0 -77
  1301. package/dist/review-context.d.ts +0 -245
  1302. package/dist/review-evidence.d.ts +0 -33
  1303. package/dist/review-switch.d.ts +0 -36
  1304. package/dist/reviewer.d.ts +0 -99
  1305. package/dist/route-change-check.d.ts +0 -4
  1306. package/dist/route-change.d.ts +0 -22
  1307. package/dist/route-hooks.d.ts +0 -54
  1308. package/dist/route-results.d.ts +0 -75
  1309. package/dist/route-rules.d.ts +0 -324
  1310. package/dist/route-savings.d.ts +0 -136
  1311. package/dist/route-store.d.ts +0 -300
  1312. package/dist/run-closeout.d.ts +0 -89
  1313. package/dist/run-efficiency.d.ts +0 -74
  1314. package/dist/run-ending.d.ts +0 -21
  1315. package/dist/runner-process.d.ts +0 -76
  1316. package/dist/runner.d.ts +0 -324
  1317. package/dist/sample-project.d.ts +0 -31
  1318. package/dist/sandbox-launch.d.ts +0 -1
  1319. package/dist/sandbox-runtime.d.ts +0 -128
  1320. package/dist/scan.d.ts +0 -32
  1321. package/dist/scope.d.ts +0 -1067
  1322. package/dist/scout-browser-lock.d.ts +0 -69
  1323. package/dist/scout-browser.d.ts +0 -107
  1324. package/dist/scout-net.d.ts +0 -25
  1325. package/dist/scout-report.d.ts +0 -23
  1326. package/dist/scout.d.ts +0 -142
  1327. package/dist/secret-mint.d.ts +0 -1
  1328. package/dist/serve.d.ts +0 -11
  1329. package/dist/server/agents-computers.d.ts +0 -9
  1330. package/dist/server/agents-live-filed.d.ts +0 -17
  1331. package/dist/server/agents-live-lead.d.ts +0 -47
  1332. package/dist/server/agents-live-room.d.ts +0 -23
  1333. package/dist/server/chat.d.ts +0 -39
  1334. package/dist/server/chrome.d.ts +0 -328
  1335. package/dist/server/edge-refusal.d.ts +0 -7
  1336. package/dist/server/flows.d.ts +0 -8
  1337. package/dist/server/guards.d.ts +0 -80
  1338. package/dist/server/handler-context.d.ts +0 -22
  1339. package/dist/server/handler-registry.d.ts +0 -23
  1340. package/dist/server/home-asks.d.ts +0 -45
  1341. package/dist/server/home.d.ts +0 -65
  1342. package/dist/server/http.d.ts +0 -337
  1343. package/dist/server/in-place.d.ts +0 -15
  1344. package/dist/server/kit-standalone.d.ts +0 -22
  1345. package/dist/server/kit.d.ts +0 -452
  1346. package/dist/server/last-checks.d.ts +0 -17
  1347. package/dist/server/live.d.ts +0 -74
  1348. package/dist/server/merge-ready-view.d.ts +0 -10
  1349. package/dist/server/mutation-key.d.ts +0 -70
  1350. package/dist/server/pages-assets.d.ts +0 -11
  1351. package/dist/server/pages.d.ts +0 -8
  1352. package/dist/server/people-tokens.d.ts +0 -18
  1353. package/dist/server/remote-hooks.d.ts +0 -29
  1354. package/dist/server/remote.d.ts +0 -59
  1355. package/dist/server/render-chat.d.ts +0 -439
  1356. package/dist/server/render-code-map.d.ts +0 -30
  1357. package/dist/server/render-flaky.d.ts +0 -20
  1358. package/dist/server/render-follow-through.d.ts +0 -11
  1359. package/dist/server/render-history.d.ts +0 -51
  1360. package/dist/server/render-new-task.d.ts +0 -54
  1361. package/dist/server/render-pages.d.ts +0 -236
  1362. package/dist/server/render-people.d.ts +0 -102
  1363. package/dist/server/render-projects.d.ts +0 -104
  1364. package/dist/server/render-release.d.ts +0 -19
  1365. package/dist/server/render-results.d.ts +0 -754
  1366. package/dist/server/render-settings.d.ts +0 -93
  1367. package/dist/server/render-tasks.d.ts +0 -774
  1368. package/dist/server/request-context.d.ts +0 -78
  1369. package/dist/server/retired-routes.d.ts +0 -17
  1370. package/dist/server/route-policy.d.ts +0 -18
  1371. package/dist/server/route-table.d.ts +0 -114
  1372. package/dist/server/runtime.d.ts +0 -342
  1373. package/dist/server/session.d.ts +0 -192
  1374. package/dist/server/settings.d.ts +0 -76
  1375. package/dist/server/signup-gate.d.ts +0 -9
  1376. package/dist/server/sweeps.d.ts +0 -4
  1377. package/dist/server/task-views.d.ts +0 -98
  1378. package/dist/server/tasks.d.ts +0 -83
  1379. package/dist/server/terminals.d.ts +0 -31
  1380. package/dist/server/welcome.d.ts +0 -28
  1381. package/dist/server-telemetry.d.ts +0 -87
  1382. package/dist/settings-groups-ui.d.ts +0 -286
  1383. package/dist/settings-kit-script.d.ts +0 -21
  1384. package/dist/settings-kit.d.ts +0 -173
  1385. package/dist/settings-proofs.d.ts +0 -64
  1386. package/dist/setup-guide.d.ts +0 -39
  1387. package/dist/shared-deps.d.ts +0 -115
  1388. package/dist/sign-in-guard.d.ts +0 -70
  1389. package/dist/skills-ui.d.ts +0 -12
  1390. package/dist/skills.d.ts +0 -99
  1391. package/dist/slack-api.d.ts +0 -59
  1392. package/dist/slack-chat.d.ts +0 -37
  1393. package/dist/slack-settings.d.ts +0 -4
  1394. package/dist/slack-socket.d.ts +0 -12
  1395. package/dist/slack.d.ts +0 -6
  1396. package/dist/sleep.d.ts +0 -2
  1397. package/dist/source-key.d.ts +0 -2
  1398. package/dist/spend-report.d.ts +0 -87
  1399. package/dist/spend-ui.d.ts +0 -80
  1400. package/dist/spend.d.ts +0 -142
  1401. package/dist/sqlite-runtime.d.ts +0 -3
  1402. package/dist/sqlite-telemetry.d.ts +0 -9
  1403. package/dist/sso-settings.d.ts +0 -33
  1404. package/dist/sso-ui.d.ts +0 -26
  1405. package/dist/staged-runtimes.d.ts +0 -54
  1406. package/dist/steer-capabilities.d.ts +0 -32
  1407. package/dist/steer-controls.d.ts +0 -14
  1408. package/dist/steer-live.d.ts +0 -19
  1409. package/dist/steer-mailbox.d.ts +0 -46
  1410. package/dist/steer-status.d.ts +0 -25
  1411. package/dist/stop-proof.d.ts +0 -67
  1412. package/dist/storage-sweep-child.d.ts +0 -1
  1413. package/dist/storage-sweep-process.d.ts +0 -55
  1414. package/dist/storage-sweep-schedule.d.ts +0 -30
  1415. package/dist/storage-sweep.d.ts +0 -77
  1416. package/dist/storage-ui.d.ts +0 -23
  1417. package/dist/storage.d.ts +0 -68
  1418. package/dist/store-baseline.d.ts +0 -19
  1419. package/dist/store.d.ts +0 -8613
  1420. package/dist/stream-scope.d.ts +0 -18
  1421. package/dist/structured-output.d.ts +0 -57
  1422. package/dist/style-asset.d.ts +0 -7
  1423. package/dist/subagent-admin.d.ts +0 -53
  1424. package/dist/subagent-desk.d.ts +0 -59
  1425. package/dist/subagent-memory.d.ts +0 -65
  1426. package/dist/subagent-question.d.ts +0 -59
  1427. package/dist/subagent-tools.d.ts +0 -125
  1428. package/dist/subagent-week.d.ts +0 -68
  1429. package/dist/subagent-work.d.ts +0 -76
  1430. package/dist/subagents-ui.d.ts +0 -22
  1431. package/dist/subagents.d.ts +0 -146
  1432. package/dist/subscription-chat.d.ts +0 -54
  1433. package/dist/summary.d.ts +0 -33
  1434. package/dist/surface.d.ts +0 -49
  1435. package/dist/sweep-gate.d.ts +0 -10
  1436. package/dist/sweep-quarantine.d.ts +0 -29
  1437. package/dist/sync.d.ts +0 -94
  1438. package/dist/tailnet.d.ts +0 -11
  1439. package/dist/tamper-scan.d.ts +0 -4
  1440. package/dist/task-activity.d.ts +0 -27
  1441. package/dist/task-aliases.d.ts +0 -5
  1442. package/dist/task-archive.d.ts +0 -13
  1443. package/dist/task-base.d.ts +0 -39
  1444. package/dist/task-composer.d.ts +0 -14
  1445. package/dist/task-control.d.ts +0 -159
  1446. package/dist/task-live.d.ts +0 -8
  1447. package/dist/task-moves.d.ts +0 -90
  1448. package/dist/task-outcome-cli.d.ts +0 -30
  1449. package/dist/task-review-brief.d.ts +0 -69
  1450. package/dist/task-sizing.d.ts +0 -58
  1451. package/dist/task-source.d.ts +0 -77
  1452. package/dist/task-status.d.ts +0 -324
  1453. package/dist/task-text.d.ts +0 -31
  1454. package/dist/team-chat-authorization.d.ts +0 -11
  1455. package/dist/team-contract.d.ts +0 -103
  1456. package/dist/team-http.d.ts +0 -25
  1457. package/dist/team-leads.d.ts +0 -85
  1458. package/dist/team-runtime.d.ts +0 -25
  1459. package/dist/team-ui.d.ts +0 -4
  1460. package/dist/team-updates.d.ts +0 -8
  1461. package/dist/teams-api.d.ts +0 -33
  1462. package/dist/teams-chat.d.ts +0 -36
  1463. package/dist/teams-settings.d.ts +0 -14
  1464. package/dist/teams.d.ts +0 -24
  1465. package/dist/teardown-git.d.ts +0 -164
  1466. package/dist/telegram-flow.d.ts +0 -112
  1467. package/dist/telegram-lead.d.ts +0 -151
  1468. package/dist/telegram-live.d.ts +0 -116
  1469. package/dist/telegram-progress.d.ts +0 -20
  1470. package/dist/telegram-settings.d.ts +0 -9
  1471. package/dist/telegram-status.d.ts +0 -83
  1472. package/dist/telegram-team.d.ts +0 -68
  1473. package/dist/telegram.d.ts +0 -271
  1474. package/dist/templates.d.ts +0 -69
  1475. package/dist/terminal-catalog.d.ts +0 -11
  1476. package/dist/terminal-text.d.ts +0 -11
  1477. package/dist/test-infra.d.ts +0 -34
  1478. package/dist/test-temp.d.ts +0 -40
  1479. package/dist/text-limits.d.ts +0 -297
  1480. package/dist/tidy.d.ts +0 -130
  1481. package/dist/tier-report.d.ts +0 -44
  1482. package/dist/token-notices.d.ts +0 -11
  1483. package/dist/tokens-cli.d.ts +0 -21
  1484. package/dist/tool-broker.d.ts +0 -52
  1485. package/dist/tool-launcher.d.ts +0 -1
  1486. package/dist/tool-secret-store.d.ts +0 -167
  1487. package/dist/toolroll-update-cli.d.ts +0 -15
  1488. package/dist/toolroll-update-ui.d.ts +0 -47
  1489. package/dist/toolroll-update.d.ts +0 -265
  1490. package/dist/tools-ui.d.ts +0 -51
  1491. package/dist/transitions-recipes.d.ts +0 -1
  1492. package/dist/tree-proof.d.ts +0 -34
  1493. package/dist/tui-contract.d.ts +0 -144
  1494. package/dist/tui-source.d.ts +0 -14
  1495. package/dist/typed-start.d.ts +0 -51
  1496. package/dist/unfenced-test-support.d.ts +0 -2
  1497. package/dist/up-processes.d.ts +0 -162
  1498. package/dist/up-role-child.d.ts +0 -1
  1499. package/dist/update-notice.d.ts +0 -5
  1500. package/dist/vanished-retry.d.ts +0 -30
  1501. package/dist/verification-evidence.d.ts +0 -68
  1502. package/dist/version.d.ts +0 -2
  1503. package/dist/wake-hub.d.ts +0 -72
  1504. package/dist/webhook-limits.d.ts +0 -23
  1505. package/dist/webhook-readers.d.ts +0 -56
  1506. package/dist/webhook-signing.d.ts +0 -27
  1507. package/dist/webhooks.d.ts +0 -84
  1508. package/dist/welcome-facts.d.ts +0 -18
  1509. package/dist/when-html.d.ts +0 -40
  1510. package/dist/work-index.d.ts +0 -175
  1511. package/dist/work-summary.d.ts +0 -61
  1512. package/dist/workspace-motion.d.ts +0 -4
  1513. package/dist/workspace-revision.d.ts +0 -48
  1514. package/dist/workspace-ui.d.ts +0 -385
  1515. package/dist/worktree-notices.d.ts +0 -13
  1516. package/dist/worktree.d.ts +0 -365
  1517. package/dist/writes-mode.d.ts +0 -9
  1518. package/dist/youiyoux-intake.d.ts +0 -234
package/dist/release.js CHANGED
@@ -1,66 +1,20 @@
1
- /**
2
- * `toolroll release <branch>` (D10): the whole release of Toolroll itself as one resumable command. The owner's
3
- * approval of the release scope is the only human step; everything else runs headless, each waiting step with a time
4
- * limit:
5
- *
6
- * gate → approval → check → complete → quiet → deploy → link → ci → merge → tree → tag → publish → homebrew → done
7
- *
8
- * gate, before filing a task for that commit, looks at the pull request's required checks on it: one that failed stops
9
- * the release before anything is filed or sent for approval; it waits, naming them, for checks not started or still
10
- * running, and stops if they don't finish within its limit (a task already filed is not looked at again; ci checks
11
- * once more before merging). It then files a prepared-candidate task pinned to the branch's exact commit, with the full
12
- * release check. approval
13
- * waits for an active approver's yes to that exact scope (never a mode's, an AI's or the lead's). check requires a Full
14
- * result of that commit: a failed check stops the release and stays visible, nothing reruns it. complete marks that
15
- * exact result Complete through the task's own authorization. quiet waits until nothing builds. deploy runs the
16
- * candidate's own deploy (scripts/deploy-browser.mjs: drain, backup, rehearsal, swap, health) and keeps the runtime its
17
- * final JSON names; an interrupted one is recovered from its saved stage (--phase recover) before anything else. link
18
- * points both CLI names at that runtime's bin.js, putting them back if either doesn't answer, and goes on only when
19
- * the console, worker and both names run the gated commit. ci waits for every
20
- * reported pull-request check on that same commit to pass, with every required check present: pending, missing,
21
- * skipped or failed never merges. merge
22
- * squash-merges with the head pinned to the gated commit, tree proves main's new commit has exactly the gated tree,
23
- * and only then tag pushes the version tag, whose macOS matrix must pass before npm publication (publish.yml). publish
24
- * waits for npm, the GitHub release and the macOS checks; homebrew updates the tap's formula and merges it (after its checks, when the tap runs any).
25
- *
26
- * A private journal (mode 0600, written whole then renamed) records what each step is about to do before it does
27
- * anything outside this machine, and what it saw after. A stop — a time limit, a failure, a crash, Ctrl-C — leaves the
28
- * journal at its step; running the same command again finds what already happened (the task, the completion, the
29
- * merge, the tag, the package, the tap change) instead of doing it twice, and continues from the first unfinished
30
- * step. A branch, pull request or tag that no longer matches what was gated stops the release rather than guess.
31
- *
32
- * Everything outside this module is an adapter (release-adapters.ts), so the state machine is tested without git,
33
- * GitHub, npm or a running Toolroll.
34
- */
35
1
  import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, writeFileSync } from "node:fs";
36
2
  import { randomUUID } from "node:crypto";
37
3
  import { dirname, join } from "node:path";
38
4
  import { personProof } from "./person-proof.js";
39
5
  import { RELEASE_CI_RUNNING_WORDS as CI_RUNNING_WORDS } from "./release-ci-hold.js";
40
6
  import { transientFailure } from "./release-net.js";
41
- /** The pull-request checks a release waits for, by exact job name (docs/plans/test-matrix.md). Every one must have
42
- * concluded `success` — executed, never skipped — on the gated commit; src/ci-workflow.test.ts holds the workflows to
43
- * this list, and publish.yml's release proof to the same list. */
44
7
  export const REQUIRED_PR_CHECKS = [
45
- // The unit suite on Node 24 (ci.yml "test-shard" and "test"), on every pull request.
46
8
  "node 24 · ubuntu-latest",
47
- // The area lanes (ci.yml), on every pull request except a documentation-only one (scripts/ci-scope.mjs), where they
48
- // are skipped; a release's pull request runs them.
49
9
  "linux native containment · delegated cgroup v2",
50
10
  "linux fence · sandbox-runtime",
51
11
  "Windows Job Object containment",
52
- // The git lanes (ci.yml job "git"): the declared floor (git-floor.ts) and Debian trixie's 2.47.
53
12
  "git 2.41 · debian trixie",
54
13
  "git 2.47 · debian trixie",
55
- // The unit suite on macOS (ci.yml jobs "macos-shard" and "macos"; pipeline-speed.md, item 3a), Node 24.
56
14
  "node 24 · macos-latest",
57
- // Node 22, the engines floor, on Linux and macOS (release-candidate.yml): on a release-* branch's pull request,
58
- // skipped on every other pull request.
59
15
  "node 22 · ubuntu-latest",
60
16
  "node 22 · macos-latest",
61
17
  ];
62
- /** The workflow file each REQUIRED_PR_CHECKS job belongs to: a job of that name from any other workflow (a lookalike
63
- * added beside it) never stands for it (Codex review round 1, inherited CI limitation). */
64
18
  export const REQUIRED_PR_CHECKS_WORKFLOW = {
65
19
  "node 24 · ubuntu-latest": ".github/workflows/ci.yml",
66
20
  "linux native containment · delegated cgroup v2": ".github/workflows/ci.yml",
@@ -72,76 +26,44 @@ export const REQUIRED_PR_CHECKS_WORKFLOW = {
72
26
  "node 22 · ubuntu-latest": ".github/workflows/release-candidate.yml",
73
27
  "node 22 · macos-latest": ".github/workflows/release-candidate.yml",
74
28
  };
75
- /**
76
- * The pull-request checks main's GitHub protection is not yet required to name (eval-harness review 2, finding 1).
77
- * Empty since the test matrix (docs/plans/test-matrix.md): publication's release proof trusts what main's protection
78
- * required at the merge, so main's protection must name every REQUIRED_PR_CHECKS check, and a release refuses to merge
79
- * (and so to publish) until it does.
80
- */
81
29
  export const PROTECTION_REPORT_ONLY_CHECKS = [];
82
- /** The checks main's protection must require at minimum: every required check that isn't report-only. */
83
30
  export const PROTECTION_MINIMUM_CHECKS = REQUIRED_PR_CHECKS.filter(name => !PROTECTION_REPORT_ONLY_CHECKS.includes(name));
84
- /**
85
- * Pull-request checks a release never waits for or fails on, by exact name and the workflow file that defines them:
86
- * youiyoux's UI drift check (src/design/KIT.md), which fails a pull request that adds design drift but says nothing
87
- * about whether a build is safe to release, and the scripted journeys on a pull request (journeys.yml,
88
- * docs/plans/ci-speed.md item 4), advisory while they settle in CI: the release check runs every journey itself. Only a
89
- * GitHub Actions run of that name from that workflow is left out; the same name from anywhere else is judged like any
90
- * other check. Never a required check.
91
- */
92
31
  export const ADVISORY_PR_CHECKS = {
93
32
  "youiyoux · UI drift": ".github/workflows/youiyoux.yml",
94
33
  "journeys · app (scripted)": ".github/workflows/journeys.yml",
95
34
  "journeys · flows (scripted)": ".github/workflows/journeys.yml",
96
35
  "upgrade path · scope": ".github/workflows/upgrade-path.yml",
97
36
  "upgrade path": ".github/workflows/upgrade-path.yml",
37
+ "install smoke · ubuntu-24.04": ".github/workflows/install-smoke.yml",
38
+ "install smoke · macos-latest": ".github/workflows/install-smoke.yml",
98
39
  };
99
- /** The checks a release's publication waits for on its tag (.github/workflows/publish.yml, docs/plans/test-matrix.md):
100
- * the release proof (the tagged tree passed every REQUIRED_PR_CHECKS check on its pull request, read from GitHub) and
101
- * the publish job that needs it. The tag runs no tests again. Nothing else reported on the merge commit (main-push.yml)
102
- * holds publication. */
103
40
  export const RELEASE_TAG_CHECKS = ["release proof", "publish"];
104
41
  export const RELEASE_TAG_WORKFLOW = ".github/workflows/publish.yml";
105
42
  export const RELEASE_STEPS = ["gate", "approval", "check", "complete", "quiet", "deploy", "link", "ci", "merge", "tree", "tag", "publish", "homebrew", "done"];
106
- /** How long each waiting step may take, in minutes, before the release stops there (rerunning continues from it). The
107
- * check's covers the first attempt and the two same-commit reruns the plane may give it, each of which a busy machine
108
- * may stretch to two hours (check-load.ts). */
109
43
  export const RELEASE_LIMITS = { gate: 60, approval: 24 * 60, check: 360, quiet: 60, deploy: 30, ci: 60, publish: 45, homebrew: 45 };
110
44
  const POLL_MS = 15_000;
111
- /**
112
- * Failure classes replace a flat flake allowance (docs/plans/eval-harness.md; check-failure.ts says the classes): only a
113
- * failure the plane itself confirmed as infrastructure is ever run again under the same approval — at most once per
114
- * incident and twice per candidate — for a release check and for a GitHub CI job alike. A failing test, a typecheck, an
115
- * attack test, a migration: none tolerated. An unexplained failure blocks, and a person decides.
116
- */
117
45
  export const INFRA_RERUNS_PER_INCIDENT = 1;
118
46
  export const INFRA_RERUNS_PER_CANDIDATE = 2;
119
- /** A stop the release reports: the step it stopped at and why, in words. */
120
47
  class Stop extends Error {
121
48
  reason;
122
49
  build;
123
- /** `build`: the release build itself failed before its check (not a failed check). */
124
50
  constructor(reason, message, build = false) {
125
51
  super(message);
126
52
  this.reason = reason;
127
53
  this.build = build;
128
54
  }
129
55
  }
130
- /** The tap change's checks failed: Homebrew's own state, never a stop of a published release. */
131
56
  class HomebrewFailed extends Error {
132
57
  }
133
- /** The branch moved before the deploy reservation: carry the approval to the new head, or file it for a person. */
134
58
  class Restart extends Error {
135
59
  head;
136
60
  updated;
137
- /** `updated`: Toolroll itself brought the branch up to main; the new commit is a new candidate and nothing carries. */
138
61
  constructor(head, updated = false) {
139
62
  super(`restart at ${head}`);
140
63
  this.head = head;
141
64
  this.updated = updated;
142
65
  }
143
66
  }
144
- /** Every commit that landed after the approval, in words: the summary and the merge message list them all. */
145
67
  export function landedWords(landed) {
146
68
  if (landed.length === 0)
147
69
  return [];
@@ -151,7 +73,6 @@ export function landedWords(landed) {
151
73
  const branchFile = (branch) => branch.replace(/[^A-Za-z0-9._-]+/g, "_");
152
74
  export const journalFile = (stateDir, branch) => join(stateDir, "releases", `${branchFile(branch)}.json`);
153
75
  export const resumeCommand = (branch, checkout) => `toolroll release ${releaseBranchArg(branch)} --repo ${checkout}`;
154
- /** Whole or not at all: a private temp file, synced, renamed into place, its folder synced. */
155
76
  export function writeJournal(file, journal) {
156
77
  mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
157
78
  const temp = `${file}.${randomUUID()}.tmp`;
@@ -182,10 +103,7 @@ export function readJournal(file) {
182
103
  throw new Error(`${file} is not a release journal this version reads`);
183
104
  return parsed;
184
105
  }
185
- /** The release task's id: one per exact commit, so a rerun finds the task it filed instead of filing another. */
186
106
  export const gateTaskId = (version, sha) => `release-${version.replace(/[^0-9A-Za-z.-]/g, "-")}-${sha.slice(0, 7)}`;
187
- /** Whether the scope's approval is the owner's own yes to these exact bytes: a person through the password (or
188
- * identity) ceremony or a chat confirmation — never a mode's coverage, an AI teammate, a routine or the lead. */
189
107
  export function ownerApproval(gate, digest) {
190
108
  const approval = gate.approval;
191
109
  if (approval === null)
@@ -200,8 +118,6 @@ export function ownerApproval(gate, digest) {
200
118
  return { ok: false, why: `approved as ${approval.by}, not by a person` };
201
119
  if (approval.role !== "approver" || !approval.active)
202
120
  return { ok: false, why: `approved by ${approval.by}, who is not an active approver` };
203
- // A person's proof, recorded for these exact bytes (approval policy §1.5): a lead token or a remote API token sealed
204
- // through the person's road before the fix said `password` too. A plane that can't say is not a yes.
205
121
  if (approval.person === undefined)
206
122
  return { ok: false, why: "the plane can't show a person gave this approval; update it first" };
207
123
  if (!approval.person.ok)
@@ -210,10 +126,8 @@ export function ownerApproval(gate, digest) {
210
126
  return { ok: false, why: "approved with a machine credential, not by a person" };
211
127
  return { ok: true, by: approval.by, at: approval.at };
212
128
  }
213
- /** Every required check present, and every reported check's newest attempt completed successfully. */
214
129
  export function checksVerdict(runs, required) {
215
130
  const failed = [], waiting = [];
216
- // The adapter orders attempts oldest first, so the last attempt for each name is authoritative.
217
131
  const latest = new Map(runs.map(run => [run.name, run]));
218
132
  for (const name of new Set([...required, ...latest.keys()])) {
219
133
  const run = latest.get(name);
@@ -228,19 +142,10 @@ export function checksVerdict(runs, required) {
228
142
  return { state: "failed", failed };
229
143
  return waiting.length > 0 ? { state: "pending", waiting } : { state: "passed" };
230
144
  }
231
- /**
232
- * Publication's verdict on the tag commit (test-matrix.md): only RELEASE_TAG_CHECKS, from GitHub Actions runs of
233
- * publish.yml bound to the tag's push, each by its newest attempt. Every other check on the merge commit — main's own
234
- * push run — is not waited for: the candidate's checks already passed on its exact head before the merge, the merged
235
- * tree was proved equal to it, and publish.yml's release proof checks both again from GitHub's record.
236
- */
237
145
  export function tagChecksVerdict(runs) {
238
146
  const names = RELEASE_TAG_CHECKS;
239
- // Only GitHub Actions runs of publish.yml bound to the tag's own push (release-adapters.ts readCheckRuns): a check of
240
- // the same name from another workflow, an unbound run or another app is never counted (security scan).
241
147
  return checksVerdict(runs.filter(run => names.includes(run.name) && run.app === "github-actions" && workflowIs(run.workflowPath, RELEASE_TAG_WORKFLOW)), RELEASE_TAG_CHECKS);
242
148
  }
243
- /** Run the release from wherever its journal stopped. */
244
149
  export async function runRelease(options, adapters) {
245
150
  const file = journalFile(options.stateDir, options.branch);
246
151
  const resume = resumeCommand(options.branch, options.checkout);
@@ -251,10 +156,8 @@ export async function runRelease(options, adapters) {
251
156
  let step = "preflight";
252
157
  let freshApproval = false;
253
158
  let supersededTask = null;
254
- /** The commit whose check stopped the release being set aside. The stop tells a person to approve it again with --new. */
255
159
  let stoppedCheck = null;
256
160
  const save = () => { journal.updatedAt = adapters.now().toISOString(); writeJournal(file, journal); };
257
- /** Tell the progress record about a step (v146). Never throws and never waits: the release goes on whatever it says. */
258
161
  const mark = (at, state, detail = null) => {
259
162
  const j = journal;
260
163
  if (j === null || adapters.progress === undefined || at === "done")
@@ -262,7 +165,7 @@ export async function runRelease(options, adapters) {
262
165
  try {
263
166
  adapters.progress({ taskId: j.task.id, tag: j.tag, version: j.packageVersion, pr: j.pr, step: at, state, at: adapters.now(), detail });
264
167
  }
265
- catch { /* best effort */ }
168
+ catch { }
266
169
  };
267
170
  const advance = (next) => { const was = journal.step; journal.step = next; journal.stopped = null; save(); if (was !== next)
268
171
  mark(was, "done"); };
@@ -280,8 +183,6 @@ export async function runRelease(options, adapters) {
280
183
  delete j.intents.deploy;
281
184
  save();
282
185
  };
283
- /** Ask `probe` until it answers, within this step's limit. A short network failure on the way to GitHub (git or gh
284
- * timing out) is no answer yet, never the release's end: the next poll asks again, until the step's own limit. */
285
186
  const waitFor = async (at, what, probe) => {
286
187
  const deadline = adapters.now().getTime() + limits[at] * 60_000;
287
188
  let said = false, unreachable = null;
@@ -334,17 +235,11 @@ export async function runRelease(options, adapters) {
334
235
  say(`Released ${journal.tag} (${journal.candidate.sha.slice(0, 7)}) — nothing left to do.`);
335
236
  return { ok: true, journal, file };
336
237
  }
337
- // Published, with Homebrew still to finish: this run finishes it, waiting for the tap's checks within its limit.
338
238
  const finishingHomebrew = journal !== null && journal.step === "homebrew" && journal.published !== null && options.fresh !== true;
339
239
  if (!await adapters.github.authenticated())
340
240
  throw new Stop("github-auth", "GitHub CLI is not signed in: run `gh auth login`, then rerun.");
341
241
  if (journal === null) {
342
242
  journal = await begin(options, adapters, adapters.now());
343
- // The earlier attempt needs a person's fresh approval (a CI failure after its deploy): this one files a task of its
344
- // own for the same commit, so the old approval can't carry it.
345
- // A check that stopped this same commit is the same: its task keeps that failure, so reusing it would only stop again
346
- // (a passing run on it, run 3333, can't erase it). A new task reruns the check and asks a person, never the plane.
347
- // Only an id that has never existed, numbered after the superseded one: never a task whose approval still stands.
348
243
  if (freshApproval || journal.candidate.sha === stoppedCheck) {
349
244
  const base = journal.task.id;
350
245
  const suffix = supersededTask === null ? null : supersededTask === base ? 1 : supersededTask.startsWith(`${base}-`) ? Number(supersededTask.slice(base.length + 1)) : null;
@@ -365,13 +260,11 @@ export async function runRelease(options, adapters) {
365
260
  else
366
261
  say(`Resuming the release of ${journal.tag} (${journal.candidate.sha.slice(0, 7)}) at ${journal.step}.`);
367
262
  const j = journal;
368
- // A journal an older coordinator filed ahead of CI: its deploy reads CI fresh too.
369
263
  if (j.ciAhead === true && j.ciBeforeDeploy !== true)
370
264
  j.ciBeforeDeploy = true;
371
265
  if (j.checkout !== options.checkout)
372
266
  throw new Stop("checkout", `This release runs in ${j.checkout}; rerun with --repo ${j.checkout}.`);
373
267
  save();
374
- // Before anything merges, the branch and its pull request must still be the gated commit.
375
268
  const pinned = async () => {
376
269
  const head = await adapters.repo.remoteHead(j.branch);
377
270
  if (head !== j.candidate.sha)
@@ -381,14 +274,7 @@ export async function runRelease(options, adapters) {
381
274
  throw new Stop("drift", `Pull request #${j.pr} no longer has ${j.candidate.sha.slice(0, 7)} at its head.`);
382
275
  return pr;
383
276
  };
384
- // ---- Homebrew, finished apart from publication (pipeline-speed.md, P1) ------------------------------------------
385
277
  let homebrewLeft = null;
386
- /**
387
- * One look at the tap: propose the formula change when it's missing, judge its checks (once, or within the Homebrew
388
- * limit when `wait`), and merge exactly the proposed head once every check passed. A tap that already names a newer
389
- * version is never overwritten, checked again right before the merge. Checksums come from npm's own tarball
390
- * (release-adapters.ts propose), unchanged.
391
- */
392
278
  const homebrewPass = async (wait) => {
393
279
  const brew = adapters.homebrew;
394
280
  let state = await brew.state(j.packageVersion);
@@ -396,8 +282,6 @@ export async function runRelease(options, adapters) {
396
282
  return { state: "superseded", why: `the tap already names ${state.version}` };
397
283
  if (state.kind === "current")
398
284
  return { state: "current", why: null };
399
- // A change this release already proposed is the only one it ever merges (security scan): another pull request for
400
- // the same version, a moved head or a closed change is failed, never adopted or merged.
401
285
  const journaled = j.homebrew?.pr != null && j.homebrew.head != null ? { pr: j.homebrew.pr, head: j.homebrew.head } : null;
402
286
  if (journaled !== null && state.kind === "missing")
403
287
  return { state: "failed", why: `${brew.repo} #${journaled.pr} was closed before it merged` };
@@ -412,13 +296,9 @@ export async function runRelease(options, adapters) {
412
296
  const proposed = state;
413
297
  j.homebrew = { pr: proposed.pr, head: proposed.head, merged: false, state: "pending", why: null };
414
298
  save();
415
- // Whatever checks do register are always judged; an empty set passes only for a tap whose workflows never run
416
- // on a change, and only when it's still empty a poll later.
417
299
  const checked = await brew.checked(proposed.head);
418
300
  let emptyLooks = 0;
419
301
  const probe = async () => {
420
- // Check runs and commit statuses are judged apart, so neither stands in for the other or hides its failure.
421
- // Two apps may name a check alike; each app's attempts stand for themselves.
422
302
  const runs = (await adapters.github.checks(brew.repo, proposed.head)).map(run => ({ ...run, name: `${run.app ?? "unknown app"}: ${run.name}` }));
423
303
  const statuses = await brew.statuses(proposed.head);
424
304
  const verdicts = [runs, statuses].filter(one => one.length > 0).map(one => checksVerdict(one, [...new Set(one.map(run => run.name))]));
@@ -427,8 +307,6 @@ export async function runRelease(options, adapters) {
427
307
  throw new HomebrewFailed(`the tap change's checks failed: ${failed.join(", ")}`);
428
308
  if (verdicts.some(one => one.state === "pending"))
429
309
  return null;
430
- // GitHub registers checks asynchronously; an empty set says nothing about success.
431
- // A workflow is owed: only its own run counts, not another app's green check.
432
310
  if (checked && !runs.some(run => run.app === "github-actions"))
433
311
  return null;
434
312
  if (runs.length === 0 && statuses.length === 0)
@@ -443,12 +321,10 @@ export async function runRelease(options, adapters) {
443
321
  catch (error) {
444
322
  if (error instanceof HomebrewFailed)
445
323
  return { state: "failed", why: `${brew.repo} #${proposed.pr}: ${error.message}` };
446
- // Waiting ran out: still pending, never a stop of a published release.
447
324
  if (error instanceof Stop && error.reason === "timeout")
448
325
  return { state: "pending", why: error.message };
449
326
  throw error;
450
327
  }
451
- // Ordering, once more right before the merge: a newer formula landed meanwhile is never overwritten.
452
328
  const now = await brew.state(j.packageVersion);
453
329
  if (now.kind === "newer")
454
330
  return { state: "superseded", why: `the tap already names ${now.version}` };
@@ -464,15 +340,12 @@ export async function runRelease(options, adapters) {
464
340
  await brew.merge(proposed.pr, proposed.head);
465
341
  return { state: "current", why: null };
466
342
  };
467
- // ---- one approval per release (release-once.md) -------------------------------------------------------------
468
343
  const rel = adapters.release;
469
- /** One-tap release approval: tell the plane, never stopping or changing the release whatever it answers. */
470
344
  const tell = async (act) => { if (rel?.ready === undefined)
471
345
  return; try {
472
346
  await act(rel.ready);
473
347
  }
474
- catch { /* best effort */ } };
475
- /** The last pull request checks this run read on the candidate (the gate reads them before the task exists). */
348
+ catch { } };
476
349
  let lastCi = null;
477
350
  const noteCi = async (runs, verdict) => {
478
351
  lastCi = { candidate: j.candidate.sha, state: verdict.state === "pending" ? "running" : verdict.state, failed: verdict.failed ?? [], runs: runs.filter(run => REQUIRED_PR_CHECKS.includes(run.name)) };
@@ -481,9 +354,7 @@ export async function runRelease(options, adapters) {
481
354
  };
482
355
  const currentCi = () => lastCi;
483
356
  let epoch = null;
484
- // This invocation's own lease owner (review round 1): two runs of the same journal never share an epoch.
485
357
  const owner = `${j.id}:${randomUUID()}`;
486
- /** Take the release's lease (a takeover raises its epoch), then settle every operation still open before any new work. */
487
358
  const hold = async () => {
488
359
  if (rel === undefined || !j.authority)
489
360
  return;
@@ -497,11 +368,8 @@ export async function runRelease(options, adapters) {
497
368
  if (rel === undefined || !j.authority)
498
369
  return;
499
370
  for (const op of (await rel.operations(j.authority.id)).filter(one => one.state === "reserved" || one.state === "running" || one.state === "unknown")) {
500
- // A started call whose issuer may still be alive may still land (review round 2): nothing is settled for it on
501
- // elapsed time. It stays as it is, and a person looks.
502
371
  const inFlight = () => new Stop("operation-in-flight", `An earlier ${op.kind} (operation ${op.id}) was started by a process that may still be running. Nothing was settled: check that process, then rerun.`);
503
372
  if (op.kind === "deploy") {
504
- // Reserved and never started: nothing to undo (a start after this takeover is refused: its epoch moved).
505
373
  if (op.state === "reserved") {
506
374
  await rel.finish(op.id, "failed", { detail: "the call never started" }, epoch);
507
375
  continue;
@@ -513,7 +381,6 @@ export async function runRelease(options, adapters) {
513
381
  if (!op.issuerGone)
514
382
  throw inFlight();
515
383
  if (op.direct) {
516
- // A person's own deploy: its process is gone; its lock, update pause and journal must say nothing is half done.
517
384
  if (!await adapters.toolroll.deploymentIdle(op.stage))
518
385
  throw new Stop("deploy-recovery", `A person's deploy of this release (operation ${op.id}) ended without finishing${op.stage === null ? "" : `; its journal is in ${op.stage}`}. Recover it, then rerun.`);
519
386
  await rel.finish(op.id, "failed", { detail: "reconciled: the deploy's process ended, and nothing is deployed or half done" }, epoch);
@@ -523,7 +390,6 @@ export async function runRelease(options, adapters) {
523
390
  await rel.finish(op.id, "failed", { detail: "reconciled: recovered the previous build" }, epoch);
524
391
  }
525
392
  else {
526
- // The pull request decides an unknown merge: merged from the gated head is a success, whoever issued it.
527
393
  const pr = await adapters.github.pullRequest(j.github, j.branch);
528
394
  if (pr?.state === "merged" && pr.number === j.pr && pr.head === op.candidate && pr.mergeCommit !== null)
529
395
  await rel.finish(op.id, "succeeded", { externalRef: pr.mergeCommit, detail: "reconciled: the pull request is merged from the gated head" }, epoch);
@@ -538,11 +404,6 @@ export async function runRelease(options, adapters) {
538
404
  }
539
405
  }
540
406
  };
541
- /**
542
- * Who and what the release is, read again: the repository, the pull request (open, its number, base main) and its
543
- * head, and the live-release predicate for the coming action. Before the deploy reservation a moved head restarts
544
- * the release for the new commit; after it, it stops, and the new commit needs a person.
545
- */
546
407
  const identity = async (action, beforeReservation) => {
547
408
  if (rel === undefined) {
548
409
  await pinned();
@@ -563,27 +424,17 @@ export async function runRelease(options, adapters) {
563
424
  }
564
425
  if (j.authority) {
565
426
  const live = await rel.live(j.task.id, action);
566
- // Fail closed: once the release has an authority, its task must be one the predicate applies to AND accepts.
567
427
  if (!live.applies || !live.ok)
568
428
  throw new Stop("release", `Task ${j.task.id} can't ${action === "dispatch" ? "go on" : action}: ${live.applies ? live.why ?? "its release approval doesn't stand" : "it belongs to no release approval this plane can find"}.`);
569
429
  if (epoch !== null && !await rel.renew(j.authority.id, owner, epoch))
570
430
  throw new Stop("lease", "Another release coordinator took over this release.");
571
431
  }
572
432
  };
573
- /** The head moved before the deploy reservation: carry the approval to it, or file it for a person. Nothing kept from
574
- * the old step is used afterwards: the journal is rewritten and the state machine runs again. */
575
- /**
576
- * A pull request check failed after the deploy reservation (Alex, 2026-10-25): the candidate froze at deploy, so the
577
- * release needs a person's fresh approval, even for the same commit. It is persisted (the authority stops; the
578
- * journal says so) before the release stops; `--new` files the commit for a person again.
579
- */
580
433
  const ciFailedAfterDeploy = async (what, deploy = "after") => {
581
434
  j.needsApproval = true;
582
435
  save();
583
- // An automatic approval never outlives a CI failure: the owner is told, and a person approves again.
584
436
  if (j.auto?.state === "approved")
585
437
  await rel?.auto?.giveUp(j.task.id, deploy === "after" ? `${what}, after the deploy` : what);
586
- // Fail closed: the authority must have stopped; otherwise its approval could still carry the commit.
587
438
  if (rel !== undefined && j.authority && (epoch === null || !await rel.needsApproval(j.authority.id, deploy === "after" ? "a pull request check failed after the deploy" : "a pull request check failed before the deploy", epoch))) {
588
439
  throw new Stop("lease", `${what}. Nothing was merged, but this release's approval couldn't be stopped (another coordinator holds it, or a merge is reserved). Check it with \`toolroll release ${j.branch} --repo ${j.checkout}\` before going on.`);
589
440
  }
@@ -591,16 +442,7 @@ export async function runRelease(options, adapters) {
591
442
  ? `${what}. Nothing was merged. The deploy had already started, so this commit needs a person's approval again: run \`toolroll release ${j.branch} --repo ${j.checkout} --new\`.`
592
443
  : `${what}. Nothing was deployed or merged. This commit needs a person's approval: run \`toolroll release ${j.branch} --repo ${j.checkout} --new\`.`);
593
444
  };
594
- /** An automatic approval's CI allowance: only attempts GitHub shows failing before the tests ran, at most
595
- * INFRA_RERUNS_PER_CANDIDATE on the commit; a person's approval judges each job by its latest attempt. */
596
445
  const autoCap = () => (j.auto?.state === "approved" ? { auto: true } : {});
597
- /**
598
- * An automatically approved release stands only while its CI does (auto-approve-green.md): the complete, current
599
- * checks on the exact commit are read again right before each step that can't be taken back — the deploy, the CLI
600
- * relink, the merge and the tag. Anything but green (failed, a job re-run and pending, an earlier failure GitHub
601
- * doesn't show as the runner's own) stops the
602
- * release, revokes its approval and tells the owner; the commit then needs a person.
603
- */
604
446
  const autoCiHolds = async (before) => {
605
447
  if (j.auto?.state !== "approved")
606
448
  return;
@@ -612,7 +454,6 @@ export async function runRelease(options, adapters) {
612
454
  return;
613
455
  }
614
456
  if (before === "the tag") {
615
- // Already merged: nothing to revoke. It isn't tagged or published, and a person decides — durably, in the plane.
616
457
  const why = `Pull request checks on ${j.candidate.sha.slice(0, 7)} stopped passing after the merge`;
617
458
  await rel?.auto?.holdPublish(j.task.id, why);
618
459
  await rel?.auto?.giveUp(j.task.id, why);
@@ -620,13 +461,11 @@ export async function runRelease(options, adapters) {
620
461
  }
621
462
  await ciFailedAfterDeploy(`Pull request checks on ${j.candidate.sha.slice(0, 7)} are no longer all passing before ${before}: ${(verdict.state === "failed" ? verdict.failed : verdict.waiting).join(", ")}`, before === "the deploy" && j.deploy === null ? "before" : "after");
622
463
  };
623
- /** A publication held for a person (the plane's record) stops the tag, the publication and Homebrew. */
624
464
  const publishHold = async () => {
625
465
  const held = rel?.auto === undefined ? null : await rel.auto.publishHeld(j.task.id);
626
466
  if (held !== null)
627
467
  throw new Stop("approval", `${held}. It was merged; nothing more is tagged, published or sent to Homebrew until a person lets it go on: \`toolroll release publish-ok ${j.task.id} --as <you> --token <password>\`, then rerun.`);
628
468
  };
629
- /** GitHub's nightly lane debt before a deploy, the merge or the tag (evals-nightly.md, part A2). */
630
469
  const nightlyHolds = async (phase) => {
631
470
  if (rel?.nightly === undefined)
632
471
  return;
@@ -636,14 +475,8 @@ export async function runRelease(options, adapters) {
636
475
  if (!answer.ok)
637
476
  throw new Stop("nightly-debt", `${answer.why} Nothing was ${phase === "deploy" ? "deployed" : phase === "merge" ? "merged" : "tagged or published"}; rerun the release once it passes.`);
638
477
  };
639
- /** identity(), on a plane that keeps release authority; a legacy plane keeps the old rules. */
640
478
  const watch = async (action) => { if (rel !== undefined)
641
479
  await identity(action, true); };
642
- /**
643
- * Behind main (plain-toolroll.md P2.6): update the branch under this release's lease and the head it was gated on.
644
- * A concurrent push aborts it. The approval stops first, so nothing can ride it across the update; the updated head
645
- * is a new candidate with a new approval, fresh CI and a fresh check, and there is no carry.
646
- */
647
480
  const updateFromMain = async () => {
648
481
  const update = adapters.github.updateBranch;
649
482
  if (update === undefined)
@@ -667,10 +500,6 @@ export async function runRelease(options, adapters) {
667
500
  return head !== null && head !== j.candidate.sha ? head : null;
668
501
  });
669
502
  };
670
- /**
671
- * Move the release back to an earlier step: write the fields the caller names (and only those), drop the named steps'
672
- * intents, set the step, and save the journal. Every step-back goes through here.
673
- */
674
503
  const rewindTo = (step, fields, dropIntents = []) => {
675
504
  Object.assign(j, fields);
676
505
  for (const one of dropIntents)
@@ -679,7 +508,6 @@ export async function runRelease(options, adapters) {
679
508
  save();
680
509
  };
681
510
  const restart = async (head, updated = false) => {
682
- // The step this commit was at ends here: the release goes on with the new commit (and, filed again, a new task).
683
511
  mark(j.step, "failed", `${j.branch} moved to ${head.slice(0, 7)}`);
684
512
  const tree = await adapters.repo.tree(head);
685
513
  if (updated)
@@ -689,7 +517,6 @@ export async function runRelease(options, adapters) {
689
517
  const carried = await rel.carry(j.authority.id, head, randomUUID(), epoch);
690
518
  if (carried.ok) {
691
519
  const view = await rel.authority(carried.taskId);
692
- // The candidate is written before the gate is read, as it always was: a gate that fails leaves it moved.
693
520
  j.candidate = { sha: head, tree };
694
521
  const task = { id: carried.taskId, scopeDigest: (await adapters.toolroll.gate(carried.taskId)).scopeDigest };
695
522
  rewindTo("check", { task, check: null, completion: null, landed: view?.landed ?? j.landed ?? [], stopped: null }, ["check", "complete"]);
@@ -704,19 +531,11 @@ export async function runRelease(options, adapters) {
704
531
  rewindTo("gate", { candidate: { sha: head, tree }, task: { id: gateTaskId(j.packageVersion, head), scopeDigest: null },
705
532
  approval: null, check: null, completion: null, authority: null, auto: null, stopped: null }, ["gate", "check", "complete"]);
706
533
  };
707
- /**
708
- * The automatic road ended without an approval: the plane takes its `auto-check` back (the task asks a person, its
709
- * passing check kept) and tells the owner; the release waits at approval for a person, as without the setting.
710
- */
711
534
  const autoRefused = async (why) => {
712
535
  rewindTo("approval", { auto: { state: "refused", why }, check: null });
713
536
  await rel?.auto?.giveUp(j.task.id, why);
714
537
  throw new Stop("approval", `Not approved automatically: ${why}. A person approves task ${j.task.id} (\`toolroll task approve ${j.task.id} --digest ${j.task.scopeDigest}\`, or the console), then rerun \`${resume}\`.`);
715
538
  };
716
- /**
717
- * CI passed on the candidate as the coordinator read it: the plane reads it itself and lifts the approval hold it
718
- * placed when the task was filed ahead of CI (round 1, finding 4). A refusal stops here; nobody was asked.
719
- */
720
539
  const liftCiHold = async (ask, nothing) => {
721
540
  const lift = rel?.auto?.ciPassed;
722
541
  if (lift === undefined)
@@ -725,11 +544,6 @@ export async function runRelease(options, adapters) {
725
544
  if (!lifted.ok)
726
545
  throw new Stop("ci-failed", `The plane didn't confirm CI passed on ${j.candidate.sha.slice(0, 7)}: ${lifted.why}. ${nothing}. Rerun \`${resume}\` once every pull request check passes.`);
727
546
  };
728
- /**
729
- * One look at the pull request's required checks on the exact commit while CI may still run: a failed check stops
730
- * (`nothing` says what hasn't happened), passed ends the plane's "CI still running" note, pending (or GitHub not
731
- * answering) answers false. Judged as the ci step judges a person's release (prChecksVerdict, ci.yml, exact head).
732
- */
733
547
  const ciWhileRunning = async (nothing, ask) => {
734
548
  let runs;
735
549
  try {
@@ -747,8 +561,6 @@ export async function runRelease(options, adapters) {
747
561
  }
748
562
  if (verdict.state !== "passed")
749
563
  return false;
750
- // The plane's note can survive a crash before the journal saved ciAhead. Clear it on the plane's own reading,
751
- // even on an older/resumed journal whose flags say nothing about CI.
752
564
  await liftCiHold(ask, nothing);
753
565
  if (j.ciAhead === true) {
754
566
  j.ciAhead = false;
@@ -756,8 +568,6 @@ export async function runRelease(options, adapters) {
756
568
  }
757
569
  return true;
758
570
  };
759
- /** Every person's release reads exact-head CI at deployment, even if it was green at the gate or an older
760
- * journal has no ciBeforeDeploy flag. An approval and the release check can outlive that earlier green reading. */
761
571
  const personCiBeforeDeploy = async () => {
762
572
  if (j.auto?.state === "approved")
763
573
  return;
@@ -773,15 +583,9 @@ export async function runRelease(options, adapters) {
773
583
  return null;
774
584
  });
775
585
  };
776
- /**
777
- * The task is approved for `action`: a release task (a carried commit, or any task once the release has an
778
- * authority) only when the live-release predicate applies to it AND accepts it — fail closed, whatever its own seal
779
- * says. Anything else needs the owner's own approval of these exact words (which a carried seal never is).
780
- */
781
586
  const approved = async (gate, action = "dispatch") => {
782
587
  if (gate.candidate !== j.candidate.sha || gate.scopeDigest !== j.task.scopeDigest)
783
588
  throw new Stop("scope-changed", `Task ${j.task.id}'s candidate or scope changed after approval.`);
784
- // Checking automatically: the plane's `auto-check` seal must still stand (the setting on, its evidence, this digest).
785
589
  if (j.auto?.state === "checking" && !j.authority) {
786
590
  const standing = rel?.auto === undefined ? { ok: false, why: "this plane can't approve releases automatically" } : await rel.auto.checking(j.task.id);
787
591
  if (standing.ok)
@@ -804,7 +608,6 @@ export async function runRelease(options, adapters) {
804
608
  if (gate.result.check !== "passed")
805
609
  throw new Stop("check-failed", checkFailedWords({ sha: j.candidate.sha, run: gate.result.run, class: null, why: `its check reads ${gate.result.check}`, branch: j.branch, checkout: j.checkout, taskId: j.task.id }));
806
610
  };
807
- /** The commit the passing build recorded: what the deployed runtime is stamped with. */
808
611
  const builtHead = () => j.check?.head ?? j.candidate.sha;
809
612
  const checked = async (gate, action = "dispatch") => {
810
613
  await approved(gate, action);
@@ -814,7 +617,6 @@ export async function runRelease(options, adapters) {
814
617
  };
815
618
  if (j.needsApproval === true)
816
619
  throw new Stop("ci-failed", `A pull request check failed after the deploy, so ${j.candidate.sha.slice(0, 7)} needs a person's approval again: run \`toolroll release ${j.branch} --repo ${j.checkout} --new\`.`);
817
- // A resumed release that already has an authority takes its lease and settles every open operation first.
818
620
  await hold();
819
621
  while (j.step !== "done" && homebrewLeft === null) {
820
622
  step = j.step;
@@ -824,8 +626,6 @@ export async function runRelease(options, adapters) {
824
626
  switch (j.step) {
825
627
  case "gate": {
826
628
  await pinned();
827
- // The same commit's earlier gate belongs to a release that no longer stands (a CI failure after its deploy, a
828
- // revoke): a fresh task asks a person again, and their yes opens a new generation.
829
629
  if (rel !== undefined && j.freshTask !== true) {
830
630
  const base = gateTaskId(j.packageVersion, j.candidate.sha);
831
631
  for (let n = 1; n < 50; n++) {
@@ -840,8 +640,6 @@ export async function runRelease(options, adapters) {
840
640
  }
841
641
  }
842
642
  }
843
- // The tree CI tested (the pull request's head, not GitHub's merge commit) is the tree that merges only when the
844
- // branch already contains main's head: refused here, before anything is filed, and again right before merging.
845
643
  try {
846
644
  await containsMain(adapters, j, "Nothing was filed or sent for approval");
847
645
  }
@@ -856,21 +654,15 @@ export async function runRelease(options, adapters) {
856
654
  if (j.intents.gate === undefined)
857
655
  await mainProtection(adapters, j, false, "Nothing was filed or sent for approval");
858
656
  const existing = await adapters.toolroll.gate(j.task.id);
859
- // A fresh task this journal never filed has appeared under its id: it isn't ours, and isn't a fresh approval.
860
657
  if (existing.exists && j.freshTask === true && j.intents.gate === undefined)
861
658
  throw new Stop("approval", `Task ${j.task.id} appeared before this release filed it; rerun with --new.`);
862
659
  if (existing.exists) {
863
- // Filed already (a resume after a lost answer): the task stands, and the ci step judges its checks.
864
660
  if (existing.candidate !== j.candidate.sha)
865
661
  throw new Stop("conflict", `Task ${j.task.id} exists for a different commit (${existing.candidate?.slice(0, 7) ?? "none"}).`);
866
662
  j.task.scopeDigest = existing.scopeDigest;
867
663
  }
868
664
  else {
869
- // The gate only stops on a check that already failed: the task is filed and a person asked while CI runs, and
870
- // the release check runs beside it (pipeline-speed.md, D2 and "Decision: a person's release asks during
871
- // CI"). The automatic approval waits for CI (the check step); nothing deploys before it passes (the deploy).
872
665
  const settled = await earlyChecks(adapters, j, (what, probe) => waitFor("gate", what, probe), { pendingIsEnough: true, seen: (runs, verdict) => noteCi(runs, verdict) });
873
- // Recorded before the task exists, so its approval card says CI still runs from the first moment.
874
666
  if (!settled)
875
667
  await rel?.auto?.ciRunning?.(j.task.id, j.candidate.sha);
876
668
  j.ciAhead = !settled;
@@ -889,7 +681,6 @@ export async function runRelease(options, adapters) {
889
681
  ...(rel === undefined ? {} : { release: { version: j.packageVersion, pr: j.pr, branch: j.branch, noCarry: options.noCarry === true } }),
890
682
  });
891
683
  j.task.scopeDigest = filed.scopeDigest;
892
- // The checks the gate read before the task existed, kept for its approval sheet now that it does.
893
684
  const seen = currentCi();
894
685
  if (seen !== null)
895
686
  await tell(ready => ready.ci({ taskId: j.task.id, ...seen }));
@@ -898,9 +689,6 @@ export async function runRelease(options, adapters) {
898
689
  break;
899
690
  }
900
691
  case "approval": {
901
- // Approve automatically when checks pass (auto-approve-green.md): with the project's setting on, the plane seals
902
- // `auto-check` so the release check runs first; the approval itself is sealed after it passed. A fresh task
903
- // after a CI failure after the deploy, or an automatic refusal, always asks a person.
904
692
  const auto = rel?.auto;
905
693
  if (auto !== undefined && j.freshTask !== true && j.auto?.state !== "refused" && j.task.scopeDigest !== null && await auto.setting(j.task.id)) {
906
694
  await watch("dispatch");
@@ -921,12 +709,8 @@ export async function runRelease(options, adapters) {
921
709
  say(` Not approved automatically: ${authorized.why}. A person approves it.`);
922
710
  }
923
711
  }
924
- // Filed while CI still runs: the person is asked now (Alex, 2026-10-29), and told nothing deploys until CI passes.
925
- // A check that already failed asks nobody (as at the gate).
926
712
  if (j.ciAhead === true)
927
713
  await ciWhileRunning("Nothing was deployed or merged", true);
928
- // One push, on every entry to this step (a fresh filing or a resumed one): the plane files it once per task and
929
- // scope digest, so a crash between filing and here is healed by the next run.
930
714
  await tell(ready => ready.asked(j.task.id));
931
715
  say(` The release scope needs your approval: \`toolroll task approve ${j.task.id} --digest ${j.task.scopeDigest}\`, or open the task in the console.`);
932
716
  say(` Or approve it from here: \`toolroll release approve ${releaseBranchArg(j.branch)}\`.`);
@@ -934,8 +718,6 @@ export async function runRelease(options, adapters) {
934
718
  say(` ${CI_RUNNING_WORDS}`);
935
719
  const approved = await waitFor("approval", `a person to approve task ${j.task.id}`, async () => {
936
720
  await watch("dispatch");
937
- // While asking: a check that failed stops here (nobody approves a red commit), and CI passing ends the card's
938
- // "still running" note (and lifts a hold an older coordinator placed).
939
721
  if (j.ciAhead === true)
940
722
  await ciWhileRunning("Nothing was deployed or merged", true);
941
723
  const gate = await adapters.toolroll.gate(j.task.id);
@@ -948,7 +730,6 @@ export async function runRelease(options, adapters) {
948
730
  });
949
731
  j.approval = { by: approved.by, at: approved.at };
950
732
  say(` approved by ${approved.by}`);
951
- // The person's yes to release terms opened the release's authority: hold its lease from here on.
952
733
  if (rel !== undefined) {
953
734
  const view = await rel.authority(j.task.id);
954
735
  if (view !== null) {
@@ -964,15 +745,11 @@ export async function runRelease(options, adapters) {
964
745
  }
965
746
  case "check": {
966
747
  const checkProbe = async () => {
967
- // Before acting on an old candidate's failure: a moved head restarts the release first.
968
748
  await watch("dispatch");
969
749
  const gate = await adapters.toolroll.gate(j.task.id);
970
750
  await approved(gate);
971
- // A rerun of the same approved commit is on its way: the failure before it is not this release's answer.
972
751
  if (gate.pending === true && gate.result?.check !== "passed")
973
752
  return null;
974
- // A failed Full check: the plane says why (its own records only) and reruns it under the same approval only
975
- // for confirmed infrastructure; every attempt stays in the evidence. Anything else stops, saying its class.
976
753
  if (gate.failed === null && gate.result !== null && gate.result.level === "full" && gate.result.check === "failed" && rel?.recheck !== undefined) {
977
754
  const answer = await rel.recheck(j.task.id);
978
755
  if (answer.action === "pending")
@@ -987,8 +764,6 @@ export async function runRelease(options, adapters) {
987
764
  throw new Stop("check-failed", `The release build of ${j.task.id} failed: ${gate.failed}. Fix it and release the new commit with --new.`, true);
988
765
  if (gate.result === null || gate.result.check === "running" || gate.result.check === "pending")
989
766
  return null;
990
- // The build records a prepared candidate as a commit of its own (its message names the task): it must hold
991
- // exactly the candidate's tree, or it isn't the release.
992
767
  const head = gate.result.head;
993
768
  if (head === null || (head !== j.candidate.sha && await adapters.repo.tree(head) !== await adapters.repo.tree(j.candidate.sha))) {
994
769
  throw new Stop("drift", `The release result is for ${head?.slice(0, 7) ?? "no commit"}, which doesn't hold exactly ${j.candidate.sha.slice(0, 7)}'s files.`);
@@ -996,8 +771,6 @@ export async function runRelease(options, adapters) {
996
771
  fullCheck(gate);
997
772
  if (gate.result.worktree === null)
998
773
  throw new Stop("worktree", `Run ${gate.result.run} names no checkout to deploy from.`);
999
- // A pass stands only when no earlier attempt on this commit failed for a reason other than confirmed
1000
- // infrastructure the release reran; what passed only on a retry is said (and an automatic approval refuses it).
1001
774
  if (rel?.standing !== undefined) {
1002
775
  const standing = await rel.standing(j.task.id, gate.result.run);
1003
776
  if (!standing.ok)
@@ -1007,8 +780,6 @@ export async function runRelease(options, adapters) {
1007
780
  else if (standing.retried.length > 0)
1008
781
  say(` run ${gate.result.run} passed, but only on a retry: ${standing.retried.join(", ")}`);
1009
782
  }
1010
- // A sandboxed Full check must show that what it skipped passed elsewhere (trusted-release-reports.md H3). The plane
1011
- // answers at once for a check that ran unsandboxed, as Toolroll's own do: nothing there skips for this reason.
1012
783
  if (rel?.fencedCoverage !== undefined) {
1013
784
  const covered = await rel.fencedCoverage(j.task.id, gate.result.run, j.candidate.sha);
1014
785
  if (!covered.ok)
@@ -1023,8 +794,6 @@ export async function runRelease(options, adapters) {
1023
794
  return await checkProbe();
1024
795
  }
1025
796
  catch (error) {
1026
- // A failed check (or a changed candidate) ends the automatic road: the owner is told, and a person decides.
1027
- // A failed check is told, and stays checkable again on the same commit (a flake); anything else ends the road.
1028
797
  if (error instanceof Stop && j.auto?.state === "checking" && error.reason === "check-failed" && !error.build)
1029
798
  await rel?.auto?.checkFailed(j.task.id, error.message.replace(/\.$/, ""));
1030
799
  else if (error instanceof Stop && j.auto?.state === "checking" && error.reason !== "approval")
@@ -1035,8 +804,6 @@ export async function runRelease(options, adapters) {
1035
804
  j.check = result;
1036
805
  say(` run ${result.run} passed on ${j.candidate.sha.slice(0, 7)}`);
1037
806
  if (j.auto?.state === "checking" && !j.authority) {
1038
- // The check ran beside CI (the gate didn't wait): it waits for every pull request check now. A failure ends the
1039
- // automatic road, and the person's road refuses it too (the approval step waits for CI first).
1040
807
  if (j.ciAhead === true) {
1041
808
  try {
1042
809
  await earlyChecks(adapters, j, (what, probe) => waitFor("gate", what, probe), { nothing: "Nothing was approved" });
@@ -1052,7 +819,6 @@ export async function runRelease(options, adapters) {
1052
819
  j.ciAhead = false;
1053
820
  save();
1054
821
  }
1055
- // The release approval, sealed only now: the plane reads CI on the exact commit itself and proves the check.
1056
822
  const sealed = rel?.auto === undefined ? { ok: false, why: "this plane can't approve releases automatically" }
1057
823
  : await rel.auto.approve({ taskId: j.task.id, digest: j.task.scopeDigest, candidate: j.candidate.sha, run: result.run, receipt: result.receipt });
1058
824
  if (!sealed.ok)
@@ -1080,8 +846,6 @@ export async function runRelease(options, adapters) {
1080
846
  await checked(gate, "complete");
1081
847
  if (gate.completion?.digest !== check.receipt) {
1082
848
  intend("complete");
1083
- // Toolroll proves the check's build stopped by itself (stop-proof.ts) a short while after it finished: the
1084
- // release waits for that, never for a person to confirm it.
1085
849
  const done = await waitFor("quiet", "Toolroll to make sure the release check stopped", async () => {
1086
850
  const tried = await adapters.toolroll.complete(j.task.id, check.receipt);
1087
851
  return !tried.ok && tried.reason === "stopping" ? null : tried;
@@ -1109,16 +873,12 @@ export async function runRelease(options, adapters) {
1109
873
  const check = j.check;
1110
874
  await recoverDeploy();
1111
875
  await checked(await adapters.toolroll.gate(j.task.id), "deploy");
1112
- // A deployment that finished but whose answer was lost: the services already run a runtime of this commit.
1113
876
  let runtime = await served(adapters, builtHead());
1114
- // Already running this candidate (a new generation after a CI failure, or a lost answer): the release still
1115
- // reserves its deploy, so its merge has a deploy to stand on.
1116
877
  if (runtime !== null && rel !== undefined && j.authority && epoch !== null) {
1117
878
  const authority = await rel.authority(j.task.id);
1118
879
  if (authority !== null && authority.state === "open") {
1119
880
  await personCiBeforeDeploy();
1120
881
  await watch("deploy");
1121
- // Every deploy reservation, whatever the journal saved: CI must still be green on the exact commit.
1122
882
  await autoCiHolds("the deploy");
1123
883
  await nightlyHolds("deploy");
1124
884
  const reserved = await rel.reserve({ authority: j.authority.id, kind: "deploy", taskId: j.task.id, candidate: j.candidate.sha, epoch });
@@ -1130,13 +890,9 @@ export async function runRelease(options, adapters) {
1130
890
  }
1131
891
  }
1132
892
  if (runtime === null) {
1133
- // The last moment a moved head restarts; then the deploy reservation freezes the candidate in the store.
1134
- // A person's release: every required check passed on the exact commit, read now (the approval may have come
1135
- // while CI ran). A check that failed stops here, before anything is deployed.
1136
893
  await personCiBeforeDeploy();
1137
894
  await watch("deploy");
1138
895
  await pinned();
1139
- // Every deploy issued, whatever the journal saved (a retry after a rollback included): CI still green.
1140
896
  await autoCiHolds("the deploy");
1141
897
  await nightlyHolds("deploy");
1142
898
  let operation, secret = "";
@@ -1151,8 +907,6 @@ export async function runRelease(options, adapters) {
1151
907
  }
1152
908
  j.deployAttempt = { stage: join(options.stateDir, "staged-upgrades", `browser-${j.candidate.sha.slice(0, 7)}-${randomUUID()}`) };
1153
909
  intend("deploy");
1154
- // The issuing fence, immediately before the deploy is spawned (review round 2): lease, epoch and the live
1155
- // release again, in one transaction that marks the operation as issued by this process.
1156
910
  if (operation !== undefined && !await rel.start(operation, epoch))
1157
911
  throw new Stop("lease", "Another release coordinator took over this release; the deploy didn't start.");
1158
912
  const result = await adapters.toolroll.deploy({ run: check.run, worktree: check.worktree, stage: j.deployAttempt.stage, ...(operation === undefined ? {} : { operation: { id: operation, secret } }) });
@@ -1163,7 +917,6 @@ export async function runRelease(options, adapters) {
1163
917
  if (!/[\\/]dist$/.test(result.runtime))
1164
918
  throw new Stop("deploy", `The deployment named ${result.runtime} as its runtime, which is not a dist folder.`);
1165
919
  runtime = result.runtime;
1166
- // Saved at once: everything after this (relinking, a rerun) uses the runtime the deployer named.
1167
920
  j.deploy = { runtime, at: adapters.now().toISOString() };
1168
921
  save();
1169
922
  }
@@ -1220,11 +973,9 @@ export async function runRelease(options, adapters) {
1220
973
  j.merge = { sha: pr.mergeCommit, tree: null };
1221
974
  }
1222
975
  else {
1223
- // After the deploy reservation a moved head, a changed pull request or a stopped release stops it here.
1224
976
  if (rel !== undefined && j.authority)
1225
977
  await identity("merge", false);
1226
978
  await pinned();
1227
- // A squash merge only reproduces the gated (and CI-tested) tree when main hasn't moved past the branch's base.
1228
979
  let main;
1229
980
  try {
1230
981
  main = await containsMain(adapters, j, "Nothing was merged");
@@ -1232,7 +983,6 @@ export async function runRelease(options, adapters) {
1232
983
  catch (error) {
1233
984
  if (!(error instanceof Stop) || error.reason !== "base-moved")
1234
985
  throw error;
1235
- // Past the deploy: the updated commit isn't what's running, so it starts over, with a person.
1236
986
  const head = await updateFromMain();
1237
987
  if (head === null)
1238
988
  throw error;
@@ -1240,17 +990,11 @@ export async function runRelease(options, adapters) {
1240
990
  save();
1241
991
  throw new Stop("approval", `${j.branch} was behind main, so it's now at ${head.slice(0, 7)}. Nothing was merged. The new commit needs a person's approval: run \`toolroll release ${j.branch} --repo ${j.checkout} --new\`.`);
1242
992
  }
1243
- // Every release merges only where GitHub itself refuses a branch behind main.
1244
993
  await mainProtection(adapters, j, j.auto?.state === "approved", "Nothing was merged");
1245
- // The checks again, at the moment of merging: a rerun that failed since must not merge.
1246
994
  const verdict = prChecksVerdict(await adapters.github.checks(j.github, j.candidate.sha), j.candidate.sha, REQUIRED_PR_CHECKS, { ...autoCap(), workflow: REQUIRED_PR_CHECKS_WORKFLOW });
1247
995
  if (verdict.state !== "passed")
1248
996
  await ciFailedAfterDeploy(`Pull request checks are no longer all passing on ${j.candidate.sha.slice(0, 7)}`);
1249
- // GitHub's nightly lane debt (a bounded read), before main's last read so it doesn't widen that window; the
1250
- // reservation below checks the stored debt again in its own transaction.
1251
997
  await nightlyHolds("merge");
1252
- // Main once more, from GitHub, the last thing before the merge is reserved: moved since the comparison, it
1253
- // stops here (finding 4). GitHub's own up-to-date rule refuses the rest of the window.
1254
998
  const now = await adapters.github.mainHead(j.github);
1255
999
  if (now !== main)
1256
1000
  throw new Stop("base-moved", `The branch is behind main; update it and push. Main moved to ${now.slice(0, 7)} while ${j.branch} was being merged, so what merges wouldn't be the tree CI tested. Nothing was merged: release the updated commit with \`toolroll release ${j.branch} --repo ${j.checkout} --new\`.`);
@@ -1265,7 +1009,6 @@ export async function runRelease(options, adapters) {
1265
1009
  }
1266
1010
  intend("merge");
1267
1011
  const message = landedWords(j.landed ?? []).join("\n");
1268
- // The issuing fence, immediately before gh is spawned (review round 2).
1269
1012
  if (operation !== undefined && !await rel.start(operation, epoch))
1270
1013
  throw new Stop("lease", "Another release coordinator took over this release; the merge didn't start.");
1271
1014
  let merged;
@@ -1282,7 +1025,6 @@ export async function runRelease(options, adapters) {
1282
1025
  j.merge = { sha: merged, tree: null };
1283
1026
  }
1284
1027
  save();
1285
- // This also runs after discovering a merge whose response was lost. Never delete a reused branch.
1286
1028
  await adapters.repo.deleteBranch(j.branch, j.candidate.sha);
1287
1029
  advance("tree");
1288
1030
  break;
@@ -1294,7 +1036,6 @@ export async function runRelease(options, adapters) {
1294
1036
  merge.tree = tree;
1295
1037
  if (tree !== j.candidate.tree)
1296
1038
  throw new Stop("tree-mismatch", `Main's merge commit ${merge.sha.slice(0, 7)} has tree ${tree.slice(0, 12)}, not the gated ${j.candidate.tree.slice(0, 12)}: main changed what was checked. Nothing was tagged; the deployed build stays as it is.`);
1297
- // The release's verified record (trusted-release-reports.md A1): the next release's change list starts here.
1298
1039
  await tell(ready => ready.verified({ taskId: j.task.id, merge: merge.sha }));
1299
1040
  advance("tag");
1300
1041
  break;
@@ -1335,9 +1076,6 @@ export async function runRelease(options, adapters) {
1335
1076
  }
1336
1077
  case "homebrew": {
1337
1078
  await publishHold();
1338
- // Homebrew is finished apart from publication (pipeline-speed.md, P1): npm and the GitHub release are verified,
1339
- // so the release is published. This run proposes the tap's change and reads its checks once; only a run that
1340
- // resumes to finish Homebrew waits for them. Pending or failed, the state is kept and the run ends published.
1341
1079
  const progress = await homebrewPass(finishingHomebrew);
1342
1080
  j.homebrew = { pr: j.homebrew?.pr ?? null, head: j.homebrew?.head ?? null, merged: progress.state === "current" && j.homebrew?.head != null ? true : j.homebrew?.merged ?? false, state: progress.state, why: progress.why };
1343
1081
  save();
@@ -1362,12 +1100,11 @@ export async function runRelease(options, adapters) {
1362
1100
  say(`Released ${j.tag}: deployed, merged as ${j.merge.sha.slice(0, 7)}, tagged, published and ${j.homebrew?.state === "superseded" ? `left Homebrew as it is (${j.homebrew.why ?? "the tap names a newer version"})` : "on Homebrew"}.`);
1363
1101
  else
1364
1102
  say(`Published ${j.tag} (deployed, merged as ${j.merge.sha.slice(0, 7)}, tagged, on npm and GitHub); Homebrew ${left.state}${left.why === null ? "" : `: ${left.why}`}. Finish it with \`${resume}\`.`);
1365
- // The automatic road's note, once: when this run published (a run that only finishes Homebrew already said it).
1366
1103
  if (j.auto?.state === "approved" && !finishingHomebrew) {
1367
1104
  try {
1368
1105
  await rel?.auto?.released(j.task.id, j.tag);
1369
1106
  }
1370
- catch { /* the release is done; the note is best effort */ }
1107
+ catch { }
1371
1108
  }
1372
1109
  for (const line of landedWords(j.landed ?? []))
1373
1110
  say(line);
@@ -1380,21 +1117,19 @@ export async function runRelease(options, adapters) {
1380
1117
  try {
1381
1118
  save();
1382
1119
  }
1383
- catch { /* the stop is still reported */ }
1120
+ catch { }
1384
1121
  mark(journal.step, "failed", stop.message);
1385
- // A person's release that stops tells them (trusted-release-reports.md A5); the automatic road keeps its own notices.
1386
1122
  const ready = adapters.release?.ready;
1387
1123
  if (ready !== undefined && journal.auto?.state !== "checking" && journal.auto?.state !== "approved") {
1388
1124
  try {
1389
1125
  await ready.stopped({ taskId: journal.task.id, step: journal.step, reason: stop.reason, message: stop.message });
1390
1126
  }
1391
- catch { /* best effort */ }
1127
+ catch { }
1392
1128
  }
1393
1129
  }
1394
1130
  return { ok: false, reason: stop.reason, message: stop.message, step: journal?.step ?? step, journal, file, resume };
1395
1131
  }
1396
1132
  }
1397
- /** The first run: everything checked before anything changes. */
1398
1133
  async function begin(options, adapters, now) {
1399
1134
  const { branch, checkout } = options;
1400
1135
  if (["main", "master"].includes(branch))
@@ -1437,13 +1172,11 @@ async function begin(options, adapters, now) {
1437
1172
  merge: null, tagged: null, published: null, homebrew: null, intents: {}, stopped: null, createdAt: at, updatedAt: at,
1438
1173
  };
1439
1174
  }
1440
- /** A deployment stop; when it left an update pause before the swap, the guided way to lift it. */
1441
1175
  function deployStop(reason, message, stop) {
1442
1176
  if (stop.gate === undefined)
1443
1177
  return new Stop(reason, message);
1444
1178
  return new Stop("gate-held", `${message} New work is still paused by update ${stop.gate.id} (its journal stopped at ${stop.gate.phase}, before the swap). Check and lift that pause with \`toolroll release --release-gate ${stop.gate.id}\`, then rerun.`);
1445
1179
  }
1446
- /** The one runtime the launchd services run, when it records the gated commit; otherwise null. */
1447
1180
  async function served(adapters, candidate) {
1448
1181
  const installed = await adapters.toolroll.installed();
1449
1182
  const runtimes = new Set(installed.services);
@@ -1452,7 +1185,6 @@ async function served(adapters, candidate) {
1452
1185
  const [runtime] = runtimes;
1453
1186
  return runtime !== undefined && await adapters.toolroll.runtimeCommit(runtime) === candidate ? runtime : null;
1454
1187
  }
1455
- /** The one runtime the services and both CLI names run, when it records the gated commit; otherwise null. */
1456
1188
  async function deployed(adapters, candidate) {
1457
1189
  const installed = await adapters.toolroll.installed();
1458
1190
  const runtimes = new Set([...installed.services, ...installed.clis.map(one => one.runtime ?? "")]);
@@ -1461,20 +1193,7 @@ async function deployed(adapters, candidate) {
1461
1193
  const [runtime] = runtimes;
1462
1194
  return runtime !== undefined && runtime !== "" && await adapters.toolroll.runtimeCommit(runtime) === candidate ? runtime : null;
1463
1195
  }
1464
- /**
1465
- * The gate's look at the pull request's required checks on the exact commit, before anything is filed or anyone is
1466
- * asked to approve (#237): a required check that failed or was cancelled stops here; checks not started or still
1467
- * running are named, and the gate waits for them; ones that never finish within the gate's limit stop here too. GitHub
1468
- * not answering is waited out the same way, never taken for a pass. The ci step still checks again before merging.
1469
- */
1470
- /**
1471
- * The branch must contain main's head as GitHub's API answers now: CI tests the pull request's head commit,
1472
- * so only a branch that already holds main merges into exactly the tested tree. Refused in plain words otherwise.
1473
- */
1474
1196
  async function containsMain(adapters, j, nothing) {
1475
- // GitHub's own answers (eval-harness review 1, finding 4): main's head and the comparison are read from its API by
1476
- // this coordinator, never from refs/remotes/origin/main in a checkout a build can write. The checkout is still synced
1477
- // for what the gate reads from it later.
1478
1197
  await adapters.repo.sync(j.branch);
1479
1198
  const main = await adapters.github.mainHead(j.github);
1480
1199
  if (!/^[0-9a-f]{40}$/.test(main))
@@ -1483,13 +1202,8 @@ async function containsMain(adapters, j, nothing) {
1483
1202
  return main;
1484
1203
  throw new Stop("base-moved", `The branch is behind main; update it and push. ${j.branch} at ${j.candidate.sha.slice(0, 7)} doesn't contain main's head ${main.slice(0, 7)}, so what merges wouldn't be the tree CI tested. ${nothing}: release the updated commit with \`toolroll release ${j.branch} --repo ${j.checkout} --new\`.`);
1485
1204
  }
1486
- /**
1487
- * GitHub must refuse a branch behind main for every release (eval-harness review 1, finding 4). A person's approval
1488
- * cannot make the final main read and merge atomic, so absent or unreadable protection stops that release too.
1489
- */
1490
1205
  async function mainProtection(adapters, j, auto, nothing) {
1491
1206
  let protection, unread = null;
1492
- // Couldn't read (after the adapter's network retries) is its own stop, never "doesn't hold" and never "holds".
1493
1207
  try {
1494
1208
  protection = await adapters.github.upToDateRequired(j.github);
1495
1209
  }
@@ -1497,7 +1211,6 @@ async function mainProtection(adapters, j, auto, nothing) {
1497
1211
  protection = null;
1498
1212
  unread = String(error?.message ?? error).slice(0, 400);
1499
1213
  }
1500
- // The git lanes main's protection doesn't name yet are said, never refused (PROTECTION_REPORT_ONLY_CHECKS).
1501
1214
  if (protection !== null && protection.notYetRequired.length > 0)
1502
1215
  adapters.say(` Note: main's protection doesn't require ${protection.notYetRequired.join(", ")} yet; add ${protection.notYetRequired.length === 1 ? "it" : "them"} to its required checks.`);
1503
1216
  if (protection?.effective === true)
@@ -1507,11 +1220,6 @@ async function mainProtection(adapters, j, auto, nothing) {
1507
1220
  }
1508
1221
  throw new Stop("base-unprotected", `main's protection doesn't hold: ${protection.missing.join("; ")}, so this release can't merge${auto ? " automatically" : ""}. ${nothing}. Restore effective main protection and try again.`);
1509
1222
  }
1510
- /**
1511
- * Wait for every required pull request check on the candidate to pass; stop on one that failed. `pendingIsEnough` (the
1512
- * automatic road's gate, pipeline-speed.md D2): checks still running are no reason to wait — returns false then, true
1513
- * once they all passed. `nothing` says what hasn't happened yet when a check failed.
1514
- */
1515
1223
  async function earlyChecks(adapters, j, wait, options = {}) {
1516
1224
  const nothing = options.nothing ?? "Nothing was filed or sent for approval";
1517
1225
  const sha = j.candidate.sha.slice(0, 7);
@@ -1552,33 +1260,18 @@ async function earlyChecks(adapters, j, wait, options = {}) {
1552
1260
  throw new Stop("ci-missing", `Pull request checks on ${sha} didn't all finish in time${named === "" ? (unread ? " (GitHub didn't answer)" : "") : `: ${named}`}. ${nothing}. Start or rerun them on GitHub, then run this command again.`);
1553
1261
  }
1554
1262
  }
1555
- /** A probe's failure that is only the network to GitHub failing for now (release-net.ts transientFailure: a timeout, a
1556
- * connection or name failure, a 5xx, an answer cut short, a secondary rate limit), never a decision (a Stop), a
1557
- * definitive answer or another error. */
1558
1263
  export function transientNetworkError(error) {
1559
1264
  if (error instanceof Stop || error instanceof Restart)
1560
1265
  return false;
1561
1266
  return transientFailure(String(error?.message ?? error)) !== null;
1562
1267
  }
1563
- /** The part of a network failure worth saying: its matching phrase. */
1564
1268
  function networkWords(error) {
1565
1269
  return transientFailure(String(error?.message ?? error))?.words ?? "a network failure";
1566
1270
  }
1567
- /**
1568
- * The pull request's checks on exactly `head`, every attempt (the adapter asks GitHub for all of them, filter=all):
1569
- * each reported attempt must be filed under `head` with a check-run id; a required check counts only from GitHub
1570
- * Actions (an app that names a check alike can't stand in for it); attempts are grouped by the job they belong to — the
1571
- * app, its check suite (a workflow run, whose re-runs stay in it) and the name — and every group is judged by its
1572
- * latest attempt; every required check needs a group. With `auto` (an automatic approval), every other failed attempt on
1573
- * the commit — an earlier attempt, or a job a newer run renamed or dropped — must be one GitHub's own job record shows ending before any workflow step ran (`beforeTests`: confirmed
1574
- * infrastructure), and at most INFRA_RERUNS_PER_CANDIDATE of them on the commit; any other earlier failure — a test,
1575
- * a typecheck, or one nothing explains — fails the verdict, so a person decides. The failures it tolerated are returned.
1576
- */
1577
1271
  export function prChecksVerdict(runs, head, required, options = {}) {
1578
1272
  const failed = [], waiting = [], failures = [];
1579
1273
  const valid = [];
1580
1274
  for (const run of runs) {
1581
- // youiyoux's drift check from its own workflow neither holds nor fails a release (ADVISORY_PR_CHECKS).
1582
1275
  const advisory = Object.hasOwn(ADVISORY_PR_CHECKS, run.name) ? ADVISORY_PR_CHECKS[run.name] : undefined;
1583
1276
  if (advisory !== undefined && !required.includes(run.name) && run.app === "github-actions" && workflowIs(run.workflowPath, advisory))
1584
1277
  continue;
@@ -1594,8 +1287,6 @@ export function prChecksVerdict(runs, head, required, options = {}) {
1594
1287
  failed.push(`${run.name} (reported by ${run.app ?? "an unknown app"}, not GitHub Actions)`);
1595
1288
  continue;
1596
1289
  }
1597
- // A required name counts only from the workflow that defines it: a job of the same name in another workflow (or
1598
- // one whose workflow GitHub doesn't name) fails the verdict rather than stand in for it.
1599
1290
  if (options.workflow !== undefined && required.includes(run.name)) {
1600
1291
  const want = typeof options.workflow === "string" ? options.workflow : options.workflow[run.name];
1601
1292
  if (want === undefined || !workflowIs(run.workflowPath, want)) {
@@ -1609,9 +1300,6 @@ export function prChecksVerdict(runs, head, required, options = {}) {
1609
1300
  }
1610
1301
  valid.push(run);
1611
1302
  }
1612
- // Supersession by trusted workflow identity (GitHub's workflow-run API, read by the adapter): a newer run of the same
1613
- // workflow on this commit replaces the older ones — its jobs are the current ones. A suite whose workflow isn't known
1614
- // is its own workflow (nothing supersedes it), and another app's suites stand on their own.
1615
1303
  const workflowOf = (run) => run.app === "github-actions" && typeof run.workflow === "number" ? `w:${run.workflow}` : `s:${run.app ?? ""}:${run.suite ?? ""}`;
1616
1304
  const current = new Map();
1617
1305
  for (const run of valid) {
@@ -1620,22 +1308,17 @@ export function prChecksVerdict(runs, head, required, options = {}) {
1620
1308
  if (was === undefined || (suite !== null && (was === null || suite > was)))
1621
1309
  current.set(key, suite);
1622
1310
  }
1623
- // Jobs: a workflow and a name, every attempt in every suite of it; judged by the latest attempt in the current suite.
1624
1311
  const groups = new Map();
1625
1312
  for (const run of valid) {
1626
1313
  const key = JSON.stringify([workflowOf(run), run.name]);
1627
1314
  groups.set(key, [...(groups.get(key) ?? []), run]);
1628
1315
  }
1629
1316
  const judged = new Set();
1630
- // The attempt each current job stands on (its latest in the current run); every other attempt on the commit is
1631
- // history, whatever its job is called now.
1632
1317
  const standing = new Set();
1633
1318
  for (const attempts of groups.values()) {
1634
1319
  const ordered = [...attempts].sort((a, b) => a.id - b.id);
1635
1320
  const now = current.get(workflowOf(ordered[0])) ?? null;
1636
1321
  const live = ordered.filter(one => (one.suite ?? null) === now);
1637
- // A job only an older run had (the newer run no longer has it, or calls it something else) doesn't stand for a
1638
- // required check; its failures are still history below.
1639
1322
  if (live.length === 0)
1640
1323
  continue;
1641
1324
  const latest = live.at(-1), name = latest.name;
@@ -1645,9 +1328,6 @@ export function prChecksVerdict(runs, head, required, options = {}) {
1645
1328
  waiting.push(`${name} (${latest.status})`);
1646
1329
  continue;
1647
1330
  }
1648
- // Skipped is never success (test-matrix.md): GitHub's protection reads a skipped job as passing a merge, a release
1649
- // never does. A documentation-only pull request skips the area lanes, and any pull request but a release-* branch's
1650
- // skips Node 22, so a release needs every lane executed on its exact head.
1651
1331
  if (latest.conclusion === "skipped" && required.includes(name)) {
1652
1332
  failed.push(`${name} (skipped: a release needs it run on this exact commit; release from a branch named release-*, whose pull request runs every lane)`);
1653
1333
  continue;
@@ -1657,11 +1337,6 @@ export function prChecksVerdict(runs, head, required, options = {}) {
1657
1337
  continue;
1658
1338
  }
1659
1339
  }
1660
- // Every failed attempt on the commit that no current job stands on — an earlier attempt of a job, a job a newer run
1661
- // renamed, dropped, or never ran again — is classified before anything is superseded (eval-harness review 1, finding
1662
- // 1): a renamed or vanished job never erases a failure. An automatic approval tolerates only confirmed
1663
- // infrastructure (GitHub's job record shows the runner failing before any workflow step ran), and waits out any
1664
- // earlier attempt still running.
1665
1340
  const history = valid.filter(one => !standing.has(one));
1666
1341
  if (options.auto === true) {
1667
1342
  for (const one of history)
@@ -1688,10 +1363,6 @@ export function prChecksVerdict(runs, head, required, options = {}) {
1688
1363
  return { state: "failed", failed };
1689
1364
  return waiting.length > 0 ? { state: "pending", waiting } : { state: "passed", failures };
1690
1365
  }
1691
- /**
1692
- * What a failed release check means and what happens next, by its class (check-failure.ts), in words. Only confirmed
1693
- * infrastructure reruns on its own; nothing else is rerun to pass.
1694
- */
1695
1366
  export function checkFailedWords(input) {
1696
1367
  const short = input.sha.slice(0, 7), again = `\`toolroll release ${input.branch} --repo ${input.checkout} --new\``;
1697
1368
  switch (input.class) {
@@ -1707,18 +1378,13 @@ export function checkFailedWords(input) {
1707
1378
  return `The Full release check of ${short} did not pass (run ${input.run}): ${input.why}. Fix the branch and release the new commit with ${again}.`;
1708
1379
  }
1709
1380
  }
1710
- /** Whether GitHub's workflow-run `path` names exactly `file` (it may carry the ref it ran from, after an `@`). */
1711
1381
  export function workflowIs(path, file) {
1712
1382
  if (typeof path !== "string")
1713
1383
  return false;
1714
1384
  if (path === file)
1715
1385
  return true;
1716
- // GitHub may append @ref, but ci.yml@evil.yml is also a valid *different* workflow filename. Multiple @ signs
1717
- // likewise cannot distinguish that filename from a ref. Refuse ambiguous suffixes instead of granting its checks.
1718
1386
  const ref = path.startsWith(`${file}@`) ? path.slice(file.length + 1) : "";
1719
1387
  return /^[A-Za-z0-9._+/-]+$/.test(ref) && !/\.ya?ml$/i.test(ref);
1720
1388
  }
1721
- /** The words `toolroll release` reads as its own (release-cli.ts), never as a branch: such a branch is named with --branch. */
1722
1389
  const RELEASE_WORDS = new Set(["status", "nightly", "carry", "revoke", "ask-every-commit", "unsandboxed-carry", "auto-approve", "publish-ok", "approve"]);
1723
- /** How a person names this branch to `toolroll release` again. */
1724
1390
  export function releaseBranchArg(branch) { return RELEASE_WORDS.has(branch) ? `--branch ${branch}` : branch; }