@joshuafolkken/kit 1.1240.0 → 1.1373.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 +52 -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 +23 -66
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +43 -11
  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-7UBFU3CL.js} +18 -20
  51. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
  52. package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
  53. package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
  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-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
  57. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  60. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
  61. package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
  62. package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
  63. package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
  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 +195 -181
  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 +282 -95
  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 +17 -11
  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 +30 -5
  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 +21 -7
  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/cross-file-recheck.ts +155 -0
  560. package/scripts/lint/cspell-cached.ts +1 -1
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +35 -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 +6 -7
  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 +26 -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 +64 -18
  801. package/scripts/run/run-step.ts +107 -51
  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,46 +1,41 @@
1
1
  import { backlog_budget_cli } from '#scripts/backlog/backlog-budget-cli'
2
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
2
3
  import { cli_flags } from '#scripts/lib/cli-flags'
3
- import { run_issue_number } from './run-issue-number'
4
4
 
5
5
  // The grammar of an invocation that can be carried across a session cut, and the only place it is
6
- // written down (joshuafolkken/kit#1774, folded into `backlogrun` by joshuafolkken/kit#1984). It sat
7
- // inside `run-wake-session.ts` while that supervisor was its one reader; two now need the same answer
8
- // — the supervisor, to rebuild the text it wakes with, and `run-carry.ts`, to say which of a
9
- // `backlogrun`'s named issues are still outstanding. A grammar copied into two files is a grammar
10
- // kept correct in one, which is the clone `CLAUDE.md` prohibits.
6
+ // written down. Two readers need the same answer — the supervisor, to rebuild the text it wakes with,
7
+ // and `run-carry.ts`, to say which of a `backlogrun`'s named issues are still outstanding. A grammar
8
+ // copied into two files is a grammar kept correct in one, which is the clone `CLAUDE.md` prohibits.
11
9
  //
12
10
  // **`backlogrun` is the one command that survives a cut, and its invocation is a named-issue list, a
13
11
  // budget, or both.** `backlogrun #N1 #N2 …` runs the named issues in the order they were typed and
14
12
  // then drains the opted-in backlog; `backlogrun --max 5 --idle 30` names only a budget; the two
15
- // combine as `backlogrun #N1 #N2 --max 5`. The named list is what `queue` used to be its own keyword
16
- // for (joshuafolkken/kit#1984 removed that keyword).
13
+ // combine as `backlogrun #N1 #N2 --max 5`.
17
14
  //
18
15
  // **The invocation is taken apart and rebuilt, rather than inspected and handed on.** Everything that
19
16
  // may reach the operating system is enumerable: one command word, two flag names, and an integer for
20
17
  // each argument. Reading the record as tokens and composing a fresh string out of constants and
21
18
  // validated integers means the text the record held never reaches `spawn` at all.
22
19
  //
23
- // **A stricter check is not a break in the flow, and that is why three of them changed nothing.**
24
- // Validating the characters, fixing the binary as a constant and matching against a pattern all left
25
- // the recorded string flowing into the call; taint tracking follows where a value goes, not how hard
26
- // it was looked at on the way. Composing the argument from constants is what actually severs it
27
- // (joshuafolkken/kit#1719).
20
+ // **A stricter check is not a break in the flow.** Validating the characters, fixing the binary as a
21
+ // constant and matching against a pattern all leave the recorded string flowing into the call; taint
22
+ // tracking follows where a value goes, not how hard it was looked at on the way. Composing the
23
+ // argument from constants is what actually severs it.
28
24
  const BACKLOG_COMMAND = 'backlogrun'
29
25
  // **The named list is pinned to what was typed.** The record keeps the opening list unchanged across
30
- // every cut, so `classify_claim`'s character-for-character comparison is untouched and
31
- // joshuafolkken/kit#1722's single-writer guarantee is not weakened. What shrinks is the *outstanding*
32
- // set, and that lives in the record's `done` field rather than in the string — the alternative,
33
- // loosening the comparison to the keyword, is what joshuafolkken/kit#1774 rejected.
26
+ // every cut, so `classify_claim`'s character-for-character comparison is untouched and the
27
+ // single-writer guarantee is not weakened. What shrinks is the *outstanding* set, and that lives in
28
+ // the record's `done` field rather than in the string.
34
29
  //
35
30
  // The flags this grammar knows how to carry across a session cut. A token is compared against these
36
31
  // and the **constant that matched** is what goes into the rebuilt invocation, never the token itself:
37
32
  // the two are equal as text and differ in where they came from, and here the origin is the whole point.
38
33
  const KNOWN_FLAGS: ReadonlyArray<string> = ['--max', '--idle']
39
34
  // `--only` is the one flag that takes no value — it says "run the named list and stop, do not drain the
40
- // pool" (joshuafolkken/kit#1984). It is carried across a cut like any other part of the invocation, so
35
+ // pool". It is carried across a cut like any other part of the invocation, so
41
36
  // a resumed session that reads it back does not silently start draining the backlog the person excluded.
42
37
  const ONLY_FLAG = '--only'
43
- // The read itself is `cli_flags`'s (joshuafolkken/kit#3261): strict, so an unknown flag, a flag with
38
+ // The read itself is `cli_flags`'s: strict, so an unknown flag, a flag with
44
39
  // no value, `--only=<x>` and a value that is itself a flag are all refused before this file looks.
45
40
  const OPTIONS = {
46
41
  max: { type: 'string' },
@@ -71,7 +66,7 @@ interface Invocation {
71
66
  // A space is the only separator that can survive `detached-launch.ts`'s `is_safe_value`, which has
72
67
  // already refused every control character — so the split needs no pattern, and this file is left with
73
68
  // no regular expression of its own for a backtracking analysis to find. The one pattern it does use
74
- // is `run-issue-number.ts`'s, which is anchored and has no alternation.
69
+ // is `issue-number-shape.ts`'s, which is anchored and has no alternation.
75
70
  function tokens_of(invocation: string): ReadonlyArray<string> {
76
71
  return invocation.split(TOKEN_SEPARATOR).filter((token) => token.length > EMPTY_LENGTH)
77
72
  }
@@ -110,7 +105,7 @@ function rendered_options(tokens: ReadonlyArray<ArgumentToken>): ReadonlyArray<s
110
105
  return rendered
111
106
  }
112
107
 
113
- // **The issue-number shape is `run-issue-number.ts`'s, for the reason the flag value's is
108
+ // **The issue-number shape is `issue-number-shape.ts`'s, for the reason the flag value's is
114
109
  // `backlog:budget`'s.** It already refuses `0` and a leading zero, which is what keeps `#05` from
115
110
  // rebuilding as `#5` and being refused downstream as a rewritten record.
116
111
  // **The magnitude bound is here and not in the pattern**, which is anchored on digits and says nothing
@@ -122,7 +117,7 @@ function issue_of(token: string): number | undefined {
122
117
 
123
118
  const digits = token.slice(ISSUE_PREFIX.length)
124
119
 
125
- if (!run_issue_number.ISSUE_NUMBER_PATTERN.test(digits)) return undefined
120
+ if (!issue_number_shape.ISSUE_NUMBER_PATTERN.test(digits)) return undefined
126
121
 
127
122
  const issue = Number(digits)
128
123
 
@@ -1,11 +1,11 @@
1
1
  import { git_followup_label } from '#scripts/followup/git-followup-label'
2
2
  import { git_gh_command } from '#scripts/gh/git-gh-command'
3
3
  import { IN_PROGRESS_LABEL } from '#scripts/issue/issue-labels'
4
+ import { session_cite } from '#scripts/issue/session-cite'
4
5
 
5
- // **The `in-progress` marker belongs to the commands that open and release a run**
6
- // (joshuafolkken/kit#3182). Every manifest used to spell the label's create, apply and removal as raw
7
- // `gh api` calls, so each copy was a place the marker could be forgotten; `run:entry` applies it the
8
- // moment the tree is held and the budget allows the run, and `run:release` takes it back off.
6
+ // **The `in-progress` marker belongs to the commands that open and release a run**, so no manifest
7
+ // spells the label's calls and none can forget it: `run:entry` applies it the moment the tree is held
8
+ // and the budget allows the run, and `run:release` takes it back off.
9
9
  //
10
10
  // **Neither half ever fails the command it rides on.** The hold is the guard and the label only
11
11
  // reports it, so a refused write is warned about by name — with the call that finishes it by hand —
@@ -15,7 +15,9 @@ const MARK_RECOVERY = "gh api repos/{owner}/{repo}/issues/<N>/labels -f 'labels[
15
15
  const UNMARK_RECOVERY = 'gh api -X DELETE repos/{owner}/{repo}/issues/<N>/labels/in-progress'
16
16
 
17
17
  function warn(action: string, issue: string, recovery: string): void {
18
- console.warn(`⚠ could not ${action} \`in-progress\` on #${issue} — run by hand: ${recovery}`)
18
+ console.warn(
19
+ `⚠ could not ${action} \`in-progress\` on ${session_cite.issue(issue)} — run by hand: ${recovery}`,
20
+ )
19
21
  }
20
22
 
21
23
  // `issue_add_label` creates the label when the repository lacks it (`lane-dispatch.ts`), so no
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
4
+ import { lane_await } from '#scripts/lane/lane-await'
3
5
  import { cli_flags } from '#scripts/lib/cli-flags'
4
6
  import { error_text } from '#scripts/lib/error-message'
5
- import { run_issue_number } from './run-issue-number'
6
7
  import {
7
8
  MS_PER_MINUTE,
8
9
  MS_PER_SECOND,
@@ -16,8 +17,8 @@ import {
16
17
  type ProcessTrace,
17
18
  } from './run-liveness'
18
19
 
19
- // `josh run:liveness <N> --output <path> --process <alive|none>` — one verdict about the delegated
20
- // unit running child `<N>` (joshuafolkken/kit#1485).
20
+ // `josh run:liveness <N> --output <path> [--process <alive|none>]` — one verdict about the delegated
21
+ // unit running child `<N>`.
21
22
  //
22
23
  // The stdout/stderr split is the contract, as it is for `run:hold`: exactly one
23
24
  // verdict token on stdout on every path, the reason and the advice on stderr. `undetermined` exits
@@ -92,7 +93,7 @@ interface ParsedArguments {
92
93
  function is_valid_target(parsed: ParsedArguments): boolean {
93
94
  return (
94
95
  parsed.positionals.length === 1 &&
95
- run_issue_number.ISSUE_NUMBER_PATTERN.test(parsed.positionals[0] ?? '')
96
+ issue_number_shape.ISSUE_NUMBER_PATTERN.test(parsed.positionals[0] ?? '')
96
97
  )
97
98
  }
98
99
 
@@ -120,13 +121,25 @@ function to_optional_fields(values: ParsedValues): Partial<LivenessRequest> {
120
121
  }
121
122
  }
122
123
 
124
+ // Left out, the process trace is read here with the probe `lane:await` polls on — the child's
125
+ // invocation or its detached ship — so no caller runs `pgrep` by hand; a
126
+ // probe that could not look answers `unknown`, never `none`. A given `--process` still wins: it is
127
+ // the answer for a unit this probe does not know, such as one whose checkout the caller scanned itself.
128
+ function process_trace_of(values: ParsedValues, issue: string): ProcessTrace {
129
+ if (values.process !== undefined) return to_process_trace(values.process) ?? PROCESS_UNKNOWN
130
+
131
+ return lane_await.process_trace_default(issue)
132
+ }
133
+
123
134
  // Reached only through `is_valid`, so the fallbacks below are unreachable defaults rather than
124
135
  // behavior: the alternative is a type assertion, which this codebase restricts.
125
136
  function to_request(parsed: ParsedArguments): LivenessRequest {
137
+ const issue = parsed.positionals[0] ?? ''
138
+
126
139
  return {
127
- issue: parsed.positionals[0] ?? '',
140
+ issue,
128
141
  output_path: parsed.values.output ?? '',
129
- process_trace: to_process_trace(parsed.values.process) ?? PROCESS_UNKNOWN,
142
+ process_trace: process_trace_of(parsed.values, issue),
130
143
  ...to_optional_fields(parsed.values),
131
144
  }
132
145
  }
@@ -5,28 +5,21 @@ import { setTimeout as sleep } from 'node:timers/promises'
5
5
  import { agent_event, type AgentEventState } from '#scripts/agent/agent-event'
6
6
  import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
7
7
  import { ALREADY_DONE_LABEL, NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
8
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
8
9
  import { issue_state } from '#scripts/issue/issue-state'
9
10
  import { PLATFORM_TEMP_ROOT } from '#scripts/josh/platform-temporary'
10
11
  import { run_hold } from '#scripts/run/hold/run-hold'
11
- import { run_issue_number } from './run-issue-number'
12
12
 
13
13
  // `josh run:liveness <N>` — whether the delegated unit running child `<N>` is still working, or
14
- // stopped without reporting (joshuafolkken/kit#1485).
15
- //
16
- // joshuafolkken/kit#1212 wrote the detection as a conjunction of four traces an agent read by hand,
17
- // and it could not fire for the stop that actually happened. Its second trace required a **dirty**
18
- // checkout, justified by "a unit that died mid-implementation leaves exactly this" — so a unit that
19
- // died *before* implementing, while it was still reading the skill and the issue, left a clean tree
20
- // and the conjunction stayed false forever. Measured on 2026-09-06: the unit for
21
- // joshuafolkken/kit#1169 stopped seven minutes in, three of the four traces held, and the parent
22
- // went on calling the child in progress for 42 minutes until a person asked.
14
+ // stopped without reporting.
23
15
  //
24
16
  // **Two traces decide it, and neither depends on whether implementation started**: the unit's output
25
- // has stopped growing, and no process of the child's is alive in that checkout. The dirty tree is
26
- // demoted from the test to an input of the recovery — it says whether there is anything to stash,
27
- // which is a different question from whether the unit is alive. "Nothing was ever opened for the
28
- // child" is dropped outright: it is also the normal state of a unit that has not reached its commit
29
- // yet, and the branch-and-pull-request question already has an owner in `josh run:hold`'s preflight check.
17
+ // has stopped growing, and no process of the child's is alive in that checkout. A unit can die before
18
+ // implementing and leave a clean tree, so the dirty tree is an input of the recovery, not of the test
19
+ // — it says whether there is anything to stash, which is a different question from whether the unit
20
+ // is alive. "Nothing was ever opened for the child" is not a trace either: it is also the normal
21
+ // state of a unit that has not reached its commit yet, and the branch-and-pull-request question
22
+ // already has an owner in `josh run:hold`'s preflight check.
30
23
  //
31
24
  // **The binding constraint is the direction of the error.** A live unit booked as stopped has its
32
25
  // working work killed; a stopped unit booked as alive costs waiting. So the ladder reads the one
@@ -37,9 +30,8 @@ import { run_issue_number } from './run-issue-number'
37
30
  // **The output read follows the link.** The path a unit writes its transcript to is a symbolic link, and
38
31
  // the link's own modification time never changes after it is created — read with the shell's `stat`,
39
32
  // which does not follow by default on macOS, the file looks frozen whether the unit is alive or
40
- // dead. That is the second half of joshuafolkken/kit#1485: the same parent reported a dead unit as
41
- // alive twice on such a read. `statSync` follows the link, and the size is compared as well as the
42
- // modification time, because it is the two-sample size comparison that actually proved liveness.
33
+ // dead. `statSync` follows the link, and the size is compared as well as the modification time,
34
+ // because it is the two-sample size comparison that actually proves liveness.
43
35
 
44
36
  const ALIVE_VERDICT = 'alive'
45
37
  const SETTLED_VERDICT = 'settled'
@@ -52,11 +44,10 @@ type LivenessVerdict =
52
44
  | typeof STOPPED_VERDICT
53
45
  | typeof UNDETERMINED_VERDICT
54
46
 
55
- // The one trace this command cannot read for itself. A process scan that matched too little would
47
+ // The one trace this module does not read for itself. A process scan that matched too little would
56
48
  // book a live unit as stopped, and one that matched too much would never detect anything — so the
57
- // caller runs the `pgrep` the skill specifies against the checkout it handed the unit, and passes
58
- // what it saw. `unknown` is the default, and a trace nobody gave is an unasked question rather than
59
- // an answer of "no process".
49
+ // CLI reads it with `lane:await`'s probe, or takes what the caller passed. `unknown` is what a
50
+ // request carries when nobody read it, an unasked question rather than an answer of "no process".
60
51
  const PROCESS_ALIVE = 'alive'
61
52
  const PROCESS_NONE = 'none'
62
53
  const PROCESS_UNKNOWN = 'unknown'
@@ -116,8 +107,8 @@ const ALIVE_ADVICE = 'Keep polling; do not touch the child.'
116
107
  const SETTLED_ADVICE =
117
108
  'Read the child with `pnpm josh issue:state <N>` and take the branch its state says.'
118
109
  // The unit stopped, but *why* it stopped — abandoned mid-implementation, or dead because it could not
119
- // reach the API — is `run:ending`'s question, not this one's (joshuafolkken/kit#2277). Booking every
120
- // stop as a failure parked an API-outage child that should have been re-dispatched, so the recovery is
110
+ // reach the API — is `run:ending`'s question, not this one's. Booking every stop as a failure would
111
+ // park an API-outage child that should be re-dispatched, so the recovery is
121
112
  // routed through `run:merge --output`, the same composite a returned child takes: it reads the exit
122
113
  // record without waiting for the unit to return, re-dispatches an outage child (counting the outage,
123
114
  // and stopping the run on the environment guard once a run of them trips it), and parks an abandoned
@@ -127,7 +118,7 @@ const STOPPED_CLEAN_ADVICE =
127
118
  const STOPPED_DIRTY_ADVICE =
128
119
  'Stash the half-finished work with `git stash push -u -m "backlogrun: stopped unit for #<N>"` and record it on the Issue, then classify how the unit ended with `pnpm josh run:merge <N> --output <path>` (add `--epic <E> --repo <owner/repo> --owner "$PPID"` for a named epic): it re-dispatches an API-outage child (counting the outage; a run of them trips the environment guard) and parks an abandoned child with `needs-decision` against the consecutive-failure guard, without waiting for the unit to return.'
129
120
  const UNDETERMINED_ADVICE =
130
- 'Read the trace that failed and ask again. Where the process trace was never given, run the `pgrep` against the checkout the unit was given and pass `--process alive` or `--process none`. Two of these in a row is a fault in the check itself rather than a slow unit: stop polling and report it.'
121
+ 'Read the trace that failed and ask again. Where the process trace was given as `unknown`, leave `--process` out so the command reads it. Two of these in a row is a fault in the check itself rather than a slow unit: stop polling and report it.'
131
122
 
132
123
  // Output that moved is a unit that is writing, and it is asked before anything else — it is the one
133
124
  // reading that needs no other trace to mean what it says.
@@ -153,8 +144,8 @@ function definitive_verdict(traces: Traces): LivenessVerdict | undefined {
153
144
 
154
145
  // A live process is a unit inside a long check — a `pnpm josh followup` waiting on CI writes
155
146
  // nothing for up to 32 minutes, which is longer than the silent window and is exactly the false
156
- // positive this trace exists to stop. **It is asked after the unreadable check rather than before it**
157
- // (joshuafolkken/kit#1485, review round 2): a `pgrep` scoped a shade too wide answers `alive` on a
147
+ // positive this trace exists to stop. **It is asked after the unreadable check rather than before it**:
148
+ // a `pgrep` scoped a shade too wide answers `alive` on a
158
149
  // machine running several kit projects at once, and read ahead of an output path that resolves to
159
150
  // nothing it would answer `alive` on every poll forever — the unbounded stall this command exists to
160
151
  // remove, reappearing where nothing would ever count it.
@@ -220,9 +211,8 @@ function to_resolved_root(root: string): string {
220
211
  // **Every root is listed in both spellings, and that is load-bearing rather than defensive.** `/tmp`
221
212
  // is a symbolic link to `/private/tmp` on macOS and `/var` one to `/private/var`, so a containment
222
213
  // test against one spelling rejects a transcript whose path was written as the other — `path.relative`
223
- // resolves no link. Measured on 2026-09-07: a transcript at `/private/tmp/claude-501/…` was refused,
224
- // every poll answered `undetermined`, and the parent could not detect a stopped unit at all — the
225
- // unbounded stall this command exists to remove, reappearing inside its own path check. Resolving the
214
+ // resolves no link — and a refused transcript makes every poll answer `undetermined`, the unbounded
215
+ // stall this command exists to remove, reappearing inside its own path check. Resolving the
226
216
  // *candidate* would not do instead: it does not exist yet in the "resolves to nothing" case, which has
227
217
  // to stay unreadable rather than throw.
228
218
  const ALLOWED_ROOTS: ReadonlyArray<string> = [
@@ -251,9 +241,8 @@ function to_safe_path(output_path: string): string | undefined {
251
241
  }
252
242
 
253
243
  // `statSync` follows a symbolic link; `lstatSync` and the shell's bare `stat` do not. That difference is
254
- // the whole of joshuafolkken/kit#1485's second symptom, so it is stated here rather than left to a
255
- // reader to know. A path that resolves to nothing, or to something that is not a regular file, is
256
- // unreadable rather than frozen.
244
+ // load-bearing, so it is stated here rather than left to a reader to know. A path that resolves to
245
+ // nothing, or to something that is not a regular file, is unreadable rather than frozen.
257
246
  function sample_output(output_path: string): OutputSample | undefined {
258
247
  const safe_path = to_safe_path(output_path)
259
248
 
@@ -324,7 +313,7 @@ function carries_label(labels: ReadonlyArray<string>, wanted: string): boolean {
324
313
 
325
314
  // The labels that say a unit stopped on purpose. `needs-decision` is the park branch; `already-done`
326
315
  // is the exit a child takes when it verifies its Issue's work is already merged
327
- // (joshuafolkken/kit#1679) — it comments the evidence, applies the label and stops with the checkout
316
+ // — it comments the evidence, applies the label and stops with the checkout
328
317
  // clean, which is settled by the same reasoning. Left out, this command reports a child that
329
318
  // finished correctly as `stopped` and a supervisor restarts the investigation it just completed.
330
319
  const SETTLED_LABELS: ReadonlyArray<string> = [NEEDS_DECISION_LABEL, ALREADY_DONE_LABEL]
@@ -336,8 +325,8 @@ function carries_settled_label(labels: ReadonlyArray<string>): boolean {
336
325
  // Settled needs positive evidence that the child is done with: it closed, or the unit parked it and
337
326
  // then stopped, which the loop's park branch already owns. **An open child that is not parked is not settled
338
327
  // even without `in-progress`** — that label is applied by the unit itself, after it reads the issue,
339
- // so a unit that died before applying it would otherwise be reported as a child needing nothing
340
- // (joshuafolkken/kit#1485, review round 1). Read that way, the stop this command exists for goes
328
+ // so a unit that died before applying it would otherwise be reported as a child needing nothing.
329
+ // Read that way, the stop this command exists for goes
341
330
  // undetected.
342
331
  async function read_child_settled(issue: string, repo?: string): Promise<boolean | undefined> {
343
332
  const json = await git_gh_issue_read.issue_view_json(issue, STATE_FIELDS, repo)
@@ -386,7 +375,7 @@ async function read_traces(request: LivenessRequest): Promise<Traces> {
386
375
  }
387
376
 
388
377
  async function check(request: LivenessRequest): Promise<LivenessDecision> {
389
- run_issue_number.require_issue_number(request.issue)
378
+ issue_number_shape.require_issue_number(request.issue)
390
379
 
391
380
  return decide(await read_traces(request))
392
381
  }
@@ -394,7 +383,7 @@ async function check(request: LivenessRequest): Promise<LivenessDecision> {
394
383
  // The constants are exported by name rather than through the namespace: read back off a namespace
395
384
  // object their literal types widen to `string`, and `ProcessTrace` would then admit anything.
396
385
  // `to_safe_path` is on the namespace because `josh lane:output` refuses a path this command could
397
- // not read (joshuafolkken/kit#1713). Recorded, such a path makes every poll answer `undetermined`
386
+ // not read. Recorded, such a path makes every poll answer `undetermined`
398
387
  // for ever — so the two have to agree, and agreeing means one function rather than two.
399
388
  const run_liveness = {
400
389
  check,
@@ -3,15 +3,11 @@ import { fileURLToPath } from 'node:url'
3
3
  import { run_next } from './run-next'
4
4
  import { run_prep_cli } from './run-prep-cli'
5
5
 
6
- // `josh run:next <N>` — print the next step a `fullrun` takes, from the run's state
7
- // (joshuafolkken/kit#2188). It reads exactly what `run:prep` reads — the issue state, the
8
- // `human_review` line and the dependency scope — by calling `run:prep`'s own gather, so the two never
9
- // answer from different facts, and hands the assembled parts to the state → step mapping in
10
- // `run-next.ts`.
11
- //
12
- // **It is the consumer `run:prep` was built to have.** joshuafolkken/kit#1978 bundled the reads;
13
- // joshuafolkken/kit#2165 added the read-only glance; this one prints the decision those reads support,
14
- // which is the trim epic #2166 is after — prose a reader interprets replaced by a computed answer.
6
+ // `josh run:next <N>` — print the next step a `fullrun` takes, from the run's state.
7
+ // It reads exactly what `run:prep` reads — the issue state, the `human_review` line and the dependency
8
+ // scope — by calling `run:prep`'s own gather, so the two never answer from different facts, and hands
9
+ // the assembled parts to the state → step mapping in `run-next.ts`. It prints the decision those reads
10
+ // support — prose a reader interprets replaced by a computed answer.
15
11
 
16
12
  const SUCCESS_EXIT_CODE = 0
17
13
  const FAILURE_EXIT_CODE = 1
@@ -1,12 +1,11 @@
1
1
  import type { PrepParts } from './run-prep'
2
2
  import { run_step, type PreVerdict } from './run-step'
3
3
 
4
- // `josh run:next <N>` — the next step a `fullrun` takes, printed from the run's state
5
- // (joshuafolkken/kit#2188). It is the foundation the epic #2166 rests on: the entry read is trimmed by
6
- // replacing prose that a reader has to interpret with a command that answers "what now" from the same
7
- // state `run:prep` already gathered, so the answer is computed rather than judged.
4
+ // `josh run:next <N>` — the next step a `fullrun` takes, printed from the run's state.
5
+ // It replaces prose that a reader has to interpret with a command that answers "what now" from the
6
+ // same state `run:prep` already gathered, so the answer is computed rather than judged.
8
7
  //
9
- // **It is now the degenerate form of `run:step`** (joshuafolkken/kit#2248). `run:step` computes a run's
8
+ // **It is the degenerate form of `run:step`.** `run:step` computes a run's
10
9
  // position from the event stream, the carry record and the issue state; a `fullrun` with nothing emitted
11
10
  // yet is at its pre-implementation position, which is exactly what this prints. The state → step mapping
12
11
  // lives once, in `run-step.ts`'s `pre_verdict`, and this maps each verdict to the prose sentence a
@@ -5,19 +5,18 @@ import { cost_verdict } from '#scripts/cost-runtime/cost-verdict'
5
5
  import { hook_decision } from '#scripts/josh/hook-decision'
6
6
  import { error_text } from '#scripts/lib/error-message'
7
7
  import { implementation_cut_verdict } from '#scripts/rules/implementation-cut-verdict'
8
- import { run_carry, type RunCarry } from '#scripts/run/carry/run-carry'
8
+ import type { RunCarry } from '#scripts/run/carry/run-carry'
9
9
  import { run_headless } from './run-headless'
10
10
  import { run_watcher_hook } from './run-watcher-hook'
11
11
 
12
- // The `backlogrun` parent's hand-off, delivered at the call it binds on (joshuafolkken/kit#2947).
12
+ // The `backlogrun` parent's hand-off, delivered at the call it binds on.
13
13
  //
14
- // **The parent's hand-off was asked only at a merge, and the context grew between merges.** The
15
- // orchestrator never implements, yet on 2026-10-02 parent 259fb6d5 sent 111 of its 170 requests past
16
- // the shared threshold, peaking at 207,081 tokens: `pnpm josh cost --cut` is read after each child's
17
- // merge (`backlogrun-progress.md` → "The hand-off"), and a long wait or a lane-failure investigation
18
- // between two merges is exactly where it went unread. This is the lesson `implementation-cut.ts` records
19
- // for a lane child, one session up — a check carried as a step is taken late, a `PreToolUse` refusal is
20
- // taken at the next call.
14
+ // **A hand-off asked only at a merge goes unread while the context grows between merges.** The
15
+ // orchestrator never implements, but `pnpm josh cost --cut` is read after each child's merge
16
+ // (`backlogrun-progress.md` → "The hand-off"), and a long wait or a lane-failure investigation between
17
+ // two merges is where the context grows past the shared threshold. This is the lesson
18
+ // `implementation-cut.ts` records for a lane child, one session up — a check carried as a step is
19
+ // taken late, a `PreToolUse` refusal is taken at the next call.
21
20
  //
22
21
  // **The same statistic and the same threshold, never a second measurement.** The verdict is
23
22
  // `cost_cli.session_verdict` — what `pnpm josh cost --cut` prints — read through the implementation cut's
@@ -33,8 +32,7 @@ const STAMP_PREFIX = 'josh-parent-cut-guard-'
33
32
  // **One refusal, then a quiet window long enough to finish the hand-off in.** The hand-off is several
34
33
  // calls — `lane:list`, `lane:output`, `run:carry --cut`, `run:wake`, the progress comment — and a guard
35
34
  // refusing each of them would wedge the very procedure it asks for. A parent that could not cut (a lane
36
- // nobody can poll) is asked again once the window has passed, which is the "next opportunity" the merge
37
- // seam used to be.
35
+ // nobody can poll) is asked again once the window has passed.
38
36
  const QUIET_WINDOW_MS = 600_000
39
37
 
40
38
  // What the decision has to know about the world, passed in so it is testable without a carry record or
@@ -73,7 +71,7 @@ const PARENT_CUT_REASON =
73
71
  async function is_due(state: ParentCutState): Promise<boolean> {
74
72
  const carry = await state.carry()
75
73
 
76
- if (carry === undefined || run_carry.is_at_cut_cap(carry)) return false
74
+ if (carry === undefined || run_headless.is_cut_capped(carry)) return false
77
75
 
78
76
  return state.verdict() === cost_verdict.OVER_VERDICT
79
77
  }
@@ -1,30 +1,30 @@
1
1
  import { git_gh_pr_read } from '#scripts/gh/git-gh-pr-read'
2
2
  import { git_command } from '#scripts/git/git-command'
3
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
4
+ import { session_cite } from '#scripts/issue/session-cite'
3
5
  import { lane_registry, type LaneInfo } from '#scripts/lane/lane-registry'
6
+ import { json_value } from '#scripts/lib/json-value'
4
7
  import { run_hold } from '#scripts/run/hold/run-hold'
5
8
  import { z } from 'zod'
6
- import { run_issue_number } from './run-issue-number'
7
9
 
8
10
  // The preflight check — what an interrupted run left in this working tree, and what the rule says to
9
- // do about it before the next child starts (joshuafolkken/kit#926). It once had its own
10
- // `josh run:preflight` CLI; joshuafolkken/kit#1965 folded the check into `run:hold`, which now runs it
11
- // before it claims the tree, so this module is the shared logic behind that claim and behind
12
- // `run:progress`, and no longer a command of its own.
11
+ // do about it before the next child starts. `run:hold` runs it before it claims the tree, so this
12
+ // module is the shared logic behind that claim and behind `run:progress`, not a command of its own.
13
13
  //
14
- // joshuafolkken/kit#1091 gave a run a way to say "this tree is mine". This is the sibling question,
15
- // and it is about the run that never said anything again: an unattended run ends abnormally — a
16
- // crash, a Ctrl-C, a laptop asleep, an expired token — and leaves its feature branch, its open pull
17
- // request and its uncommitted changes behind. Every child of an `epicrun` starts with
18
- // `git switch main && git pull`, which refuses over a dirty tree, and an agent may not reach for
19
- // `git stash` on its own judgement, so the batch could not recover without a person.
14
+ // It is about the run that never said anything again: an unattended run ends abnormally — a crash, a
15
+ // Ctrl-C, a laptop asleep, an expired token — and leaves its feature branch, its open pull request and
16
+ // its uncommitted changes behind. The next child's checkout refuses over a dirty tree, and an agent
17
+ // may not reach for `git stash` on its own judgement, so without this check the batch cannot
18
+ // recover unattended.
20
19
  //
21
20
  // **The rule answers, so the run does not judge.** "There is a branch already, I will carry on from
22
21
  // it" and "there is a branch already, I had better stop" are both defensible in the moment, which is
23
22
  // exactly why the choice is not left to the moment — the same reason `josh delegate` and
24
23
  // `josh review:level` refuse to leave their answers to an agent.
25
24
  //
26
- // **The check is re-askable, which the claim it now gates deliberately is not.** A claim asked twice
27
- // answers `busy`, because the second ask is a second run. This check reads state and writes nothing,
25
+ // **The check is re-askable, and so is the claim it now gates — but only by the same run.** A claim
26
+ // asked again for the issue the record names answers `hold`; for any other
27
+ // issue it answers `busy`, because that ask is a second run. This check reads state and writes nothing,
28
28
  // so the reclaim recovery ends by asking `run:hold` again on the tree it just cleaned.
29
29
 
30
30
  const CLEAN_VERDICT = 'clean'
@@ -88,8 +88,8 @@ const STASH_LABEL_PREFIX = 'run:hold reclaimed before #'
88
88
  // The issue number reaches the advice inside a double-quoted shell command a caller is told to paste,
89
89
  // so the shape it may take is pinned beside the interpolation rather than only in the CLI that
90
90
  // happens to be today's single caller. `run:liveness` interpolates it the same way, so the pattern
91
- // and the refusal live in one module both read (joshuafolkken/kit#1485).
92
- const { require_issue_number } = run_issue_number
91
+ // and the refusal live in one module both read.
92
+ const { require_issue_number } = issue_number_shape
93
93
  const UNREADABLE_PR_MESSAGE = 'The pull request could not be read for branch '
94
94
 
95
95
  function needs_reclaim(tree: TreeState): boolean {
@@ -156,7 +156,7 @@ function to_reason(verdict: PreflightVerdict, tree: TreeState, child: ChildState
156
156
  }
157
157
 
158
158
  // **`-u` is not optional.** What an interrupted run leaves almost always includes a new `*.test.ts`,
159
- // which is untracked, and a stash without it leaves exactly those files for the `git switch` that
159
+ // which is untracked, and a stash without it leaves exactly those files for the checkout that
160
160
  // follows to refuse over. **And the stash is recorded rather than popped**, which is what sets this
161
161
  // stash apart from every other sanctioned one: the work belongs to a run that is gone, so the Issue
162
162
  // comment is the only thing that can ever bring it back.
@@ -169,14 +169,14 @@ function reclaim_steps(tree: TreeState, issue: string): Array<string> {
169
169
 
170
170
  return [
171
171
  `git stash push -u -m "${STASH_LABEL_PREFIX}${issue}"`,
172
- `Record the stash on #${issue} — the comment is what gets it popped; nothing pops it for you.`,
172
+ `Record the stash on ${session_cite.issue(issue)} — the comment is what gets it popped; nothing pops it for you.`,
173
173
  ]
174
174
  }
175
175
 
176
176
  function reclaim_advice(tree: TreeState, issue: string): string {
177
177
  return [
178
178
  ...reclaim_steps(tree, issue),
179
- `git switch ${tree.default_branch} && git pull`,
179
+ 'pnpm josh ms',
180
180
  'Then ask this command again: it is re-askable, and the clean tree gets its own answer.',
181
181
  ].join('\n')
182
182
  }
@@ -202,11 +202,7 @@ function decide(tree: TreeState, child: ChildState, issue: string): PreflightDec
202
202
  }
203
203
 
204
204
  function read_pr_field(raw: string): string | undefined {
205
- try {
206
- return pr_info_schema.parse(JSON.parse(raw)).state
207
- } catch {
208
- return undefined
209
- }
205
+ return json_value.parse_with(raw, pr_info_schema)?.state
210
206
  }
211
207
 
212
208
  function to_pr_state(raw: string): PrState {
@@ -227,11 +223,11 @@ async function read_tree_state(): Promise<TreeState> {
227
223
 
228
224
  // **An unreadable `gh` is not an absent pull request.** `pr_view` folds both into `''` and cannot tell
229
225
  // them apart, so the existence question is asked through `pr_exists`, which throws on a lookup it
230
- // could not complete (joshuafolkken/kit#1048). That throw reaches the CLI as `unknown`; without it a
226
+ // could not complete. That throw reaches the CLI as `unknown`; without it a
231
227
  // rate-limited or logged-out `gh` turns a **merged** pull request into `resume`, and the run commits
232
228
  // on top of work somebody already landed — the exact hazard `park` exists for.
233
- // **The second half of the same guard.** `pr_view` throws on a read it could not complete
234
- // (joshuafolkken/kit#3263), but the two are separate round trips, so a lookup that answers empty
229
+ // **The second half of the same guard.** `pr_view` throws on a read it could not complete,
230
+ // but the two are separate round trips, so a lookup that answers empty
235
231
  // between them would still put a **merged** pull request back through `NO_PR` and out as `resume`.
236
232
  // An empty answer for a branch `pr_exists` has just confirmed is therefore a failed read by
237
233
  // construction, and it throws rather than answering.
@@ -335,9 +331,9 @@ interface CandidateContext {
335
331
  }
336
332
 
337
333
  // **A branch with no pull request, no commit beyond the default branch and no uncommitted change in
338
- // its lane holds no work** (joshuafolkken/kit#2855). A lane that ended before implementing — an
339
- // operational issue with no code change — leaves exactly that behind, and reading its mere existence
340
- // as a partial implementation sent the next `fullrun #N` to `resume` over nothing. A branch with a
334
+ // its lane holds no work**. A lane that ended before implementing — an operational issue with no code
335
+ // change — leaves exactly that behind, and reading its mere existence as a partial implementation
336
+ // would send the next `fullrun #N` to `resume` over nothing. A branch with a
341
337
  // pull request is never counted: whatever its commits, the pull request is the state the verdict is
342
338
  // decided on.
343
339
  async function read_candidate(