@joshuafolkken/kit 1.1240.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +29 -47
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +42 -10
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
  51. package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
  52. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
  53. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
  57. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
  60. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  61. package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
  62. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  63. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +216 -202
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +281 -94
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +16 -10
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +26 -2
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +20 -6
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cspell-cached.ts +1 -1
  560. package/scripts/lint/cycle-recheck.ts +122 -0
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +34 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +5 -6
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +25 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +13 -15
  801. package/scripts/run/run-step.ts +58 -47
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,14 +1,16 @@
1
- // `josh ship "<title> #<N>"` — the one call that ships a finished change (joshuafolkken/kit#2398). It
2
- // folds the fixed commit-to-report region a run spent a dozen round trips on — the gate, the
3
- // commit/push/PR (`git -y`), the CI-wait merge (`followup`) and the report bookkeeping (`run:tail`) —
4
- // into one composite, extending the post-merge fold of `run:tail` (joshuafolkken/kit#2372) into the
5
- // body of the region. The region is fixed procedure; the one decision it carried — disposing of a
6
- // review finding — stays in front of this command, so nothing a reader had to judge is folded away.
1
+ // `josh ship "<title> #<N>"` — the one call that ships a finished change. It folds the fixed
2
+ // commit-to-report region — the gate, the commit/push/PR (`git -y`), the CI-wait merge (`followup`)
3
+ // and the report bookkeeping (`run:tail`) — into one composite, extending the post-merge fold of
4
+ // `run:tail` into the body of the region. The region is fixed procedure; the one decision it
5
+ // carried — disposing of a review finding — stays in front of this command, so nothing a reader had
6
+ // to judge is folded away.
7
7
  //
8
8
  // **This module is the pure half**, kept apart from the chaining CLI the way `run-tail.ts` is. Unlike
9
9
  // `run:tail`, ship stops at the first failed step: a red gate must never reach the commit, so the
10
10
  // composite ends at the failure, and the report names the step that failed so the run reads only it.
11
11
 
12
+ import { run_section, type Section } from '#scripts/run/run-section'
13
+
12
14
  const PREFLIGHT_HEADER = '=== preflight ==='
13
15
  const PRE_DETACH_HEADER = '=== pre-detach checks ==='
14
16
  const REVIEW_HEADER = '=== review ==='
@@ -18,52 +20,35 @@ const COMMIT_HEADER = '=== commit/push/PR ==='
18
20
  const ROUND_TWO_HEADER = '=== round-2 review ==='
19
21
  const FOLLOWUP_HEADER = '=== followup ==='
20
22
  const REPORT_HEADER = '=== report ==='
21
- const SECTION_SEPARATOR = '\n\n'
22
23
  const STOPPED_PREFIX = 'stopped at: '
23
- // The body of a stage a resumed ship passed over (joshuafolkken/kit#2426) — a success, so the report
24
+ // The body of a stage a resumed ship passed over — a success, so the report
24
25
  // still shows every stage under its header and the reader sees which ones this call did not repeat.
25
26
  const SKIPPED_BODY = 'skipped — already done'
26
27
 
27
- const SUCCESS_EXIT_CODE = 0
28
- const FAILURE_EXIT_CODE = 1
29
-
30
- interface ShipSection {
31
- header: string
32
- body: string
33
- code: number
34
- // The paths a stopped merge left unmerged (joshuafolkken/kit#3221), handed to the stop prompt.
28
+ type ShipSection = Section & {
29
+ // The paths a stopped merge left unmerged, handed to the stop prompt.
35
30
  conflicts?: ReadonlyArray<string>
36
31
  }
37
32
 
38
- function section_report(section: ShipSection): string {
39
- return `${section.header}\n${section.body}`
40
- }
41
-
42
33
  // The step that stopped the ship, or `undefined` when every executed step was green. Because the
43
34
  // composite breaks at the first failure, this is the last section whenever one exists.
44
35
  function failed_section(sections: ReadonlyArray<ShipSection>): ShipSection | undefined {
45
- return sections.find((section) => section.code !== SUCCESS_EXIT_CODE)
36
+ return sections.find((section) => section.code !== run_section.SUCCESS_EXIT_CODE)
46
37
  }
47
38
 
48
39
  // The executed steps under their headers, closed with the name of the step that stopped the run so the
49
40
  // reader sees which one to fix without counting sections.
50
41
  function format_report(sections: ReadonlyArray<ShipSection>): string {
51
- const body = sections.map((section) => section_report(section)).join(SECTION_SEPARATOR)
42
+ const body = run_section.format_sections(sections)
52
43
  const failed = failed_section(sections)
53
44
 
54
45
  if (failed === undefined) return body
55
46
 
56
- return `${body}${SECTION_SEPARATOR}${STOPPED_PREFIX}${failed.header}`
57
- }
58
-
59
- // Non-zero when any executed step failed — the composite only ever collects a failed step as its last,
60
- // so this reads the same clean/red verdict as the loop that stopped there.
61
- function exit_code(sections: ReadonlyArray<ShipSection>): number {
62
- const is_clean = sections.every((section) => section.code === SUCCESS_EXIT_CODE)
63
-
64
- return is_clean ? SUCCESS_EXIT_CODE : FAILURE_EXIT_CODE
47
+ return `${body}${run_section.SECTION_SEPARATOR}${STOPPED_PREFIX}${failed.header}`
65
48
  }
66
49
 
50
+ // The exit code is non-zero when any executed step failed — the composite only ever collects a failed
51
+ // step as its last, so it reads the same clean/red verdict as the loop that stopped there.
67
52
  const run_ship = {
68
53
  COMMIT_HEADER,
69
54
  FOLLOWUP_HEADER,
@@ -76,7 +61,7 @@ const run_ship = {
76
61
  SKIPPED_BODY,
77
62
  SYNC_HEADER,
78
63
  STOPPED_PREFIX,
79
- exit_code,
64
+ exit_code: run_section.exit_code_of,
80
65
  failed_section,
81
66
  format_report,
82
67
  }
@@ -1,19 +1,20 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
+ import { backlog_drive_restore } from '#scripts/backlog/backlog-drive-restore'
3
4
  import { issue_merged } from '#scripts/issue/issue-merged'
5
+ import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
4
6
  import { run_tidy } from './run-tidy'
5
7
  import { run_tidy_lanes, type IsMerged } from './run-tidy-lanes'
6
8
  import { run_tidy_stashes } from './run-tidy-stashes'
7
9
 
8
- // `josh run:tidy` — sweep what merged work left behind at a run's start (joshuafolkken/kit#2701): the
9
- // lanes still holding a seat after their issue merged, and the stashes whose issues are all merged.
10
- // Both used to wait for a person — `lane:list` flagged a merged lane, `run:carry --end` printed the
11
- // closed-issue stashes — and a batch ran with two of six seats held by finished work until someone did.
10
+ // `josh run:tidy` — sweep what merged work left behind at a run's start: the lanes still holding a
11
+ // seat after their issue merged, and the stashes whose issues are all merged.
12
12
  //
13
13
  // `run:hold` calls `sweep` once a claim succeeds, so every `fullrun` / `halfrun` start runs it; a
14
14
  // `backlogrun` runs the command itself in its once-per-repository preparation, beside `lane:prune`.
15
15
  // **The sweep never fails the run that called it**: the report goes to standard error, where
16
16
  // `run:hold`'s one-token standard output is not disturbed, and a failed read is a note, not an exit.
17
+ // A lane the running `backlogrun` still has in flight is left to its `run:merge`.
17
18
 
18
19
  const FAILURE_NOTE = 'run:tidy could not finish; merged lanes and stashes may remain:'
19
20
 
@@ -33,7 +34,10 @@ function memoized(read: IsMerged): IsMerged {
33
34
  async function sweep(): Promise<void> {
34
35
  try {
35
36
  const read_merged = memoized(issue_merged.read_merged)
36
- const lanes = await run_tidy_lanes.tidy_lanes(read_merged)
37
+ const in_flight = backlog_drive_restore.active_issues(
38
+ await run_event_stream_emit.current_events(),
39
+ )
40
+ const lanes = await run_tidy_lanes.tidy_lanes(read_merged, in_flight)
37
41
  const stashes = await run_tidy_stashes.tidy_stashes(read_merged)
38
42
  const report = run_tidy.format_report([...lanes, ...stashes])
39
43
 
@@ -1,14 +1,17 @@
1
1
  import { git_spawn } from '#scripts/git/git-spawn'
2
2
  import { git_stash } from '#scripts/git/stash/git-stash'
3
+ import { session_cite } from '#scripts/issue/session-cite'
3
4
  import { lane_close } from '#scripts/lane/lane-close'
4
5
  import { lane_registry, type LaneInfo } from '#scripts/lane/lane-registry'
5
6
  import { error_text } from '#scripts/lib/error-message'
6
7
  import { run_hold } from '#scripts/run/hold/run-hold'
7
8
  import { run_tidy, type Outcome, type Verdict } from './run-tidy'
8
9
 
9
- // The lane half of `josh run:tidy` (joshuafolkken/kit#2701): each lane whose issue merged, read for
10
- // what would make closing it lose work, then closed with its run record released. A lane whose work
11
- // tree is already gone is `lane:prune`'s, so it is left to that command.
10
+ // The lane half of `josh run:tidy`: each lane whose issue merged, read for what would make closing it
11
+ // lose work, then closed with its run record released. A lane whose work tree is already gone is
12
+ // `lane:prune`'s, so it is left to that command. A lane the running `backlogrun` still has in flight
13
+ // is left to its `run:merge`: closed here, it would leave the run with no `merge` event, no ledger
14
+ // line and no merged count.
12
15
 
13
16
  const CLOSED_KIND = 'closed'
14
17
  const INCOMPLETE_REASON = 'the close left files behind'
@@ -87,20 +90,28 @@ async function settle(lane: LaneInfo): Promise<Verdict> {
87
90
  }
88
91
  }
89
92
 
90
- async function tidy_lane(lane: LaneInfo, is_merged: IsMerged): Promise<Outcome | undefined> {
93
+ async function tidy_lane(
94
+ lane: LaneInfo,
95
+ is_merged: IsMerged,
96
+ in_flight: ReadonlySet<string>,
97
+ ): Promise<Outcome | undefined> {
98
+ if (in_flight.has(lane.issue)) return undefined
91
99
  if (lane.is_stranded || !(await is_merged(lane.issue))) return undefined
92
100
 
93
- return { target: `lane #${lane.issue}`, verdict: await settle(lane) }
101
+ return { target: `lane ${session_cite.issue(lane.issue)}`, verdict: await settle(lane) }
94
102
  }
95
103
 
96
104
  // One lane at a time: a close removes a work tree and prunes the worktree list the next read uses.
97
- async function tidy_lanes(is_merged: IsMerged): Promise<Array<Outcome>> {
105
+ async function tidy_lanes(
106
+ is_merged: IsMerged,
107
+ in_flight: ReadonlySet<string> = new Set(),
108
+ ): Promise<Array<Outcome>> {
98
109
  const outcomes: Array<Outcome> = []
99
110
  const lanes = await lane_registry.list_lanes()
100
111
 
101
112
  for (const lane of lanes) {
102
113
  // eslint-disable-next-line no-await-in-loop -- a close prunes the worktree list the next one reads
103
- const outcome = await tidy_lane(lane, is_merged)
114
+ const outcome = await tidy_lane(lane, is_merged, in_flight)
104
115
 
105
116
  if (outcome !== undefined) outcomes.push(outcome)
106
117
  }
@@ -7,18 +7,18 @@ import { observation_ledger_home } from '#scripts/observations/observation-ledge
7
7
  import { run_tidy, type Outcome, type Verdict } from './run-tidy'
8
8
  import type { IsMerged } from './run-tidy-lanes'
9
9
 
10
- // The stash half of `josh run:tidy` (joshuafolkken/kit#2701): each entry whose named issues are all
11
- // merged is dropped, and one that touches the observation ledger has its lines carried into the ledger
12
- // first. The ledger is append-only and the digest counts repeats across it, so an entry's lines are
13
- // never discarded with the entry.
10
+ // The stash half of `josh run:tidy`: each entry whose named issues are all merged is dropped, and one
11
+ // that touches the observation ledger has its lines carried into the ledger first. The ledger is
12
+ // append-only and the digest counts repeats across it, so an entry's lines are never discarded with
13
+ // the entry.
14
14
 
15
15
  // The same width `run-carry-stash.ts` reads issue states at.
16
16
  const READ_CONCURRENCY = 8
17
17
  const GONE_REASON = 'already dropped by another run'
18
18
  const BUSY_REASON = 'another run held the stash sweep lock'
19
19
 
20
- // An entry cut before joshuafolkken/kit#2919 holds its lines at an old single-file path, so the lines
21
- // of every ledger path it touches are carried to the current ledger. The reads are independent, and the
20
+ // An older entry may hold its lines at an old single-file path, so the lines of every ledger path it
21
+ // touches are carried to the current ledger. The reads are independent, and the
22
22
  // lines come back in path order however the reads finish.
23
23
  async function added_ledger_lines(
24
24
  hash: string,
@@ -34,8 +34,8 @@ async function added_ledger_lines(
34
34
  }
35
35
 
36
36
  // How many ledger lines went into the running work tree's ledger before the drop. The duplicate check
37
- // reads every issue's file, and the lines land in the file this tree writes (joshuafolkken/kit#2919),
38
- // so the run's own commit takes them to the default branch.
37
+ // reads every issue's file, and the lines land in the file this tree writes, so
38
+ // the run's own commit takes them to the default branch.
39
39
  async function carry_ledger(hash: string): Promise<number> {
40
40
  const changed = await git_stash.changed_paths(hash)
41
41
  const ledger_paths = changed.filter((file_path) => observation_ledger.is_ledger_path(file_path))
@@ -1,7 +1,8 @@
1
+ import { session_cite } from '#scripts/issue/session-cite'
1
2
  import { observation_ledger_line } from '#scripts/observations/observation-ledger-line'
2
3
 
3
- // The decisions behind `josh run:tidy` (joshuafolkken/kit#2701), kept apart from the git and GitHub
4
- // reads so each can be pinned without either. A run start sweeps what merged work left behind — the
4
+ // The decisions behind `josh run:tidy`, kept apart from the git and GitHub reads so each
5
+ // can be pinned without either. A run start sweeps what merged work left behind — the
5
6
  // lanes holding a seat after their branch merged, and the stashes of issues that are all merged — and
6
7
  // every rule here is written so that doubt keeps the thing: a lane with any uncommitted change or any
7
8
  // commit no remote has, and a stash naming any issue that is not merged or naming none at all, stay.
@@ -52,7 +53,7 @@ function lane_verdict(facts: LaneFacts): Verdict | undefined {
52
53
  }
53
54
 
54
55
  function unmerged_reason(unmerged: ReadonlyArray<string>): string {
55
- const named = unmerged.map((issue) => `#${issue}`).join(', ')
56
+ const named = unmerged.map((issue) => session_cite.issue(issue)).join(', ')
56
57
 
57
58
  return `${named} not merged`
58
59
  }
@@ -18,10 +18,9 @@ import { run_wake_restart, type RestartPorts } from './run-wake-restart'
18
18
  import { run_wake_session, type LaunchResult } from './run-wake-session'
19
19
 
20
20
  // `josh run:wake --start | --list | --stop | --loop` — the supervisor that continues a cut
21
- // `backlogrun` or `queue` without a person retyping the keyword (joshuafolkken/kit#1719,
22
- // joshuafolkken/kit#1774). **Which invocations it may continue is `run-invocation.ts`'s answer**, not
23
- // this file's: nothing here reads the recorded text, it is handed to `wake_argv` and either rebuilt
24
- // from that module's own constants or refused.
21
+ // `backlogrun` or `queue` without a person retyping the keyword. **Which invocations it may continue
22
+ // is `run-invocation.ts`'s answer**, not this file's: nothing here reads the recorded text, it is
23
+ // handed to `wake_argv` and either rebuilt from that module's own constants or refused.
25
24
  //
26
25
  // The stdout/stderr split is the contract every `run:*` command shares: exactly one verdict token on
27
26
  // stdout on every path, the reason and the advice on stderr, so a loop branches on one token.
@@ -56,26 +55,24 @@ const UNKNOWN_VERDICT = 'unknown'
56
55
  const FAILED_VERDICT = 'failed'
57
56
 
58
57
  // **The note covers both ways `wake_argv` answers `undefined`**, because it cannot tell them apart and
59
- // a message that named only the first would accuse a legitimate invocation of carrying unsafe text
60
- // (joshuafolkken/kit#1774). The second is the one a person actually meets: a `queue` whose references
61
- // carry a `owner/repo#` prefix is a grammar this supervisor does not rebuild, and `queue.md` → "The
62
- // session boundary" is why such a queue begins no record in the first place.
58
+ // a message that named only the first would accuse a legitimate invocation of carrying unsafe text.
59
+ // The second is the one a person actually meets: a `queue` whose references carry a `owner/repo#`
60
+ // prefix is a grammar this supervisor does not rebuild, and `queue.md` → "The session boundary" is why
61
+ // such a queue begins no record in the first place.
63
62
  const UNSAFE_INVOCATION_NOTE =
64
63
  'the carried invocation is not one this supervisor can continue — it is neither a backlogrun nor a queue it can rebuild, or it carries text that may not be passed to a command line'
65
- // The command rather than one entry point: since joshuafolkken/kit#1774 the supervisor continues a
66
- // `queue` as readily as a `backlogrun`, and a warning that named the wrong one would send the reader
67
- // looking at a run that is not the one that stopped.
64
+ // The command rather than one entry point: the supervisor continues a `queue` as readily as a
65
+ // `backlogrun`, and a warning that named the wrong one would send the reader looking at a run that is
66
+ // not the one that stopped.
68
67
  const WARNING_TITLE = 'run:wake supervisor'
69
68
  const WARNING_RECOVERY = `Check the wake command, then restart with \`pnpm josh run:wake --start\`.`
70
- // **The stop reasons that reach a person, and what each one tells them** (joshuafolkken/kit#1746). A
71
- // reason absent from this map is one where nothing went wrong: `ended` is the run finishing through
72
- // `run:carry --end`, `stopped` is a person's own `--stop` or a supervisor being superseded, and a
73
- // warning channel that fired on those is one that stops being read.
69
+ // **The stop reasons that reach a person, and what each one tells them.** A reason mapped to
70
+ // `undefined` is one where nothing went wrong: `ended` is the run finishing through `run:carry --end`,
71
+ // `stopped` is a person's own `--stop` or a supervisor being superseded, and a warning channel that
72
+ // fired on those is one that stops being read.
74
73
  //
75
- // **`expired` and `unreadable` were silent until joshuafolkken/kit#1746, and that was the defect
76
- // rather than the design.** Both end the supervisor while a carry record is still sitting there handed
77
- // off, so the run is left asleep with nothing anywhere saying so — a silent overnight failure, while
78
- // only the `failed` reason was wired to the notification.
74
+ // **`expired` and `unreadable` warn**, because both end the supervisor while a carry record is still
75
+ // sitting there handed off, so the run would otherwise be left asleep with nothing anywhere saying so.
79
76
  // **Every reason is listed, and the silent two are listed as `undefined`.** A partial map would let a
80
77
  // sixth stop reason compile straight past this and reach nobody, which is the defect class this
81
78
  // section exists to close.
@@ -145,7 +142,7 @@ async function resolve_context(): Promise<WakeContext | undefined> {
145
142
 
146
143
  // Every verb reaches this one function, so creating the log here is what makes the path each of
147
144
  // them prints a path that exists — including `--list` and the already-running branch of `--start`,
148
- // neither of which launches anything (joshuafolkken/kit#1759).
145
+ // neither of which launches anything.
149
146
  run_wake_session.ensure_log(log_target, note_to_stderr)
150
147
 
151
148
  return {
@@ -178,7 +175,7 @@ function wake_session(
178
175
  if (built.kind === 'rejected') return { kind: 'failed', note: built.note }
179
176
 
180
177
  // The headless mark is what lets the stop hook hold this session's turn open while its lanes run —
181
- // under `claude -p` a turn-end is the process's end (`run-headless.ts`, joshuafolkken/kit#2437).
178
+ // under `claude -p` a turn-end is the process's end (`run-headless.ts`).
182
179
  const environment = run_headless.environment()
183
180
  const target = { cwd: context.worktree, env: environment, log_path: context.log_target }
184
181
 
@@ -224,10 +221,9 @@ async function warn_of_stop(stop: LoopStop, body: string, context: WakeContext):
224
221
  })
225
222
  }
226
223
 
227
- // **Only a failed wake exits non-zero, and the two reasons that newly warn do not**
228
- // (joshuafolkken/kit#1746). The verdict-and-exit-code table in `docs/josh-commands-automation.md` is a contract
229
- // callers branch on; what `expired` and `unreadable` were missing is the notification, not a different
230
- // exit code, and changing both at once would break a caller to fix a silence.
224
+ // **Only a failed wake exits non-zero; `expired` and `unreadable` warn but exit zero.** The
225
+ // verdict-and-exit-code table in `docs/josh-commands-automation.md` is a contract callers branch on,
226
+ // and what those two need is the notification, not a different exit code.
231
227
  function exit_code_of(reason: WakeStopReason): number {
232
228
  return reason === run_wake_loop.FAILED_REASON ? FAILURE_EXIT_CODE : SUCCESS_EXIT_CODE
233
229
  }
@@ -235,7 +231,7 @@ function exit_code_of(reason: WakeStopReason): number {
235
231
  // A failure that reached nobody is the defect, so the Telegram goes out before the verdict is printed.
236
232
  // Which stops reach a person, and what each one says — `undefined` for the two where nothing went
237
233
  // wrong. It is a function rather than a bare lookup so the decision can be asserted for every reason
238
- // the loop can end on, which is the contract joshuafolkken/kit#1746 changed.
234
+ // the loop can end on.
239
235
  function stop_body(reason: WakeStopReason): string | undefined {
240
236
  return STOP_BODIES[reason]
241
237
  }
@@ -256,8 +252,8 @@ function spawn_supervisor(context: WakeContext, interval: string | undefined): n
256
252
  if (profile === undefined) return report(FAILED_VERDICT, FAILURE_EXIT_CODE)
257
253
  const argv = run_wake_session.supervisor_argv(SCRIPT_PATH, interval)
258
254
  // **The supervisor's own output goes to the same file as the sessions it starts.** It is detached
259
- // with the same call, so before joshuafolkken/kit#1746 its `console.error` — the launch note that
260
- // says the agent CLI is not on `PATH`, and the stop note behind every warning — went nowhere at all.
255
+ // with the same call, so otherwise its `console.error` — the launch note that says the agent CLI is
256
+ // not on `PATH`, and the stop note behind every warning — would go nowhere at all.
261
257
  const result = run_wake_session.launch(
262
258
  {
263
259
  argv,
@@ -297,9 +293,8 @@ function start(context: WakeContext, interval: string | undefined): number {
297
293
  return spawn_supervisor(context, interval)
298
294
  }
299
295
 
300
- // **The loop removes its record on the way out, and only its own** (joshuafolkken/kit#1727). A loop
301
- // that ended after its record was taken over used to delete the *successor's* record here, and the
302
- // run then went on with nobody watching it.
296
+ // **The loop removes its record on the way out, and only its own.** A loop that ended after its record
297
+ // was taken over must not delete the *successor's* record, or the run goes on with nobody watching it.
303
298
  //
304
299
  // **`superseded` is announced, because the two ways of ending look identical otherwise.** A `--stop`
305
300
  // and a take-over both leave this loop reporting `stopped` at exit 0, so a supervisor that was
@@ -322,7 +317,7 @@ function restart_ports(context: WakeContext, ports: LoopPorts, interval_ms: numb
322
317
  }
323
318
 
324
319
  // A failed pass is restarted while the carry record is still resumable (`run-wake-restart.ts`), so
325
- // only a failure past the restart bound reaches `finish` and its warning (joshuafolkken/kit#3332).
320
+ // only a failure past the restart bound reaches `finish` and its warning.
326
321
  // **The record is claimed once and held across every restart**, so a `--stop` landing in the pause
327
322
  // between two passes still finds it, signals this process, and the next pass reads the removal as the
328
323
  // person's stop rather than claiming a fresh record and resuming.
@@ -6,9 +6,8 @@ import { run_event_stream } from '#scripts/run/event/run-event-stream'
6
6
  import { run_liveness } from '#scripts/run/run-liveness'
7
7
  import { run_wake, type RunWake, type WakeDecision, type WakeDecisionInput } from './run-wake'
8
8
 
9
- // The `--list` presentation of a wake record (joshuafolkken/kit#2407 split it out of `run-wake-cli.ts`,
10
- // which had reached its line limit). What the command *does* stays in the CLI; how a supervisor's
11
- // record reads back to a person lives here, one cohesive block.
9
+ // The `--list` presentation of a wake record. What the command *does* stays in `run-wake-cli.ts`; how
10
+ // a supervisor's record reads back to a person lives here, one cohesive block.
12
11
 
13
12
  const UNKNOWN_CUTS = 'an unreadable number of'
14
13
  const REPO_LOOKUP_TIMEOUT_MS = 10_000
@@ -21,14 +20,13 @@ const UNREADABLE_TIME = 'an unreadable time'
21
20
  interface WakeContext {
22
21
  carry_target: string
23
22
  wake_target: string
24
- // Where everything this supervisor starts writes its output (joshuafolkken/kit#1746). It is named
23
+ // Where everything this supervisor starts writes its output. It is named
25
24
  // in `--list` and in every warning, because a path nobody is told is a file nobody reads.
26
25
  log_target: string
27
26
  // The run's event stream, keyed on the primary checkout's git directory — the one the resumed
28
27
  // `backlogrun` parent runs in, so its own git directory is this common one, exactly the key the emit
29
28
  // side uses. `--list` relays the newest event from here: the report surface belongs to the run, and
30
- // `--list` is the degenerate last-event read of the same stream the attached session follows
31
- // (joshuafolkken/kit#2207).
29
+ // `--list` is the degenerate last-event read of the same stream the attached session follows.
32
30
  event_target: string
33
31
  worktree: string
34
32
  }
@@ -39,10 +37,9 @@ function carry_cuts(read: CarryRead): string {
39
37
  return UNKNOWN_CUTS
40
38
  }
41
39
 
42
- // **A wake that has gone out and has not been answered is said out loud** (joshuafolkken/kit#1746).
43
- // Read from `woke` and `cuts` alone, the forty minutes a supervisor spends retrying one lost cut look
44
- // exactly like the second before its first launch — so a person checking on a stalled backlog was
45
- // shown nothing to check. `attempts` is present only while a cut is unserved, which is why its
40
+ // **A wake that has gone out and has not been answered is said out loud.** Read from `woke` and `cuts`
41
+ // alone, the forty minutes a supervisor spends retrying one lost cut look exactly like the second
42
+ // before its first launch. `attempts` is present only while a cut is unserved, which is why its
46
43
  // absence is what prints nothing.
47
44
  function outstanding_line(wake: RunWake): string | undefined {
48
45
  if (wake.attempts === undefined) return undefined
@@ -50,10 +47,10 @@ function outstanding_line(wake: RunWake): string | undefined {
50
47
  return `${String(wake.attempts)} launch(es) outstanding for the current cut, none claimed yet`
51
48
  }
52
49
 
53
- // **Why the supervisor is not launching, and until when** (joshuafolkken/kit#3363). A supervisor that
54
- // waits writes nothing to its log, so before this `--list` showed a stalled run and a waiting one
55
- // alike. The state is `run_wake.decide`'s own answer rather than a second reading of the record: an
56
- // `idle_since` mark is the last pass having found no work, so it is fed back in as `has_work: false`.
50
+ // **Why the supervisor is not launching, and until when.** A supervisor that waits writes nothing to
51
+ // its log, so without this `--list` would show a stalled run and a waiting one alike. The state is
52
+ // `run_wake.decide`'s own answer rather than a second reading of the record: an `idle_since` mark is
53
+ // the last pass having found no work, so it is fed back in as `has_work: false`.
57
54
  function wait_input(wake: RunWake, read: CarryRead, now: Date): WakeDecisionInput {
58
55
  return {
59
56
  read,
@@ -100,26 +97,25 @@ function wait_line(wake: RunWake, read: CarryRead, now: Date): string | undefine
100
97
  }
101
98
 
102
99
  // The run's stream, read here because a headless parent's progress reaches its own transcript alone —
103
- // after a cut, `--list` is the person's one window onto it (joshuafolkken/kit#1910). Two lines: the
104
- // newest event (the degenerate last-event read of the stream the watch pane follows, so `--list` and
105
- // the pane read one stream rather than two paths), and how to watch on from here in a pane of its own —
106
- // the same surface before and after the cut, with `tail -F` on the raw stream named as a recovery path
107
- // rather than the ambient one (joshuafolkken/kit#2207, joshuafolkken/kit#2492). The event line is
108
- // omitted before the first event, the way `outstanding_line` omits a count of zero; the watch line is
109
- // always shown.
100
+ // after a cut, `--list` is the person's one window onto it. Two lines: the newest event (the
101
+ // degenerate last-event read of the stream the board pane draws, so `--list` and the pane read one
102
+ // stream rather than two paths), and how to watch on from here in a pane of its own — `run:board`, the
103
+ // same surface before and after the cut, with `tail -F` on the raw stream named as a recovery path
104
+ // rather than the ambient one. The event line is omitted before the first event, the way
105
+ // `outstanding_line` omits a count of zero; the watch line is always shown.
110
106
  function stream_lines(context: WakeContext): Array<string> {
111
107
  const event = run_event_stream.read_last(context.event_target)
112
108
  const progress = event === undefined ? [] : [`progress: ${run_event_stream.format_event(event)}`]
113
- const follow = `watch: \`pnpm josh run:event --watch ${String(event?.pos ?? 0)}\` in a pane of its own (recover with \`tail -F ${context.event_target}\`)`
109
+ const follow = `watch: \`pnpm josh run:board\` in a pane of its own (recover with \`tail -F ${context.event_target}\`)`
114
110
 
115
111
  return [...progress, follow]
116
112
  }
117
113
 
118
114
  // The wake count is printed beside the carry record's `cuts` rather than alone, because their relation
119
115
  // is the property worth being able to check — one wake per cut, plus one per crashed session the
120
- // supervisor recovered (joshuafolkken/kit#2336), so `woke >= cuts` and the gap is the recoveries.
121
- // `woke < cuts` is the shortfall that says a cut went unserved, and since joshuafolkken/kit#1746 `woke`
122
- // counts records actually claimed rather than sessions started.
116
+ // supervisor recovered, so `woke >= cuts` and the gap is the recoveries. `woke < cuts` is the
117
+ // shortfall that says a cut went unserved; `woke` counts records actually claimed rather than sessions
118
+ // started.
123
119
  // **The outstanding line beside it is what makes a shortfall readable**: the count is observed at a
124
120
  // poll, so it lags a claim by up to one interval, and launches still outstanding are what say whether
125
121
  // a missing wake is one not yet seen or one that never arrived.
@@ -136,8 +132,8 @@ function describe_wake(wake: RunWake, context: WakeContext, now: Date = new Date
136
132
  wait_line(wake, read, now),
137
133
  run_liveness.describe_agent_state(context.log_target),
138
134
  `output: ${context.log_target}`,
139
- // How progress is seen without asking after the cut: the run's stream, followed from here
140
- // (joshuafolkken/kit#2207). `--list` is that reader's one-shot last-event form.
135
+ // How progress is seen without asking after the cut: the run's stream, followed from here.
136
+ // `--list` is that reader's one-shot last-event form.
141
137
  ...stream_lines(context),
142
138
  `stop it with \`${STOP_COMMAND}\``,
143
139
  ]
@@ -145,7 +141,7 @@ function describe_wake(wake: RunWake, context: WakeContext, now: Date = new Date
145
141
  .join('\n')
146
142
  }
147
143
 
148
- // The description as a person reads it, every issue on it a number-link (joshuafolkken/kit#2943). The
144
+ // The description as a person reads it, every issue on it a number-link. The
149
145
  // invocation and the newest event both name issues (`backlogrun #1 #2`, `#1904 merged`), and a report
150
146
  // that copies them bare is what the Stop guard sends back. The repository is asked here, bounded, rather
151
147
  // than in the context every verb resolves: only the two describing verbs print it, and a lookup that
@@ -28,8 +28,8 @@ function is_final_stop(verdict: string | undefined, read: CarryRead): boolean {
28
28
  return verdict?.startsWith('stop') === true && read.kind === 'none'
29
29
  }
30
30
 
31
- // **The details are the driver's whole stderr, so only their tail is handed on, and it goes last**
32
- // (joshuafolkken/kit#2931). The stderr carries every command the driver ran since it started, which
31
+ // **The details are the driver's whole stderr, so only their tail is handed on, and it goes last.**
32
+ // The stderr carries every command the driver ran since it started, which
33
33
  // after a long run is tens of kilobytes — far past what `is_safe_value` lets into an argv element. Its
34
34
  // tail is where the reason for stopping is; placing it last means the cap `wake_argv` applies to the
35
35
  // whole prompt can only ever cut into the details, never the verdict, the resume line or the epic note.
@@ -39,11 +39,11 @@ function details_tail(details: string): string {
39
39
  : details
40
40
  }
41
41
 
42
- // **The hand-off names its next move, so the woken session never searches the procedure for it**
43
- // (joshuafolkken/kit#3156). Whatever the branch, the session acts on it and hands the loop back to the
44
- // supervisor with a cut; only a person's stop ends the run instead.
42
+ // **The hand-off names its next move, so the woken session never searches the procedure for it.**
43
+ // Whatever the branch, the session acts on it and hands the loop back to the supervisor with a cut;
44
+ // only a person's stop ends the run instead.
45
45
  //
46
- // **The claim comes first** (joshuafolkken/kit#3238). The supervisor hands the record off before the
46
+ // **The claim comes first.** The supervisor hands the record off before the
47
47
  // wake, so until the session adopts it with `--resume` every count it writes — `--merged`, `--done`,
48
48
  // the closing `--cut` — is refused as advancing a handed-off budget, and the supervisor, seeing no
49
49
  // claim, ends the run as a failed wake.
@@ -100,9 +100,9 @@ function driver_result(
100
100
  return { kind: 'judgment', material: handoff_material(verdict, resume, invocation, details) }
101
101
  }
102
102
 
103
- // **The cause is the driver's stdout `error …` line, so it leads the note** (joshuafolkken/kit#3242).
104
- // `backlog:drive` prints an exception only to stdout, and its stderr is never empty — every command it
105
- // ran is there — so reading `err ?? out` dropped the one line that said why. The stderr follows as its
103
+ // **The cause is the driver's stdout `error …` line, so it leads the note.** `backlog:drive` prints an
104
+ // exception only to stdout, and its stderr is never empty — every command it ran is there — so reading
105
+ // `err ?? out` would drop the one line that says why. The stderr follows as its
106
106
  // tail, for the same reason `details_tail` cuts a judgment's details.
107
107
  function cause_of(out: string): string {
108
108
  const errors = out.split('\n').filter((line) => line.startsWith(ERROR_PREFIX))
@@ -133,11 +133,11 @@ function claim_record(target: string, invocation: string): boolean {
133
133
  return run_carry.adopt_carry(target, current.carry, run_carry.owner_of(process.pid)) !== undefined
134
134
  }
135
135
 
136
- // **A verdict with nothing to judge is re-driven here, never handed to a session** (joshuafolkken/kit#3245).
137
- // A woken session met with `window`, `merge busy` or `merge retry` only cut and handed the loop back, and
138
- // the supervisor then ran the very same driver again — a model round trip, at a cache write each, that
139
- // decided nothing. The record is already this process's, so the rerun needs no fresh claim; the limit
140
- // keeps a driver that never settles from holding the supervisor past its own checks.
136
+ // **A verdict with nothing to judge is re-driven here, never handed to a session.** A woken session
137
+ // met with `window`, `merge busy` or `merge retry` could only cut and hand the loop back for the same
138
+ // driver to run again — a model round trip, at a cache write each, that decides nothing. The record
139
+ // is already this process's, so the rerun needs no fresh claim; the limit keeps a driver that never
140
+ // settles from holding the supervisor past its own checks.
141
141
  const RERUN_VERDICTS: ReadonlyArray<string> = ['window', 'merge busy', 'merge retry']
142
142
  const RERUN_LIMIT = 10
143
143
  const RERUN_PAUSE_MS = 60_000
@@ -1,13 +1,13 @@
1
1
  import { stamp_file } from '#scripts/josh/stamp-file'
2
2
  import { run_carry } from '#scripts/run/carry/run-carry'
3
3
 
4
- // The supervisor's recovery hand-off (joshuafolkken/kit#2437). A session that claimed the carry record
5
- // and then died without `run:carry --cut` leaves it `carried`, owned by a gone process, with no
6
- // hand-off. `run-wake.ts` → `decide_not_handed_off` already re-wakes on that record (#2336), but the
7
- // successor it woke then ran `--begin` over a record no cut handed off and was answered `standing` —
8
- // "stop for a person" — so the recovery ended the run it existed to continue.
4
+ // The supervisor's recovery hand-off. A session that claimed the carry record and then died without
5
+ // `run:carry --cut` leaves it `carried`, owned by a gone process, with no hand-off. `run-wake.ts` →
6
+ // `decide_not_handed_off` re-wakes on that record, and a successor running `--begin` over a record no
7
+ // cut handed off would be answered `standing` — "stop for a person" — ending the run the recovery
8
+ // exists to continue.
9
9
  //
10
- // **The fix is to make the recovery a cut, not to teach the successor a second answer.** Before it
10
+ // **The recovery is made a cut, rather than teaching the successor a second answer.** Before it
11
11
  // launches, the supervisor writes the same `is_handed_off` a `--cut` writes, so the successor's
12
12
  // `--begin` classifies `resume` through the one path a declared cut already takes, and `standing` is
13
13
  // left meaning what `backlogrun-steps.md` says it means: a record nobody is watching.