@joshuafolkken/kit 1.1240.0 → 1.1373.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +52 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +23 -66
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +43 -11
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
  51. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
  52. package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
  53. package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
  57. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  60. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
  61. package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
  62. package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
  63. package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +195 -181
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +282 -95
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +17 -11
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +30 -5
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +21 -7
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cross-file-recheck.ts +155 -0
  560. package/scripts/lint/cspell-cached.ts +1 -1
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +35 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +6 -7
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +26 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +64 -18
  801. package/scripts/run/run-step.ts +107 -51
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,3 +1,4 @@
1
+ import { json_value } from '#scripts/lib/json-value'
1
2
  import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
2
3
  import { time_density_hook } from '#scripts/time-runtime/time-density-hook'
3
4
  import { time_hook_transcript } from '#scripts/time-runtime/time-hook-transcript'
@@ -5,10 +6,10 @@ import { z } from 'zod'
5
6
  import { josh_environment_file } from './josh-environment-file'
6
7
  import { stamp_file } from './stamp-file'
7
8
 
8
- // The parts every refusing `PreToolUse` hook needs, held once (joshuafolkken/kit#1460).
9
+ // The parts every refusing `PreToolUse` hook needs, held once.
9
10
  //
10
11
  // **It exists because the second such hook arrived.** `batch-guard.ts` was the first
11
- // (joshuafolkken/kit#1390) and carried the whole shell itself: the payload schema, the envelope
12
+ // and carried the whole shell itself: the payload schema, the envelope
12
13
  // Claude Code understands, the environment switch, and the stamp that makes a refusal
13
14
  // unrepeatable. The investigation guard needs all four unchanged and only its *rule* differs, so
14
15
  // copying them across would be the clone `CLAUDE.md` prohibits — and a rule fixed in one copy and
@@ -20,7 +21,7 @@ import { stamp_file } from './stamp-file'
20
21
  // Only the four fields a `PreToolUse` hook is handed and reads. Claude Code names the tool it is
21
22
  // about to run beside a transcript path, so nothing is searched for.
22
23
  //
23
- // **`agent_id` is what makes a delegated unit answerable with its own file** (joshuafolkken/kit#1424).
24
+ // **`agent_id` is what makes a delegated unit answerable with its own file**.
24
25
  // The path in the payload is the *parent* session's whichever agent issued the call, so without this
25
26
  // field a guard judges the parent's frozen timeline and refuses nothing at all inside a fork.
26
27
  const payload_schema = z.object({
@@ -58,7 +59,7 @@ function is_switch_enabled(key: string): boolean {
58
59
  // The opt-in counterpart of `DISABLED_VALUES`: an unset variable stays off, and only one of these
59
60
  // spellings turns the switch on. A switch that must default off cannot be read with `is_switch_enabled`
60
61
  // — that one defaults on — so the value list is spelled out here rather than inverted at the call site,
61
- // keeping a typo from silently enabling what was meant to stay disabled (joshuafolkken/kit#2370).
62
+ // keeping a typo from silently enabling what was meant to stay disabled.
62
63
  const ENABLED_VALUES: ReadonlyArray<string> = ['on', '1', 'true', 'yes']
63
64
 
64
65
  // Read at call time for the same reason as `is_switch_enabled`, so a suite that switches the variable
@@ -85,7 +86,7 @@ function deny_envelope(reason: string): string {
85
86
  })
86
87
  }
87
88
 
88
- // **A rewrite, not a refusal** (joshuafolkken/kit#3154): the call proceeds with `updated_input` merged
89
+ // **A rewrite, not a refusal**: the call proceeds with `updated_input` merged
89
90
  // over its own. `allow` is the decision the harness applies an `updatedInput` under; a settings `deny`
90
91
  // rule still wins over it, so this never widens what the call may do.
91
92
  function rewrite_envelope(updated_input: Record<string, unknown>, context: string): string {
@@ -126,7 +127,7 @@ function stamp_fault(switch_key: string): string {
126
127
  // anything is written under it, so a fork's first guarded calls read a path with no file behind it —
127
128
  // `time-hook-transcript.ts` states that "no history" is the honest verdict there. Reported as a fault
128
129
  // it would print on every early call of every fork, which is the routine case drowning the signal this
129
- // exists to raise (joshuafolkken/kit#1509).
130
+ // exists to raise.
130
131
  function is_missing_file(error: unknown): boolean {
131
132
  if (!(error instanceof Error) || !('code' in error)) return false
132
133
 
@@ -168,11 +169,7 @@ function last_refusal_ms(target: string): number {
168
169
 
169
170
  if (raw === undefined) return NEVER_MS
170
171
 
171
- try {
172
- return refusal_schema.parse(JSON.parse(raw)).refused_at_ms
173
- } catch {
174
- return NEVER_MS
175
- }
172
+ return json_value.parse_with(raw, refusal_schema)?.refused_at_ms ?? NEVER_MS
176
173
  }
177
174
 
178
175
  function record_refusal(target: string, now_ms: number): boolean {
@@ -199,7 +196,7 @@ function create_refusal_stamp(prefix: string): RefusalStamp {
199
196
  // **`.env` is loaded here rather than through the dispatcher's `tsx_arguments`**, and the reason —
200
197
  // declaring any `tsx_arguments` disqualifies a command from in-process dispatch — is now shared with
201
198
  // every other command that has to stay in-process, so the loader lives in `josh-environment-file.ts` rather
202
- // than here (joshuafolkken/kit#1491). Re-exported under this namespace because that is where the
199
+ // than here. Re-exported under this namespace because that is where the
203
200
  // hooks reach for it.
204
201
  //
205
202
  // **Call it only on the real hook path**, never inside the pure refusal function, so a developer's
@@ -217,7 +214,7 @@ interface GuardRun {
217
214
  }
218
215
 
219
216
  // The notice half of a guard's rule, kept optional so a guard that only refuses supplies nothing and is
220
- // untouched (joshuafolkken/kit#1848). The investigation guard omits it; the batching guard supplies one
217
+ // untouched. The investigation guard omits it; the batching guard supplies one
221
218
  // for the whole-file write, which it cannot refuse but can advise.
222
219
  interface NotifySpec {
223
220
  // This disposition's record prefix, distinct from the refusal's so the two dedupe independently and
@@ -226,8 +223,8 @@ interface NotifySpec {
226
223
  // The same shape as `should_block`, asked of the tail for a notify-only call. `notified_at_ms` is
227
224
  // this disposition's own last-fired instant, never the refusal's.
228
225
  should_notify: (tail: string, call: GuardedCall, notified_at_ms: number, run: GuardRun) => boolean
229
- // The non-blocking text handed to `notice_envelope`, chosen from the call and the tail
230
- // (joshuafolkken/kit#2164, joshuafolkken/kit#2276). A guard now notifies about more than one kind of
226
+ // The non-blocking text handed to `notice_envelope`, chosen from the call and the tail.
227
+ // A guard now notifies about more than one kind of
231
228
  // call — the whole-file write it cannot refuse, and, in a lane child, a refusable call whose refusal
232
229
  // is downgraded to a notice — and the two want different wording, so the text is a function of the
233
230
  // call. It is handed the tail as well so a notice can name the concrete calls the run just issued
@@ -252,18 +249,18 @@ interface TranscriptGuardSpec {
252
249
  should_block: (tail: string, call: GuardedCall, refused_at_ms: number, run: GuardRun) => boolean
253
250
  // What the model is told. The deny reason is the only text that reaches it.
254
251
  reason: string
255
- // **The optional notice disposition** (joshuafolkken/kit#1848). Supplied, it lets a guard emit a
252
+ // **The optional notice disposition**. Supplied, it lets a guard emit a
256
253
  // non-blocking notice for a call it does not refuse. Its record lives under a prefix of its own.
257
254
  notify?: NotifySpec
258
255
  }
259
256
 
260
- // What one hook invocation decided. **`fault` is the half that did not exist** (joshuafolkken/kit#1509):
257
+ // What one hook invocation decided. **`fault` is the half that did not exist**:
261
258
  // every failure still allows the call, but a failure that nobody can see is indistinguishable from a
262
259
  // run that was batching properly — so the guard could be dead for two hours and read as satisfied.
263
260
  // `reason` refuses; `fault` allows and says so.
264
261
  interface GuardOutcome {
265
262
  reason: string | undefined
266
- // **A notice, not a refusal** (joshuafolkken/kit#1848). Set where a notify-only call — a whole-file
263
+ // **A notice, not a refusal**. Set where a notify-only call — a whole-file
267
264
  // write — reached the limit; the call still proceeds, and `notice_envelope` carries this to the
268
265
  // model and the person with no `permissionDecision`. Never set together with `reason`: the block
269
266
  // path decides first and returns before the notice path is asked.
@@ -287,7 +284,7 @@ interface FireResult {
287
284
 
288
285
  // The three the guard closes over: the spec, and one record per disposition. Bundled so the functions
289
286
  // below stay within the parameter limit, and so a further disposition adds a field rather than a
290
- // parameter to every one of them (joshuafolkken/kit#1848).
287
+ // parameter to every one of them.
291
288
  interface GuardParts {
292
289
  spec: TranscriptGuardSpec
293
290
  stamp: RefusalStamp
@@ -306,7 +303,7 @@ interface GuardContext extends GuardParts {
306
303
  // cannot repeat on the call in hand. **Recording before firing is what makes a refusal unrepeatable**,
307
304
  // so a disposition that cannot record does not fire — it reports the fault instead of risking the
308
305
  // wedge, which is the half `scripts/hooks/batch-guard.ts` names. Shared by the refusal and the notice so the
309
- // arm-then-fire order is written once (joshuafolkken/kit#1848).
306
+ // arm-then-fire order is written once.
310
307
  function fire_once(
311
308
  stamp: RefusalStamp,
312
309
  run: GuardRun,
@@ -367,7 +364,7 @@ function guard_reason_for_payload(
367
364
  if (!parts.spec.is_candidate(call)) return NO_OUTCOME
368
365
 
369
366
  // A hook firing inside a delegated unit is handed the *parent's* path, so the fork's own file is
370
- // derived here rather than judged from the parent's frozen timeline (joshuafolkken/kit#1424).
367
+ // derived here rather than judged from the parent's frozen timeline.
371
368
  const transcript = time_hook_transcript.transcript_of(payload.transcript_path, payload.agent_id)
372
369
  const tail = time_density_hook.read_tail(transcript)
373
370
  const context = { ...parts, tail, call, run: { transcript, now_ms } }
@@ -393,7 +390,7 @@ function guard_outcome(parts: GuardParts, raw_payload: string, now_ms: number):
393
390
  function create_transcript_guard(spec: TranscriptGuardSpec): TranscriptGuard {
394
391
  const stamp = create_refusal_stamp(spec.prefix)
395
392
  // A record of its own for the notice, only where a notify spec is supplied. Keyed on its own prefix
396
- // so a notice never spends the refusal's stamp (joshuafolkken/kit#1848).
393
+ // so a notice never spends the refusal's stamp.
397
394
  const notify_stamp = spec.notify ? create_refusal_stamp(spec.notify.prefix) : undefined
398
395
  const parts = { spec, stamp, notify_stamp }
399
396
 
@@ -410,7 +407,7 @@ function create_transcript_guard(spec: TranscriptGuardSpec): TranscriptGuard {
410
407
  // same reason `format-edited-file.ts` swallows a formatter it could not start: a hook that failed
411
408
  // closed would stop a run over its own plumbing.
412
409
  //
413
- // **What changed is that it no longer does so in silence** (joshuafolkken/kit#1509). The call still
410
+ // **What changed is that it no longer does so in silence**. The call still
414
411
  // goes through — failing open is the right call and is not being revisited — but the fault comes
415
412
  // back as text the run can see, so "the guard said nothing" and "the guard could not look" stop
416
413
  // being the same observation.
@@ -430,8 +427,8 @@ function create_transcript_guard(spec: TranscriptGuardSpec): TranscriptGuard {
430
427
  }
431
428
 
432
429
  // Write one already-resolved outcome, so a caller that has to await its rule (the watcher guard reads
433
- // the lane registry and the life record) can compute the outcome first and hand it here
434
- // (joshuafolkken/kit#2353). Nothing reaches stdout on the ordinary call, so what the harness parses
430
+ // the lane registry and the life record) can compute the outcome first and hand it here.
431
+ // Nothing reaches stdout on the ordinary call, so what the harness parses
435
432
  // stays empty unless the call is being refused.
436
433
  function emit_outcome(outcome: GuardOutcome): void {
437
434
  const { reason, notice, fault } = outcome
@@ -453,9 +450,8 @@ function write_outcome(raw_payload: string, outcome: (raw: string) => GuardOutco
453
450
  // wrapper rather than a second implementation, so both paths write the same envelopes.
454
451
  //
455
452
  // **A guard still calling this discards any fault it raised** — `investigation-guard.ts` is the one
456
- // that does, so a stamp it could not write there is still silent. That is the same gap
457
- // joshuafolkken/kit#1509 closed for the batching guard, left standing deliberately: this Issue's
458
- // subject is the batching guard, and moving another hook across belongs with its own test.
453
+ // that does, so a stamp it could not write there is still silent — the gap the batching guard no
454
+ // longer has. Moving another hook across belongs with its own test.
459
455
  function write_decision(raw_payload: string, refusal: (raw: string) => string | undefined): void {
460
456
  write_outcome(raw_payload, (raw) => ({
461
457
  reason: refusal(raw),
@@ -37,6 +37,7 @@ const ALIASES: Record<string, string> = {
37
37
  lr: 'lint:related',
38
38
  ln: 'lines',
39
39
  by: 'bytes',
40
+ mt: 'metrics',
40
41
  f: 'format',
41
42
  sd: 'cspell:dot',
42
43
  bh: 'behavior',
@@ -80,10 +81,12 @@ const ALIASES: Record<string, string> = {
80
81
  ev: 'eval',
81
82
  lsm: 'lane:sample',
82
83
  lst: 'lane:stats',
84
+ lli: 'lane:limit',
85
+ blr: 'backlogrun',
83
86
  }
84
87
 
85
88
  // The canonical name of a `josh` subcommand: an alias expands, and anything else passes through
86
- // unchanged (joshuafolkken/kit#1789).
89
+ // unchanged.
87
90
  //
88
91
  // **The expansion is one rule, so it lives beside the table it reads.** Two readers had each written
89
92
  // their own `ALIASES[name] ?? name` — the layer report and the gate-run count — and a third, the run
@@ -6,9 +6,9 @@ import { ENV_FILE_NAME } from '#ports'
6
6
  //
7
7
  // **There is no mandatory counterpart any more.** `--env-file=.env` aborts before the script's first
8
8
  // line when the file is missing, which is wrong for every command kit ships: `doctor` runs from
9
- // anywhere, including a directory with no project at all (joshuafolkken/kit#869), and `notify` /
9
+ // anywhere, including a directory with no project at all, and `notify` /
10
10
  // `followup` run in cloud sessions that carry their credentials as environment variables and keep no
11
- // `.env` at all (joshuafolkken/kit#1564). A command that needs a value to be present says so itself,
11
+ // `.env` at all. A command that needs a value to be present says so itself,
12
12
  // where it can name what is missing.
13
13
  const OPTIONAL_ENV_FILE_FLAGS: ReadonlyArray<string> = [`--env-file-if-exists=${ENV_FILE_NAME}`]
14
14
 
@@ -17,7 +17,7 @@ type CommandCategory =
17
17
 
18
18
  // The two vocabularies are runtime tuples the types are derived from, rather than bare unions. A
19
19
  // union exists only at compile time, so the completeness test and the generated reference
20
- // (joshuafolkken/kit#2064) would each have to restate the values to check or render them — two
20
+ // would each have to restate the values to check or render them — two
21
21
  // copies that drift apart silently. Deriving the type from the tuple keeps one definition.
22
22
  const COMMAND_AUDIENCES = ['developer', 'maintainer', 'automation'] as const
23
23
  const COMMAND_SIDE_EFFECTS = [
@@ -57,21 +57,21 @@ interface CommandEntry {
57
57
  // A command that only makes sense inside the kit repository itself — the rule-compliance eval and
58
58
  // the run measurements that analyze kit's own development. It is dropped from a consumer's
59
59
  // `josh --help` and refused with guidance when run in a consumer project, so a distributed help
60
- // listing carries only what a consumer can run (joshuafolkken/kit#1988). The audience in
60
+ // listing carries only what a consumer can run. The audience in
61
61
  // `reference` separately decides whether the command appears in the default listing.
62
62
  is_kit_only?: boolean
63
63
  // Pre-built to `dist/commands/` so a consumer's `dist/josh.js` imports it in its own process
64
- // instead of spawning tsx for it (joshuafolkken/kit#3328, `docs/maintainers/runtime-bundling.md`).
64
+ // instead of spawning tsx for it (`docs/maintainers/runtime-bundling.md`).
65
65
  is_bundled?: boolean
66
- // The cores the command reserves from the machine-wide budget before it starts its heavy tools
67
- // (joshuafolkken/kit#3345). `josh-logic.ts` claims them at the one dispatch point every command
66
+ // The cores the command reserves from the machine-wide budget before it starts its heavy tools.
67
+ // `josh-logic.ts` claims them at the one dispatch point every command
68
68
  // passes through, so the command only declares the number. A function means the weight is read
69
69
  // when the command starts: the unit suite's share depends on what else is running at that moment.
70
70
  // **The edit hook declares none, on purpose.** It formats one file per edit and finishes in well
71
71
  // under a second, so a wait for room on the machine would stall every edit for the length of
72
72
  // another lane's check.
73
73
  core_weight?: number | (() => number)
74
- // The memory the command's tools hold, claimed with its cores (joshuafolkken/kit#3371); read like
74
+ // The memory the command's tools hold, claimed with its cores; read like
75
75
  // `core_weight`, and none declared is none waited for.
76
76
  memory_mb?: number | (() => number)
77
77
  }
@@ -79,23 +79,21 @@ interface CommandEntry {
79
79
  // The name `josh gate` registers under. It lives here rather than in `verification-gate.ts` so a
80
80
  // consumer of the name — the command map, `propagate` — does not import the script module: that
81
81
  // module carries a `process.argv[1] === import.meta.url` main guard, and esbuild bundles every
82
- // import into one `dist/josh.js` where that guard matches on *any* `josh` invocation
83
- // (joshuafolkken/kit#914).
82
+ // import into one `dist/josh.js` where that guard matches on *any* `josh` invocation.
84
83
  const GATE_COMMAND = 'gate'
85
84
 
86
- // joshuafolkken/kit#1256: three of the gate's four checks keep a content-addressed cache, so a
87
- // second run reads only what changed. eslint had one from the start; the type check and the spell
88
- // check rescanned the whole tree every time, which cost 10.5s of CPU against 2.8s cached.
85
+ // Three of the gate's four checks keep a content-addressed cache, so a second run reads only what
86
+ // changed.
89
87
  //
90
- // Neither of those two needs an invalidation rule of its own. `tsc` records the compiler options
91
- // inside the build-info file and re-checks everything when they differ, and `cspell` records a
92
- // content hash of every config and dictionary file it loaded as that entry's dependency — so editing
88
+ // Neither the type check nor the spell check needs an invalidation rule of its own. `tsc` records
89
+ // the compiler options inside the build-info file and re-checks everything when they differ, and
90
+ // `cspell` records a content hash of every config and dictionary file it loaded as that entry's dependency — so editing
93
91
  // `tsconfig.json` or `cspell.config.yaml` invalidates what it should. CI restores only the eslint
94
92
  // cache (`.github/workflows/ci.yml` → "Setup ESLint cache"); the other two start every run cold.
95
93
  //
96
- // **eslint's does need one, and it is not here** (joshuafolkken/kit#1347). ESLint hashes the
97
- // *serialized* config, which drops every rule's `create`, so editing `eslint/rules/*.js` left every
98
- // cached entry valid on every cache file below. The fix is a content fingerprint of the rule modules
94
+ // **eslint's does need one, and it is not here**. ESLint hashes the
95
+ // *serialized* config, which drops every rule's `create`, so editing `eslint/rules/*.js` would leave
96
+ // every cached entry valid on every cache file below. The answer is a content fingerprint of the rule modules
99
97
  // carried in the shared config's `settings` — `eslint/config-fingerprint.js` — because one value
100
98
  // there invalidates the gate's cache, the scoped one and the edit hook's at once, while a rule
101
99
  // written per cache file would have to be repeated for each and would go stale one file at a time.
@@ -153,10 +151,9 @@ const SHARED_CACHE_SPECS: ReadonlyArray<GateCacheSpec> = [
153
151
  ]
154
152
  const GATE_CACHE_FILES: ReadonlyArray<string> = GATE_CACHE_SPECS.map((spec) => spec.cache_file)
155
153
 
156
- // joshuafolkken/kit#1332: the `PostToolUse` edit hook runs eslint too, and ESLint *deletes* the file
157
- // at `--cache-location` whenever it is started without `--cache` — so every single edit wiped the
158
- // cache the gate had just filled, and both gates of run joshuafolkken/kit#1326 paid a cold lint
159
- // (59.4s and 54.5s, against 3.0s warm). The hook is given a location of its own rather than the
154
+ // The `PostToolUse` edit hook runs eslint too, and ESLint *deletes* the file at `--cache-location`
155
+ // whenever it is started without `--cache` — so a shared file would be wiped by every single edit,
156
+ // leaving the gate a cold lint. The hook is given a location of its own rather than the
160
157
  // gate's because the two run at the same time: `josh gate` lints the whole tree beside the review
161
158
  // while this hook fires on every edit, and each eslint run rewrites its cache file whole from the
162
159
  // copy it loaded at start-up — so two writers silently discard each other's entries. A file of its
@@ -165,18 +162,16 @@ const GATE_CACHE_FILES: ReadonlyArray<string> = GATE_CACHE_SPECS.map((spec) => s
165
162
  // **Pruning is not the reason**, though it reads like one: `file-entry-cache` defaults `noPrune` to
166
163
  // true, and a single-file run against the gate's full cache was measured byte-identical, so a shared
167
164
  // file would keep the entries that run never visited.
168
- // joshuafolkken/kit#1347: the same reasoning, reached a second time. `josh lint:related` is what an
169
- // implementation loop calls between edits, and `josh gate` lints the whole tree beside the review —
170
- // so those two run at the same time as readily as the hook and the gate do, and they shared one file
171
- // until this constant existed. Whichever of the pair wrote last replaced the file with "the copy I
172
- // loaded at start-up plus what I visited", so a narrowed run finishing during a whole-tree run rolled
173
- // the cache back to its pre-gate state, and a whole-tree run finishing second discarded the narrowed
174
- // one's entries.
165
+ // The same reasoning for the scoped lint. `josh lint:related` is what an implementation loop calls
166
+ // between edits, and `josh gate` lints the whole tree beside the review — so those two run at the
167
+ // same time as readily as the hook and the gate do. Whichever of a pair sharing one file wrote last
168
+ // would replace it with "the copy I loaded at start-up plus what I visited", so a narrowed run
169
+ // finishing during a whole-tree run would roll the cache back to its pre-gate state, and a
170
+ // whole-tree run finishing second would discard the narrowed one's entries.
175
171
  //
176
- // **The warming this gives up is worth less than the entries it stops losing.** The comment this
177
- // replaced argued the shared file let a narrowed run warm the gate's cache, which is true only while
178
- // the two never overlap; a file of its own is warm from its own second call onwards, and the gate's
179
- // stays exactly as the gate left it.
172
+ // **The warming this gives up is worth less than the entries it stops losing.** A shared file would
173
+ // let a narrowed run warm the gate's cache only while the two never overlap; a file of its own is
174
+ // warm from its own second call onwards, and the gate's stays exactly as the gate left it.
180
175
  //
181
176
  // **The lint's target scope is untouched.** This is where a cache is written, not what is read:
182
177
  // `josh lint:related` narrows in front of the gate and `josh gate` still runs `josh lint` over the
@@ -212,7 +207,7 @@ const CSPELL_CACHE_FLAGS = content_cache_flags(CSPELL_CACHE_FILE)
212
207
 
213
208
  export type { CommandCategory, CommandEntry, GateCacheSpec }
214
209
  // The three cache files are exported one by one as well as as a list, because `josh bench` clears
215
- // them per target (joshuafolkken/kit#1314): the lint step writes only the eslint one, so a target
210
+ // them per target: the lint step writes only the eslint one, so a target
216
211
  // that cleared the list would report a cold type check as the lint's own cost. The edit hook's cache
217
212
  // stays private; the scoped lint cache is exported because #2060 shares its completed file between
218
213
  // worktrees, but it still never overlaps the gate's distinct cache location.
@@ -77,12 +77,12 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
77
77
  reference: ['[options]', 'maintainer', ['none']],
78
78
  // Kit-only: it measures kit's own development runs and its report modules live under the
79
79
  // undistributed `scripts/time/`, so it means nothing in a consumer project and is dropped from a
80
- // consumer's help (joshuafolkken/kit#1997). The runtime analysis hooks and guards rely on stays
80
+ // consumer's help. The runtime analysis hooks and guards rely on stays
81
81
  // distributed under `scripts/time-runtime/`.
82
82
  is_kit_only: true,
83
83
  },
84
84
  // The tool-calls-per-round-trip density the batching guard is measured on, aggregated across the
85
- // recent lane sessions (joshuafolkken/kit#2405). Kit-only for the same reason `time` is: it reads
85
+ // recent lane sessions. Kit-only for the same reason `time` is: it reads
86
86
  // kit's own lane transcripts and means nothing in a consumer project.
87
87
  'time:density': {
88
88
  script: 'scripts/time/time-density-cli.ts',
@@ -99,7 +99,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
99
99
  reference: ['', 'maintainer', ['none']],
100
100
  // Kit-only: it reads kit's own development run — the transcript store, the review ledger and the
101
101
  // run event stream — so it means nothing in a consumer project and is dropped from a consumer's
102
- // help (joshuafolkken/kit#2328), through the same declaration `josh time` uses for the same reason.
102
+ // help, through the same declaration `josh time` uses for the same reason.
103
103
  is_kit_only: true,
104
104
  },
105
105
  'review:brief': {
@@ -156,7 +156,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
156
156
  category: 'AI tools',
157
157
  reference: ['[--join]', 'automation', ['processes', 'files']],
158
158
  },
159
- // The post-merge sequence a run closed on, folded into one call (joshuafolkken/kit#2372): commit the
159
+ // The post-merge sequence a run closed on, folded into one call: commit the
160
160
  // observation ledger, read the completion citations and decide the release scope. `observations:flush`,
161
161
  // `issue:cite` and `release:scope` were three round trips re-billing the run's full context each.
162
162
  'run:tail': {
@@ -166,7 +166,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
166
166
  category: 'AI tools',
167
167
  reference: ['[<issue> ...]', 'automation', ['git', 'network']],
168
168
  },
169
- // The commit-to-report region a run ships a change on, folded into one call (joshuafolkken/kit#2398):
169
+ // The commit-to-report region a run ships a change on, folded into one call:
170
170
  // the gate, the commit/push/PR (`git -y`), the CI-wait merge (`followup`) and the report bookkeeping
171
171
  // (`run:tail`) were four round trips re-billing the run's full context each. It stops at the first
172
172
  // failed step and names it, so the run reads only the step to fix.
@@ -231,7 +231,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
231
231
  category: 'AI tools',
232
232
  reference: ['[scenario...]', 'maintainer', ['processes', 'network']],
233
233
  // Kit-only: it replays kit's own distributed rules against real Claude sessions, so it means
234
- // nothing in a consumer project and is dropped from a consumer's help (joshuafolkken/kit#1988).
234
+ // nothing in a consumer project and is dropped from a consumer's help.
235
235
  is_kit_only: true,
236
236
  },
237
237
  }
@@ -1,12 +1,24 @@
1
1
  import { OPTIONAL_ENV_FILE_FLAGS, type CommandEntry } from './josh-command-types'
2
2
 
3
3
  // The `backlog:*` command registry, split out of `josh-commands-ai.ts` so that file stays under its
4
- // 300-code-line limit, exactly as `LANE_COMMANDS` and `SPLIT_COMMANDS` were for the same reason
5
- // (joshuafolkken/kit#2162, joshuafolkken/kit#2218). It is spread into `AI_COMMANDS` so the commands
4
+ // 300-code-line limit, exactly as `LANE_COMMANDS` and `SPLIT_COMMANDS` were for the same reason.
5
+ // It is spread into `AI_COMMANDS` so the commands
6
6
  // stay grouped with the other AI tools under the 'AI tools' category.
7
7
 
8
8
  /* eslint-disable @typescript-eslint/naming-convention */
9
9
  const BACKLOG_COMMANDS: Record<string, CommandEntry> = {
10
+ // Started from a terminal: the `backlogrun` keyword's launcher, and the board.
11
+ backlogrun: {
12
+ script: 'scripts/backlog/backlogrun-cli.ts',
13
+ description:
14
+ 'Start a backlogrun in the background and show its board; with one already running, only show the board',
15
+ category: 'AI tools',
16
+ reference: [
17
+ '[#<n>...] [--only] [--max <n>] [--idle <minutes>] [--agent claude|codex]',
18
+ 'developer',
19
+ ['files', 'network', 'processes'],
20
+ ],
21
+ },
10
22
  'backlog:next': {
11
23
  script: 'scripts/backlog/backlog-next.ts',
12
24
  description:
@@ -41,7 +53,7 @@ const BACKLOG_COMMANDS: Record<string, CommandEntry> = {
41
53
  },
42
54
  'backlog:stalled': {
43
55
  script: 'scripts/backlog/backlog-stalled-cli.ts',
44
- // A stall sends one Telegram warning (joshuafolkken/kit#3357). The `Stop` hook calls the detector
56
+ // A stall sends one Telegram warning. The `Stop` hook calls the detector
45
57
  // directly, so this flag costs only the manual command its in-process dispatch.
46
58
  tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
47
59
  description:
@@ -1,7 +1,7 @@
1
1
  import type { CommandEntry } from './josh-command-types'
2
2
 
3
3
  // The clone-detection commands, kept in their own module so `josh-commands-ai.ts` stays under its
4
- // line ceiling as the AI-tools set grows (joshuafolkken/kit#2217). Spread into `COMMAND_MAP` in
4
+ // line ceiling as the AI-tools set grows. Spread into `COMMAND_MAP` in
5
5
  // `josh-command-map.ts` alongside the other command groups.
6
6
  /* eslint-disable @typescript-eslint/naming-convention */
7
7
  const CLONE_COMMANDS: Record<string, CommandEntry> = {
@@ -46,6 +46,20 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
46
46
  core_weight: core_budget.CORE_WEIGHTS.eslint_scan,
47
47
  memory_mb: core_budget.MEMORY_MB.eslint_scan,
48
48
  },
49
+ metrics: {
50
+ script: 'scripts/metrics/metrics-command.ts',
51
+ description:
52
+ 'Print repository-wide quality totals and durations, and fail when a total grew past the merge-base or a duration past its baseline',
53
+ category: 'Development',
54
+ reference: [
55
+ '[--no-startup | --totals-only | --accept --reason "<why>"]',
56
+ 'developer',
57
+ ['files'],
58
+ ],
59
+ core_weight: core_budget.CORE_WEIGHTS.eslint_scan,
60
+ memory_mb: core_budget.MEMORY_MB.eslint_scan,
61
+ is_kit_only: true,
62
+ },
49
63
  'refactor:scan': {
50
64
  script: 'scripts/refactor/refactor-scan-cli.ts',
51
65
  description:
@@ -69,6 +83,13 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
69
83
  category: 'AI tools',
70
84
  reference: ['[--refresh]', 'developer', ['files']],
71
85
  },
86
+ 'rule:list': {
87
+ script: 'scripts/rules/rule-list.ts',
88
+ description:
89
+ "Print the trigger-delivered rules — each one's source, firing call and silent turn — from the guard rows",
90
+ category: 'AI tools',
91
+ reference: ['', 'automation', ['none']],
92
+ },
72
93
  format: {
73
94
  script: 'scripts/lint/format.ts',
74
95
  description: 'Format code with prettier and eslint (skips a tool a basic project lacks)',
@@ -90,8 +111,8 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
90
111
  // **No `tsx_arguments`, deliberately.** `JOSH_BATCH_GUARD` is a per-machine preference kept in
91
112
  // `.env`, which every other command reads through `OPTIONAL_ENV_FILE_FLAGS` — but declaring any
92
113
  // `tsx_arguments` disqualifies a command from in-process dispatch (`josh-in-process.ts`), and
93
- // this one runs before every `Bash` call. That is the hot path joshuafolkken/kit#1342 took a
94
- // second ~0.16 s tsx start off. The script calls `process.loadEnvFile` itself instead, which is
114
+ // this one runs before every `Bash` call, where a second ~0.16 s tsx start is not affordable.
115
+ // The script calls `process.loadEnvFile` itself instead, which is
95
116
  // node's own `--env-file` parser with node's own precedence.
96
117
  },
97
118
  'pretool:guard': {
@@ -118,7 +139,7 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
118
139
  'session:lang': {
119
140
  script: 'scripts/josh/session-language-cli.ts',
120
141
  description:
121
- 'Claude Code hook: print the resolved JOSH_SESSION_LANG (defaults to ja) for the session context',
142
+ 'Claude Code hook: print a non-default JOSH_SESSION_LANG for the session context, and the run:board reply rule while a backlogrun is live (otherwise nothing)',
122
143
  category: 'Development',
123
144
  reference: ['', 'automation', ['none']],
124
145
  // **No `tsx_arguments`, deliberately**, the same as `batch:guard` above: this runs on every
@@ -132,7 +153,7 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
132
153
  category: 'Development',
133
154
  reference: ['<pretool|posttool>', 'automation', ['none']],
134
155
  // The live-source fallback `scripts/hooks/run-hook.sh` derives from the `codex-hook-adapter`
135
- // bundle name (joshuafolkken/kit#3184). **No `tsx_arguments`**, the same as `pretool:guard`
156
+ // bundle name. **No `tsx_arguments`**, the same as `pretool:guard`
136
157
  // above: it runs before every guarded Codex call.
137
158
  },
138
159
  'cspell:dot': {
@@ -1,10 +1,10 @@
1
1
  import type { CommandEntry } from './josh-command-types'
2
2
 
3
3
  // The document-reading and -editing command registry, split out of `josh-commands-ai.ts` so that file
4
- // stays under its 300-code-line limit, exactly as `SPLIT_COMMANDS` was for the same reason
5
- // (joshuafolkken/kit#2162, joshuafolkken/kit#2218, joshuafolkken/kit#2366). It is spread into
4
+ // stays under its 300-code-line limit, exactly as `SPLIT_COMMANDS` was for the same reason.
5
+ // It is spread into
6
6
  // `AI_COMMANDS` so the commands stay grouped under the 'AI tools' category. `read:files` and
7
- // `edit:files` are the read/write halves of the round-trip fold (joshuafolkken/kit#2202 / #2366).
7
+ // `edit:files` are the read/write halves of the round-trip fold.
8
8
 
9
9
  /* eslint-disable @typescript-eslint/naming-convention */
10
10
  const DOCUMENT_COMMANDS: Record<string, CommandEntry> = {
@@ -1,11 +1,11 @@
1
1
  import type { CommandEntry } from './josh-command-types'
2
2
 
3
3
  // The `PreToolUse` guard registry, split out of `josh-commands-ai.ts` so that file stays under its
4
- // 300-code-line limit, exactly as `LANE_COMMANDS` and `SPLIT_COMMANDS` were for the same reason
5
- // (joshuafolkken/kit#2162, joshuafolkken/kit#2218, joshuafolkken/kit#2298). It is spread into
4
+ // 300-code-line limit, exactly as `LANE_COMMANDS` and `SPLIT_COMMANDS` were for the same reason.
5
+ // It is spread into
6
6
  // `AI_COMMANDS` so the guards stay grouped with the other AI tools.
7
7
  //
8
- // **None declare `tsx_arguments`, for the reason `batch:guard` declares none** (joshuafolkken/kit#1342):
8
+ // **None declare `tsx_arguments`, for the reason `batch:guard` declares none**:
9
9
  // declaring any disqualifies a command from in-process dispatch, and these run in front of every read
10
10
  // or shell call. Each script calls `process.loadEnvFile` itself instead, through `hook-decision.ts`.
11
11
 
@@ -1,7 +1,7 @@
1
1
  import type { CommandEntry } from './josh-command-types'
2
2
 
3
3
  // The issue-reading and issue-citation commands, split out of `josh-commands-ai.ts` when the mandated
4
- // `issue:cite` section pushed that file past its 300-line ceiling (joshuafolkken/kit#2220) — the same
4
+ // `issue:cite` section pushed that file past its 300-line ceiling — the same
5
5
  // group-per-file shape `LANE_COMMANDS` and `SPLIT_COMMANDS` already take. `COMMAND_MAP` spreads this
6
6
  // in, so nothing downstream sees where an entry lives.
7
7
 
@@ -33,8 +33,7 @@ const ISSUE_COMMANDS: Record<string, CommandEntry> = {
33
33
  },
34
34
  'defect:rate': {
35
35
  script: 'scripts/issue/defect-rate-cli.ts',
36
- description:
37
- 'Print the defect rate of merged work: defects filed per behavior change completed',
36
+ description: 'Print the defect rate of merged work: defects filed per enhancement completed',
38
37
  category: 'AI tools',
39
38
  reference: ['[--days <n>]', 'automation', ['network']],
40
39
  },
@@ -66,10 +65,10 @@ const ISSUE_COMMANDS: Record<string, CommandEntry> = {
66
65
  'issue:file': {
67
66
  script: 'scripts/issue/issue-file-cli.ts',
68
67
  description:
69
- 'File an Issue with every filing step: lint, Origin, WIP cap, duplicate scout, labels, then epic:bundle',
68
+ 'File an Issue with every filing step: lint, Origin, fold, WIP cap, duplicate scout, labels, then epic:bundle',
70
69
  category: 'AI tools',
71
70
  reference: [
72
- '<title> --body-file <path> --depth <0|1|2> [--route <route>] [--label <name>] [--repo <owner/repo>] [--distinct <N,…>] [--over-cap] [--no-auto-ok] [--release]',
71
+ '<title> --body-file <path> --depth <0|1|2> [--route <route>] [--label <name>] [--repo <owner/repo>] [--distinct <N,…>] [--over-cap] [--no-auto-ok] [--requested] [--release]',
73
72
  'automation',
74
73
  ['network'],
75
74
  ],
@@ -1,7 +1,7 @@
1
1
  import { OPTIONAL_ENV_FILE_FLAGS, type CommandEntry } from './josh-command-types'
2
2
 
3
3
  // The `lane:*` command registry, split out of `josh-commands-ai.ts` so that file stays under its line
4
- // limit (joshuafolkken/kit#2162). One script answers `lane:open` / `lane:close` / `lane:list` /
4
+ // limit. One script answers `lane:open` / `lane:close` / `lane:list` /
5
5
  // `lane:prune` / `lane:output` / `lane:dispatch` / `lane:await`, told apart by the verb below;
6
6
  // `lane:launch` is the composite that opens, pops-and-installs on the first lane, and dispatches.
7
7
  const LANE_SCRIPT = 'scripts/lane/lane-cli.ts'
@@ -74,12 +74,22 @@ const LANE_COMMANDS: Record<string, CommandEntry> = {
74
74
  category: 'AI tools',
75
75
  reference: ['<issue> [--stash <message>]', 'automation', ['files', 'git', 'processes']],
76
76
  },
77
- // The lane-limit measurement (joshuafolkken/kit#3355): `.env` is read so `lane:stats` labels the row
77
+ // A live run's lane limit: `.env` is read so the bare form reports the
78
+ // `JOSH_LANE_LIMIT` a person set there when no override stands.
79
+ 'lane:limit': {
80
+ script: 'scripts/lane/lane-limit-cli.ts',
81
+ tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
82
+ description:
83
+ 'Change a live backlogrun’s lane limit without stopping it, or print the limit, lanes in use and free lanes',
84
+ category: 'AI tools',
85
+ reference: ['[<limit>] [--reset]', 'developer', ['files']],
86
+ },
87
+ // The lane-limit measurement: `.env` is read so `lane:stats` labels the row
78
88
  // with the `JOSH_LANE_LIMIT` a person set there.
79
89
  'lane:sample': {
80
90
  ...MEASURE_ARGUMENTS,
81
91
  description:
82
- 'Record the machine load (load average, swap, free memory, working lanes) to the lane ledger',
92
+ 'Record the machine load (load average, swap, free memory, working lanes) to the lane ledger — a backlogrun samples itself, this is for a reading outside one',
83
93
  category: 'AI tools',
84
94
  reference: ['[--every <seconds>]', 'maintainer', ['files']],
85
95
  default_script_arguments: ['sample'],
@@ -87,7 +97,7 @@ const LANE_COMMANDS: Record<string, CommandEntry> = {
87
97
  'lane:stats': {
88
98
  ...MEASURE_ARGUMENTS,
89
99
  description:
90
- 'Print one table row of lane throughput, gate duration and machine load over a period',
100
+ 'Print one table row of lane throughput, gate duration and machine load over a period, and the per-stage durations of a lane under it',
91
101
  category: 'AI tools',
92
102
  reference: ['--period <days> [--limit <lane-limit>]', 'maintainer', ['none']],
93
103
  default_script_arguments: ['stats'],
@@ -1,6 +1,6 @@
1
1
  import type { CommandEntry } from './josh-command-types'
2
2
 
3
- // The linters for the fixed-shape artifacts a run writes by hand (joshuafolkken/kit#2123). They are
3
+ // The linters for the fixed-shape artifacts a run writes by hand. They are
4
4
  // `AI tools` by category, like every other automation command, but live in their own file so
5
5
  // `josh-commands-ai.ts` stays under its line ceiling.
6
6