@joshuafolkken/kit 1.1240.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +29 -47
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +42 -10
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
  51. package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
  52. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
  53. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
  57. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
  60. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  61. package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
  62. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  63. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +216 -202
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +281 -94
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +16 -10
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +26 -2
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +20 -6
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cspell-cached.ts +1 -1
  560. package/scripts/lint/cycle-recheck.ts +122 -0
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +34 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +5 -6
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +25 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +13 -15
  801. package/scripts/run/run-step.ts +58 -47
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,478 +1,159 @@
1
1
  # `backlogrun` — the detailed procedure behind the manifest
2
2
 
3
- **This is the detailed procedure behind `backlogrun.md`'s manifest, relocated here so the entry read
4
- carries the manifest, not the prose** (joshuafolkken/kit#2190). This file is **reference-only** and is
5
- read at its point of use — it is classified point-of-use in `entry-read-set.ts`, exactly as the four
6
- `backlogrun-*.md` phase documents are, so a `backlogrun` entry never opens it whole up front. Each
7
- section below is the single source of the rule it carries; `backlogrun.md` points here rather than
8
- restating any of it.
3
+ Point-of-use, read one section at a time from `backlogrun.md` → "The route table"; how the driver runs the loop on its own is `docs/maintainers/backlogrun-driver.md`.
9
4
 
10
5
  ## What one invocation approves
11
6
 
12
- **One `backlogrun` approves every merge of every issue `pnpm josh backlog:next` offers** — the issues
13
- carrying `auto-ok`, every child of an epic whose root carries it, **and an issue this run filed, once
14
- it has become such a child**. A filing is placed into an epic by `pnpm josh epic:bundle`, which
15
- `prompts/review.md` → "Review round cap" and `observation-filing.md` both make **Tier A rather than
16
- optional**; where that epic's root carries `auto-ok`, the child is offered from the next ask onwards
17
- without anybody having labelled it.
7
+ **One `backlogrun` approves every merge of every issue `pnpm josh backlog:next` offers** — `auto-ok`
8
+ issues, every child of an epic whose root carries it, and a run's own filing once `pnpm josh
9
+ epic:bundle` (Tier A, `observation-filing.md`) has placed it under such a root. **A named issue is
10
+ approved by the keyword and its number, not by `auto-ok`** ("Named issues run first, in order"). What
11
+ runs is stated by the keyword and its arguments, never inferred from a request's shape. **Two repairs
12
+ that would bound this the other way are prohibited** — dropping a run's own filings, and requiring a
13
+ person's `auto-ok` on a child; the brake below bounds it. A Tier C action inside a child still stops that child.
18
14
 
19
- **Two repairs that would bound this the other way are prohibited** (joshuafolkken/kit#1675): dropping
20
- a run's own filings from the pool, and requiring a person's `auto-ok` on a child as well. What
21
- bounds it instead is "The brake that replaces the promise" below.
15
+ **`pnpm josh issue:file` decides the `auto-ok` default and prints it** — `auto-ok: applied` or
16
+ `auto-ok: not applied` with the reason; `scripts/issue/issue-auto-ok.ts` is the single source. **Pass
17
+ `--no-auto-ok` only when the new issue needs a person's judgement** — a Tier B toss-up or a Tier C
18
+ action inside it. The retrospective's filings take the same default and count against the same brake.
19
+ **A filing a person asked for declares `--requested` and takes no default** — `auto-ok` only when they
20
+ named it (`kickoff.md` → "Words typed after `new`").
22
21
 
23
- **`backlogrun` declares "everything opted in", and a named epic declares "the children of that
24
- epic"** — what runs is stated by the keyword and its arguments, never inferred from the shape of a
25
- request.
26
-
27
- **An issue found by opted-in work is opted in by default** (joshuafolkken/kit#3213) — this file is
28
- that rule's single source, and `pnpm josh issue:file` computes it (`scripts/issue/issue-auto-ok.ts`),
29
- printing `auto-ok: applied` or `auto-ok: not applied` with the reason. It applies `auto-ok` while a
30
- `backlogrun` carry record is live, or when the issue the current branch names carries `auto-ok`,
31
- and never on a `--repo` filing to another repository. **Pass `--no-auto-ok` only when the new issue needs a person's judgement** — a Tier B toss-up or a
32
- Tier C action inside it; a choice with a clear recommendation is Tier A and does not qualify.
33
- Outside those signals `auto-ok` stays a person's to apply. **Which ones carry the label, that rule;
34
- in what order and how many at once, the run** — the brake below bounds the quantity, not the
35
- membership.
36
-
37
- The end-of-run retrospective is no longer a separate carve-out: it files
38
- while the carry record is live, so the same default opts its filings in, counted against every brake
39
- in "The brake that replaces the promise" below.
40
-
41
- A Tier C action inside a child still stops that child, exactly as it does for any batch child.
42
-
43
- **A named issue is approved by the keyword and its number, not by `auto-ok`** (joshuafolkken/kit#1984).
44
- `backlogrun #N1 #N2 …` runs those issues whether or not they carry the label. The pool that follows
45
- is unchanged: still `auto-ok`, opted in as "Which ones carry the label" above says. "Named issues
46
- run first, in order" below is the procedure.
47
-
48
- Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the authorization boundary is shaped this way"
22
+ Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the authorization boundary is shaped this way";
23
+ provenance of each rule: `docs/maintainers/backlogrun-steps-rationale.md` → "Where each rule came from"
49
24
 
50
25
  ### The brake that replaces the promise
51
26
 
52
- **Every bound is counted in the carry record rather than in the conversation** ("The session cut is
53
- inside the invocation" below):
27
+ **Every bound is counted in the carry record rather than in the conversation:**
54
28
 
55
- | The bound | What it limits | Where it is counted |
29
+ | The bound | What it limits | Counted by |
56
30
  | --- | --- | --- |
57
- | `--max` | how many issues one invocation may merge — a run's own filing competes for that number rather than extending it | `run:carry --merged` |
58
- | `--idle`, and the 8-hour whole-run bound | how long one invocation may go on looking for more | the record's `started_at` |
59
- | **Ten filings per invocation** | how much one invocation may add to the pool at all, on **every** filing route (`prerequisite.md`) | `run:carry --filed` |
60
- | The WIP cap on open issues | how large the pool may become, across invocations | `prompts/collaboration-workflow/wip-cap.md` |
61
-
62
- One invocation may add at most ten issues to the pool and merge at most `--max` of them, after which
63
- the run ends and the next one waits for a person to type the keyword.
64
-
65
- **Two filing routes are exempt from the depth test (`observation-filing.md`), and the ten-filings ceiling
66
- still covers them:**
67
-
68
- - **`route:tier-a` and `route:interrupt` stay exempt.** **Their number is still capped**: `prerequisite.md`'s
69
- ten-filings ceiling is stated "at every entry point", and `run:carry --filed` counts it across
70
- session cuts.
71
- - **A review branch-2 filing stays exempt** — a confirmed defect reaching a runtime path, with a
72
- written failure scenario.
31
+ | `--max` | merges per invocation — a run's own filing competes for it | `run:carry --merged` |
32
+ | `--idle`, and the 8-hour whole-run bound | how long the run looks for more | the record's `started_at` |
33
+ | **Ten filings per invocation** | additions to the pool on **every** filing route (`prerequisite.md`) — `route:tier-a`, `route:interrupt` and a review branch-2 filing are exempt from the depth test (`observation-filing.md`), never from this ceiling | `run:carry --filed` |
34
+ | The WIP cap on open issues | the pool across invocations | `prompts/collaboration-workflow/wip-cap.md` |
73
35
 
74
36
  **This section is the single source of how the `epic:bundle` obligation and this authorization
75
37
  boundary meet.** `observation-filing.md` points here rather than restating it.
76
38
 
77
39
  ## Named issues run first, in order
78
40
 
79
- **`backlogrun #N1 #N2 …` runs the named issues before it touches the pool** (joshuafolkken/kit#1984,
80
- folding in the old `queue` keyword). They run in the order they were typed, **one at a time — no
81
- lanes**, because the order is the point of naming them. Only once the named list is exhausted does the
82
- loop below drain the opted-in backlog. A bare `backlogrun` names none and starts straight on the loop.
83
-
84
- **`pnpm josh backlog:plan #N1 #N2 …` reports the whole plan** — the named prefix first, in order, then
85
- the pool. `scripts/backlog/backlog-named.ts` is the single source of that order and of the failure
86
- branch below; the plan renders it rather than restating it.
87
-
88
- **Each named issue is a full `fullrun` in a delegated unit**, exactly as a backlog child is
89
- (`backlogrun-child.md` → "Each child runs in a delegated unit"), and the once-per-session steps — `josh latest`
90
- on `required`, the progress watcher — run once for the whole invocation, never per issue
91
- ("What runs once per session, not once per issue" below). Between issues, `pnpm josh ms`
92
- brings the previous merge into the checkout the next one implements in. The parent reads each issue's
93
- state back from GitHub — `pnpm josh issue:state <N>` — never the unit's summary.
94
-
95
- **A named issue that cannot finish parks, and the rest of the named list is skipped.** **The run does
96
- not stop there**: it goes on to drain the opted-in backlog, and the completion report lists the named
97
- issues it did not start. `backlog_named.after_failure` is the single source.
98
-
99
- - A named issue read back `CLOSED` — merged, or already `already-done` — is finished; continue with the
100
- next.
101
- - A **`needs-human-review`** named issue stops the whole run before its commit (`needs-human-review.md`),
102
- exactly as any child does — the named issues after it are not started and neither is the pool.
103
- - Everything else about running one — the verification gate, the hand-off, the guards — is
104
- this file's and is not restated here.
105
-
106
- **`--only` runs the named list and stops there, draining no pool** (joshuafolkken/kit#1984).
107
- `backlogrun #N1 #N2 … --only` runs the named issues in order and ends, and the completion report says
108
- in one line that `--only` held it back from the opted-in backlog. A named issue that fails **under
109
- `--only` ends the run** rather than falling through to a pool, and the issues after it are skipped as
110
- ever. **`--only` with no named issues has nothing to run and is refused before anything starts.**
111
- `backlog_named.startup` is the single source of both, and `pnpm josh backlog:plan #N1 #N2 … --only`
112
- renders the named-only plan the run will take.
113
-
114
- ## The session cut is inside the invocation
115
-
116
- **This section is the single source of the mechanism.** The record, the two commands, the answer table
117
- and what each one means are all here. **A named-issue `backlogrun #N1 #N2 …` pins its list across the
118
- cut**: the record keeps the **opening** list at every cut, and the issues it has finished live in the
119
- record's `done` field rather than shrinking the string — a resumed session reads `remaining` from
120
- `pnpm josh run:carry --json` and runs those, then drains the pool as ever. **`--only` rides in that
121
- invocation string like every other token**, so a resumed session runs the remaining named issues and
122
- **stops** rather than draining the pool the person excluded.
41
+ **`backlogrun #N1 #N2 …` runs the named issues before it touches the pool**,
42
+ in the order typed, **one at a time — no lanes**, each as a full `fullrun` in a delegated unit
43
+ (`backlogrun-child.md` → "Each child runs in a delegated unit"); the parent reads each one's state back
44
+ with `pnpm josh issue:state <N>`, never the unit's summary. `pnpm josh backlog:plan #N1 #N2 …` renders
45
+ the order, and `scripts/backlog/backlog-named.ts` is its single source.
123
46
 
124
- **Typing `backlogrun` once authorizes the declared budget, and a session cut does not end the run.**
125
- `backlogrun-progress.md` → "The hand-off" stops the _session_ at the seam; under `backlogrun` that
126
- seam does not stop the _run_. The next session picks the same invocation up and carries on with the
127
- budget already partly spent.
47
+ **A named issue that cannot finish parks, and the rest of the named list is skipped**; the run then
48
+ drains the pool, and the report lists what was not started (`backlog_named.after_failure`). A
49
+ `needs-human-review` named issue stops the whole run (`needs-human-review.md`). **`--only` runs the
50
+ named list and stops there, draining no pool** — a failure under `--only` ends the run, and `--only`
51
+ with no named issues is refused before anything starts (`backlog_named.startup`).
128
52
 
129
- **A resumed session's carried-over lanes are polled beside new work, never waited out** —
130
- `backlogrun-progress.md` → "A carried-over merge does not stand in front of the next lane" is the
131
- single source.
53
+ ## The session cut is inside the invocation
132
54
 
133
- **The authorization boundary is carried by the budget, not by the keystroke**, so the budget is
134
- carried in a record rather than in the conversation:
55
+ **Typing `backlogrun` once authorizes the declared budget, and a session cut does not end the run** —
56
+ the next session picks the same invocation up from the carry record (`backlogrun-progress.md` → "The
57
+ hand-off"). The record keeps the opening invocation string, `--only` and the named list included; a
58
+ resumed session runs `remaining` from `--json`. The contract is `docs/josh-commands-run.md` →
59
+ "`josh run:carry`".
135
60
 
136
61
  ```bash
137
62
  pnpm josh run:carry --begin "backlogrun --max 5 --idle 30" --owner "$PPID"
138
63
  pnpm josh run:carry --json # read it back in a resumed session
64
+ pnpm josh run:wake --start # same turn as --begin
139
65
  ```
140
66
 
141
- **Always pass `--owner "$PPID"`** — the parent loop's own long-lived process. Left off, `busy` cannot
142
- be answered and every standing record is refused rather than resumed. A live PID whose start token
143
- the sandbox cannot read is held as `busy`.
144
-
145
- **Ask it before the plan, in the same turn as the first `git switch main && git pull`.** The contract
146
- is `docs/josh-commands-run.md` → "`josh run:carry`"; what this loop does with each answer is here:
147
-
148
- | It answers | What the run does |
149
- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
150
- | `began` | Nothing was carried. This is the invocation's first session: report the plan and run the decision pass as written below |
151
- | `resumed` | **This session is continuing a run that was cut** — a `--cut` handed the record off, or a `--resume` adopted it. Read the record with `--json` and take the budget figures from it, never from this session's own zero. Report the plan again — the pool has moved — and skip nothing else |
152
- | `busy` | The record's **owner process is still running and no cut handed it off**: another parent is spending this budget right now. **Stop; do not open a lane.** (A record a `--cut` _did_ hand off answers `resumed` here even with its owner still alive.) Nothing here is yours to end — either that run finishes and ends its own record, or a person decides it is over |
153
- | `over` | This session is over the context-cut threshold, so it claims nothing (joshuafolkken/kit#2760). **End the conversation**; retype the invocation in a fresh session |
154
- | `standing` | A record is here that **no cut or supervisor handed off** — an unwatched crash, and the same command retyped over it. **Stop; do not open a lane**: the choice is the person's. Report the two commands the answer names — `pnpm josh run:carry --resume "<invocation>" --owner "$PPID"` to carry that budget on, or `pnpm josh run:carry --end` and begin again to discard it. A crash from a run-tooling defect this run has since fixed is the one you resume yourself (`upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合") |
155
- | `mismatch` | A record is here for a **different** invocation — a run that never reached `--end`. **Stop; do not open a lane**, and never resume into it. End it deliberately, with `pnpm josh run:carry --end`, once you know that run is over |
156
- | `expired` | The 8-hour whole-run bound is spent. **Where a `--cut` handed the record off it is this run's own bound**, so this is the verdict on standard output and the run ends: report it and stop, and clear the record with `pnpm josh run:carry --end` once it is genuinely over. Where nothing handed it off it is printed on standard error ahead of a `began` instead — a person typing the keyword again over a spent record is starting a new run, and the record is replaced. A `--resume` over a spent record answers `expired` and adopts nothing |
157
- | `unreadable` | Report what it printed and **stop before opening a lane** |
158
- | `unknown` | The same — the repository's git directory could not be read, so nothing was established |
159
-
160
- **The record is the parent loop's, and a lane never touches it.** A delegated unit is briefed with its
161
- child and nothing about the invocation's budget. **`--begin` claims the record exclusively and names
162
- the owning process, so a second parent is answered `busy`.**
163
-
164
- **Count into the record rather than into your head** — `--merged <N> --owner "$PPID"` at every child's
165
- merge, `--filed 1 --owner "$PPID"` at every Issue this run files, and `--cut --owner "$PPID"`
166
- immediately before the cut. `--merged` names the merged issue, never a count
167
- (`scripts/run/carry/run-carry-args.ts`): `run:merge` records the same issue, so a merge counted on both paths counts
168
- once. Every other counter is an increment. **`--owner "$PPID"` is not optional on a
169
- count**: a count that does not name the record's owning process is refused.
170
-
171
- **`--cut` hands the record off, and so does `run:wake` for a dead owner** (joshuafolkken/kit#2437): the
172
- next `--begin` naming the same invocation answers `resumed` — **even while the cutting process is still
173
- running**.
174
-
175
- **So `--cut` is the session's last write to the record**: count everything the session has, then cut.
176
- A `--merged` or `--filed` issued after the `--cut` is **refused**.
177
-
178
- **`backlog:budget` is then fed from the record, never from a count kept in the conversation:**
179
- `--started` takes the record's `started_at` and `--merged` its `merged`, so `--max` and the 8-hour
180
- whole-run bound count **across** cuts, as one invocation's worth. **The 10-filings-per-run ceiling is
181
- counted the same way**, from `filed`. **`--idle` is the one budget that is not carried**, and a cut can
182
- only reach a watch that opened while this run's own children were still merging. A resumed session
183
- then states its resume moment as `--active` and the watch begins again at its full budget, bounded by
184
- the 8 hours as everything else is: "The cost check is not asked during a watch" below.
185
-
186
- **How many cuts the run crossed is named in the completion report**, read from the record's `cuts`.
187
-
188
- **End the record when the run ends** — `pnpm josh run:carry --end`, **after the final report and never
189
- batched with it**: `run:report` scopes by the record `--end` removes. The next `backlogrun` then begins
190
- its own budget rather than resuming a spent one. **Where the run ends by _stopping_ rather than
191
- finishing** — `backlog:budget` or `epic:next` answered `stop` (a parked backlog, an unreadable listing,
192
- the maximum, the whole-run bound), or the consecutive-failure guard tripped — **end it with
193
- `pnpm josh run:carry --end --stopped "<one-line reason>"` instead**. That pushes one ⏸️ confirmation as
194
- it clears the record; the reason is the stop verdict's, in the session language. A clean completion
195
- takes the bare `--end` and stays silent, having its own report; a parked _child_ is pushed by the child
196
- that parked it (`backlogrun-park.md`). Because `--end` removes the record, a re-run's second `--end`
197
- finds nothing and never re-sends that confirmation — `progress-watcher.md` →
198
- "Progress while the run is quiet" is the single source of the pull-versus-push split.
199
-
200
- **The record widens nothing but the default.** It carries a budget, and its being live is what
201
- opts this run's filings in ("What one invocation approves"); no other label follows from it. A pool grown across the cut by this run's own bundled filings is "What one invocation
202
- approves", its ceiling counted from the record's `filed`.
203
-
204
- **Nothing waits for a person any more — `pnpm josh run:wake` supervises the driver**. After a cut or
205
- dead-owner recovery, it adopts the carry record and runs `backlog:drive` itself. The driver dispatches,
206
- collects, watches and reports without starting a parent AI session. Only a returned branch that needs
207
- judgment starts an AI session, with the branch result and resume flags in its prompt.
208
-
209
- **Start it in the same turn as `--begin`, and stop it in the same turn as `--end`:**
67
+ **Always pass `--owner "$PPID"`**, and ask it before the plan, in the same turn as the first `pnpm josh
68
+ ms`. **The record is the parent loop's, and a lane never touches it**; count into it with `--merged <N>`
69
+ and `--filed 1`, and **`--cut` is the session's last write**.
210
70
 
211
- ```bash
212
- pnpm josh run:wake --start # right after `run:carry --begin`
213
- pnpm josh run:wake --stop # in the same turn as `run:carry --end`
214
- ```
215
-
216
- **It reads the same record this section already keeps.** A handed-off carry record, or one whose owner
217
- died, starts the driver. The supervisor adopts that record before the driver counts a merge; a live
218
- owner prevents a second driver from taking it over. On `none`, `expired` or `unreadable` it stops. The
219
- 8-hour whole-run bound therefore still comes from the carry record. **A new authorization is still a
220
- person's**: the supervisor spends the declared budget and never declares another.
221
-
222
- **A supervisor stopped by a run-tooling defect is restarted by the AI once the fix lands** —
223
- `upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合".
224
-
225
- **What may be run is untouched.** The driver takes named issues from the invocation and pool issues
226
- from the existing offer command. The supervisor writes no label of its own; `auto-ok` arrives only
227
- through `issue:file`'s default. A judgment session receives
228
- the original invocation plus the driver's reason and resume state.
229
- For a named epic, the driver hands off `epic #N` with the original invocation. The judgment session
230
- follows the named epic procedure and dispatches its children; the epic root is never launched as a
231
- standalone `fullrun` child. Once every child has merged or parked, record the root with
232
- `pnpm josh run:carry --done <E> --owner "$PPID"` before continuing the invocation. This removes it
233
- from the carry record's remaining named list, so the next driver pass can advance. The named prefix
234
- also consults the carried maximum and whole-run bound
235
- before each launch, and a failed named issue skips the remaining named prefix.
71
+ | It answers | What the run does |
72
+ | --- | --- |
73
+ | `began` | Report the plan and run the decision pass |
74
+ | `resumed` | Take the budget from `--json`, report the plan again, read `backlogrun-progress.md` → "Resuming after a cut" |
75
+ | `busy` / `mismatch` / `unreadable` / `unknown` | **Stop; do not open a lane** — report what it printed; never resume into another invocation's record |
76
+ | `over` | **End the conversation**; retype the invocation in a fresh session |
77
+ | `standing` | **Stop; do not open a lane**: report `pnpm josh run:carry --resume "<invocation>" --owner "$PPID"` and `pnpm josh run:carry --end` for the person to choose — a crash from a run-tooling defect this run has since fixed you resume yourself (`upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合") |
78
+ | `expired` | On standard output: report, stop and `--end` it. On standard error ahead of `began`: a new run replaced it |
236
79
 
237
- **A person keeps control of it** — `pnpm josh run:wake --list` names the running supervisor and `--stop`
238
- ends it. Its failure warnings, log file, progress relay and the provider / model / effort each
239
- unattended role runs with are `docs/josh-commands-run.md` → "`josh run:wake`".
80
+ **End the record when the run ends** — `pnpm josh run:report`, then `pnpm josh run:carry --end`, **never
81
+ batched with it**, and `pnpm josh run:wake --stop` in the same turn. **A run that ends by _stopping_**
82
+ (a `stop` verdict or the consecutive-failure guard) **ends with `pnpm josh run:carry --end --stopped
83
+ "<one-line reason>"`** instead, which sends the one ⏸️ confirmation.
240
84
 
241
- **The completion report names how many sessions were woken beside the record's `cuts`** — one wake per
242
- cut is the invariant, and what counts is a carry record actually claimed, never a process started.
85
+ **A driver hand-off of `epic #N` is a named epic**: settle it by `backlogrun-progress.md` → "Running a
86
+ named epic's children", never the root as a standalone `fullrun`, then ask `pnpm josh epic:next <E>` —
87
+ a child number or `complete` continues; only `stop` or a failure records `pnpm josh run:carry --done <E>
88
+ --owner "$PPID"`.
243
89
 
244
- **The reading is scoped to `backlogrun`.** A `fullrun` cut still waits for a person's keystroke.
90
+ **A person keeps control of the supervisor** — `pnpm josh run:wake --list` / `--stop`.
245
91
 
246
92
  Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why a session cut does not end the run"
247
93
 
248
94
  ## The plan, before the first child starts
249
95
 
250
- **A `backlogrun` reports its plan before it starts anything.** Nothing is dispatched, no lane is
251
- opened and no issue is picked up until the plan has been reported and the decision pass below has
252
- run.
253
-
254
- **The plan is one command's output, not an assembly of several:**
255
-
256
- ```bash
257
- pnpm josh backlog:plan
258
- ```
259
-
260
- **It renders the same classified pool `backlog:next` answers from**, so **the plan cannot promise an
261
- order the run does not take**. Its four sections are:
96
+ **Report the plan before anything is dispatched. The plan is one command's output** — `pnpm josh
97
+ backlog:plan`, rendered from the same
98
+ pool `backlog:next` answers from. Report all four of its sections (Ready now, Waiting, Waiting on a
99
+ person, Out of scope) to the person in the session language, with any truncated-listing `⚠`.
262
100
 
263
- - **Ready now** — the runnable children, grouped by repository. **The grouping is the parallelism**:
264
- a lane is per repository, so the bundles are how wide this run can go.
265
- - **Waiting** — every withheld child, each naming **what it is waiting on**: the blocking issue
266
- numbers, a run that already has it, or that it is ready but past the offer this ask could make.
267
- - **Waiting on a person** — the `needs-decision` children, which is the next subsection's input.
268
- - **Out of scope** — every open issue the backlog will **not** run, with the reason, so "not opted in"
269
- is distinguished from "not reached yet".
101
+ ### Resolve what the plan can resolve, before starting
270
102
 
271
- **Report all four to the person, in the session language, before the first child starts.** Epic
272
- children are enumerated individually rather than summarized under their root. Report a truncated-listing
273
- `⚠` with them: the plan is then partial.
103
+ **Settle every `needs-decision` issue the plan listed in one pass**, from one `pnpm josh issue:read <N>
104
+ <N> …` call (body and comments, `issue-comments.md`):
274
105
 
275
- ### Resolve what the plan can resolve, before starting
106
+ - **An answer already in the issue** — record it as a comment and **remove the label** (Tier A).
107
+ **Never measure in order to decide**: a question needing a benchmark or a run stays labelled.
108
+ - **A person's judgement** — apply `needs-decision` (`backlogrun-park.md` → "Only a person's judgement
109
+ carries `needs-decision`"); the next plan classifies it by the label alone.
110
+ - **Order and isolate** — a native `blocked-by` where one must land first;
111
+ `run:solo` on all three `backlogrun-lanes.md` → "A solo run" conditions, **every other one `run:lane`**,
112
+ commenting the reason.
113
+ - **`priority:high`** only on a cited ground (a stated deadline, a person's written policy), commented;
114
+ **never remove it**.
115
+ - **Report `pnpm josh backlog:plan --waves`** with the plan, never an order derived by hand; then start
116
+ the loop, leaving whatever is still labelled parked.
276
117
 
277
- **Every `needs-decision` issue the plan listed is settled in one pass at the start, rather than one
278
- stop at a time.**
279
-
280
- - **Decide everything decidable from the issue itself.** Read the issue's body **and its comments**
281
- (`issue-comments.md`), and where the answer is already there, record it as an Issue comment and
282
- **remove the label** — `CLAUDE.md` → "Decision autonomy" already makes that Tier A. **Read them all in
283
- one `pnpm josh issue:read <N> <N> …` call**, not a `gh api` pair per issue.
284
- - **Never measure in order to decide.** A question needing a benchmark, a profile, or a run of the
285
- thing itself is not settled here: it stays labelled and the plan says so.
286
- - **Label what you find.** An issue needing a person's judgement — `backlogrun-park.md` → "Only a
287
- person's judgement carries `needs-decision`" — gets the label, applied as "park and continue" does. **The next plan classifies it by the label alone**,
288
- never the body.
289
- - **Order and isolate the pool in the same pass** (joshuafolkken/kit#2776), from the same
290
- `issue:read`: an issue that must land first (it builds what another reuses, or both edit one code
291
- path) becomes a native `blocked-by`; an issue meeting all three of the `backlogrun-lanes.md` →
292
- "Lanes — running more than one child at a time" conditions gets `run:solo`, **every other one `run:lane`**. Comment the reason; the offer commands enforce all
293
- three, answering `triage` while an issue has neither.
294
- - **`priority:high` puts an issue first** (joshuafolkken/kit#2928; ranking: `docs/josh-commands-backlog.md` →
295
- `josh backlog:next`). Apply it only on a cited ground — a stated deadline or urgency, or a person's
296
- written policy — commenting the ground; **never remove it**.
297
- - **Report the order those labels produce — `pnpm josh backlog:plan --waves`** (joshuafolkken/kit#2778),
298
- `backlog:next` played forward wave by wave. Report it with the plan, never an order derived by hand.
299
- - **Then start the loop.** Whatever is still labelled is reported as parked and left standing; the
300
- run does not wait on it.
301
-
302
- **`needs-decision`, `run:solo`, `run:lane` and `priority:high` are the workflow labels a run may
303
- apply by hand, and none is `auto-ok` or `needs-human-review`.** `needs-human-review` stays a
304
- person's alone (`needs-human-review.md`); `auto-ok` reaches only a run's own filing, through
305
- `issue:file`'s default ("What one invocation approves"). A run parks with `needs-decision` only on
306
- `backlogrun-park.md` → "Only a person's judgement carries `needs-decision`", and a person clears it.
118
+ **`needs-decision`, `run:solo`, `run:lane` and `priority:high` are the only workflow labels a run
119
+ applies by hand** — never `auto-ok` or `needs-human-review` (`needs-human-review.md`).
307
120
 
308
121
  Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the plan and the decision pass come first"
309
122
 
310
123
  ## The loop
311
124
 
312
- **The loop is computed, not walked by hand.** The `run:wake` supervisor runs `pnpm josh backlog:drive`,
313
- whose head is `pnpm josh backlog:offer`: the answer-to-budget mapping, the retry count, the `--exclude`
314
- feedback and the lane count are its own (`docs/josh-commands-backlog.md` → "`josh backlog:offer`"
315
- and "`josh backlog:drive`"). **An AI session reaches this section only when the driver hands a branch
316
- back** — the `Driver result:` line names it, and its `Next:` line is the order: claim the record with
317
- `pnpm josh run:carry --resume "<invocation>" --owner "$PPID"`, act on the branch, then hand the loop
318
- back with `pnpm josh run:carry --cut --owner "$PPID"`:
319
-
320
- | Handed back | What the session judges |
321
- | --- | --- |
322
- | `triage` | Label each issue stderr names `run:solo` or `run:lane` (with `blocked-by` where one must land first), as "Resolve what the plan can resolve" does; running children continue |
323
- | `offer` | `backlog:offer` itself could not answer. Report what stderr printed; **never pick an issue by hand** |
324
- | `launch #N` | A lane failed after it opened. Read the lane's log and park `#N` (`backlogrun-park.md` → "park and continue") |
325
- | `merge [<token>] #N` | `run:merge` stopped on `environment`, `busy`, `retry` or `over`, or printed nothing: `environment` ends the run, the others re-read the child (`backlogrun-progress.md` → "Running a named epic's children") |
326
- | `watch` | The backlog drained with nothing in flight; the retrospective is owed (`run:step`) |
327
- | `window` | The driver's wait window ran out with nothing to judge; hand the loop back as is |
328
-
329
- **`window`, `merge busy` and `merge retry` reach a session only after the supervisor's own re-runs run
330
- out** (`run-wake-driver.ts`).
125
+ **The loop is computed, not walked by hand** — the `run:wake` supervisor runs `pnpm josh backlog:drive`
126
+ (`docs/josh-commands-backlog.md` → "`josh backlog:drive`"). A session reaches this section only when
127
+ the `Driver result:` line hands a branch back: claim with `pnpm josh run:carry --resume "<invocation>"
128
+ --owner "$PPID"`, act on the row, then `pnpm josh run:carry --cut --owner "$PPID"`. Read only the one
129
+ section the row names:
331
130
 
332
- **A candidate only in another repository is never a token** — report it with its checkout and leave it
333
- to a session running there (`backlogrun-lanes.md` → "Concurrency").
131
+ | Handed back | What the session does | Read |
132
+ | --- | --- | --- |
133
+ | `triage` | Label each issue stderr names `run:solo` or `run:lane` (`blocked-by` where one must land first) | "Resolve what the plan can resolve, before starting" above |
134
+ | `offer` | Report what stderr printed; **never pick an issue by hand** | — |
135
+ | `launch #N` | Read the lane's log and park `#N` | `backlogrun-park.md` → "park and continue" |
136
+ | `merge [<token>] #N` | `environment` ends the run; the others re-read the child | `backlogrun-progress.md` → "Running a named epic's children" |
137
+ | `epic #N` | A named epic's turn | "The session cut is inside the invocation" above |
138
+ | `watch` | The retrospective is owed (`run:step`) | `retrospective.md` |
139
+ | `window` | Hand the loop back as is | — |
140
+
141
+ **A candidate only in another repository is never a token** — report it with its checkout. The budgets,
142
+ verdicts and stops are the driver's own: `docs/maintainers/backlogrun-driver.md` (rationale:
143
+ `docs/maintainers/backlogrun-steps-rationale.md` → "Why the idle watch defaults to 30 minutes";
144
+ `docs/maintainers/backlogrun-steps-rationale.md` → "Why the cost check skips a watch").
334
145
 
335
146
  Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the loop's contract is shaped this way"
336
147
 
337
- ### The two budgets
338
-
339
- **A `backlogrun` may declare how long it will watch an empty backlog and how many issues it may
340
- take.** Both are written on the keyword, and **the idle watch is on by default while the maximum is
341
- not**:
342
-
343
- ```
344
- backlogrun # watches for 30 minutes after the backlog empties
345
- backlogrun --idle 0 # finishes the moment the backlog empties
346
- backlogrun --idle 0 --max 5
347
- ```
348
-
349
- | Budget | Written | Default | What it does |
350
- | --- | --- | --- | --- |
351
- | Idle watch | `--idle <minutes>` | **30 minutes** | After the candidates run out, keep polling this long for a new one. A candidate that appears restarts the watch from that moment |
352
- | Maximum issues | `--max <count>` | unlimited | How many issues this invocation may take. On reaching it the run reports and finishes |
353
-
354
- **`--idle 0` is how the watch is turned off, and it is the only way**: `backlogrun --idle 0` finishes
355
- at the first empty backlog. The default's single source is `scripts/backlog/backlog-budget.ts` →
356
- `DEFAULT_IDLE_MINUTES`. **A watch is polled every 5 minutes, not at the loop's 60-second interval** —
357
- read the interval from the reason `backlog:budget` prints rather than remembering it.
358
-
359
- **To become a candidate an issue needs `auto-ok`** — applied by a person, or by `issue:file`'s
360
- default to an issue this run filed ("What one invocation approves") — or to be a child this run
361
- filed and bundled under an already opted-in epic. Either is bounded by the brake there, never the
362
- watch. No issue that neither a person nor that default opted in is ever picked up during a watch.
363
-
364
- **`backlog:offer` asks `backlog:budget` for you on every iteration** — it maps `backlog:next`'s answer
365
- to the word "The loop" points to and hands it over, so the loop makes the one call and reads back the
366
- verdict:
367
-
368
- ```bash
369
- offer=$(pnpm josh backlog:offer --started "$started" --active "$active" \
370
- --merged <count> --running <count> --retries <count> [--idle <minutes>] [--max <count>])
371
- ```
372
-
373
- **`--active` is required of every ask, because the watch is on unless it was turned off** — an
374
- invocation whose watch is on and that carries no `--active` is **refused** by `backlog:budget`. Only
375
- `--idle 0` excuses it. **`--running` also decides `wait` and `--retries` decides `retry`** — the two
376
- context branches that mapping carries, applied inside the command from the counts the loop already
377
- tracks.
378
-
379
- | Verdict | What the loop does |
380
- | --- | --- |
381
- | `run` | Start what `backlog:next` offered, up to the free lanes. The reason names how many more the maximum still allows; start no more than that |
382
- | `watch` | Ask both commands again — at the 5-minute idle poll while the backlog is empty **and** nothing of this run's is in flight, and at the 60-second polling interval in every other case (a blocked backlog, a drain, or a watch that opened while children were still merging). *Whether the parent keeps that interval as a clock of its own* is the in-flight test: with nothing in flight the watcher declines for the whole watch and never exits, so the parent sleeps the interval itself; with something in flight the wake is `pnpm josh lane:await` or the watcher's arrival exit — never a report — and the interval is only a floor on the re-ask (`backlogrun-progress.md` → "The wake exists only while something is in flight"). **Nothing is held while watching** — the working tree's hold and each drained lane were released at the last child's merge, so a watching run blocks no other run |
383
- | `stop` | Report and finish. The reason it printed **is** the termination reason the completion report carries |
384
-
385
- **At the drain the retrospective fires before this watch, not after it** (joshuafolkken/kit#2335):
386
- `backlog:offer` marks the drain on the event stream and `run:step` fires the retrospective there, so the
387
- watch that follows picks up its `auto-ok` filings. `retrospective.md` → "When it fires" is the single
388
- source, read when `run:step` prints the step.
389
-
390
- `--started` is when the invocation began; `--active` is when it last had work — the most recent ask
391
- that was **not** `exhausted`, and in a resumed session the moment it picked the run up. **Refreshing
392
- `--active` restarts the idle watch**, so an issue opted in mid-watch is picked up and the watch begins
393
- again at its full budget. Both are ISO-8601 timestamps (`date -u +%FT%TZ`), and `--idle` without
394
- `--active` is refused. `--merged` is what has merged and `--running` what is still in a lane; **both
395
- count against the maximum**. **No ending abandons a lane**: whatever would have ended the run answers
396
- `watch` while `--running` is above zero, so the lanes drain and their merges reach the report. The full
397
- contract is `docs/josh-commands-backlog.md` → "`josh backlog:budget`".
398
-
399
- **The completion report names three things the budgets make meaningful**: how many issues this run
400
- took, how many of them were picked up during an idle watch, and the termination reason — quoted from
401
- what `backlog:budget` printed rather than paraphrased.
402
-
403
- Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the idle watch defaults to 30 minutes"
404
-
405
- ### The cost check is not asked during a watch
406
-
407
- **A watch does not count towards the session cut.** The hand-off check — `pnpm josh cost --cut`,
408
- `backlogrun-progress.md` → "The hand-off" — is asked **at a child's merge**, and a watch has no merges,
409
- so a run that is only watching never reaches one. When the watch picks something up, the check is
410
- asked at that child's merge in the ordinary way.
411
-
412
- **So every cut is taken at a merge.** The one shape that puts a cut inside a watch — the backlog
413
- answering `exhausted` while this run's own children are still merging — is the same, because the woken
414
- session has just merged a child. A Codex parent's cut is the one taken at a dispatch instead
415
- (`backlogrun-progress.md` → "A parent without a completion callback").
416
-
417
- **The 8-hour whole-run bound is untouched and still outranks all of this** — it is measured from the
418
- record's `started_at` across every cut, so a run cannot watch its way past it in 30-minute pieces.
419
-
420
- Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the cost check skips a watch"
421
-
422
- ### Where the run stops
423
-
424
- Termination is decided by what the loop is told, never by a judgement that enough has been done:
425
-
426
- - **`--only` ends the run once the named list is done** — there is no pool and no idle watch to fall
427
- through to, so the run reports and finishes; it never enters the pool loop at all.
428
- - **`pnpm josh backlog:budget` answering `stop`** — the single decision, covering an idle watch
429
- running out, the backlog emptying with the watch turned off, the maximum being reached, a parked
430
- backlog, an unreadable listing, and the whole-run bound.
431
- - **The whole-run 8-hour bound is unchanged and outranks both budgets**, and the idle watch lives
432
- inside it: `backlogrun-progress.md` → "Waiting, and never waiting forever" is still where the figure is stated,
433
- and `backlog:budget` is what applies it, so a run at the bound stops with candidates in hand and a
434
- watch still open.
435
- - **Every one of those budgets is counted across this run's own session cuts**, from the record
436
- `pnpm josh run:carry` keeps rather than from a count held in the current session — "The session cut
437
- is inside the invocation" above.
438
- - **The guards in `backlogrun.md` → "Guards"** apply unchanged, counted over the whole `backlogrun`
439
- rather than per epic: children per run, Issues filed per run, and consecutive child failures. The
440
- maximum above is a person's declaration of scale and does not replace any of them — whichever binds
441
- first ends the run.
442
- - **A `needs-human-review` child stops the whole run** before its commit — `needs-human-review.md`, which is
443
- the single source, and `backlogrun-park.md` → "`needs-human-review` — the one stop that is not a park" for
444
- what happens to its lane.
445
- - **The hand-off check** — `pnpm josh cost --cut` at every child's merge, and the lane
446
- hand-over that follows an `over` — is `backlogrun-progress.md` → "The hand-off", unchanged. It is
447
- **not** asked during an idle watch: "The cost check is not asked during a watch" above, nor by the
448
- supervisor's `backlog:drive`, which has no session to cut (joshuafolkken/kit#3156).
449
- - **Parking is not stopping.** A child that needs a decision, and a delegated unit that stopped
450
- without reporting, are **parked** and the run continues (`backlogrun-park.md` → "park and
451
- continue"); only the consecutive-failure guard above can turn repeated parks into a stop.
452
-
453
148
  ## What runs once per session, not once per issue
454
149
 
455
- All of these are this file's, and are reached here in the same order and for the same reasons:
456
-
457
150
  | Step | Where it is defined |
458
151
  | --- | --- |
459
- | `git switch main && git pull`, then `pnpm josh latest:scope`, then `pnpm josh lane:prune` — in the primary checkout, before the first lane opens | `backlogrun-lanes.md` → "Once per repository, before the first lane opens" |
460
- | `josh latest` on `required` only, asked once at the first child and never in a lane | `backlogrun-child.md` → "`josh latest` runs once per session, not once per child" |
461
- | `pnpm josh run:hold <N>`'s preflight check, before each child that is not in a lane — act on what it prints | `docs/josh-commands-run.md` → "`josh run:hold`" |
152
+ | `run:carry --begin` + `run:wake --start` before the plan; `run:carry --end` + `run:wake --stop` at the end | "The session cut is inside the invocation" above |
153
+ | `pnpm josh ms`, `pnpm josh latest:scope`, `lane:prune` in the primary checkout before the first lane | `backlogrun-lanes.md` → "Once per repository, before the first lane opens" |
154
+ | `josh latest` on `required` only, once, never in a lane | `backlogrun-child.md` → "`josh latest` runs once per session, not once per child" |
155
+ | `pnpm josh run:hold <N>`'s preflight, before each child not in a lane | `docs/josh-commands-run.md` → "`josh run:hold`" |
462
156
  | `pnpm josh run:progress --wait` in the background, `--mark` at every real report | `progress-watcher.md` → "Progress while the run is quiet" |
463
- | `pnpm josh release:scope` once, after the last issue has merged and the last lane is closed | `followup.md` → "When `pnpm josh release` runs" |
464
-
465
- **Two more run once per session and are this file's own**:
466
- `pnpm josh run:carry --begin "<the invocation, single-spaced>" --owner "$PPID"` before the plan and
467
- `pnpm josh run:carry --end` when the run finishes, and beside each of them
468
- `pnpm josh run:wake --start` and `pnpm josh run:wake --stop` — the supervisor that continues the run
469
- across a cut. Both pairs are "The session cut is inside the invocation" above.
470
-
471
- **Record the invocation in the form the supervisor can rebuild: one space between tokens, and a plain
472
- integer for each budget value** — `backlogrun --max 3`, never `backlogrun --max 03`. The supervisor
473
- refuses to wake on a record its own rebuild would rewrite: the first cut ends the run with a `warning`
474
- Telegram, so write the canonical form rather than the keystrokes.
475
-
476
- **`pnpm josh epic:audit` is not run.** There is no epic to audit — the run began from the backlog, the
477
- same reason this file skips it when it began from a bare Issue. `backlog:next` reuses `epic:next`'s
478
- own read and classify and answers `error` rather than guessing when it cannot resolve one.
157
+ | `pnpm josh release:scope` once, after the last merge and lane close | `followup.md` → "When `pnpm josh release` runs" |
158
+
159
+ **`pnpm josh epic:audit` is not run.** There is no epic to audit — the run began from the backlog.