toolroll 0.9.93 → 0.9.95

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 (436) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/activity-line.d.ts +7 -4
  3. package/dist/activity-line.js +9 -7
  4. package/dist/agent-fence.d.ts +10 -0
  5. package/dist/agent-fence.js +6 -3
  6. package/dist/approval-authority.d.ts +7 -1
  7. package/dist/approval-authority.js +11 -2
  8. package/dist/approval-password.d.ts +31 -0
  9. package/dist/approval-password.js +26 -0
  10. package/dist/assignment-status.d.ts +1 -1
  11. package/dist/assignment-ui.js +3 -1
  12. package/dist/assignment.js +5 -0
  13. package/dist/attest.d.ts +3 -0
  14. package/dist/attest.js +10 -0
  15. package/dist/boot-identity.d.ts +2 -1
  16. package/dist/boot-identity.js +6 -4
  17. package/dist/bounded-spawn.d.ts +57 -0
  18. package/dist/bounded-spawn.js +220 -0
  19. package/dist/browser/terminal.js +42 -42
  20. package/dist/browser/workspace.css +1 -1
  21. package/dist/browser/workspace.js +32 -32
  22. package/dist/browser-crew.js +2 -0
  23. package/dist/browser-shell.d.ts +1 -1
  24. package/dist/browser-shell.js +2 -2
  25. package/dist/browser-workspace.d.ts +50 -2
  26. package/dist/browser-workspace.js +3 -3
  27. package/dist/build-review.js +2 -0
  28. package/dist/builder-restart.d.ts +21 -0
  29. package/dist/builder-restart.js +50 -0
  30. package/dist/builder.d.ts +11 -2
  31. package/dist/builder.js +234 -101
  32. package/dist/card-catalog.d.ts +209 -0
  33. package/dist/card-catalog.js +133 -0
  34. package/dist/card-cli.d.ts +43 -0
  35. package/dist/card-cli.js +44 -0
  36. package/dist/card-render.d.ts +26 -0
  37. package/dist/card-render.js +223 -0
  38. package/dist/card-sources.d.ts +68 -0
  39. package/dist/card-sources.js +234 -0
  40. package/dist/chat-acceptance.js +1 -1
  41. package/dist/chat-actions.d.ts +106 -9
  42. package/dist/chat-actions.js +473 -46
  43. package/dist/chat-approval.d.ts +13 -0
  44. package/dist/chat-approval.js +39 -9
  45. package/dist/chat-card-part.d.ts +11 -0
  46. package/dist/chat-card-part.js +18 -0
  47. package/dist/chat-card.d.ts +46 -0
  48. package/dist/chat-card.js +99 -0
  49. package/dist/chat-channel.d.ts +2 -0
  50. package/dist/chat-channel.js +37 -14
  51. package/dist/chat-controls.d.ts +4 -0
  52. package/dist/chat-controls.js +4 -0
  53. package/dist/chat-decide.d.ts +10 -16
  54. package/dist/chat-decide.js +79 -62
  55. package/dist/chat-delivery.js +13 -4
  56. package/dist/chat-flow.d.ts +0 -27
  57. package/dist/chat-flow.js +31 -2
  58. package/dist/chat-quiet.js +4 -4
  59. package/dist/chat-task-actions.d.ts +3 -2
  60. package/dist/chat-task-actions.js +19 -5
  61. package/dist/chat-terms.d.ts +14 -2
  62. package/dist/chat-terms.js +35 -0
  63. package/dist/chat-voice.d.ts +1 -1
  64. package/dist/chat-voice.js +2 -2
  65. package/dist/check-facts.d.ts +3 -1
  66. package/dist/check-facts.js +57 -11
  67. package/dist/check-failure.d.ts +24 -3
  68. package/dist/check-failure.js +89 -13
  69. package/dist/check-levels-ui.d.ts +4 -0
  70. package/dist/check-levels-ui.js +10 -1
  71. package/dist/check-load.d.ts +85 -0
  72. package/dist/check-load.js +147 -0
  73. package/dist/check-only-standing.d.ts +36 -0
  74. package/dist/check-only-standing.js +39 -0
  75. package/dist/check-only.d.ts +15 -0
  76. package/dist/check-only.js +99 -0
  77. package/dist/check-repair.d.ts +47 -0
  78. package/dist/check-repair.js +240 -0
  79. package/dist/check-report.d.ts +2 -0
  80. package/dist/check-report.js +1 -1
  81. package/dist/check-stamp.d.ts +46 -0
  82. package/dist/check-stamp.js +93 -0
  83. package/dist/checkout-cleanup.d.ts +36 -5
  84. package/dist/checkout-cleanup.js +166 -14
  85. package/dist/claim.d.ts +6 -0
  86. package/dist/claim.js +13 -2
  87. package/dist/cli-help.d.ts +4 -1
  88. package/dist/cli-help.js +49 -30
  89. package/dist/cli.js +15 -1
  90. package/dist/code-extract.d.ts +44 -0
  91. package/dist/code-extract.js +88 -0
  92. package/dist/code-map-acts.d.ts +24 -0
  93. package/dist/code-map-acts.js +53 -0
  94. package/dist/code-map-admission.d.ts +52 -0
  95. package/dist/code-map-admission.js +295 -0
  96. package/dist/code-map-build.d.ts +63 -0
  97. package/dist/code-map-build.js +415 -0
  98. package/dist/code-map-cli.d.ts +153 -0
  99. package/dist/code-map-cli.js +103 -0
  100. package/dist/code-map-main.d.ts +1 -0
  101. package/dist/code-map-main.js +48 -0
  102. package/dist/code-map-read.d.ts +106 -0
  103. package/dist/code-map-read.js +171 -0
  104. package/dist/code-map-report.d.ts +37 -0
  105. package/dist/code-map-report.js +95 -0
  106. package/dist/code-map-shape.d.ts +172 -0
  107. package/dist/code-map-shape.js +327 -0
  108. package/dist/code-map-store.d.ts +136 -0
  109. package/dist/code-map-store.js +233 -0
  110. package/dist/coding-provider.d.ts +3 -1
  111. package/dist/coding-provider.js +12 -7
  112. package/dist/coding-update.js +3 -2
  113. package/dist/coding-workspace.d.ts +1 -1
  114. package/dist/coding-workspace.js +8 -8
  115. package/dist/console-chrome.js +2 -2
  116. package/dist/containment.d.ts +5 -0
  117. package/dist/containment.js +14 -1
  118. package/dist/contracts/chat-actions.d.ts +92 -0
  119. package/dist/contracts/chat-actions.js +20 -0
  120. package/dist/contracts/chat-card.d.ts +91 -0
  121. package/dist/contracts/chat-card.js +54 -0
  122. package/dist/contracts/chat-content.d.ts +191 -0
  123. package/dist/contracts/chat-content.js +4 -0
  124. package/dist/contracts/cli.d.ts +52 -0
  125. package/dist/contracts/cli.js +4 -0
  126. package/dist/contracts/console-api.d.ts +12 -3
  127. package/dist/contracts/console-api.js +12 -3
  128. package/dist/contracts/flow-propose.d.ts +8 -1
  129. package/dist/contracts/flow-propose.js +3 -1
  130. package/dist/contracts/flow-send.d.ts +126 -0
  131. package/dist/contracts/flow-send.js +3 -0
  132. package/dist/contracts/gateway-tools.d.ts +17 -0
  133. package/dist/contracts/gateway-tools.js +3 -1
  134. package/dist/contracts/lead-tools.d.ts +234 -0
  135. package/dist/contracts/lead-tools.js +25 -1
  136. package/dist/contracts/project-knowledge.d.ts +38 -5
  137. package/dist/contracts/project-knowledge.js +11 -5
  138. package/dist/contracts/project-memory.d.ts +3 -1
  139. package/dist/contracts/project-memory.js +3 -2
  140. package/dist/contracts/storage.d.ts +14 -0
  141. package/dist/contracts/storage.js +3 -1
  142. package/dist/contracts/store-json.d.ts +18 -0
  143. package/dist/contracts/youiyoux-request.d.ts +1 -1
  144. package/dist/contracts/youiyoux-request.js +1 -1
  145. package/dist/desktop-access.js +6 -2
  146. package/dist/discord-chat.js +14 -0
  147. package/dist/dispatch.d.ts +1 -1
  148. package/dist/dispatch.js +25 -16
  149. package/dist/dispose.d.ts +19 -0
  150. package/dist/dispose.js +55 -9
  151. package/dist/easy-start.js +2 -3
  152. package/dist/eval-oracle.js +4 -1
  153. package/dist/evals.js +2 -1
  154. package/dist/evidence-pair.d.ts +53 -0
  155. package/dist/evidence-pair.js +128 -0
  156. package/dist/exhaustion.d.ts +17 -4
  157. package/dist/exhaustion.js +44 -4
  158. package/dist/export.js +1 -1
  159. package/dist/failing-first.d.ts +31 -0
  160. package/dist/failing-first.js +44 -0
  161. package/dist/fallback-schema.d.ts +8 -0
  162. package/dist/fallback-schema.js +40 -0
  163. package/dist/fallback.d.ts +138 -0
  164. package/dist/fallback.js +605 -0
  165. package/dist/fast-start.d.ts +136 -0
  166. package/dist/fast-start.js +431 -0
  167. package/dist/fast-terms.d.ts +9 -0
  168. package/dist/fast-terms.js +23 -0
  169. package/dist/fenced-check-coverage.d.ts +62 -0
  170. package/dist/fenced-check-coverage.js +54 -0
  171. package/dist/findings.d.ts +224 -0
  172. package/dist/findings.js +449 -0
  173. package/dist/first-run.js +1 -1
  174. package/dist/flaky-ci.d.ts +31 -0
  175. package/dist/flaky-ci.js +149 -0
  176. package/dist/flaky-cli.d.ts +60 -0
  177. package/dist/flaky-cli.js +60 -0
  178. package/dist/flaky.d.ts +75 -9
  179. package/dist/flaky.js +255 -0
  180. package/dist/fleet-schema.d.ts +17 -0
  181. package/dist/fleet-schema.js +135 -0
  182. package/dist/flow-browser.js +2 -2
  183. package/dist/flow-card-task.js +3 -0
  184. package/dist/flow-code.d.ts +2 -2
  185. package/dist/flow-code.js +9 -5
  186. package/dist/flow-result-card.d.ts +22 -0
  187. package/dist/flow-result-card.js +55 -0
  188. package/dist/flow-send.js +12 -9
  189. package/dist/flow-steps.js +1 -1
  190. package/dist/flow-triggers.d.ts +1 -1
  191. package/dist/flow-triggers.js +2 -2
  192. package/dist/flow-unattended.d.ts +26 -0
  193. package/dist/flow-unattended.js +12 -3
  194. package/dist/flows-ui.js +10 -2
  195. package/dist/follow-through-brief.d.ts +12 -0
  196. package/dist/follow-through-brief.js +31 -0
  197. package/dist/follow-through-cli.d.ts +23 -0
  198. package/dist/follow-through-cli.js +153 -0
  199. package/dist/git-incident.d.ts +16 -0
  200. package/dist/git-incident.js +69 -6
  201. package/dist/github-import.d.ts +62 -0
  202. package/dist/github-import.js +146 -0
  203. package/dist/guides.js +15 -10
  204. package/dist/handover-note.d.ts +33 -0
  205. package/dist/handover-note.js +106 -0
  206. package/dist/invoke.d.ts +25 -2
  207. package/dist/invoke.js +157 -58
  208. package/dist/job-object-helper.ps1 +10 -3
  209. package/dist/keymap.d.ts +41 -0
  210. package/dist/keymap.js +51 -0
  211. package/dist/knowledge-cli.js +1 -1
  212. package/dist/knowledge-ui.d.ts +21 -4
  213. package/dist/knowledge-ui.js +75 -7
  214. package/dist/laptop-background.d.ts +16 -0
  215. package/dist/laptop-background.js +108 -2
  216. package/dist/lead-cli.js +26 -24
  217. package/dist/lead-context.js +1 -1
  218. package/dist/lead-contract.d.ts +1 -1
  219. package/dist/lead-contract.js +3 -2
  220. package/dist/lead-doors.d.ts +4 -0
  221. package/dist/lead-doors.js +2 -2
  222. package/dist/lead-progress.js +5 -0
  223. package/dist/lead-status.d.ts +2 -0
  224. package/dist/lead-status.js +6 -2
  225. package/dist/lead-tools.js +162 -34
  226. package/dist/lead.js +2 -2
  227. package/dist/lesson-notes.d.ts +81 -0
  228. package/dist/lesson-notes.js +336 -0
  229. package/dist/limits-ui.js +1 -1
  230. package/dist/local-owner.d.ts +1 -1
  231. package/dist/local-owner.js +16 -0
  232. package/dist/machine-check.d.ts +16 -0
  233. package/dist/machine-check.js +26 -0
  234. package/dist/machine-identity.d.ts +75 -0
  235. package/dist/machine-identity.js +170 -0
  236. package/dist/mcp-core.js +11 -1
  237. package/dist/memory-cli.d.ts +300 -1
  238. package/dist/memory-cli.js +62 -9
  239. package/dist/memory-pass.d.ts +16 -0
  240. package/dist/memory-pass.js +67 -3
  241. package/dist/memory-tidy.d.ts +181 -0
  242. package/dist/memory-tidy.js +523 -0
  243. package/dist/memory-use.d.ts +35 -0
  244. package/dist/memory-use.js +109 -0
  245. package/dist/merge-checklist.d.ts +55 -0
  246. package/dist/merge-checklist.js +182 -0
  247. package/dist/modes.d.ts +6 -6
  248. package/dist/modes.js +3 -1
  249. package/dist/needs-you.d.ts +31 -9
  250. package/dist/needs-you.js +110 -41
  251. package/dist/nightly-github.d.ts +2 -0
  252. package/dist/nightly-github.js +4 -4
  253. package/dist/operate-remote-arguments.js +7 -1
  254. package/dist/operate-remote.js +3 -1
  255. package/dist/operate.d.ts +6 -1
  256. package/dist/operate.js +565 -64
  257. package/dist/phase-routing.js +2 -2
  258. package/dist/plain-schema.d.ts +23 -0
  259. package/dist/plain-schema.js +94 -0
  260. package/dist/plain-words.d.ts +20 -0
  261. package/dist/plain-words.js +66 -0
  262. package/dist/plan-login.d.ts +14 -0
  263. package/dist/plan-login.js +58 -0
  264. package/dist/planner.d.ts +1 -1
  265. package/dist/planner.js +4 -2
  266. package/dist/process-liveness.d.ts +2 -0
  267. package/dist/process-liveness.js +61 -17
  268. package/dist/project-delete-ui.d.ts +19 -2
  269. package/dist/project-delete-ui.js +29 -1
  270. package/dist/project-delete.js +14 -1
  271. package/dist/project-knowledge.d.ts +18 -11
  272. package/dist/project-knowledge.js +39 -9
  273. package/dist/project-learning.d.ts +2 -1
  274. package/dist/project-learning.js +15 -45
  275. package/dist/project-memory.d.ts +5 -0
  276. package/dist/project-memory.js +22 -2
  277. package/dist/project-tools.d.ts +4 -4
  278. package/dist/project-tools.js +23 -7
  279. package/dist/proof.js +30 -5
  280. package/dist/protected-storage-look.d.ts +1 -0
  281. package/dist/protected-storage-look.js +13 -0
  282. package/dist/protected-storage.d.ts +70 -39
  283. package/dist/protected-storage.js +196 -147
  284. package/dist/provider-auth.js +1 -1
  285. package/dist/provider-capture.d.ts +34 -0
  286. package/dist/provider-capture.js +53 -0
  287. package/dist/publish.js +9 -1
  288. package/dist/pull-request-flow.js +5 -0
  289. package/dist/push.d.ts +18 -2
  290. package/dist/push.js +40 -16
  291. package/dist/release-adapters.d.ts +9 -0
  292. package/dist/release-adapters.js +76 -0
  293. package/dist/release-auto.js +13 -13
  294. package/dist/release-card.d.ts +1 -2
  295. package/dist/release-card.js +11 -0
  296. package/dist/release-carry.d.ts +7 -2
  297. package/dist/release-carry.js +49 -10
  298. package/dist/release-cli.d.ts +4 -0
  299. package/dist/release-cli.js +29 -22
  300. package/dist/release-coverage.js +1 -1
  301. package/dist/release-next.d.ts +48 -0
  302. package/dist/release-next.js +161 -0
  303. package/dist/release.d.ts +20 -1
  304. package/dist/release.js +85 -9
  305. package/dist/remote-destination.d.ts +36 -0
  306. package/dist/remote-destination.js +217 -0
  307. package/dist/remote-main.d.ts +48 -0
  308. package/dist/remote-main.js +84 -5
  309. package/dist/repository-context.d.ts +3 -2
  310. package/dist/repository-context.js +112 -70
  311. package/dist/restart-certification.d.ts +1 -0
  312. package/dist/restart-certification.js +8 -6
  313. package/dist/result-acts.d.ts +27 -19
  314. package/dist/result-acts.js +36 -25
  315. package/dist/result-follow-ups.d.ts +2 -2
  316. package/dist/result-follow-ups.js +18 -4
  317. package/dist/result-review.d.ts +1 -1
  318. package/dist/route-change-check.d.ts +4 -0
  319. package/dist/route-change-check.js +13 -0
  320. package/dist/route-change.d.ts +22 -0
  321. package/dist/route-change.js +89 -0
  322. package/dist/route-hooks.js +3 -2
  323. package/dist/route-results.d.ts +6 -1
  324. package/dist/route-results.js +14 -5
  325. package/dist/run-closeout.d.ts +1 -1
  326. package/dist/run-closeout.js +7 -5
  327. package/dist/runner-process.js +3 -2
  328. package/dist/runner.js +2 -1
  329. package/dist/scope.d.ts +28 -4
  330. package/dist/scope.js +92 -28
  331. package/dist/scout.d.ts +1 -1
  332. package/dist/scout.js +2 -1
  333. package/dist/serve.d.ts +1 -1
  334. package/dist/serve.js +26 -18
  335. package/dist/server/chat.js +16 -14
  336. package/dist/server/chrome.d.ts +1 -1
  337. package/dist/server/chrome.js +26 -35
  338. package/dist/server/console.css +73 -0
  339. package/dist/server/guards.js +3 -0
  340. package/dist/server/home.d.ts +6 -0
  341. package/dist/server/home.js +21 -13
  342. package/dist/server/http.js +1 -1
  343. package/dist/server/kit.js +1 -1
  344. package/dist/server/merge-ready-view.d.ts +10 -0
  345. package/dist/server/merge-ready-view.js +30 -0
  346. package/dist/server/pages-assets.d.ts +1 -0
  347. package/dist/server/pages-assets.js +8 -5
  348. package/dist/server/pages.js +103 -82
  349. package/dist/server/render-chat.js +16 -3
  350. package/dist/server/render-code-map.d.ts +30 -0
  351. package/dist/server/render-code-map.js +137 -0
  352. package/dist/server/render-flaky.d.ts +20 -0
  353. package/dist/server/render-flaky.js +59 -0
  354. package/dist/server/render-follow-through.d.ts +11 -0
  355. package/dist/server/render-follow-through.js +68 -0
  356. package/dist/server/render-history.js +1 -1
  357. package/dist/server/render-new-task.d.ts +26 -1
  358. package/dist/server/render-new-task.js +30 -5
  359. package/dist/server/render-pages.d.ts +1 -175
  360. package/dist/server/render-pages.js +38 -313
  361. package/dist/server/render-projects.d.ts +2 -1
  362. package/dist/server/render-projects.js +9 -7
  363. package/dist/server/render-release.d.ts +2 -0
  364. package/dist/server/render-release.js +3 -3
  365. package/dist/server/render-results.d.ts +2 -0
  366. package/dist/server/render-results.js +68 -68
  367. package/dist/server/render-tasks.d.ts +16 -2
  368. package/dist/server/render-tasks.js +177 -141
  369. package/dist/server/retired-routes.d.ts +17 -0
  370. package/dist/server/retired-routes.js +53 -0
  371. package/dist/server/route-table.d.ts +3 -0
  372. package/dist/server/route-table.js +48 -12
  373. package/dist/server/settings.js +166 -34
  374. package/dist/server/task-views.js +66 -26
  375. package/dist/server/tasks.d.ts +2 -6
  376. package/dist/server/tasks.js +250 -321
  377. package/dist/server/welcome.js +1 -1
  378. package/dist/settings-groups-ui.d.ts +1 -0
  379. package/dist/settings-groups-ui.js +4 -2
  380. package/dist/settings-kit.js +3 -2
  381. package/dist/settings-proofs.js +3 -1
  382. package/dist/slack-chat.js +14 -1
  383. package/dist/steer-mailbox.d.ts +8 -1
  384. package/dist/steer-mailbox.js +164 -6
  385. package/dist/stop-proof.js +6 -4
  386. package/dist/storage-sweep-process.js +1 -1
  387. package/dist/storage-sweep.d.ts +5 -3
  388. package/dist/storage-sweep.js +30 -9
  389. package/dist/storage-ui.js +28 -17
  390. package/dist/storage.d.ts +27 -2
  391. package/dist/storage.js +39 -2
  392. package/dist/store.d.ts +89 -7
  393. package/dist/store.js +386 -114
  394. package/dist/surface.js +67 -6
  395. package/dist/sweep-quarantine.d.ts +1 -0
  396. package/dist/sweep-quarantine.js +6 -4
  397. package/dist/tamper-scan.d.ts +4 -0
  398. package/dist/tamper-scan.js +90 -0
  399. package/dist/task-aliases.d.ts +5 -0
  400. package/dist/task-aliases.js +9 -0
  401. package/dist/task-control.d.ts +2 -1
  402. package/dist/task-control.js +4 -1
  403. package/dist/task-outcome-cli.d.ts +2 -0
  404. package/dist/task-outcome-cli.js +17 -17
  405. package/dist/task-sizing.d.ts +5 -0
  406. package/dist/task-sizing.js +2 -0
  407. package/dist/task-source.d.ts +7 -0
  408. package/dist/task-source.js +14 -0
  409. package/dist/task-status.d.ts +9 -0
  410. package/dist/task-status.js +45 -49
  411. package/dist/teardown-git.d.ts +18 -0
  412. package/dist/teardown-git.js +105 -21
  413. package/dist/telegram-lead.js +23 -6
  414. package/dist/telegram-progress.js +5 -3
  415. package/dist/telegram-status.js +6 -4
  416. package/dist/telegram.js +12 -1
  417. package/dist/test-infra.d.ts +8 -0
  418. package/dist/test-infra.js +18 -0
  419. package/dist/tidy.js +1 -1
  420. package/dist/toolroll-update.js +19 -5
  421. package/dist/tui-contract.d.ts +24 -0
  422. package/dist/tui-source.js +67 -8
  423. package/dist/tui.js +51 -51
  424. package/dist/vanished-retry.d.ts +30 -0
  425. package/dist/vanished-retry.js +174 -0
  426. package/dist/work-index.d.ts +2 -0
  427. package/dist/work-index.js +95 -66
  428. package/dist/work-summary.d.ts +1 -1
  429. package/dist/work-summary.js +7 -2
  430. package/dist/workspace-ui.d.ts +7 -3
  431. package/dist/workspace-ui.js +38 -23
  432. package/dist/worktree.d.ts +12 -3
  433. package/dist/worktree.js +91 -14
  434. package/package.json +2 -1
  435. package/dist/server/render-next.d.ts +0 -63
  436. package/dist/server/render-next.js +0 -109
@@ -1,15 +1,16 @@
1
1
  /**
2
- * Settings → Storage: how much space task checkouts use, what a clean-up would free now, the clean-up's preview (what
2
+ * Settings → Storage: how much space task folders (checkouts) use, what a clean-up would free now, what the next sweep's
3
+ * idle cleanup takes and when, the folders with uncommitted changes a person decides about, the clean-up's preview (what
3
4
  * goes, what stays and why, with paths) and its Remove behind the password, what the last storage sweep removed and
4
5
  * when (its paths in a disclosure) and why the next one waits, what landed work's teardown did and still waits on (in a
5
- * disclosure, with the one-time command for older work), and when a finished task's clean checkout goes by itself. An
6
- * instance operator's page, built from the revamp kit; the Settings frame adds the title.
6
+ * disclosure, with the one-time command for older work), and when a task's clean folder goes by itself. An instance
7
+ * operator's page, built from the revamp kit; the Settings frame adds the title.
7
8
  */
8
9
  import { homedir } from "node:os";
9
10
  import { basename } from "node:path";
10
11
  import { html, joinHtml } from "./html.js";
11
12
  import { previewDigest, whyWords } from "./checkout-cleanup.js";
12
- import { CLEANUP_CHOICES, bytesWords } from "./storage.js";
13
+ import { CLEANUP_CHOICES, IDLE_CHOICES, bytesWords, idleCleanupWords } from "./storage.js";
13
14
  import { sweepDetails, sweepWords } from "./storage-sweep.js";
14
15
  import { sweepScheduleWords } from "./storage-sweep-schedule.js";
15
16
  import { codeLine, disclose, formRow, icon, infoLine, note, notice, select, settingsRecord, settingsSection } from "./server/kit.js";
@@ -48,17 +49,18 @@ function sweepHtml(sweep) {
48
49
  /** Landed work, on demand: what its teardown did, what it waits on and why, and the one-time command for older work. */
49
50
  function landedHtml(landed) {
50
51
  const done = landed.completed + landed.checkouts + landed.branches === 0 ? "No landed work cleaned up yet."
51
- : `${plural(landed.completed, "task")} marked complete; ${plural(landed.checkouts, "checkout")} and ${plural(landed.branches, "local branch", "local branches")} removed.`;
52
+ : `${plural(landed.completed, "task")} marked complete; ${plural(landed.checkouts, "task folder")} and ${plural(landed.branches, "local branch", "local branches")} removed.`;
52
53
  const waiting = landed.waiting.length === 0 ? "" : html `<div data-landed-waiting>${note(`Waiting (${landed.waiting.length}):`)}${landed.waiting.map(one => settingsRecord({ title: html `<span class="k-mono">${tilde(one.target)}</span>`, sub: one.why ?? "" }))}</div>`;
53
54
  return html `<div data-landed>${disclose("Landed work", joinHtml([note(done), waiting,
54
55
  note(html `For work that landed before this: <code class="k-mono">toolroll storage clean --landed</code> shows what would go; add <code class="k-mono">--yes</code> to do it.`)]))}</div>`;
55
56
  }
56
- /** One checkout: the task it was for, its size, where it is (the home folder as ~), why it stays, and Discard when it has changes. */
57
+ /** One task folder: the task it was for, its size, where it is (the home folder as ~), why it stays, and Discard when it has changes. */
57
58
  function item(one) {
58
- const why = one.why === null ? "" : `${whyWords(one)[0].toUpperCase()}${whyWords(one).slice(1)}`;
59
+ // Under "Uncommitted changes" the heading already says why it stays.
60
+ const why = one.why === null || one.why === "has changes" ? "" : `${whyWords(one)[0].toUpperCase()}${whyWords(one).slice(1)}`;
59
61
  const discard = one.why === "has changes"
60
62
  ? disclose("Discard", kitSectionForm({ proof: "storage-discard", action: "/settings/storage/discard", id: `discard-${previewId(one.path)}`, hidden: { path: one.path },
61
- save: { label: "Discard changes", variant: "danger" }, body: note("Throws away this checkout and its uncommitted changes. Its branch stays.") }))
63
+ save: { label: "Discard changes", variant: "danger" }, body: note("Throws away this folder and its uncommitted changes. Its branch stays.") }))
62
64
  : "";
63
65
  return settingsRecord({ title: one.taskId ?? basename(one.path), attrs: { "data-checkout": one.path }, when: bytesWords(one.bytes),
64
66
  sub: html `<span class="k-mono">${tilde(one.path)}</span>${why === "" ? "" : ` · ${why}`}`, more: discard });
@@ -67,29 +69,38 @@ function item(one) {
67
69
  const previewId = (path) => path.replace(/[^a-z0-9]+/gi, "-").replace(/^-|-$/g, "").slice(-48) || "checkout";
68
70
  export function storageHtml(view, said) {
69
71
  const { plan } = view;
70
- const facts = [plural(plan.count, "checkout"), `${plan.waitingReview} waiting for review`, `${plan.withChanges} kept for their changes`].join(" · ");
72
+ const facts = [plural(plan.count, "task folder"), `${plan.waitingReview} waiting for review`, `${plan.withChanges} with uncommitted changes`].join(" · ");
71
73
  const frees = plan.go.length === 0 ? "Nothing to clean up now." : `Cleaning up now frees about ${bytesWords(plan.freeBytes)}.`;
72
- const checkouts = settingsSection({ id: "checkouts", title: `Checkouts use ${bytesWords(plan.totalBytes)}`,
74
+ const checkouts = settingsSection({ id: "checkouts", title: `Task folders use ${bytesWords(plan.totalBytes)}`,
73
75
  body: joinHtml([
74
76
  said.problem ? notice(said.problem) : said.said ? infoLine(said.said) : "",
75
77
  html `<p class="k-note" data-checkout-bytes="${plan.totalBytes}">${facts}</p>`,
76
78
  view.measured ?? "",
77
79
  html `<p class="k-note" data-clean-bytes="${plan.freeBytes}">${frees}</p>`,
80
+ html `<p class="k-note" data-idle-bytes="${plan.idleBytes}">${idleCleanupWords(plan)}</p>`,
78
81
  view.sweep === undefined ? "" : sweepHtml(view.sweep),
79
82
  view.landed === undefined ? "" : landedHtml(view.landed),
80
83
  ]) });
81
84
  const remove = plan.go.length === 0 ? "" : kitSectionForm({ proof: "storage-clean", action: "/settings/storage/clean", id: "clean-form", hidden: { preview: previewDigest(plan) },
82
- save: { label: `Remove ${plural(plan.go.length, "checkout")}`, variant: "danger" }, body: html `` });
85
+ save: { label: `Remove ${plural(plan.go.length, "task folder")}`, variant: "danger" }, body: html `` });
83
86
  const goes = plan.go.length === 0 ? note("Nothing to remove now.")
84
87
  : html `<div data-goes>${plan.go.map(one => item(one))}</div>`;
85
- const stays = plan.stay.length === 0 ? "" : disclose(`Stays (${plan.stay.length})`, html `<div data-stays>${plan.stay.map(one => item(one))}</div>`);
88
+ const changed = plan.stay.filter(one => one.why === "has changes");
89
+ const others = plan.stay.filter(one => one.why !== "has changes");
90
+ const stays = others.length === 0 ? "" : disclose(`Stays (${others.length})`, html `<div data-stays>${others.map(one => item(one))}</div>`);
91
+ // Never removed by itself: a person looks at each and keeps it or discards it.
92
+ const changes = changed.length === 0 ? "" : settingsSection({ id: "uncommitted", title: `Uncommitted changes (${changed.length})`,
93
+ lead: `${changed.length === 1 ? "This folder has" : "These folders have"} work that isn't on any branch, about ${bytesWords(changed.reduce((sum, one) => sum + one.bytes, 0))}. Toolroll never removes ${changed.length === 1 ? "it" : "them"} by itself.`,
94
+ body: html `<div data-uncommitted>${changed.map(one => item(one))}</div>` });
86
95
  const cleanUp = settingsSection({ id: "clean-up", title: "Clean up now",
87
- lead: plan.go.length === 0 ? "Nothing to remove now." : `Removes ${plural(plan.go.length, "checkout")}, about ${bytesWords(plan.freeBytes)}. Their branches stay, so nothing committed is lost.`,
96
+ lead: plan.go.length === 0 ? "Nothing to remove now." : `Removes ${plural(plan.go.length, "task folder")}, about ${bytesWords(plan.freeBytes)}. Their branches stay, so nothing committed is lost.`,
88
97
  body: html `<div data-clean-up>${joinHtml([plan.go.length === 0 ? "" : goes, remove, stays])}</div>` });
89
98
  const automatic = settingsSection({ id: "automatic-cleanup", title: "Automatic cleanup",
90
- lead: "Its branch stays. Checkouts with changes, commits on no branch, in use, or waiting for review are kept. When a task's work is already in main, Toolroll marks it complete and removes its checkout and local branches.",
99
+ lead: "Branches stay, so a later run, revision or retry makes a new folder. Folders with uncommitted changes, commits on no branch, or in use are kept. When a task's work is already in main, Toolroll marks it complete and removes its folder and local branches.",
91
100
  body: kitSectionForm({ proof: "storage-cleanup", action: "/settings/storage", id: "cleanup-form", gate: true,
92
- body: formRow("Remove a finished task's clean checkout", null, select({ id: "storage-cleanup", name: "cleanup", label: "Remove a finished task's clean checkout", current: plan.cleanup,
93
- items: CLEANUP_CHOICES.map(one => [one.value, one.label]) }), "inline") }) });
94
- return joinHtml([checkouts, cleanUp, automatic]);
101
+ body: joinHtml([formRow("Remove a finished task's clean folder", null, select({ id: "storage-cleanup", name: "cleanup", label: "Remove a finished task's clean folder", current: plan.cleanup,
102
+ items: CLEANUP_CHOICES.map(one => [one.value, one.label]) }), "inline"),
103
+ formRow("Remove an idle task's clean folder", "Even with its result waiting for review or the task unfinished. Idle means no run, no one acting on it and no open lease.", select({ id: "storage-idle", name: "idle", label: "Remove an idle task's clean folder", current: plan.idle,
104
+ items: IDLE_CHOICES.map(one => [one.value, one.label]) }), "inline")]) }) });
105
+ return joinHtml([checkouts, changes, cleanUp, automatic]);
95
106
  }
package/dist/storage.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Store } from "./store.js";
2
- import { type CheckoutCleanup } from "./contracts/storage.js";
2
+ import { type CheckoutCleanup, type CheckoutIdle } from "./contracts/storage.js";
3
3
  /** Settings → Storage: when a finished task's clean checkout is removed. One row, or none (the default). */
4
4
  export declare const CHECKOUT_CLEANUP_SCHEMA = "\nCREATE TABLE IF NOT EXISTS checkout_cleanup_setting (\n id INTEGER PRIMARY KEY CHECK (id = 1),\n cleanup TEXT NOT NULL CHECK (cleanup IN ('finished', '2d', '7d', 'never')),\n updated_by TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n";
5
5
  /**
@@ -10,7 +10,7 @@ export declare const CHECKOUT_CLEANUP_SCHEMA = "\nCREATE TABLE IF NOT EXISTS che
10
10
  export declare const LANDED_CLEANUP_SCHEMA = "\nCREATE TABLE IF NOT EXISTS landed_cleanup (\n id INTEGER PRIMARY KEY,\n repo TEXT NOT NULL,\n task_id TEXT,\n run_id INTEGER,\n receipt TEXT,\n head TEXT NOT NULL,\n how TEXT NOT NULL CHECK (how IN ('merged', 'in-main', 'content-in-main')),\n reason TEXT NOT NULL,\n completed INTEGER NOT NULL DEFAULT 0 CHECK (completed IN (0, 1)),\n actor TEXT NOT NULL,\n created_at TEXT NOT NULL,\n finished_at TEXT\n);\nCREATE UNIQUE INDEX IF NOT EXISTS landed_cleanup_result ON landed_cleanup(run_id) WHERE run_id IS NOT NULL;\nCREATE TABLE IF NOT EXISTS landed_cleanup_item (\n id INTEGER PRIMARY KEY,\n cleanup INTEGER NOT NULL REFERENCES landed_cleanup(id) ON DELETE CASCADE,\n kind TEXT NOT NULL CHECK (kind IN ('checkout', 'branch')),\n repo TEXT NOT NULL,\n target TEXT NOT NULL,\n expect TEXT NOT NULL,\n state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'done', 'kept')),\n why TEXT,\n done_at TEXT\n);\nCREATE UNIQUE INDEX IF NOT EXISTS landed_cleanup_pending ON landed_cleanup_item(kind, repo, target) WHERE state = 'pending';\nCREATE INDEX IF NOT EXISTS landed_cleanup_item_of ON landed_cleanup_item(cleanup, state);\n";
11
11
  /** What each storage sweep or clean-up by hand did (storage-sweep.ts): the latest few. */
12
12
  export declare const STORAGE_SWEEP_SCHEMA = "\nCREATE TABLE IF NOT EXISTS storage_sweep (\n id INTEGER PRIMARY KEY,\n at TEXT NOT NULL,\n source TEXT NOT NULL CHECK (source IN ('automatic', 'manual')),\n actor TEXT NOT NULL,\n result TEXT NOT NULL\n);\n";
13
- export type { CheckoutCleanup } from "./contracts/storage.js";
13
+ export type { CheckoutCleanup, CheckoutIdle } from "./contracts/storage.js";
14
14
  export declare const DEFAULT_CLEANUP: CheckoutCleanup;
15
15
  export declare const CLEANUP_CHOICES: readonly {
16
16
  value: CheckoutCleanup;
@@ -20,6 +20,31 @@ export declare const CLEANUP_CHOICES: readonly {
20
20
  /** `finished` (or complete, cancelled), `2d`, `7d` (or week, 1w), `never` (or off); undefined when it's none of those. */
21
21
  export declare function parseCleanup(text: string): CheckoutCleanup | undefined;
22
22
  export declare function cleanupWords(cleanup: CheckoutCleanup): string;
23
+ /**
24
+ * v151: how long a task stays idle (no run, no person's act, no open lease) before its clean folder goes, even with its
25
+ * result waiting for review or the task unfinished (checkout-cleanup.ts). Saved rows read NULL: the default.
26
+ */
27
+ export declare const V151_ADDED_COLUMNS: Readonly<Record<string, Readonly<Record<string, {
28
+ definition: string;
29
+ saved: string;
30
+ }>>>>;
31
+ export declare const DEFAULT_IDLE: CheckoutIdle;
32
+ export declare const IDLE_CHOICES: readonly {
33
+ value: CheckoutIdle;
34
+ label: string;
35
+ days: number | null;
36
+ }[];
37
+ /** `7`, `14d`, `30 days`, `never` (or off); undefined when it's none of those. */
38
+ export declare function parseIdle(text: string): CheckoutIdle | undefined;
39
+ /** After "A task's clean folder is removed ". */
40
+ export declare function idleWords(idle: CheckoutIdle): string;
41
+ /** What the next sweep's idle cleanup takes, for `toolroll storage` and Settings → Storage. The sweep's own line says when. */
42
+ export declare function idleCleanupWords(plan: {
43
+ cleanup: CheckoutCleanup;
44
+ idle: CheckoutIdle;
45
+ idleCount: number;
46
+ idleBytes: number;
47
+ }): string;
23
48
  /** Bytes each path holds on disk: one `du` for them all (fast on a 300 MB checkout), a walk where it can't answer. */
24
49
  export declare function diskBytes(paths: readonly string[]): Map<string, number>;
25
50
  export type StorageLine = {
package/dist/storage.js CHANGED
@@ -4,14 +4,14 @@
4
4
  * Build checkouts and staged releases are the big ones; the worker removes a
5
5
  * finished task's clean checkout as the checkout cleanup setting says
6
6
  * (checkout-cleanup.ts), and the daily storage sweep (storage-sweep.ts) takes
7
- * what slips through: stale test temp folders, leftover processes, extra
7
+ * idle tasks' clean checkouts and what slips through: stale test temp folders, leftover processes, extra
8
8
  * staged runtimes and dependency installs unused for a week.
9
9
  */
10
10
  import { execFile, spawnSync } from "node:child_process";
11
11
  import { lstatSync, readdirSync } from "node:fs";
12
12
  import { basename, dirname, join } from "node:path";
13
13
  import { DEPS_FOLDER, sharedCopies } from "./shared-deps.js";
14
- import { checkoutCleanupSchema } from "./contracts/storage.js";
14
+ import { checkoutCleanupSchema, checkoutIdleSchema } from "./contracts/storage.js";
15
15
  /** Settings → Storage: when a finished task's clean checkout is removed. One row, or none (the default). */
16
16
  export const CHECKOUT_CLEANUP_SCHEMA = `
17
17
  CREATE TABLE IF NOT EXISTS checkout_cleanup_setting (
@@ -93,6 +93,43 @@ export function cleanupWords(cleanup) {
93
93
  : cleanup === "never" ? "never (only when you clean up)"
94
94
  : `${cleanup === "2d" ? "2 days" : "a week"} after its task is complete or cancelled`;
95
95
  }
96
+ /**
97
+ * v151: how long a task stays idle (no run, no person's act, no open lease) before its clean folder goes, even with its
98
+ * result waiting for review or the task unfinished (checkout-cleanup.ts). Saved rows read NULL: the default.
99
+ */
100
+ export const V151_ADDED_COLUMNS = Object.freeze({
101
+ checkout_cleanup_setting: { idle: { definition: "TEXT CHECK (idle IN ('7d', '14d', '30d', 'never'))", saved: "NULL" } },
102
+ });
103
+ export const DEFAULT_IDLE = "14d";
104
+ export const IDLE_CHOICES = [
105
+ { value: "7d", label: "After 7 days idle", days: 7 },
106
+ { value: "14d", label: "After 14 days idle", days: 14 },
107
+ { value: "30d", label: "After 30 days idle", days: 30 },
108
+ { value: "never", label: "Never", days: null },
109
+ ];
110
+ /** `7`, `14d`, `30 days`, `never` (or off); undefined when it's none of those. */
111
+ export function parseIdle(text) {
112
+ const value = text.trim().toLowerCase().replace(/\s+/g, " ");
113
+ if (value === "off")
114
+ return "never";
115
+ const days = /^(\d+)( ?d| days?)?$/.exec(value)?.[1];
116
+ const parsed = checkoutIdleSchema.safeParse(days === undefined ? value : `${days}d`);
117
+ return parsed.success ? parsed.data : undefined;
118
+ }
119
+ /** After "A task's clean folder is removed ". */
120
+ export function idleWords(idle) {
121
+ const days = IDLE_CHOICES.find(one => one.value === idle).days;
122
+ return days === null ? "never for being idle" : `after ${days} days idle`;
123
+ }
124
+ /** What the next sweep's idle cleanup takes, for `toolroll storage` and Settings → Storage. The sweep's own line says when. */
125
+ export function idleCleanupWords(plan) {
126
+ if (plan.cleanup === "never" || plan.idle === "never")
127
+ return "Idle cleanup is off.";
128
+ const limit = `${idleWords(plan.idle)[0].toUpperCase()}${idleWords(plan.idle).slice(1)}`;
129
+ if (plan.idleCount === 0)
130
+ return `${limit}, a task's clean folder goes. None are due.`;
131
+ return `${limit}, a task's clean folder goes: the next sweep frees about ${bytesWords(plan.idleBytes)} (${plan.idleCount} folder${plan.idleCount === 1 ? "" : "s"}).`;
132
+ }
96
133
  /** Bytes each path holds on disk: one `du` for them all (fast on a 300 MB checkout), a walk where it can't answer. */
97
134
  export function diskBytes(paths) {
98
135
  const sizes = new Map();
package/dist/store.d.ts CHANGED
@@ -5,6 +5,9 @@ import { type ProjectSandbox } from "./project-sandbox.js";
5
5
  import type { FencePolicy } from "./agent-fence.js";
6
6
  import { type NetworkProfile, type ProjectNetwork, type RunNetworkRecord } from "./egress.js";
7
7
  import { type AcpLaunch } from "./acp-attest.js";
8
+ import { type CheckStamp, type StampReading } from "./check-stamp.js";
9
+ import { V155_STEPS } from "./fleet-schema.js";
10
+ import { V156_STEPS } from "./fallback-schema.js";
8
11
  export { refArchived, taskArchived } from "./task-archive.js";
9
12
  import { type ChatBinding } from "./chat-core.js";
10
13
  import { ChatMessages, TELEGRAM_HOLD_REASONS, TELEGRAM_SKIPPED_ELSEWHERE, TELEGRAM_SKIPPED_OTHER_CHAT, TELEGRAM_SKIPPED_QUIET } from "./chat-messages.js";
@@ -16,6 +19,7 @@ import type { FlowCardChange, FlowCardFields } from "./contracts/flow-card.js";
16
19
  import { type Actor } from "./actor.js";
17
20
  import { type LiveActivityKind } from "./live.js";
18
21
  import { type CredentialKind, type TokenPurpose } from "./api-tokens.js";
22
+ import { type ThisMachine } from "./machine-identity.js";
19
23
  import { type CriterionMatrixRow, type CriterionJudgementWord } from "./proof.js";
20
24
  import { type Authority, type LocalMode } from "./local-owner.js";
21
25
  import { type ScopeAuthor, type ExecutionProfile, type UnattendedPermissionMode, type AcceptanceCriterion } from "./scope.js";
@@ -29,6 +33,7 @@ import type { Scope } from "./scope.js";
29
33
  import type { QualityMode } from "./quality.js";
30
34
  import type { ProgressSnapshot } from "./plan.js";
31
35
  import { type CheckProgressSnapshot } from "./check-progress.js";
36
+ export { V153_ADDED_COLUMNS } from "./plain-schema.js";
32
37
  import { type ReleaseCheckPurpose, type ReleaseTerms } from "./contracts/release-terms.js";
33
38
  import { type ProjectAccess } from "./project-access.js";
34
39
  import { type LedgerEntry } from "./action-ledger.js";
@@ -37,7 +42,7 @@ import { underCeiling, type OrgPolicy, type SavedPolicy } from "./policy.js";
37
42
  import { type ReviewSwitch } from "./review-switch.js";
38
43
  import { type Billing, type Budget, type BudgetAgent, type BudgetHold, type BudgetScope, type BudgetState, type SpendItem } from "./spend.js";
39
44
  import { type RetentionKind, type RetentionPeriods } from "./retention.js";
40
- import { type CheckoutCleanup } from "./storage.js";
45
+ import { type CheckoutCleanup, type CheckoutIdle } from "./storage.js";
41
46
  import { type LedgerChainReport } from "./ledger-chain.js";
42
47
  import { type ApprovalGate, type ApprovalRules, type ApproverKind, type Filer } from "./approval-policy.js";
43
48
  import { type ReportedAmount } from "./reported-usage.js";
@@ -243,7 +248,7 @@ export type SealedLedgerEntry = LedgerEntry & {
243
248
  hash: string;
244
249
  } | null;
245
250
  };
246
- export declare const SCHEMA_VERSION = 149;
251
+ export declare const SCHEMA_VERSION = 156;
247
252
  /** v118: the tables merged into `credential`, in the order they move (a person's API tokens keep their ids first). */
248
253
  export declare const V118_MERGED_TABLES: Readonly<Record<string, CredentialKind>>;
249
254
  /**
@@ -435,7 +440,7 @@ export declare const V147_ADDED_COLUMNS: Readonly<Record<string, Readonly<Record
435
440
  }>>>>;
436
441
  /** The v147 migration's steps after the epoch, in order: a test seam (OpenOptions.migrationStep) may stop after each. */
437
442
  export declare const V147_STEPS: readonly ["epoch", "local-mode", "password-set", "web-session", "console-instance"];
438
- export type MigrationStep = (typeof V147_STEPS)[number] | (typeof V148_STEPS)[number] | (typeof V149_STEPS)[number];
443
+ export type MigrationStep = (typeof V147_STEPS)[number] | (typeof V148_STEPS)[number] | (typeof V149_STEPS)[number] | (typeof V150_STEPS)[number] | (typeof V151_STEPS)[number] | (typeof V152_STEPS)[number] | (typeof V153_STEPS)[number] | (typeof V154_STEPS)[number] | (typeof V156_STEPS)[number] | (typeof V155_STEPS)[number];
439
444
  /**
440
445
  * v148 (docs/plans/results-routing.md): every table the results-routing arc uses, landed at once because a current
441
446
  * store runs no DDL. Slice 1 writes run_cohort, route_record and models_generation; route_rule, route_exposure* and
@@ -494,6 +499,35 @@ export declare const V149_TABLES: readonly ["check_result", "check_fact", "local
494
499
  export declare const V149_REPO_TABLES: readonly ["check_fact", "local_observation", "ci_flaky_observation", "learning_watch", "lesson_note", "memory_use", "memory_tidy_proposal"];
495
500
  /** The v149 migration's steps after v148's, in order (OpenOptions.migrationStep may stop after each). */
496
501
  export declare const V149_STEPS: readonly ["learning-tables"];
502
+ /**
503
+ * v150 (machine-identity.ts): which computer a process witness belongs to, by the machine's stable id rather than its
504
+ * network hostname (which follows the network on a Mac with no HostName set). machine_host_alias records each
505
+ * hostname this machine read while it knew its own id, written only by a process on that machine, beside the id it
506
+ * read; a witness with no id (every saved one) is this machine's when its host is one of them. Never read for any
507
+ * other machine's id.
508
+ */
509
+ export declare const V150_SCHEMA = "\nCREATE TABLE IF NOT EXISTS machine_host_alias (\n machine_id TEXT NOT NULL CHECK (length(machine_id) = 32),\n host TEXT NOT NULL CHECK (host <> ''),\n first_seen_at TEXT NOT NULL,\n PRIMARY KEY (machine_id, host)\n);\n";
510
+ /** The tables V150_SCHEMA adds. */
511
+ export declare const V150_TABLES: readonly ["machine_host_alias"];
512
+ /** v150: a process witness's machine id (saved witnesses read NULL: matched by host name, as before). */
513
+ export declare const V150_ADDED_COLUMNS: Readonly<Record<string, Readonly<Record<string, {
514
+ definition: string;
515
+ saved: string;
516
+ }>>>>;
517
+ /** The v150 migration's steps after v149's, in order (OpenOptions.migrationStep may stop after each). */
518
+ export declare const V150_STEPS: readonly ["machine-aliases", "witness-machine"];
519
+ /** The v151 migration's steps after v150's, in order (OpenOptions.migrationStep may stop after each). */
520
+ export declare const V151_STEPS: readonly ["checkout-idle"];
521
+ /** The v152 migration's steps after v151's, in order (OpenOptions.migrationStep may stop after each). */
522
+ export declare const V152_STEPS: readonly ["code-map-tables", "code-map-switch", "code-map-watermark"];
523
+ /** v153 (plain-toolroll.md Phase 2): the tables each slice owns. */
524
+ export declare const V153_SCHEMA: string;
525
+ /** The v153 migration's steps after v152's, in order (OpenOptions.migrationStep may stop after each). */
526
+ export declare const V153_STEPS: readonly ["plain-tables", "plain-columns"];
527
+ /** The v154 migration's steps after v153's, in order (OpenOptions.migrationStep may stop after each). */
528
+ export declare const V154_STEPS: readonly ["check-stamps"];
529
+ export { V155_STEPS };
530
+ export { V156_STEPS };
497
531
  /**
498
532
  * v135: one approval per release (docs/plans/release-once.md). `release_authority` is the single source of truth for a
499
533
  * release a person approved: one row per generation, changed only by compare-and-swap on `rev`, with a lease whose
@@ -2537,8 +2571,10 @@ export declare class Store {
2537
2571
  modeDigest: string;
2538
2572
  /** A chat seal of a deploy gate: the release card it came from (chat-management.md §0a.5). A chat seal of a task
2539
2573
  * filed from outside text: `terms`, and the digest of every word the card showed (chat-terms.ts). */
2540
- card?: "release" | "terms";
2574
+ card?: "release" | "terms" | "shown";
2541
2575
  cardDigest?: string;
2576
+ /** `shown`: the exact words a card showed whole, whose digest (kept when it was made) is `cardDigest`. */
2577
+ shownTerms?: string;
2542
2578
  }, approverKind?: ApproverKind): boolean;
2543
2579
  /** Whether this task's scope carries a LIVE seal: approved, and the
2544
2580
  * approved digest is the current one (a rewritten scope unseals). The
@@ -4200,7 +4236,8 @@ export declare class Store {
4200
4236
  * phase's exact leg. A planner may also run under the working
4201
4237
  * proposed route, or — with no scope yet — the live recommendation,
4202
4238
  * re-derived here from durable state. Nothing else.
4203
- * fallback — never (fallback chains were removed in v115).
4239
+ * fallback — the walk's current entry of the sealed chain, exactly
4240
+ * (fallback.ts), and nothing else.
4204
4241
  * legacy — only a row proven to predate routing or a task with no
4205
4242
  * scope; never a routed row.
4206
4243
  */
@@ -7425,7 +7462,8 @@ export declare class Store {
7425
7462
  stampRunCheckAccess(runId: number, level: CheckAccess, network?: NetworkProfile | null): void;
7426
7463
  /** The network a run's sign-ins checks ran under (null: none sealed; such a run's later checks run sandboxed). */
7427
7464
  runCheckNetwork(runId: number): NetworkProfile | null;
7428
- /** The level a run's checks ran at: missing or unreadable reads as sandboxed. */
7465
+ /** The level a later check of this run may run at, at most: missing or unreadable reads as sandboxed, the narrowest.
7466
+ * Never an account of how its checks DID run: that is runCheckStamp (check-stamp.ts). */
7429
7467
  runCheckAccess(runId: number): CheckAccess;
7430
7468
  /** A project's check access changed: saved, and in the ledger as before → after. `may` is what the caller proved:
7431
7469
  * "widen" only after an instance operator's password typed now; anything else may only narrow. The level is read again
@@ -8291,6 +8329,12 @@ export type ReleaseProgress = {
8291
8329
  message: string;
8292
8330
  at: string;
8293
8331
  } | null;
8332
+ /** The release's task moved on since its last recorded failure: this build started after it and is running now, so
8333
+ * the release isn't stopped there, even though `toolroll release` hasn't recorded a step since. */
8334
+ building: {
8335
+ run: number;
8336
+ startedAt: string;
8337
+ } | null;
8294
8338
  };
8295
8339
  /** What a release coordinator says about one step. */
8296
8340
  export type ReleaseStepEntry = {
@@ -8310,7 +8354,8 @@ export type ReleaseStepEntry = {
8310
8354
  */
8311
8355
  export declare function recordReleaseStep(store: Store, entry: ReleaseStepEntry): void;
8312
8356
  /** A release's steps, for the release task: the newest tag recorded for it, its steps in the order they ran, and the
8313
- * step it stopped at when the last thing recorded was a failure. Null: no step recorded. */
8357
+ * step it stopped at when the last thing recorded was a failure and no build of the task has started since. Null: no
8358
+ * step recorded. */
8314
8359
  export declare function releaseProgressFor(store: Store, taskId: string): ReleaseProgress | null;
8315
8360
  /** The release task whose steps were recorded most recently (v146), or null when none was. */
8316
8361
  export declare function latestReleaseStepTask(store: Store): string | null;
@@ -8439,3 +8484,40 @@ export declare function settleRunStopByObservation(store: Store, args: {
8439
8484
  cause: StopProofCause;
8440
8485
  evidence: string;
8441
8486
  }, now: Date): boolean;
8487
+ /**
8488
+ * This machine as the store knows it (v150, machine-identity.ts): its stable id and every name it is known by, the
8489
+ * hostnames recorded beside its own id included. Read fresh each time, so a name recorded by another process on this
8490
+ * machine counts at once.
8491
+ */
8492
+ export declare function storeMachine(db: Database): ThisMachine;
8493
+ /** Load this machine's recorded names for the checks that hold no store; a store that can't read them loads none. */
8494
+ export declare function rememberStoredHostAliases(db: Database): void;
8495
+ /** Record the names this machine is known by right now beside its own id, read here at this moment (never a name a
8496
+ * witness, a note or another computer supplied). Nothing when this machine's id is unknown. */
8497
+ export declare function recordMachineHostAliases(db: Database, now: Date): void;
8498
+ /** Whether a run_process row is this machine's (machine-identity.ts isThisMachine). */
8499
+ export declare function witnessIsLocal(row: Record<string, unknown>, here: ThisMachine): boolean;
8500
+ /** The same rule as witnessIsLocal, as SQL over run_process (optionally aliased): its id is ours, or it has none and
8501
+ * its host is one of our names. With our id unknown, `machine_id = NULL` matches nothing: an id-bearing witness is
8502
+ * never taken for ours. */
8503
+ export declare function localWitnessSql(db: Database, alias?: string): {
8504
+ sql: string;
8505
+ params: (string | null)[];
8506
+ };
8507
+ /** Whether this database has v150's run_process.machine_id. An update settles leftover records on the database it is
8508
+ * about to back up, still at the older schema (toolroll-update.ts drain), so no query it reaches may assume the column:
8509
+ * there every witness has no id, and the host-name rule above is the whole rule. */
8510
+ export declare function witnessesCarryMachine(db: Database): boolean;
8511
+ /** Settings → Storage: how long a task stays idle before its clean folder goes (the default until someone chooses). */
8512
+ export declare function checkoutIdle(store: Store): CheckoutIdle;
8513
+ /** Choose how long a task stays idle before its clean folder goes; the ledger keeps before → after. */
8514
+ export declare function setCheckoutIdle(store: Store, idle: CheckoutIdle, by: string, now: Date): CheckoutIdle;
8515
+ /** A check launch's execution stamp (check-stamp.ts), written by the code that launched it. One row per distinct launch. */
8516
+ export declare function recordCheckStamp(store: Store, runId: number, stamp: CheckStamp, now: Date): void;
8517
+ /** How a run's checks actually ran, by every launch it stamped: `unknown` when none is there or one can't be read. */
8518
+ export declare function runCheckStamp(store: Store, runId: number): StampReading;
8519
+ /** The newest run of a task whose checks ran (it saved a check log), and how they ran; null when none has. */
8520
+ export declare function taskCheckStamp(store: Store, repo: string, taskId: string): {
8521
+ runId: number;
8522
+ reading: StampReading;
8523
+ } | null;