@joshuafolkken/kit 1.1229.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (939) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +24 -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 +27 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +18 -29
  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/.github/workflows/publish.yml +2 -0
  42. package/.vscode/tasks.json +14 -0
  43. package/CLAUDE.md +10 -61
  44. package/README.md +38 -57
  45. package/SECURITY.md +1 -1
  46. package/dist/CLAUDE.md +10 -61
  47. package/dist/commands/document-section-cli.js +42 -10
  48. package/dist/config-merge/index.js +11 -2
  49. package/dist/hooks/audit-provision.js +2 -2
  50. package/dist/hooks/batch-guard.js +7 -7
  51. package/dist/hooks/{chunk-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
  52. package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
  53. package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
  54. package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
  55. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  56. package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
  57. package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
  58. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  59. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  60. package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
  61. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  62. package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
  63. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  64. package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
  65. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  66. package/dist/hooks/codex-hook-adapter.js +26 -21
  67. package/dist/hooks/duplicate-read-guard.js +8 -8
  68. package/dist/hooks/format-edited.js +4 -4
  69. package/dist/hooks/inputs.json +213 -197
  70. package/dist/hooks/investigation-guard.js +8 -8
  71. package/dist/hooks/pretool-guard.js +15 -15
  72. package/dist/hooks/session-lang.js +406 -8
  73. package/dist/hooks/stop-guard.js +122 -201
  74. package/dist/josh.js +540 -137
  75. package/dist/version/index.js +15 -13
  76. package/eslint/base.js +43 -5
  77. package/eslint/rules/english-only-prose.js +3 -3
  78. package/eslint/rules/import.js +12 -0
  79. package/eslint/rules/namespace-object-export.js +2 -2
  80. package/package.json +16 -10
  81. package/pnpm-workspace.yaml +2 -4
  82. package/prompts/coding-standards.md +14 -48
  83. package/prompts/collaboration-workflow/file-edits.md +1 -1
  84. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  85. package/prompts/collaboration-workflow/issue-template.md +4 -10
  86. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  87. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  88. package/prompts/collaboration-workflow/overview.md +1 -1
  89. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  90. package/prompts/collaboration-workflow/principles.md +21 -3
  91. package/prompts/collaboration-workflow/report-format.md +16 -29
  92. package/prompts/collaboration-workflow/residency.md +1 -1
  93. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  94. package/prompts/collaboration-workflow/shell-body.md +3 -23
  95. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  96. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  97. package/prompts/refactoring.md +1 -1
  98. package/prompts/review-rubric.md +3 -22
  99. package/prompts/review.md +15 -38
  100. package/prompts/testing-guide.md +2 -4
  101. package/scripts/adopt/adopt-logic.ts +5 -5
  102. package/scripts/adopt/adopt-toolkits.ts +4 -5
  103. package/scripts/adopt/adopt.ts +2 -3
  104. package/scripts/agent/agent-argv.ts +7 -7
  105. package/scripts/agent/agent-diagnostics.ts +2 -2
  106. package/scripts/agent/agent-exit-record.ts +1 -1
  107. package/scripts/agent/agent-headless.ts +1 -1
  108. package/scripts/agent/agent-launch-environment.ts +6 -1
  109. package/scripts/agent/agent-role-profile.ts +49 -22
  110. package/scripts/agent/agent-session-role.ts +32 -0
  111. package/scripts/agent/api-outage.ts +1 -1
  112. package/scripts/agent/claude-agent-argv.ts +4 -4
  113. package/scripts/agent/claude-result-event.ts +4 -4
  114. package/scripts/agent/codex-hooks.ts +2 -2
  115. package/scripts/agent/interactive-ask.ts +3 -6
  116. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  117. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  118. package/scripts/backlog/backlog-arrival.ts +54 -17
  119. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  120. package/scripts/backlog/backlog-budget.ts +17 -24
  121. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  122. package/scripts/backlog/backlog-drive-args.ts +5 -4
  123. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  124. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  125. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  126. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  127. package/scripts/backlog/backlog-drive-named.ts +39 -9
  128. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  129. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  130. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  131. package/scripts/backlog/backlog-drive.ts +43 -28
  132. package/scripts/backlog/backlog-idle.ts +88 -0
  133. package/scripts/backlog/backlog-named.ts +11 -15
  134. package/scripts/backlog/backlog-next.ts +26 -30
  135. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  136. package/scripts/backlog/backlog-offer.ts +7 -7
  137. package/scripts/backlog/backlog-overlap.ts +178 -0
  138. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  139. package/scripts/backlog/backlog-plan-read.ts +111 -0
  140. package/scripts/backlog/backlog-plan.ts +11 -10
  141. package/scripts/backlog/backlog-pool.ts +13 -14
  142. package/scripts/backlog/backlog-rank.ts +11 -11
  143. package/scripts/backlog/backlog-ready.ts +15 -10
  144. package/scripts/backlog/backlog-scope.ts +14 -15
  145. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  146. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  147. package/scripts/backlog/backlog-stalled.ts +5 -6
  148. package/scripts/backlog/backlog-waves.ts +4 -4
  149. package/scripts/backlog/backlogrun-args.ts +74 -0
  150. package/scripts/backlog/backlogrun-cli.ts +113 -0
  151. package/scripts/backlog/backlogrun-launch.ts +178 -0
  152. package/scripts/behavior/behavior-assertion.ts +6 -8
  153. package/scripts/behavior/behavior-cli.ts +1 -1
  154. package/scripts/behavior/behavior-rules.ts +3 -3
  155. package/scripts/build/build-claude-md.ts +4 -4
  156. package/scripts/build/build-codex-hooks.ts +2 -2
  157. package/scripts/build/build-commands.ts +1 -1
  158. package/scripts/build/build-hooks.ts +5 -5
  159. package/scripts/build/build.ts +1 -1
  160. package/scripts/build/hook-bundle-stamp.ts +109 -7
  161. package/scripts/build/local-bin.ts +2 -2
  162. package/scripts/cases/cases-cli.ts +1 -1
  163. package/scripts/cases/cases-logic.ts +2 -2
  164. package/scripts/ci/composite-actions.ts +1 -2
  165. package/scripts/ci/pr-classification.ts +2 -2
  166. package/scripts/claude/workflow-destination.ts +1 -1
  167. package/scripts/clone/clone-aggregate.ts +1 -1
  168. package/scripts/clone/clone-fingerprint.ts +1 -1
  169. package/scripts/clone/clone-scan-cli.ts +1 -1
  170. package/scripts/clone/clone-scan.ts +1 -1
  171. package/scripts/config-merge/index.ts +1 -1
  172. package/scripts/config-merge/json-format.ts +1 -3
  173. package/scripts/config-merge/patch-json-array.ts +90 -0
  174. package/scripts/config-merge/patch-json-key.ts +6 -3
  175. package/scripts/config-merge/patch-json-list.ts +1 -1
  176. package/scripts/cost-runtime/codex-usage.ts +1 -1
  177. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  178. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  179. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  180. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  181. package/scripts/cost-runtime/cost-cli.ts +14 -11
  182. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  183. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  184. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  185. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  186. package/scripts/cost-runtime/cost-usage.ts +6 -7
  187. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  188. package/scripts/cost-runtime/own-session.ts +1 -1
  189. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  190. package/scripts/delegation/delegation-cli.ts +4 -4
  191. package/scripts/delegation/delegation-policy.ts +13 -15
  192. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  193. package/scripts/delegation/fanout-cli.ts +1 -1
  194. package/scripts/delegation/fanout.ts +1 -1
  195. package/scripts/delegation/investigation-guard.ts +18 -22
  196. package/scripts/delegation/investigation-reads.ts +48 -238
  197. package/scripts/discovery/repo-discovery.ts +1 -1
  198. package/scripts/discovery/repo-map-logic.ts +1 -2
  199. package/scripts/discovery/repo-origin.ts +3 -3
  200. package/scripts/discovery/repo-party-cli.ts +2 -2
  201. package/scripts/discovery/repo-party.ts +2 -2
  202. package/scripts/doctor/doctor-consumer.ts +1 -1
  203. package/scripts/doctor/doctor-io.ts +6 -7
  204. package/scripts/doctor/doctor-logic.ts +1 -1
  205. package/scripts/doctor/doctor-ports.ts +1 -1
  206. package/scripts/doctor/doctor.ts +8 -9
  207. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  208. package/scripts/document/bash-output-cap.ts +5 -7
  209. package/scripts/document/capped-print-part.ts +1 -1
  210. package/scripts/document/capped-print.ts +1 -1
  211. package/scripts/document/document-byte-budget.ts +33 -64
  212. package/scripts/document/document-byte-check.ts +4 -4
  213. package/scripts/document/document-reachability.ts +7 -8
  214. package/scripts/document/document-read-cli.ts +2 -2
  215. package/scripts/document/document-scan.ts +26 -2
  216. package/scripts/document/document-section-cli.ts +6 -8
  217. package/scripts/document/document-section.ts +8 -12
  218. package/scripts/document/edit-files-cli.ts +3 -4
  219. package/scripts/document/entry-read-budget.ts +8 -70
  220. package/scripts/document/entry-read-set.ts +51 -34
  221. package/scripts/document/lane-child-read-set.ts +9 -9
  222. package/scripts/document/read-files-cli.ts +1 -2
  223. package/scripts/document/read-set-cli.ts +16 -19
  224. package/scripts/document/read-set-cost.ts +4 -4
  225. package/scripts/document/read-set-point-of-use.ts +28 -38
  226. package/scripts/document/read-set-pricing.ts +1 -1
  227. package/scripts/document/read-set-trim.ts +3 -3
  228. package/scripts/document/resident-budget.ts +8 -10
  229. package/scripts/epic/epic-add-body.ts +15 -18
  230. package/scripts/epic/epic-add-plan.ts +26 -28
  231. package/scripts/epic/epic-add.ts +32 -25
  232. package/scripts/epic/epic-audit-checks.ts +27 -37
  233. package/scripts/epic/epic-audit-cli.ts +21 -22
  234. package/scripts/epic/epic-audit-orphans.ts +16 -17
  235. package/scripts/epic/epic-audit-rationale.ts +10 -15
  236. package/scripts/epic/epic-audit-report.ts +2 -5
  237. package/scripts/epic/epic-audit.ts +18 -14
  238. package/scripts/epic/epic-body.ts +10 -10
  239. package/scripts/epic/epic-bundle-cli.ts +36 -34
  240. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  241. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  242. package/scripts/epic/epic-bundle-poll.ts +1 -1
  243. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  244. package/scripts/epic/epic-bundle.ts +19 -20
  245. package/scripts/epic/epic-busy.ts +44 -21
  246. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  247. package/scripts/epic/epic-chains.ts +18 -23
  248. package/scripts/epic/epic-classify.ts +11 -12
  249. package/scripts/epic/epic-cli-argv.ts +5 -6
  250. package/scripts/epic/epic-cli-remove.ts +9 -4
  251. package/scripts/epic/epic-cli.ts +38 -26
  252. package/scripts/epic/epic-close-comment.ts +14 -15
  253. package/scripts/epic/epic-close.ts +25 -29
  254. package/scripts/epic/epic-cross-repo.ts +18 -21
  255. package/scripts/epic/epic-decision.ts +14 -18
  256. package/scripts/epic/epic-fetch.ts +25 -31
  257. package/scripts/epic/epic-graph.ts +15 -17
  258. package/scripts/epic/epic-index.ts +14 -16
  259. package/scripts/epic/epic-issue.ts +9 -11
  260. package/scripts/epic/epic-label-age.ts +74 -0
  261. package/scripts/epic/epic-lane-offer.ts +35 -24
  262. package/scripts/epic/epic-nested.ts +1 -1
  263. package/scripts/epic/epic-next-read.ts +8 -8
  264. package/scripts/epic/epic-next-views.ts +12 -12
  265. package/scripts/epic/epic-next.ts +29 -33
  266. package/scripts/epic/epic-outside-blocker.ts +11 -10
  267. package/scripts/epic/epic-parse.ts +22 -24
  268. package/scripts/epic/epic-promote.ts +3 -2
  269. package/scripts/epic/epic-rank.ts +1 -1
  270. package/scripts/epic/epic-read.ts +10 -8
  271. package/scripts/epic/epic-reconcile.ts +8 -6
  272. package/scripts/epic/epic-reference.ts +5 -4
  273. package/scripts/epic/epic-relation-recheck.ts +10 -11
  274. package/scripts/epic/epic-relations.ts +9 -8
  275. package/scripts/epic/epic-remove-plan.ts +4 -5
  276. package/scripts/epic/epic-remove.ts +7 -5
  277. package/scripts/epic/epic-report.ts +18 -20
  278. package/scripts/epic/epic-run.ts +6 -5
  279. package/scripts/epic/epic-sections.ts +2 -2
  280. package/scripts/epic/epic-shape.ts +3 -3
  281. package/scripts/epic/epic-solo-stale.ts +3 -2
  282. package/scripts/epic/epic-solo.ts +8 -8
  283. package/scripts/epic/epic-triage.ts +5 -4
  284. package/scripts/epic/epic-validate.ts +8 -7
  285. package/scripts/epic/epic.ts +5 -5
  286. package/scripts/exports/unused-members-cli.ts +1 -1
  287. package/scripts/followup/followup-issue-number.ts +1 -2
  288. package/scripts/followup/git-followup-cleanup.ts +6 -7
  289. package/scripts/followup/git-followup-finish.ts +11 -13
  290. package/scripts/followup/git-followup-flush.ts +11 -7
  291. package/scripts/followup/git-followup-issue-close.ts +16 -13
  292. package/scripts/followup/git-followup-label.ts +9 -6
  293. package/scripts/followup/git-followup-merged.ts +1 -1
  294. package/scripts/followup/git-followup-pending.ts +7 -9
  295. package/scripts/followup/git-followup-stages.ts +28 -17
  296. package/scripts/followup/git-followup-workflow.ts +19 -21
  297. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  298. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  299. package/scripts/followup/git-pr-followup.ts +18 -17
  300. package/scripts/gate/core-admission.ts +162 -0
  301. package/scripts/gate/core-budget.ts +134 -91
  302. package/scripts/gate/gate-ledger.ts +114 -0
  303. package/scripts/gate/gate-log.ts +7 -9
  304. package/scripts/gate/gate-plan.ts +103 -35
  305. package/scripts/gate/gate-report.ts +39 -21
  306. package/scripts/gate/gate-skip.ts +11 -13
  307. package/scripts/gate/gate-steps.ts +5 -1
  308. package/scripts/gate/gate-tree.ts +3 -4
  309. package/scripts/gate/hook-gate-reuse.ts +9 -9
  310. package/scripts/gate/machine-capacity.ts +313 -0
  311. package/scripts/gate/pre-commit-type-check.ts +4 -4
  312. package/scripts/gate/project-checks.ts +12 -4
  313. package/scripts/gate/scoped-green.ts +11 -18
  314. package/scripts/gate/type-check-command.ts +2 -2
  315. package/scripts/gate/type-check-step.ts +4 -4
  316. package/scripts/gate/verification-gate.ts +60 -53
  317. package/scripts/gh/gh-spawn.ts +2 -2
  318. package/scripts/gh/git-ai-review-scan.ts +3 -2
  319. package/scripts/gh/git-gh-api-path.ts +10 -11
  320. package/scripts/gh/git-gh-exec.ts +43 -48
  321. package/scripts/gh/git-gh-failure.ts +6 -9
  322. package/scripts/gh/git-gh-helpers.ts +1 -1
  323. package/scripts/gh/git-gh-issue-list.ts +15 -19
  324. package/scripts/gh/git-gh-issue-read.ts +43 -60
  325. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  326. package/scripts/gh/git-gh-issue-write.ts +52 -40
  327. package/scripts/gh/git-gh-issue.ts +23 -24
  328. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  329. package/scripts/gh/git-gh-pr-read.ts +46 -50
  330. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  331. package/scripts/gh/git-gh-pr-review.ts +2 -2
  332. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  333. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  334. package/scripts/gh/git-gh-pr.ts +16 -16
  335. package/scripts/gh/git-gh-reachability.ts +11 -12
  336. package/scripts/gh/git-gh-repo.ts +2 -3
  337. package/scripts/gh/git-gh-rest-state.ts +1 -1
  338. package/scripts/gh/git-pr-ai-review.ts +6 -5
  339. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  340. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  341. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  342. package/scripts/gh/git-pr-checks.ts +20 -23
  343. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  344. package/scripts/gh/git-pr-confirmation.ts +5 -5
  345. package/scripts/gh/git-pr-managed-config.ts +7 -9
  346. package/scripts/gh/git-pr-messages.ts +1 -1
  347. package/scripts/gh/git-pr.ts +15 -16
  348. package/scripts/gh/github-issue-url.ts +8 -9
  349. package/scripts/git/base-tree.ts +66 -0
  350. package/scripts/git/change-base.ts +42 -2
  351. package/scripts/git/changed-file-scope.ts +5 -5
  352. package/scripts/git/changed-paths.ts +1 -2
  353. package/scripts/git/constants.ts +2 -2
  354. package/scripts/git/git-branch.ts +1 -1
  355. package/scripts/git/git-closes-keyword.ts +3 -3
  356. package/scripts/git/git-command.ts +53 -41
  357. package/scripts/git/git-common-directory.ts +3 -3
  358. package/scripts/git/git-diff-reads.ts +14 -15
  359. package/scripts/git/git-error.ts +1 -1
  360. package/scripts/git/git-execa-error.ts +1 -2
  361. package/scripts/git/git-issue.ts +10 -8
  362. package/scripts/git/git-location-environment.ts +3 -4
  363. package/scripts/git/git-ls-remote.ts +6 -8
  364. package/scripts/git/git-pre-push-hook.ts +11 -10
  365. package/scripts/git/git-preflight.ts +5 -5
  366. package/scripts/git/git-push-transport.ts +2 -2
  367. package/scripts/git/git-remote-branch.ts +1 -2
  368. package/scripts/git/git-schemas.ts +16 -23
  369. package/scripts/git/git-spawn-sync.ts +1 -1
  370. package/scripts/git/git-spawn.ts +37 -14
  371. package/scripts/git/git-ssh-keepalive.ts +12 -5
  372. package/scripts/git/git-staging.ts +7 -8
  373. package/scripts/git/git-workflow.ts +1 -1
  374. package/scripts/git/git-worktree.ts +35 -27
  375. package/scripts/git/gone-branch.ts +2 -2
  376. package/scripts/git/listing-cutoff.ts +1 -2
  377. package/scripts/git/lockfile-sync.ts +65 -0
  378. package/scripts/git/main-merge-guard.ts +1 -2
  379. package/scripts/git/main-merge.ts +7 -7
  380. package/scripts/git/main-sync.ts +23 -8
  381. package/scripts/git/parse-json-array.ts +18 -23
  382. package/scripts/git/repository-lock.ts +34 -2
  383. package/scripts/git/stash/git-stash.ts +4 -5
  384. package/scripts/git/stash/stash-orphans.ts +5 -3
  385. package/scripts/git/stash/stash-pop-args.ts +1 -1
  386. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  387. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  388. package/scripts/hooks/batch-guard.ts +11 -13
  389. package/scripts/hooks/check-commit-message.ts +12 -9
  390. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  391. package/scripts/hooks/edited-cspell.ts +3 -4
  392. package/scripts/hooks/format-edited-cli.ts +1 -1
  393. package/scripts/hooks/format-edited-file.ts +11 -17
  394. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  395. package/scripts/hooks/pre-push-unit.ts +10 -14
  396. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  397. package/scripts/hooks/pretool-guard.ts +93 -18
  398. package/scripts/hooks/reserved-run.ts +2 -2
  399. package/scripts/hooks/step-zero-notice.ts +1 -1
  400. package/scripts/hooks/stop-guard.ts +21 -10
  401. package/scripts/init/basic-path-migration.ts +2 -2
  402. package/scripts/init/claude-kit-only-settings.ts +2 -2
  403. package/scripts/init/claude-plugin-config.ts +2 -2
  404. package/scripts/init/distributed-paths.ts +4 -4
  405. package/scripts/init/hook-command-rewrite.ts +3 -3
  406. package/scripts/init/hook-launch.ts +5 -5
  407. package/scripts/init/init-actions.ts +13 -0
  408. package/scripts/init/init-ai-copy.ts +11 -11
  409. package/scripts/init/init-bootstrap.ts +3 -3
  410. package/scripts/init/init-copy-content.ts +4 -4
  411. package/scripts/init/init-logic-json-merge.ts +7 -9
  412. package/scripts/init/init-logic-migrate.ts +1 -1
  413. package/scripts/init/init-logic-templates.ts +1 -1
  414. package/scripts/init/init-logic-workspace.ts +4 -4
  415. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  416. package/scripts/init/init-logic.ts +19 -22
  417. package/scripts/init/init.ts +12 -8
  418. package/scripts/init/kit-base-preset.ts +1 -1
  419. package/scripts/init/kit-setup-state.ts +1 -1
  420. package/scripts/init/kit-written-paths.ts +1 -2
  421. package/scripts/init/package-manager-pin.ts +35 -0
  422. package/scripts/init/project-profile-cli.ts +1 -1
  423. package/scripts/init/project-profile.ts +3 -3
  424. package/scripts/init/session-language-environment.ts +1 -1
  425. package/scripts/init/start-exec.ts +3 -4
  426. package/scripts/init/start-plan.ts +2 -2
  427. package/scripts/init/start-setup-pr.ts +3 -2
  428. package/scripts/init/start-steps.ts +2 -2
  429. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  430. package/scripts/init/vscode-tasks.ts +62 -0
  431. package/scripts/issue/baseline-measure.ts +2 -2
  432. package/scripts/issue/behavior-change-lint.ts +2 -2
  433. package/scripts/issue/defect-rate-cli.ts +6 -7
  434. package/scripts/issue/defect-rate.ts +37 -27
  435. package/scripts/issue/git-next-issues.ts +9 -8
  436. package/scripts/issue/issue-auto-ok.ts +49 -11
  437. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  438. package/scripts/issue/issue-backlinks.ts +6 -6
  439. package/scripts/issue/issue-cite-cli.ts +20 -18
  440. package/scripts/issue/issue-cite.ts +18 -8
  441. package/scripts/issue/issue-closing-pr.ts +4 -4
  442. package/scripts/issue/issue-comment-cli.ts +6 -4
  443. package/scripts/issue/issue-file-cli.ts +75 -15
  444. package/scripts/issue/issue-file-fold.ts +155 -0
  445. package/scripts/issue/issue-file.ts +14 -6
  446. package/scripts/issue/issue-fold-cli.ts +14 -9
  447. package/scripts/issue/issue-fold.ts +23 -8
  448. package/scripts/issue/issue-labels.ts +46 -37
  449. package/scripts/issue/issue-lint-cli.ts +2 -2
  450. package/scripts/issue/issue-lint.ts +1 -1
  451. package/scripts/issue/issue-merged.ts +10 -4
  452. package/scripts/issue/issue-number-shape.ts +27 -0
  453. package/scripts/issue/issue-rank.ts +1 -1
  454. package/scripts/issue/issue-read-cli.ts +4 -5
  455. package/scripts/issue/issue-read.ts +4 -5
  456. package/scripts/issue/issue-reference.ts +5 -5
  457. package/scripts/issue/issue-release-cli.ts +165 -0
  458. package/scripts/issue/issue-release.ts +58 -0
  459. package/scripts/issue/issue-report-failures.ts +7 -4
  460. package/scripts/issue/issue-scout-cli.ts +11 -11
  461. package/scripts/issue/issue-scout-closed.ts +4 -4
  462. package/scripts/issue/issue-scout.ts +4 -5
  463. package/scripts/issue/issue-state-cli.ts +17 -10
  464. package/scripts/issue/issue-state.ts +12 -13
  465. package/scripts/issue/issue-wip.ts +7 -7
  466. package/scripts/issue/markdown-section.ts +3 -3
  467. package/scripts/issue/measure-rerun-cli.ts +10 -9
  468. package/scripts/issue/reproduction-measure.ts +3 -3
  469. package/scripts/issue/session-cite.ts +56 -0
  470. package/scripts/josh/agent-session-environment.ts +10 -8
  471. package/scripts/josh/cli-body.ts +2 -2
  472. package/scripts/josh/command-suggest.ts +1 -1
  473. package/scripts/josh/file-map-stamp.ts +20 -23
  474. package/scripts/josh/hook-decision.ts +24 -28
  475. package/scripts/josh/josh-command-map.ts +4 -1
  476. package/scripts/josh/josh-command-types.ts +32 -34
  477. package/scripts/josh/josh-commands-ai.ts +6 -6
  478. package/scripts/josh/josh-commands-backlog.ts +15 -3
  479. package/scripts/josh/josh-commands-clone.ts +1 -1
  480. package/scripts/josh/josh-commands-development.ts +33 -4
  481. package/scripts/josh/josh-commands-document.ts +3 -3
  482. package/scripts/josh/josh-commands-guard.ts +3 -3
  483. package/scripts/josh/josh-commands-issue.ts +11 -5
  484. package/scripts/josh/josh-commands-lane.ts +16 -5
  485. package/scripts/josh/josh-commands-lint.ts +1 -1
  486. package/scripts/josh/josh-commands-maintenance.ts +2 -2
  487. package/scripts/josh/josh-commands-run.ts +20 -6
  488. package/scripts/josh/josh-commands-split.ts +1 -2
  489. package/scripts/josh/josh-commands-versioning.ts +5 -5
  490. package/scripts/josh/josh-commands-workflow.ts +30 -22
  491. package/scripts/josh/josh-environment-file.ts +1 -1
  492. package/scripts/josh/josh-in-process.ts +3 -3
  493. package/scripts/josh/josh-logic.ts +10 -10
  494. package/scripts/josh/josh-run.ts +3 -3
  495. package/scripts/josh/josh-verdict.ts +9 -12
  496. package/scripts/josh/josh.ts +3 -3
  497. package/scripts/josh/kit-only.ts +2 -2
  498. package/scripts/josh/path-decision.ts +3 -3
  499. package/scripts/josh/platform-temporary.ts +7 -5
  500. package/scripts/josh/process-identity.ts +24 -6
  501. package/scripts/josh/process-owner.ts +4 -4
  502. package/scripts/josh/session-language-cli.ts +53 -11
  503. package/scripts/josh/session-language.ts +1 -1
  504. package/scripts/josh/stamp-file.ts +48 -29
  505. package/scripts/josh/stamp-record.ts +57 -0
  506. package/scripts/lane/lane-await.ts +35 -11
  507. package/scripts/lane/lane-cache.ts +6 -6
  508. package/scripts/lane/lane-capacity.ts +32 -17
  509. package/scripts/lane/lane-child-invocation.ts +17 -15
  510. package/scripts/lane/lane-child-marker.ts +12 -12
  511. package/scripts/lane/lane-cli.ts +20 -13
  512. package/scripts/lane/lane-close.ts +6 -6
  513. package/scripts/lane/lane-dispatch.ts +61 -72
  514. package/scripts/lane/lane-environment.ts +5 -5
  515. package/scripts/lane/lane-guard-policy.ts +7 -21
  516. package/scripts/lane/lane-handoff.ts +2 -2
  517. package/scripts/lane/lane-install.ts +9 -10
  518. package/scripts/lane/lane-launch-cli.ts +13 -8
  519. package/scripts/lane/lane-ledger.ts +73 -11
  520. package/scripts/lane/lane-leftover.ts +44 -30
  521. package/scripts/lane/lane-limit-cli.ts +160 -0
  522. package/scripts/lane/lane-limit-override.ts +74 -0
  523. package/scripts/lane/lane-load.ts +19 -68
  524. package/scripts/lane/lane-measure-cli.ts +15 -25
  525. package/scripts/lane/lane-occupancy.ts +6 -4
  526. package/scripts/lane/lane-open.ts +25 -24
  527. package/scripts/lane/lane-output.ts +4 -3
  528. package/scripts/lane/lane-paths.ts +22 -8
  529. package/scripts/lane/lane-phase.ts +33 -0
  530. package/scripts/lane/lane-reap.ts +2 -2
  531. package/scripts/lane/lane-registry.ts +27 -15
  532. package/scripts/lane/lane-relaunch.ts +9 -9
  533. package/scripts/lane/lane-report.ts +5 -4
  534. package/scripts/lane/lane-resume.ts +2 -2
  535. package/scripts/lane/lane-sampler.ts +55 -0
  536. package/scripts/lane/lane-seed.ts +7 -7
  537. package/scripts/lane/lane-stage-stats.ts +135 -0
  538. package/scripts/lane/lane-start-point.ts +8 -11
  539. package/scripts/lane/lane-stats.ts +60 -15
  540. package/scripts/lane/lane-stray.ts +140 -0
  541. package/scripts/lane/lane-vacant.ts +1 -1
  542. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  543. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  544. package/scripts/lane/openai-review-broker.ts +2 -4
  545. package/scripts/lib/ancestor-directories.ts +1 -1
  546. package/scripts/lib/bounded-pool.ts +2 -2
  547. package/scripts/lib/buffered-process.ts +4 -6
  548. package/scripts/lib/caddy-logs.sh +0 -0
  549. package/scripts/lib/cli-flags.ts +39 -6
  550. package/scripts/lib/error-message.ts +1 -1
  551. package/scripts/lib/json-value.ts +17 -3
  552. package/scripts/lib/poll.ts +1 -1
  553. package/scripts/lib/status-icons.ts +3 -3
  554. package/scripts/lib/timed-fetch.ts +1 -1
  555. package/scripts/lib/timeouts.ts +1 -1
  556. package/scripts/lines/bytes-command.ts +3 -4
  557. package/scripts/lines/effective-limit.ts +25 -12
  558. package/scripts/lines/line-budget.ts +47 -55
  559. package/scripts/lines/line-targets.ts +6 -2
  560. package/scripts/lines/lines-command.ts +3 -3
  561. package/scripts/lint/cspell-cached.ts +1 -1
  562. package/scripts/lint/cycle-recheck.ts +122 -0
  563. package/scripts/lint/format.ts +1 -2
  564. package/scripts/lint/lint-parallel.ts +34 -19
  565. package/scripts/lint/lint-related-scope.ts +25 -15
  566. package/scripts/lint/lint-related.ts +6 -7
  567. package/scripts/managed-marker/index.ts +1 -1
  568. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  569. package/scripts/notify/git-notify.ts +9 -7
  570. package/scripts/notify/telegram-notify.ts +53 -37
  571. package/scripts/notify/telegram-test-logic.ts +3 -3
  572. package/scripts/notify/telegram-test.ts +45 -30
  573. package/scripts/observations/observation-ledger-home.ts +14 -8
  574. package/scripts/observations/observation-ledger-line.ts +3 -2
  575. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  576. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  577. package/scripts/observations/observation-ledger.ts +14 -15
  578. package/scripts/observations/observation-record-cli.ts +83 -0
  579. package/scripts/observations/observation-record.ts +91 -0
  580. package/scripts/observations/observations-flush-cli.ts +1 -1
  581. package/scripts/observations/observations-flush-landing.ts +7 -6
  582. package/scripts/observations/observations-flush.ts +26 -27
  583. package/scripts/overrides/overrides-check.ts +18 -8
  584. package/scripts/package/package-scout-cli.ts +1 -1
  585. package/scripts/package/package-scout-format.ts +2 -2
  586. package/scripts/package/package-scout.ts +1 -1
  587. package/scripts/propagate/propagate-git-failure.ts +1 -1
  588. package/scripts/propagate/propagate-git.ts +7 -7
  589. package/scripts/propagate/propagate-plan.ts +2 -2
  590. package/scripts/propagate/propagate-publish.ts +2 -3
  591. package/scripts/propagate/propagate-run.ts +5 -7
  592. package/scripts/propagate/propagate-select.ts +1 -1
  593. package/scripts/propagate/propagate-steps.ts +19 -20
  594. package/scripts/propagate/propagate-targets.ts +6 -10
  595. package/scripts/propagate/propagate.ts +5 -5
  596. package/scripts/refactor/import-graph.ts +1 -1
  597. package/scripts/refactor/refactor-lint.ts +4 -10
  598. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  599. package/scripts/refactor/refactor-scan.ts +2 -2
  600. package/scripts/refactor/refactor-targets.ts +1 -1
  601. package/scripts/release/github-release-cli.ts +25 -3
  602. package/scripts/release/github-release-environment.ts +1 -0
  603. package/scripts/release/github-release-runs.ts +115 -0
  604. package/scripts/release/github-release.ts +13 -67
  605. package/scripts/release/release-cli.ts +21 -4
  606. package/scripts/release/release-history.ts +6 -10
  607. package/scripts/release/release-plan.ts +3 -3
  608. package/scripts/release/release-progress.ts +3 -4
  609. package/scripts/release/release-publish.ts +8 -9
  610. package/scripts/release/release-scope-cli.ts +8 -10
  611. package/scripts/release/release-tag.ts +6 -8
  612. package/scripts/release/release-worktree.ts +5 -5
  613. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  614. package/scripts/repo/auto-merge-setting.ts +1 -1
  615. package/scripts/repo/repo-setting.ts +4 -4
  616. package/scripts/repo/repository-labels.ts +1 -1
  617. package/scripts/repo/required-checks-logic.ts +3 -3
  618. package/scripts/repo/required-checks-report.ts +1 -1
  619. package/scripts/repo/ruleset-check-cli.ts +1 -1
  620. package/scripts/repo/ruleset-check.ts +1 -1
  621. package/scripts/report/report-format-reference.ts +26 -0
  622. package/scripts/report/report-lint-cli.ts +2 -2
  623. package/scripts/report/report-lint.ts +16 -2
  624. package/scripts/review/disposition-cli.ts +2 -2
  625. package/scripts/review/disposition-logic.ts +1 -1
  626. package/scripts/review/live-evidence.ts +9 -6
  627. package/scripts/review/review-attest-cli.ts +1 -2
  628. package/scripts/review/review-attest.ts +3 -3
  629. package/scripts/review/review-brief-cli.ts +19 -20
  630. package/scripts/review/review-brief.ts +29 -32
  631. package/scripts/review/review-checkout.ts +2 -2
  632. package/scripts/review/review-diff-parts.ts +3 -5
  633. package/scripts/review/review-diff-write.ts +1 -1
  634. package/scripts/review/review-finding-ledger.ts +7 -4
  635. package/scripts/review/review-findings-cli.ts +2 -2
  636. package/scripts/review/review-level.ts +4 -7
  637. package/scripts/review/review-record-cli.ts +73 -16
  638. package/scripts/review/review-record.ts +5 -4
  639. package/scripts/review/review-round2-cli.ts +2 -3
  640. package/scripts/review/review-round2.ts +13 -21
  641. package/scripts/review/review-stamps.ts +9 -71
  642. package/scripts/review/review-tree.ts +4 -5
  643. package/scripts/rules/bash-triggers.ts +4 -4
  644. package/scripts/rules/decision-oracle-batch.ts +5 -6
  645. package/scripts/rules/decision-oracle-stage.ts +1 -1
  646. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  647. package/scripts/rules/decision-oracle.ts +2 -2
  648. package/scripts/rules/delivered-rules.ts +61 -406
  649. package/scripts/rules/destructive-command.ts +2 -2
  650. package/scripts/rules/direct-filing.ts +4 -4
  651. package/scripts/rules/direct-pr-create.ts +2 -2
  652. package/scripts/rules/early-heartbeat.ts +15 -19
  653. package/scripts/rules/file-body.ts +5 -6
  654. package/scripts/rules/filing-cap.ts +6 -7
  655. package/scripts/rules/filing-offer.ts +1 -1
  656. package/scripts/rules/firing-point.ts +6 -6
  657. package/scripts/rules/gh-api.ts +2 -2
  658. package/scripts/rules/git-argv.ts +3 -3
  659. package/scripts/rules/git-force.ts +2 -2
  660. package/scripts/rules/hook-context-line.ts +31 -0
  661. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  662. package/scripts/rules/implementation-cut.ts +35 -32
  663. package/scripts/rules/index-guard.ts +2 -2
  664. package/scripts/rules/issue-citation.ts +7 -7
  665. package/scripts/rules/issue-comments.ts +21 -13
  666. package/scripts/rules/josh-git-bare.ts +2 -2
  667. package/scripts/rules/lane-background.ts +14 -16
  668. package/scripts/rules/lane-carry-conflict.ts +41 -5
  669. package/scripts/rules/lane-interactive-ask.ts +6 -9
  670. package/scripts/rules/lane-park.ts +12 -16
  671. package/scripts/rules/lane-split-park.ts +1 -2
  672. package/scripts/rules/lane-switch-main.ts +10 -13
  673. package/scripts/rules/last-prompt.ts +1 -1
  674. package/scripts/rules/oracle-consulted.ts +5 -5
  675. package/scripts/rules/oracle-firing.ts +6 -9
  676. package/scripts/rules/oracle-list-cli.ts +2 -2
  677. package/scripts/rules/permission-guards.ts +2 -2
  678. package/scripts/rules/piped-verification.ts +79 -9
  679. package/scripts/rules/poll-loop.ts +9 -11
  680. package/scripts/rules/pre-gate-cut.ts +33 -30
  681. package/scripts/rules/prior-comment-read.ts +3 -3
  682. package/scripts/rules/protected-files.ts +25 -13
  683. package/scripts/rules/raw-field-body.ts +3 -4
  684. package/scripts/rules/reply-language.ts +1 -1
  685. package/scripts/rules/rule-body-guard.ts +10 -12
  686. package/scripts/rules/rule-guard.ts +1 -1
  687. package/scripts/rules/rule-list.ts +51 -0
  688. package/scripts/rules/rule-registry-rows.ts +282 -0
  689. package/scripts/rules/rule-registry.ts +109 -0
  690. package/scripts/rules/rule-value-cache.ts +2 -2
  691. package/scripts/rules/rule-value-cli.ts +6 -4
  692. package/scripts/rules/rule-value.ts +61 -22
  693. package/scripts/rules/run-tail-rule.ts +11 -15
  694. package/scripts/rules/shell-body-trigger.ts +7 -7
  695. package/scripts/rules/shell-segments.ts +2 -4
  696. package/scripts/rules/stop-rules.ts +54 -41
  697. package/scripts/rules/tail-commands.ts +1 -1
  698. package/scripts/rules/test-declared-commit.ts +2 -2
  699. package/scripts/rules/third-party-write.ts +3 -3
  700. package/scripts/rules/worktree-guard.ts +12 -5
  701. package/scripts/run/add/run-add-cli.ts +165 -0
  702. package/scripts/run/add/run-add.ts +124 -0
  703. package/scripts/run/board/run-board-cli.ts +207 -0
  704. package/scripts/run/board/run-board-closed.ts +95 -0
  705. package/scripts/run/board/run-board-every.ts +60 -0
  706. package/scripts/run/board/run-board-fetch.ts +38 -0
  707. package/scripts/run/board/run-board-fit.ts +219 -0
  708. package/scripts/run/board/run-board-github.ts +162 -0
  709. package/scripts/run/board/run-board-header.ts +275 -0
  710. package/scripts/run/board/run-board-kind.ts +35 -0
  711. package/scripts/run/board/run-board-labels.ts +299 -0
  712. package/scripts/run/board/run-board-layout.ts +222 -0
  713. package/scripts/run/board/run-board-link.ts +31 -0
  714. package/scripts/run/board/run-board-machine.ts +198 -0
  715. package/scripts/run/board/run-board-notes.ts +103 -0
  716. package/scripts/run/board/run-board-phase.ts +136 -0
  717. package/scripts/run/board/run-board-plan.ts +129 -0
  718. package/scripts/run/board/run-board-read.ts +62 -0
  719. package/scripts/run/board/run-board-render-legend.ts +82 -0
  720. package/scripts/run/board/run-board-render-notes.ts +77 -0
  721. package/scripts/run/board/run-board-render-slot.ts +50 -0
  722. package/scripts/run/board/run-board-render.ts +407 -0
  723. package/scripts/run/board/run-board-scope.ts +17 -0
  724. package/scripts/run/board/run-board-screen.ts +43 -0
  725. package/scripts/run/board/run-board-span.ts +66 -0
  726. package/scripts/run/board/run-board-spin.ts +115 -0
  727. package/scripts/run/board/run-board-state.ts +113 -0
  728. package/scripts/run/board/run-board-status.ts +279 -0
  729. package/scripts/run/board/run-board-tick.ts +210 -0
  730. package/scripts/run/board/run-board-track.ts +22 -0
  731. package/scripts/run/board/run-board-usage-read.ts +255 -0
  732. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  733. package/scripts/run/board/run-board-usage-text.ts +80 -0
  734. package/scripts/run/board/run-board-usage.ts +165 -0
  735. package/scripts/run/carry/run-carry-added.ts +62 -0
  736. package/scripts/run/carry/run-carry-args.ts +25 -22
  737. package/scripts/run/carry/run-carry-change.ts +1 -1
  738. package/scripts/run/carry/run-carry-cli.ts +71 -48
  739. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  740. package/scripts/run/carry/run-carry-ended.ts +85 -0
  741. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  742. package/scripts/run/carry/run-carry-stash.ts +3 -2
  743. package/scripts/run/carry/run-carry-streak.ts +8 -10
  744. package/scripts/run/carry/run-carry.ts +85 -89
  745. package/scripts/run/cut/run-cut-args.ts +7 -7
  746. package/scripts/run/cut/run-cut-cli.ts +68 -37
  747. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  748. package/scripts/run/cut/run-cut-report.ts +37 -16
  749. package/scripts/run/cut/run-cut.ts +63 -77
  750. package/scripts/run/detached-launch.ts +35 -50
  751. package/scripts/run/entry/run-entry-cli.ts +48 -27
  752. package/scripts/run/entry/run-entry-stop.ts +7 -9
  753. package/scripts/run/entry/run-entry.ts +5 -6
  754. package/scripts/run/event/run-event-cli.ts +5 -6
  755. package/scripts/run/event/run-event-filed.ts +69 -0
  756. package/scripts/run/event/run-event-follow.ts +3 -3
  757. package/scripts/run/event/run-event-plan.ts +38 -0
  758. package/scripts/run/event/run-event-render.ts +10 -4
  759. package/scripts/run/event/run-event-scope.ts +47 -18
  760. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  761. package/scripts/run/event/run-event-stream.ts +172 -43
  762. package/scripts/run/event/run-event-watch.ts +4 -6
  763. package/scripts/run/hold/run-hold-cli.ts +65 -62
  764. package/scripts/run/hold/run-hold.ts +88 -46
  765. package/scripts/run/merge/run-merge-cli.ts +116 -77
  766. package/scripts/run/merge/run-merge-collect.ts +107 -0
  767. package/scripts/run/merge/run-merge-steps.ts +112 -65
  768. package/scripts/run/merge/run-merge-token.ts +30 -0
  769. package/scripts/run/merge/run-merge.ts +31 -22
  770. package/scripts/run/progress/run-progress-args.ts +4 -4
  771. package/scripts/run/progress/run-progress-cli.ts +39 -50
  772. package/scripts/run/progress/run-progress-clock.ts +25 -32
  773. package/scripts/run/progress/run-progress-config.ts +6 -9
  774. package/scripts/run/progress/run-progress-read.ts +9 -10
  775. package/scripts/run/progress/run-progress.ts +48 -53
  776. package/scripts/run/review/run-review-cli.ts +6 -6
  777. package/scripts/run/review/run-review-steps.ts +6 -6
  778. package/scripts/run/review/run-review.ts +9 -11
  779. package/scripts/run/run-cli-fault.ts +29 -0
  780. package/scripts/run/run-ending-cli.ts +3 -3
  781. package/scripts/run/run-ending.ts +10 -14
  782. package/scripts/run/run-halfrun-resume.ts +6 -8
  783. package/scripts/run/run-headless.ts +25 -12
  784. package/scripts/run/run-invocation.ts +17 -22
  785. package/scripts/run/run-label.ts +7 -5
  786. package/scripts/run/run-liveness-cli.ts +19 -6
  787. package/scripts/run/run-liveness.ts +27 -38
  788. package/scripts/run/run-next-cli.ts +5 -9
  789. package/scripts/run/run-next.ts +4 -5
  790. package/scripts/run/run-parent-cut-hook.ts +10 -12
  791. package/scripts/run/run-preflight.ts +25 -29
  792. package/scripts/run/run-prep-cli.ts +17 -13
  793. package/scripts/run/run-prep-locate.ts +4 -5
  794. package/scripts/run/run-prep.ts +7 -10
  795. package/scripts/run/run-prrun-resume.ts +2 -2
  796. package/scripts/run/run-report-cli.ts +4 -4
  797. package/scripts/run/run-report.ts +9 -14
  798. package/scripts/run/run-retrospective.ts +3 -3
  799. package/scripts/run/run-section.ts +42 -0
  800. package/scripts/run/run-stage-read.ts +2 -2
  801. package/scripts/run/run-stage.ts +6 -4
  802. package/scripts/run/run-status-cli.ts +7 -5
  803. package/scripts/run/run-status.ts +6 -7
  804. package/scripts/run/run-step-cli.ts +13 -15
  805. package/scripts/run/run-step.ts +62 -48
  806. package/scripts/run/run-stop-notify.ts +7 -8
  807. package/scripts/run/run-stranded-cli.ts +1 -1
  808. package/scripts/run/run-stranded-detect.ts +4 -4
  809. package/scripts/run/run-stranded.ts +11 -13
  810. package/scripts/run/run-tail-cli.ts +15 -16
  811. package/scripts/run/run-tail.ts +14 -33
  812. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  813. package/scripts/run/run-watcher-guard.ts +11 -12
  814. package/scripts/run/run-watcher-hook.ts +6 -12
  815. package/scripts/run/ship/run-ship-cli.ts +67 -33
  816. package/scripts/run/ship/run-ship-detach.ts +15 -13
  817. package/scripts/run/ship/run-ship-lock.ts +1 -1
  818. package/scripts/run/ship/run-ship-next.ts +7 -8
  819. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  820. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  821. package/scripts/run/ship/run-ship-probe.ts +4 -4
  822. package/scripts/run/ship/run-ship-return.ts +1 -1
  823. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  824. package/scripts/run/ship/run-ship-review.ts +12 -14
  825. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  826. package/scripts/run/ship/run-ship-stage.ts +80 -26
  827. package/scripts/run/ship/run-ship-steps.ts +26 -16
  828. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  829. package/scripts/run/ship/run-ship-sync.ts +9 -8
  830. package/scripts/run/ship/run-ship.ts +17 -32
  831. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  832. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  833. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  834. package/scripts/run/tidy/run-tidy.ts +4 -3
  835. package/scripts/run/wake/run-wake-cli.ts +27 -33
  836. package/scripts/run/wake/run-wake-describe.ts +76 -29
  837. package/scripts/run/wake/run-wake-driver.ts +14 -14
  838. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  839. package/scripts/run/wake/run-wake-loop.ts +13 -21
  840. package/scripts/run/wake/run-wake-restart.ts +4 -5
  841. package/scripts/run/wake/run-wake-session.ts +23 -27
  842. package/scripts/run/wake/run-wake.ts +57 -328
  843. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  844. package/scripts/safe-chain/pack-hook.ts +2 -2
  845. package/scripts/safe-chain/preinstall-command.ts +2 -2
  846. package/scripts/security/security-audit-logic.ts +1 -1
  847. package/scripts/security/security-audit-provision-logic.ts +1 -1
  848. package/scripts/security/security-audit-provision.ts +2 -2
  849. package/scripts/security/security-audit.ts +5 -5
  850. package/scripts/security/security-updates-logic.ts +2 -3
  851. package/scripts/security/security-updates.ts +2 -4
  852. package/scripts/self-sync-guard/index.ts +1 -1
  853. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  854. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  855. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  856. package/scripts/sonar/sonar-hotspots.ts +1 -1
  857. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  858. package/scripts/sonar/sonar-new-code.ts +1 -1
  859. package/scripts/sonar/sonar-project.ts +1 -1
  860. package/scripts/split/split-assess-cli.ts +1 -1
  861. package/scripts/split/split-assess.ts +3 -3
  862. package/scripts/sync/directory-copy-guard.ts +2 -3
  863. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  864. package/scripts/sync/managed-config-scope.ts +4 -4
  865. package/scripts/sync/plugin-skill-directories.ts +2 -2
  866. package/scripts/sync/reconcile-templates.ts +17 -8
  867. package/scripts/sync/removed-skill-manifest.ts +2 -3
  868. package/scripts/sync/sync-ai-files.ts +7 -7
  869. package/scripts/sync/sync-configs.ts +30 -3
  870. package/scripts/sync/sync-hook-safety.ts +2 -2
  871. package/scripts/sync/sync.ts +23 -10
  872. package/scripts/sync/synced-paths.ts +2 -1
  873. package/scripts/sync/workflow-pin-logic.ts +1 -1
  874. package/scripts/test/test-declared-changed.ts +4 -4
  875. package/scripts/test/test-declared-logic.ts +2 -3
  876. package/scripts/test/test-declared-match.ts +25 -4
  877. package/scripts/test/test-declared.ts +26 -9
  878. package/scripts/test/test-red-commit.ts +3 -2
  879. package/scripts/test/test-red-logic.ts +7 -14
  880. package/scripts/test/test-red.ts +12 -47
  881. package/scripts/test/test-related-scope.ts +2 -3
  882. package/scripts/test/test-related.ts +3 -3
  883. package/scripts/test/test-type-logic.ts +1 -2
  884. package/scripts/test/test-unit-guard.ts +13 -17
  885. package/scripts/test/unit-worker-share.ts +7 -8
  886. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  887. package/scripts/time-runtime/time-background.ts +17 -21
  888. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  889. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  890. package/scripts/time-runtime/time-bundles.ts +11 -12
  891. package/scripts/time-runtime/time-call-identity.ts +1 -1
  892. package/scripts/time-runtime/time-command-key.ts +2 -2
  893. package/scripts/time-runtime/time-density-hook.ts +8 -11
  894. package/scripts/time-runtime/time-density.ts +5 -5
  895. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  896. package/scripts/time-runtime/time-format.ts +5 -5
  897. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  898. package/scripts/time-runtime/time-instant.ts +1 -1
  899. package/scripts/time-runtime/time-markers.ts +15 -19
  900. package/scripts/time-runtime/time-phase-names.ts +3 -3
  901. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  902. package/scripts/time-runtime/time-round-trips.ts +20 -23
  903. package/scripts/time-runtime/time-shell.ts +8 -8
  904. package/scripts/time-runtime/time-single-check.ts +1 -2
  905. package/scripts/time-runtime/time-spans.ts +35 -40
  906. package/scripts/time-runtime/time-tool-call.ts +15 -16
  907. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  908. package/scripts/time-runtime/time-writes.ts +5 -5
  909. package/scripts/ui/ui-routes-cli.ts +1 -2
  910. package/scripts/ui/ui-routes.ts +1 -2
  911. package/scripts/version/bump-version.ts +1 -1
  912. package/scripts/version/fresh-metadata-cache.ts +2 -2
  913. package/scripts/version/latest-corepack.ts +129 -98
  914. package/scripts/version/latest-lane-guard.ts +1 -1
  915. package/scripts/version/latest-scope-cli.ts +2 -2
  916. package/scripts/version/latest-stamp.ts +1 -2
  917. package/scripts/version/latest-update.ts +2 -2
  918. package/scripts/version/npm-registry.ts +2 -2
  919. package/scripts/version/package-manager-version.ts +18 -0
  920. package/scripts/version/publishable-range-check.ts +2 -1
  921. package/scripts/version/publishable-range.ts +1 -1
  922. package/scripts/version/release-age.ts +11 -11
  923. package/scripts/version/release-hold.ts +2 -2
  924. package/scripts/version/safe-chain-version-update.ts +3 -3
  925. package/scripts/version/version-check-logic.ts +2 -3
  926. package/scripts/version/version-check.ts +1 -2
  927. package/scripts/version/version-command-config.ts +2 -2
  928. package/scripts/version/version-commands.ts +3 -3
  929. package/scripts/version/version-remote.ts +4 -4
  930. package/scripts/version/version-targets.ts +2 -2
  931. package/templates/gitignore +7 -0
  932. package/templates/workflows/github-release.yml +4 -0
  933. package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
  934. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  935. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  936. package/scripts/backlog/backlog-restructure.ts +0 -152
  937. package/scripts/rules/issue-fold-rule.ts +0 -72
  938. package/scripts/rules/wip-cap.ts +0 -63
  939. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,7 +1,7 @@
1
1
  import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
2
2
 
3
3
  // `josh run:progress` — the one line an unattended run prints when it has gone quiet, and the clock
4
- // that decides when that is (joshuafolkken/kit#1520).
4
+ // that decides when that is.
5
5
  //
6
6
  // **The trigger is silence, not a timer.** An `epicrun` reports when a child merges or is parked, and
7
7
  // a child is 20–46 minutes of wall clock; between those two events it says nothing at all, so the
@@ -10,11 +10,9 @@ import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
10
10
  // from the last report of *any* kind, so a heartbeat never lands immediately behind a real one, where
11
11
  // it would be noise rather than news. `--mark` is how the run tells this clock a real report happened.
12
12
  //
13
- // **A line that could say "still running" is a line not worth printing.** Five minutes was measured in
14
- // live use on 2026-09-07 and 6 of 15 reports carried no changed number at all, which is the same
15
- // information as silence. Ten was measured next and was still short of a stage change, so the default
16
- // is twenty minutes (joshuafolkken/kit#1570): a child measures 20–46 minutes, and twenty gives one to
17
- // two reports per child rather than a run of lines saying what the last one said. Every field below is
13
+ // **A line that could say "still running" is a line not worth printing.** The default is twenty
14
+ // minutes: a child measures 20–46 minutes, and twenty gives one to two reports per child rather than a
15
+ // run of lines saying what the last one said. Every field below is
18
16
  // re-read on each tick rather than remembered — a child's labels, whether a pull request exists yet,
19
17
  // which lanes are open, the load average, and how long the whole set has been identical.
20
18
  //
@@ -28,20 +26,17 @@ import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
28
26
  // it prints about a pull request is that one exists and what state GitHub calls it — which is a read
29
27
  // it actually performs.
30
28
  //
31
- // **The line also says *when* it was observed, and not only how long the silence had run**
32
- // (joshuafolkken/kit#1560). A relative figure means something only while the reports keep coming: an
33
- // `epicrun` suspended overnight resumed and read its own `quiet 11m` as if no time had passed, and
34
- // concluded the machine's clock was broken when it matched GitHub's `Date` header to the second. Three
35
- // decisions follow from that, and each is a decision rather than a default:
29
+ // **The line also says *when* it was observed, and not only how long the silence had run.** A
30
+ // relative figure means something only while the reports keep coming: a run suspended overnight would
31
+ // read its own `quiet 11m` as if no time had passed. Three decisions follow from that:
36
32
  //
37
- // - **The date is carried, not just the clock time.** The confusion above happened across a day
38
- // boundary, so an `HH:MM` alone would have left the same hole open.
33
+ // - **The date is carried, not just the clock time.** A suspension can cross a day boundary, so an
34
+ // `HH:MM` alone would leave the same hole open.
39
35
  // - **The local clock leads, and UTC is printed beside it.** The local half is the one a person can
40
- // act on without converting anything, which is what UTC alone denied a reader seven hours from it
41
- // (joshuafolkken/kit#1589). UTC is kept rather than replaced: the line is read from other machines
42
- // and from cloud sessions, and joshuafolkken/kit#1245 already paid for a timestamp rendered in the
43
- // reader's zone making one process look like a stranger. The printed offset ties the two halves
44
- // together, so a reader on a third machine can place both.
36
+ // act on without converting anything. UTC is kept because the line is read from other machines and
37
+ // from cloud sessions, where a timestamp rendered in the reader's zone makes one process look like a
38
+ // stranger. The printed offset ties the two halves together, so a reader on a third machine can
39
+ // place both.
45
40
  // - **It is added beside the elapsed figures, never in place of them.** How long it has been quiet and
46
41
  // when the observation was taken are two different facts, and neither can be reconstructed from the
47
42
  // other without knowing the answer already.
@@ -53,13 +48,16 @@ const INTERVAL_KEY = 'JOSH_PROGRESS_INTERVAL_MINUTES'
53
48
  const MS_PER_MINUTE = 60_000
54
49
  const MS_PER_SECOND = 1000
55
50
  const DEFAULT_INTERVAL_MS = DEFAULT_INTERVAL_MINUTES * MS_PER_MINUTE
51
+ // The switch that silences every progress report — the watcher's and `run:board --every`'s alike.
52
+ const DISABLED_KEY = 'JOSH_PROGRESS'
53
+ const DISABLED_VALUE = '0'
56
54
 
57
55
  // What one child looked like on this tick. `pr_state` is `run_preflight`'s own vocabulary rather than
58
56
  // a second spelling of it — `none` / `open` / `merged` / `closed`.
59
57
  interface ChildObservation {
60
58
  issue: string
61
59
  // Kept from the `in-progress` listing the child was read from, so the line cites it in full
62
- // (joshuafolkken/kit#2943) without a read per child.
60
+ // without a read per child.
63
61
  title: string
64
62
  labels: ReadonlyArray<string>
65
63
  pr_state: string
@@ -89,16 +87,15 @@ interface ProgressState {
89
87
  }
90
88
 
91
89
  const NO_LANES = 'none'
92
- // The children slot when the run has started but no child carries `in-progress` yet
93
- // (joshuafolkken/kit#1900). It is an observed fact — zero in-progress children — not a guess about
90
+ // The children slot when the run has started but no child carries `in-progress` yet. It is an
91
+ // observed fact — zero in-progress children — not a guess about
94
92
  // what will appear: `read_observations` returns an observation at all only because a mechanical record
95
93
  // (a lane, a hold, or a carried budget) says a run is underway, and the lanes field beside this one
96
94
  // carries whatever evidence exists.
97
95
  const NO_CHILD_YET = 'no in-progress child yet'
98
- // The fifth line's value when there is no scheduled next report. The command always supplies one, so
99
- // this is the migrated form of the rule `backlogrun.md` used to hold — a line with no `next` field says
100
- // the field was absent rather than inventing a time (joshuafolkken/kit#2026). `format_report` is a pure
101
- // renderer, so its contract states the absence rather than assuming a stamp is always there.
96
+ // The fifth line's value when there is no scheduled next report. The command always supplies one, but
97
+ // a line with no `next` field says the field was absent rather than inventing a time: `format_report`
98
+ // is a pure renderer, so its contract states the absence rather than assuming a stamp is always there.
102
99
  const NO_NEXT = 'none'
103
100
  const QUIET_MARKER = '⏳'
104
101
  // `1970-01-01T00:00:00.000Z` cut after the minutes. Seconds are dropped because the interval this line
@@ -145,16 +142,14 @@ function format_offset(total_minutes: number): string {
145
142
  /**
146
143
  * The instant this observation was taken, on the local clock and in UTC, with its date on both.
147
144
  *
148
- * **The local half leads because it is the half a person can act on.** The line used to carry UTC
149
- * alone, and on a machine seven hours ahead every stamp in the report was a number the reader had to
150
- * convert before it meant anything — which is the same failure joshuafolkken/kit#1560 filed, arriving
151
- * from the other side: a stamp nobody can place is a stamp nobody reads.
145
+ * **The local half leads because it is the half a person can act on.** UTC alone is a number the
146
+ * reader has to convert before it means anything, and a stamp nobody can place is a stamp nobody reads.
152
147
  *
153
- * **UTC is kept beside it rather than replaced.** The reason it was pinned is real and unchanged: the
154
- * line is relayed to other machines and read in cloud sessions, and joshuafolkken/kit#1245 already
155
- * paid for a timestamp rendered in the reader's zone making one process look like a stranger. Printing
156
- * both costs twenty-five characters and leaves neither reader guessing — the offset is what ties the
157
- * two halves together, so a reader on a third machine can place the local half as well.
148
+ * **UTC is kept beside it rather than replaced.** The line is relayed to other machines and read in
149
+ * cloud sessions, where a timestamp rendered in the reader's zone makes one process look like a
150
+ * stranger. Printing both costs twenty-five characters and leaves neither reader guessing — the
151
+ * offset is what ties the two halves together, so a reader on a third machine can place the local
152
+ * half as well.
158
153
  *
159
154
  * **The local half is read off the instant shifted by that same rounded offset, never off `getHours`
160
155
  * and `getMinutes`.** Those truncate the seconds of a sub-minute offset while the offset beside them
@@ -202,8 +197,8 @@ function next_state(
202
197
  return { key, unchanged_since_ms: now_ms }
203
198
  }
204
199
 
205
- // The issue leads as a citation rather than a bare `#N` (joshuafolkken/kit#2943): the parent relays these
206
- // lines verbatim, and a bare number copied into a reply is what the Stop guard sends back.
200
+ // The issue leads as a citation rather than a bare `#N`: the parent relays these lines verbatim, and
201
+ // a bare number copied into a reply is what the Stop guard sends back.
207
202
  function format_child(child: ChildObservation, cite: IssueCiter): string {
208
203
  const labels = child.labels.length > 0 ? child.labels.join(',') : '(no labels)'
209
204
 
@@ -211,9 +206,8 @@ function format_child(child: ChildObservation, cite: IssueCiter): string {
211
206
  }
212
207
 
213
208
  // An empty set is the pre-label stage, said as such rather than left as a blank slot between the
214
- // separators (joshuafolkken/kit#1900). After that change a `read_observations` result carries no
215
- // children exactly when a run has started and none has reached `in-progress` yet, so this is the one
216
- // place the two cases are told apart on the line.
209
+ // separators. A `read_observations` result carries no children exactly when a run has started and
210
+ // none has reached `in-progress` yet, so this is the one place the two cases are told apart on the line.
217
211
  function format_children(children: ReadonlyArray<ChildObservation>, repo: string): string {
218
212
  if (children.length === 0) return NO_CHILD_YET
219
213
  const cite = issue_cite.citer(repo, new Map(children.map((child) => [child.issue, child.title])))
@@ -249,12 +243,9 @@ interface LineTiming {
249
243
  /**
250
244
  * When the next line is due if the silence holds — printed, never left for a reader to work out.
251
245
  *
252
- * **The two inputs were both here already and only one of them was printed** (joshuafolkken/kit#1726).
253
- * `backlogrun.md` asked the run to derive this from the `at` stamp plus the interval in force, and a run
254
- * that derives a time by hand eventually derives it wrong: one report reached a person as `20:1x`,
255
- * placeholder digits and all. Every comparable judgement in this repository has moved to the command
256
- * that already holds the inputs — `run:hold`, `delegate`, `review:level`, `latest:scope` — and
257
- * this is that same move for one value.
246
+ * **The command holds both inputs, so it prints the result.** A run that derives a time by hand from
247
+ * the `at` stamp plus the interval eventually derives it wrong; the judgement lives with the command
248
+ * that already holds the inputs, as for `run:hold`, `delegate`, `review:level` and `latest:scope`.
258
249
  *
259
250
  * **It is a schedule rather than an observation, and the two conditions on it are said in prose**
260
251
  * (`docs/josh-commands-run.md` → `josh run:progress`): it holds only while the silence continues, and a
@@ -267,7 +258,7 @@ function format_next_report(now_ms: number, interval_ms: number): string {
267
258
 
268
259
  // The already-formatted field strings the five labelled lines are built from. They are kept as strings
269
260
  // rather than the raw observation so that `format_report` stays a pure renderer the tests can drive with
270
- // an absent `next`, which is the migrated home of the doc's absent-field rule.
261
+ // an absent `next`.
271
262
  interface ReportFields {
272
263
  observed_at: string
273
264
  quiet: string
@@ -287,14 +278,11 @@ function format_next_line(next: string | undefined): string {
287
278
 
288
279
  /**
289
280
  * The five labelled lines a quiet run prints — one field group per line, a label in front of every
290
- * field — so a person reads them without anything downstream re-labelling them (joshuafolkken/kit#2026).
291
- * The command used to emit one `·`-joined run of values that `backlogrun.md` asked the parent to rewrite
292
- * by hand every interval; the labels and the line breaks live here now, so the parent relays the output
293
- * verbatim and rounds, rephrases or re-labels nothing.
281
+ * field — so the parent relays the output verbatim and rounds, rephrases or re-labels nothing.
294
282
  *
295
- * The observation instant leads and the scheduled next closes it, for the reason the single line kept
296
- * them at its two ends: the first field says whether everything after it is still about now, and the
297
- * last is the one field about a moment that has not happened yet.
283
+ * The observation instant leads and the scheduled next closes it: the first field says whether
284
+ * everything after it is still about now, and the last is the one field about a moment that has not
285
+ * happened yet.
298
286
  */
299
287
  function format_report(fields: ReportFields): string {
300
288
  return [
@@ -353,9 +341,15 @@ function minutes_from(raw: string | undefined): number | undefined {
353
341
  return minutes
354
342
  }
355
343
 
344
+ function is_disabled(): boolean {
345
+ return process.env[DISABLED_KEY] === DISABLED_VALUE
346
+ }
347
+
356
348
  const run_progress = {
357
349
  DEFAULT_INTERVAL_MINUTES,
358
350
  DEFAULT_INTERVAL_MS,
351
+ DISABLED_KEY,
352
+ DISABLED_VALUE,
359
353
  INTERVAL_KEY,
360
354
  MS_PER_MINUTE,
361
355
  MS_PER_SECOND,
@@ -368,6 +362,7 @@ const run_progress = {
368
362
  format_next_line,
369
363
  format_next_report,
370
364
  format_report,
365
+ is_disabled,
371
366
  is_due,
372
367
  minutes_from,
373
368
  next_state,
@@ -6,16 +6,16 @@ import { run_review, type GateState, type ReviewTiming } from './run-review'
6
6
  import { run_review_steps } from './run-review-steps'
7
7
 
8
8
  // `josh run:review` — one call that leaves `josh gate` running in the background and prints the whole
9
- // `/code-review` brief, so a lane child launches the two together and they overlap
10
- // (joshuafolkken/kit#2179). It composes `josh gate` and `josh review:brief` and changes neither: the
11
- // gate is the same command spawned detached, and the brief is `review:brief` run unchanged, so the
12
- // nonce/checkout contract `review:attest --check` enforces is minted exactly as before.
9
+ // `/code-review` brief, so a lane child launches the two together and they overlap.
10
+ // It composes `josh gate` and `josh review:brief` and changes neither: the gate is the same command
11
+ // spawned detached, and the brief is `review:brief` run unchanged, so the nonce/checkout contract
12
+ // `review:attest --check` enforces is minted exactly as a standalone brief mints it.
13
13
  //
14
14
  // **The default mode opens the pair; `--join` closes it.** The child runs the default, reads the brief
15
15
  // off stdout, launches the review subagent, and — once it returns — runs `--join`, which waits for the
16
16
  // gate to finish, records the overlap, and exits non-zero if the gate came back red. That exit code is
17
- // what makes "a red gate is not adopted over" a mechanical guarantee rather than an ordering the child
18
- // used to get for free (`run-review.ts` → `adopt_verdict`).
17
+ // what makes "a red gate is not adopted over" a mechanical guarantee rather than an ordering
18
+ // (`run-review.ts` → `adopt_verdict`).
19
19
 
20
20
  const ARGV_OFFSET = 2
21
21
  const JOIN_FLAG = '--join'
@@ -12,7 +12,7 @@ import { detached_launch, type LaunchArgv, type LaunchResult } from '#scripts/ru
12
12
  import { run_review, type GateState, type ReviewTiming, type TimingStart } from './run-review'
13
13
 
14
14
  // The side effects `josh run:review` performs, kept out of `run-review.ts` the way `run-merge-steps.ts`
15
- // is kept out of `run-merge.ts` (joshuafolkken/kit#2179). Three of them: launch the gate detached so
15
+ // is kept out of `run-merge.ts`. Three of them: launch the gate detached so
16
16
  // one command leaves it running in the background, read back the state the join waits on from the
17
17
  // stamps a real `josh gate` writes, and keep the four timestamps the overlap is measured from.
18
18
 
@@ -65,10 +65,10 @@ function launch_gate(root: string = PROJECT_ROOT): LaunchResult {
65
65
  // in-flight marker reads. `reusable_green_gate` is the gate's own reuse test rather than a second copy
66
66
  // of it, so the join calls a gate green on exactly the trees the gate would skip.
67
67
  //
68
- // **The marker is read before the green record, never after** (joshuafolkken/kit#2434). The gate writes
69
- // its green record and only then clears the marker, so a marker read as gone means any green record is
70
- // already on disk for the read that follows. Read the other way round, a gate that recorded green and
71
- // cleared its marker between the two reads was seen as neither — and the join answered RED.
68
+ // **The marker is read before the green record, never after**. The gate writes its green record
69
+ // and only then clears the marker, so a marker read as gone means any green record is already on disk
70
+ // for the read that follows. Read the other way round, a gate that recorded green and cleared its
71
+ // marker between the two reads would be seen as neither — and the join would answer RED.
72
72
  async function read_gate_state(): Promise<GateState> {
73
73
  const is_running = file_map_stamp.is_writer_running(review_stamps.in_flight_stamp.read())
74
74
  const tree = await gate_tree.read_gate_tree()
@@ -78,7 +78,7 @@ async function read_gate_state(): Promise<GateState> {
78
78
  }
79
79
 
80
80
  // The brief has to report the gate as in-flight, or it says `Not verified` and sends the review agent
81
- // to re-run the suite the gate is already running (joshuafolkken/kit#1242). The detached gate writes
81
+ // to re-run the suite the gate is already running. The detached gate writes
82
82
  // that marker itself, but its cold start can outrun the brief — so the composite writes the marker up
83
83
  // front, for the tree it is about to review. The gate overwrites it with its own identity the moment it
84
84
  // starts and clears it when it finishes, so this only closes the window between launch and that write;
@@ -1,15 +1,13 @@
1
1
  // The pure decisions `josh run:review` makes, kept apart from the side effects the same way
2
- // `run-merge.ts` is kept apart from `run-merge-steps.ts` (joshuafolkken/kit#2179).
2
+ // `run-merge.ts` is kept apart from `run-merge-steps.ts`.
3
3
  //
4
4
  // `run:review` starts the gate in the background and prints the `/code-review` brief in one call, so a
5
5
  // lane child launches both from a single command and the two overlap rather than running one after the
6
6
  // other. Two facts have to be decided from what the stamps say, and both are decided here so a test can
7
7
  // pin them without a gate ever running:
8
8
  //
9
- // - **whether the review verdict may be adopted** — only over a green gate. Before this command the
10
- // ordering guaranteed it: the child read the gate, saw green, and only then launched the review, so
11
- // there was no path to adopting a review over a red gate. Started together, that guarantee is no
12
- // longer a side effect of the order and has to be a decision (`adopt_verdict`).
9
+ // - **whether the review verdict may be adopted** — only over a green gate. Started together, the two
10
+ // no longer guarantee that by their order, so it has to be a decision (`adopt_verdict`).
13
11
  // - **how far the gate and the review overlapped** — the measurement the parallel start exists to
14
12
  // produce, computed from the four timestamps `run-review-steps.ts` records.
15
13
 
@@ -18,10 +16,10 @@ const BLOCKED = 'blocked'
18
16
 
19
17
  type AdoptVerdict = typeof ADOPT | typeof BLOCKED
20
18
 
21
- // A red gate blocks the review verdict outright, whatever the review concluded — the same rule the
22
- // serial order used to enforce implicitly (joshuafolkken/kit#1242's gate-beside-review is only safe
23
- // while a red gate can still stop the commit). `--join` exits non-zero on `blocked`, so the guard is
24
- // the command's exit code rather than a sentence a child has to read and obey.
19
+ // A red gate blocks the review verdict outright, whatever the review concluded: running the gate
20
+ // beside the review is only safe while a red gate can still stop the commit. `--join` exits non-zero
21
+ // on `blocked`, so the guard is the command's exit code rather than a sentence a child has to read
22
+ // and obey.
25
23
  function adopt_verdict(is_gate_green: boolean): AdoptVerdict {
26
24
  return is_gate_green ? ADOPT : BLOCKED
27
25
  }
@@ -85,8 +83,8 @@ function overlap_seconds(timing: ReviewTiming): number {
85
83
  return Math.max(NO_OVERLAP, (end - start) / MS_PER_SECOND)
86
84
  }
87
85
 
88
- // The three lines a `--join` prints so a reader — issue #2179 and `chain-rule.md`'s overlap check —
89
- // can see the gate ran inside the review rather than in front of it.
86
+ // The three lines a `--join` prints so a reader — `chain-rule.md`'s overlap check — can
87
+ // see the gate ran inside the review rather than in front of it.
90
88
  function format_timing(timing: ReviewTiming): string {
91
89
  const gate = span_seconds(timing.gate_started_at, timing.gate_ended_at)
92
90
  const review = span_seconds(timing.review_started_at, timing.review_ended_at)
@@ -0,0 +1,29 @@
1
+ import { error_text } from '#scripts/lib/error-message'
2
+
3
+ // What `run:cut`, `run:carry` and `run:hold` share about a failure nobody planned. Each of them answers
4
+ // one token on every path out, and the token alone cannot say why — so the two failures are kept
5
+ // apart here: a git directory that could not be resolved is the one case their "git directory could
6
+ // not be read" message is true of, and anything else thrown is reported with its own message.
7
+
8
+ // Only the resolution is folded into `undefined`, so the caller's unknown-git-directory message is
9
+ // printed for that path alone. `JOSH_DEBUG` keeps the reason git gave.
10
+ async function directory_of(
11
+ where: string,
12
+ read: () => Promise<string | undefined>,
13
+ ): Promise<string | undefined> {
14
+ try {
15
+ return await read()
16
+ } catch (error) {
17
+ error_text.trace_swallowed(where, error)
18
+
19
+ return undefined
20
+ }
21
+ }
22
+
23
+ function message(command: string, error: unknown): string {
24
+ return `${command} failed and established nothing: ${error_text.message_of(error)}`
25
+ }
26
+
27
+ const run_cli_fault = { directory_of, message }
28
+
29
+ export { run_cli_fault }
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
3
4
  import { cli_flags } from '#scripts/lib/cli-flags'
4
5
  import { error_text } from '#scripts/lib/error-message'
5
6
  import {
@@ -8,10 +9,9 @@ import {
8
9
  type EndingDecision,
9
10
  type EndingRequest,
10
11
  } from './run-ending'
11
- import { run_issue_number } from './run-issue-number'
12
12
 
13
13
  // `josh run:ending <N> --output <path> [--repo <owner/repo>]` — one verdict about how the dispatched
14
- // lane child running `<N>` ended (joshuafolkken/kit#2139).
14
+ // lane child running `<N>` ended.
15
15
  //
16
16
  // The stdout/stderr split is the contract `run:liveness` and `run:hold` keep: exactly one verdict
17
17
  // token on stdout on every path, the reason and the basis on stderr. `unreadable` exits non-zero,
@@ -59,7 +59,7 @@ interface ParsedArguments {
59
59
  function is_valid(parsed: ParsedArguments): boolean {
60
60
  return (
61
61
  parsed.positionals.length === 1 &&
62
- run_issue_number.ISSUE_NUMBER_PATTERN.test(parsed.positionals[0] ?? '') &&
62
+ issue_number_shape.ISSUE_NUMBER_PATTERN.test(parsed.positionals[0] ?? '') &&
63
63
  parsed.values.output !== undefined
64
64
  )
65
65
  }
@@ -3,32 +3,28 @@ import { agent_exit_record } from '#scripts/agent/agent-exit-record'
3
3
  import { api_outage } from '#scripts/agent/api-outage'
4
4
  import type { ClaudeResultEvent } from '#scripts/agent/claude-result-event'
5
5
  import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
6
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
6
7
  import { issue_state } from '#scripts/issue/issue-state'
7
8
  import { run_cut } from '#scripts/run/cut/run-cut'
8
9
  import { run_hold } from '#scripts/run/hold/run-hold'
9
- import { run_issue_number } from './run-issue-number'
10
10
  import { run_liveness } from './run-liveness'
11
11
 
12
- // `josh run:ending <N>` — how a dispatched lane child *ended*, not whether it is still moving
13
- // (joshuafolkken/kit#2139). `run:liveness` answers "still working, or stopped?"; a normally-exited
14
- // child that stopped mid-implementation is invisible to it — the output freezes exactly as a
15
- // completed child's does, and `is_error: false` looks like success. Measured on 2026-09-19: the child
16
- // for joshuafolkken/kit#2118 ended `subtype: success`, left three uncommitted files, opened no PR, and
17
- // `run:cut --resume` answered `fresh` — a mid-implementation exit that read as a clean finish, and the
18
- // cause took a person opening 875KB of JSONL to find.
12
+ // `josh run:ending <N>` — how a dispatched lane child *ended*, not whether it is still moving.
13
+ // `run:liveness` answers "still working, or stopped?"; a normally-exited child that stopped
14
+ // mid-implementation is invisible to it — the output freezes exactly as a completed child's does, and
15
+ // `is_error: false` looks like success.
19
16
  //
20
17
  // **The verdict is read from three traces the child leaves behind, never from `is_error`.** A cut
21
18
  // record for this issue means it handed off; a CLOSED Issue means it completed and merged; an OPEN
22
19
  // Issue with no cut means it ended in the middle. The exit record's own `is_error: false` is *not* a
23
- // completion — completion is the CLOSED Issue — which is the one distinction that was missing. The exit
24
- // record is read for the *basis* the park comment carries: which fields said so, and how many tool
25
- // calls the harness refused (`permission_denials`, the direct cause of the 2118 stop).
20
+ // completion — completion is the CLOSED Issue. The exit record is read for the *basis* the park comment
21
+ // carries: which fields said so, and how many tool calls the harness refused (`permission_denials`).
26
22
  //
27
23
  // **The words are a different question from `run:liveness`'s four**, deliberately non-overlapping:
28
24
  // `merged` / `cut` / `outage` / `abandoned` / `unreadable` answer "how did it end", where `alive` /
29
25
  // `stopped` / `settled` / `undetermined` answer "is it still going".
30
26
  //
31
- // **`outage` splits the mid-implementation ending in two** (joshuafolkken/kit#2240). A child that ended
27
+ // **`outage` splits the mid-implementation ending in two**. A child that ended
32
28
  // mid-implementation because it could not reach the API is not a child that stalled on its own: the
33
29
  // exit record carries a transport-failure signature, read mechanically by `api-outage.ts`. The parent
34
30
  // reads it to leave the outage child re-dispatchable rather than parking it and counting it against
@@ -112,7 +108,7 @@ function describe_exit(record: ClaudeResultEvent): string {
112
108
  }
113
109
 
114
110
  // The refused interactive ask, as a clause the park comment can carry the question and options in — or
115
- // empty when the child asked nothing (joshuafolkken/kit#2201). This is the backstop for a child that
111
+ // empty when the child asked nothing. This is the backstop for a child that
116
112
  // slipped past the `PreToolUse` refusal: the question is stranded in the exit record's
117
113
  // `permission_denials`, and lifting it here spares the parent opening the JSONL by hand.
118
114
  function refused_ask_clause(record: ClaudeResultEvent | undefined): string {
@@ -214,7 +210,7 @@ async function read_traces(request: EndingRequest): Promise<EndingTraces> {
214
210
  }
215
211
 
216
212
  async function check(request: EndingRequest): Promise<EndingDecision> {
217
- run_issue_number.require_issue_number(request.issue)
213
+ issue_number_shape.require_issue_number(request.issue)
218
214
 
219
215
  return decide(await read_traces(request))
220
216
  }
@@ -5,11 +5,10 @@ import {
5
5
  type StopMarkFields,
6
6
  } from '#scripts/run/hold/run-hold'
7
7
 
8
- // joshuafolkken/kit#2796: a `halfrun` stops before its commit and **keeps** its hold, because the
9
- // uncommitted, hand-verified work is exactly what a second run would trample. The person then types
10
- // `fullrun #N` to ship it — and `run:entry`'s claim answered `busy` against that very hold, or, once the
11
- // hold had been cleared, the preflight advised stashing the verified diff away. The hand-off the
12
- // `halfrun` stop promised could not land, and each run improvised its own way past the guard.
8
+ // A `halfrun` stops before its commit and **keeps** its hold, because the uncommitted, hand-verified
9
+ // work is exactly what a second run would trample. The person then types `fullrun #N` to ship it, and
10
+ // that run adopts the hold here rather than meeting `busy` from `run:entry`'s claim or being advised
11
+ // to stash the verified diff away.
13
12
  //
14
13
  // **The stop is recorded, never inferred.** A hold naming #N over a dirty tree is also what a `halfrun`
15
14
  // still implementing and a `backlogrun` child leave, and adopting either hands a half-written diff to
@@ -43,7 +42,7 @@ function is_own_record(read: HoldRead, issue: string): boolean {
43
42
  return hold === undefined || hold.issue === issue || hold.issue === run_hold.UNNUMBERED_ISSUE
44
43
  }
45
44
 
46
- // `mark` is the `halfrun` stop's by default; a `prrun` stop passes its own (joshuafolkken/kit#3023), so
45
+ // `mark` is the `halfrun` stop's by default; a `prrun` stop passes its own, so
47
46
  // the own-record check is one check whichever run is stopping.
48
47
  function mark_stop_at(
49
48
  target: string,
@@ -68,8 +67,7 @@ function take_over(target: string, issue: string): boolean {
68
67
  return run_hold.create_hold(target, issue, new Date(), true)
69
68
  }
70
69
 
71
- // `false` leaves the record untouched, so the ordinary claim that follows decides the tree exactly as
72
- // it did before this resume existed.
70
+ // `false` leaves the record untouched, so the ordinary claim that follows decides the tree.
73
71
  function adopt_at(target: string, issue: string, is_dirty: boolean): boolean {
74
72
  if (!is_halfrun_stop(run_hold.read_hold(target), issue, is_dirty)) return false
75
73
 
@@ -3,11 +3,11 @@ import { lane_reap } from '#scripts/lane/lane-reap'
3
3
  import { lane_registry } from '#scripts/lane/lane-registry'
4
4
  import { run_carry, type CarryRead, type RunCarry } from '#scripts/run/carry/run-carry'
5
5
 
6
- // The headless `backlogrun` parent (joshuafolkken/kit#2437). `run:wake` starts a cut's successor as
6
+ // The headless `backlogrun` parent. `run:wake` starts a cut's successor as
7
7
  // `claude -p`, and there a turn that ends is the process that ends: its background `lane:await` and
8
8
  // `run:progress --wait` are killed with it, so "a background command's exit re-invokes the session"
9
- // (`backlogrun-progress.md` → "The parent keeps no clock of its own") does not hold. A successor that
10
- // ended its turn on a wait therefore ended the run's driver while its lanes were still working.
9
+ // (`docs/maintainers/backlogrun-driver.md` → "Waiting while something is in flight") does not hold. A successor that
10
+ // ends its turn on a wait therefore ends the run's driver while its lanes are still working.
11
11
  //
12
12
  // **The mark is what tells that session apart, and the supervisor is its only writer.** It rides the
13
13
  // launch's environment (`run-wake-cli.ts`), so an attached session never carries it, and a lane child
@@ -28,6 +28,21 @@ function is_headless(source: EnvironmentSource = process.env): boolean {
28
28
  return source[HEADLESS_ENV_KEY] === HEADLESS_VALUE
29
29
  }
30
30
 
31
+ // The session the supervisor launched itself — marked, and not a lane child that inherited the mark.
32
+ function is_headless_parent(source: EnvironmentSource): boolean {
33
+ return is_headless(source) && lane_child_marker.marked_issue(source) === undefined
34
+ }
35
+
36
+ // **The cut cap binds a session cut, never the hand-back to the driver.** A headless parent is a
37
+ // judgment session the `run:wake` driver woke for one branch, and its `--cut` is how it returns the
38
+ // loop — the driver holds the run between wakes, so the session has no accumulated context for the
39
+ // cap to weigh against a cold preamble. Capping it would leave the session unable to cut while the
40
+ // headless stop rule refuses its turn-end until it does. Every reader of the cap asks here, so the
41
+ // `--cut` refusal, `run:step` and the parent-cut hook never disagree about it.
42
+ function is_cut_capped(carry: RunCarry, source: EnvironmentSource = process.env): boolean {
43
+ return !is_headless_parent(source) && run_carry.is_at_cut_cap(carry)
44
+ }
45
+
31
46
  // Only a live, un-handed-off record binds the session to its lanes. After `run:carry --cut` the next
32
47
  // successor drives them, and after `--end` (`none`) or past the bound (`expired`) there is no run left
33
48
  // to drive — ending the turn is correct in all three. An unreadable record fails open, as every stop
@@ -49,9 +64,7 @@ async function read_carry_here(): Promise<CarryRead | undefined> {
49
64
  * lane child, with lanes still in flight and no cut handed the record off.
50
65
  */
51
66
  async function must_keep_waiting(source: EnvironmentSource = process.env): Promise<boolean> {
52
- const is_candidate = is_headless(source) && lane_child_marker.marked_issue(source) === undefined
53
-
54
- if (!is_candidate || !(await lane_registry.has_lanes_in_flight())) return false
67
+ if (!is_headless_parent(source) || !(await lane_registry.has_lanes_in_flight())) return false
55
68
 
56
69
  return is_driving(await read_carry_here())
57
70
  }
@@ -64,9 +77,9 @@ async function current_carry(): Promise<RunCarry | undefined> {
64
77
  return read?.kind === 'carried' ? read.carry : undefined
65
78
  }
66
79
 
67
- // **A live record binds only the session that declared it** (joshuafolkken/kit#2472). A cut's
68
- // successor adopts the record and rewrites its owner, and every session in this checkout reads that
69
- // same file — so without this test the session that cut, still attached, read as a second parent. The
80
+ // **A live record binds only the session that declared it**. A cut's successor adopts the
81
+ // record and rewrites its owner, and every session in this checkout reads that same file — so without
82
+ // this test the session that cut, still attached, would read as a second parent. The
70
83
  // owner is `--owner "$PPID"`, the session process, which is an ancestor of every hook it runs; a
71
84
  // record that declared no owner proves no one is its parent.
72
85
  function is_owned_here(carry: RunCarry, ancestry: () => ReadonlySet<number>): boolean {
@@ -85,7 +98,7 @@ function driven_here(
85
98
  /**
86
99
  * The live, un-handed-off carry record this session drives as the `backlogrun` parent, or `undefined`
87
100
  * for a lane child or any session that does not own one. Returned rather than tested so a caller that
88
- * also needs the record's counters (the parent cut's cap, joshuafolkken/kit#2947) reads it once.
101
+ * also needs the record's counters (the parent cut's cap) reads it once.
89
102
  */
90
103
  async function driving_carry(
91
104
  source: EnvironmentSource = process.env,
@@ -98,8 +111,7 @@ async function driving_carry(
98
111
 
99
112
  /**
100
113
  * Whether this session is the driving `backlogrun` parent, attached or headless: not a lane child, and
101
- * the declared owner of a live, un-handed-off carry record — the record only a `backlogrun` writes
102
- * (joshuafolkken/kit#2452, joshuafolkken/kit#2472).
114
+ * the declared owner of a live, un-handed-off carry record — the record only a `backlogrun` writes.
103
115
  */
104
116
  async function is_backlog_parent(
105
117
  source: EnvironmentSource = process.env,
@@ -114,6 +126,7 @@ const run_headless = {
114
126
  driving_carry,
115
127
  environment,
116
128
  is_backlog_parent,
129
+ is_cut_capped,
117
130
  is_headless,
118
131
  is_owned_here,
119
132
  must_keep_waiting,