@joshuafolkken/kit 1.1050.0 → 1.1094.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 (581) hide show
  1. package/.claude/settings.json +9 -8
  2. package/.claude/skills/epic-commands/SKILL.md +5 -7
  3. package/.claude/skills/workflow-commands/SKILL.md +19 -11
  4. package/.claude/skills/workflow-commands/background-commands.md +4 -3
  5. package/.claude/skills/workflow-commands/backlogrun-child.md +1 -1
  6. package/.claude/skills/workflow-commands/backlogrun-lanes.md +8 -6
  7. package/.claude/skills/workflow-commands/backlogrun-progress.md +1 -1
  8. package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
  9. package/.claude/skills/workflow-commands/backlogrun.md +2 -2
  10. package/.claude/skills/workflow-commands/chain-rule.md +4 -2
  11. package/.claude/skills/workflow-commands/delegation.md +3 -3
  12. package/.claude/skills/workflow-commands/followup-reference.md +1 -1
  13. package/.claude/skills/workflow-commands/followup.md +7 -3
  14. package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
  15. package/.claude/skills/workflow-commands/fullrun.md +3 -2
  16. package/.claude/skills/workflow-commands/halfrun.md +16 -19
  17. package/.claude/skills/workflow-commands/issue-comments.md +1 -1
  18. package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
  19. package/.claude/skills/workflow-commands/issue-scout.md +1 -1
  20. package/.claude/skills/workflow-commands/kickoff.md +9 -4
  21. package/.claude/skills/workflow-commands/latest-gate.md +1 -1
  22. package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
  23. package/.claude/skills/workflow-commands/observation-filing.md +3 -3
  24. package/.claude/skills/workflow-commands/prerequisite.md +1 -1
  25. package/.claude/skills/workflow-commands/prrun.md +36 -0
  26. package/.claude/skills/workflow-commands/retrospective.md +1 -1
  27. package/.claude/skills/workflow-commands/working-tree-hold.md +22 -2
  28. package/.codex/hooks.json +16 -20
  29. package/.github/actions/setup-pnpm/action.yml +93 -0
  30. package/.github/dependabot.yml +5 -1
  31. package/.github/workflows/ci.yml +26 -128
  32. package/.github/workflows/pr-classification.yml +5 -41
  33. package/.github/workflows/publish.yml +33 -38
  34. package/.github/workflows/sonar-qube.yml +37 -4
  35. package/AGENTS.md +12 -2
  36. package/CLAUDE.md +15 -16
  37. package/GEMINI.md +14 -2
  38. package/README.md +59 -18
  39. package/SECURITY.md +36 -6
  40. package/cspell/index.yaml +2 -1
  41. package/dist/CLAUDE.md +15 -16
  42. package/dist/config-merge/index.js +15 -3
  43. package/dist/hooks/batch-guard.js +4 -4
  44. package/dist/hooks/{chunk-HJIISEAC.js → chunk-3C4YCCEF.js} +5 -13
  45. package/dist/hooks/{chunk-EJDX2TOB.js → chunk-7ZPFAVR7.js} +7 -88
  46. package/dist/hooks/{chunk-WQ4OSBSS.js → chunk-E54KGFEQ.js} +2 -2
  47. package/dist/hooks/{chunk-GQ7KP45M.js → chunk-IL27YTPH.js} +2 -2
  48. package/dist/hooks/{chunk-DMQN45FN.js → chunk-KHWHKJOM.js} +3 -3
  49. package/dist/hooks/{chunk-5BK3K7V4.js → chunk-M2XDCUKD.js} +997 -478
  50. package/dist/hooks/{chunk-7VPDUBRN.js → chunk-NKOG3XAV.js} +150 -153
  51. package/dist/hooks/{chunk-NJQOBE6L.js → chunk-O4LL4HTI.js} +2 -7
  52. package/dist/hooks/{chunk-NAS4C7GP.js → chunk-OIZUHPJI.js} +2 -2
  53. package/dist/hooks/{chunk-RLDX5SOC.js → chunk-UD24EAIL.js} +2084 -1412
  54. package/dist/hooks/codex-hook-adapter.js +10 -11
  55. package/dist/hooks/duplicate-read-guard.js +5 -5
  56. package/dist/hooks/format-edited.js +2 -2
  57. package/dist/hooks/inputs.json +279 -0
  58. package/dist/hooks/investigation-guard.js +5 -5
  59. package/dist/hooks/pretool-guard.js +9 -9
  60. package/dist/hooks/session-lang.js +0 -1
  61. package/dist/hooks/stop-guard.js +178 -324
  62. package/dist/josh.js +162 -119
  63. package/dist/managed-marker/index.js +2 -1
  64. package/dist/version/index.js +34 -58
  65. package/eslint/rules/promise.js +5 -0
  66. package/package.json +9 -4
  67. package/prompts/collaboration-workflow/issue-citation.md +5 -5
  68. package/prompts/collaboration-workflow/operating-rules.md +4 -4
  69. package/prompts/collaboration-workflow/overview.md +13 -1
  70. package/prompts/collaboration-workflow/report-format.md +1 -1
  71. package/prompts/collaboration-workflow/residency.md +3 -3
  72. package/prompts/collaboration-workflow/rule-delivery.md +1 -1
  73. package/prompts/collaboration-workflow/turn-batching.md +3 -3
  74. package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
  75. package/prompts/collaboration-workflow/wip-cap.md +25 -22
  76. package/prompts/collaboration-workflow.md +5 -8
  77. package/prompts/review-rubric.md +1 -1
  78. package/prompts/review.md +3 -3
  79. package/prompts/sonar-hotspot-handling.md +11 -3
  80. package/prompts/testing-guide.md +3 -3
  81. package/scripts/adopt/adopt-toolkits.ts +0 -2
  82. package/scripts/adopt/adopt.ts +0 -2
  83. package/scripts/agent/agent-argv.ts +0 -2
  84. package/scripts/agent/agent-diagnostics.ts +1 -1
  85. package/scripts/agent/agent-role-profile.ts +0 -7
  86. package/scripts/agent/claude-agent-argv.ts +0 -2
  87. package/scripts/agent/codex-agent-argv.ts +1 -1
  88. package/scripts/agent/codex-hooks.ts +92 -0
  89. package/scripts/agent/interactive-ask.ts +1 -1
  90. package/scripts/auto-ok/auto-ok-cli.ts +6 -16
  91. package/scripts/backlog/backlog-budget.ts +0 -2
  92. package/scripts/backlog/backlog-defect-priority.ts +2 -2
  93. package/scripts/backlog/backlog-drive-cli.ts +10 -8
  94. package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
  95. package/scripts/backlog/backlog-drive-named.ts +2 -1
  96. package/scripts/backlog/backlog-drive.ts +76 -16
  97. package/scripts/backlog/backlog-named.ts +0 -3
  98. package/scripts/backlog/backlog-next.ts +9 -15
  99. package/scripts/backlog/backlog-offer-cli.ts +0 -5
  100. package/scripts/backlog/backlog-plan-cli.ts +1 -7
  101. package/scripts/backlog/backlog-plan.ts +1 -1
  102. package/scripts/backlog/backlog-pool.ts +3 -6
  103. package/scripts/backlog/backlog-rank.ts +2 -2
  104. package/scripts/backlog/backlog-ready.ts +19 -3
  105. package/scripts/backlog/backlog-scope.ts +1 -3
  106. package/scripts/backlog/backlog-stalled-detect.ts +2 -2
  107. package/scripts/backlog/backlog-stalled.ts +0 -1
  108. package/scripts/backlog/backlog-waves.ts +5 -2
  109. package/scripts/behavior/behavior-cli.ts +1 -1
  110. package/scripts/build/build-codex-hooks.ts +26 -0
  111. package/scripts/build/build-hooks.ts +85 -9
  112. package/scripts/build/hook-bundle-stamp.ts +111 -0
  113. package/scripts/cases/cases-cli.ts +1 -1
  114. package/scripts/cases/cases-logic.ts +1 -1
  115. package/scripts/ci/composite-actions.ts +30 -0
  116. package/scripts/ci/pr-classification.ts +3 -3
  117. package/scripts/claude/workflow-destination.ts +10 -1
  118. package/scripts/clone/clone-fingerprint.ts +0 -1
  119. package/scripts/clone/clone-scan-cli.ts +1 -1
  120. package/scripts/clone/clone-scan.ts +1 -1
  121. package/scripts/config-merge/json-format.ts +0 -1
  122. package/scripts/config-merge/patch-yaml-list.ts +1 -1
  123. package/scripts/cost-runtime/codex-usage.ts +2 -9
  124. package/scripts/cost-runtime/cost-attribute.ts +0 -1
  125. package/scripts/cost-runtime/cost-cli.ts +0 -3
  126. package/scripts/cost-runtime/cost-corpus.ts +0 -2
  127. package/scripts/cost-runtime/cost-format.ts +0 -3
  128. package/scripts/cost-runtime/cost-pricing.ts +0 -1
  129. package/scripts/cost-runtime/cost-tokens.ts +0 -1
  130. package/scripts/delegation/delegation-cli.ts +1 -1
  131. package/scripts/delegation/delegation-policy.ts +0 -1
  132. package/scripts/delegation/duplicate-read-guard.ts +0 -8
  133. package/scripts/delegation/fanout-cli.ts +1 -1
  134. package/scripts/delegation/fanout.ts +0 -2
  135. package/scripts/delegation/investigation-reads.ts +1 -164
  136. package/scripts/discovery/repo-map-logic.ts +0 -1
  137. package/scripts/discovery/repo-party-cli.ts +1 -1
  138. package/scripts/doctor/doctor-consumer.ts +4 -6
  139. package/scripts/doctor/doctor-logic.ts +0 -4
  140. package/scripts/doctor/doctor.ts +14 -9
  141. package/scripts/document/document-byte-budget.ts +4 -5
  142. package/scripts/document/document-byte-check.ts +0 -1
  143. package/scripts/document/document-read-cli.ts +0 -2
  144. package/scripts/document/document-section-cli.ts +1 -1
  145. package/scripts/document/document-section.ts +0 -3
  146. package/scripts/document/edit-files-cli.ts +0 -1
  147. package/scripts/document/entry-read-budget.ts +10 -2
  148. package/scripts/document/lane-child-read-set.ts +1 -6
  149. package/scripts/document/read-files-cli.ts +0 -4
  150. package/scripts/document/read-set-cli.ts +0 -2
  151. package/scripts/document/read-set-point-of-use.ts +1 -0
  152. package/scripts/document/read-set-pricing.ts +0 -1
  153. package/scripts/document/read-set-trim.ts +1 -1
  154. package/scripts/epic/epic-add.ts +1 -1
  155. package/scripts/epic/epic-audit-cli.ts +1 -4
  156. package/scripts/epic/epic-audit-orphans.ts +1 -3
  157. package/scripts/epic/epic-audit-rationale.ts +0 -1
  158. package/scripts/epic/epic-audit-report.ts +0 -2
  159. package/scripts/epic/epic-audit.ts +5 -4
  160. package/scripts/epic/epic-bundle-cli.ts +1 -1
  161. package/scripts/epic/epic-bundle-evidence.ts +0 -1
  162. package/scripts/epic/epic-bundle-referenced.ts +1 -5
  163. package/scripts/epic/epic-bundle.ts +0 -4
  164. package/scripts/epic/epic-busy.ts +4 -5
  165. package/scripts/epic/epic-candidate-confirm.ts +0 -5
  166. package/scripts/epic/epic-classify.ts +2 -2
  167. package/scripts/epic/epic-cli-argv.ts +0 -1
  168. package/scripts/epic/epic-close-comment.ts +1 -1
  169. package/scripts/epic/epic-close.ts +5 -2
  170. package/scripts/epic/epic-cross-repo.ts +2 -4
  171. package/scripts/epic/epic-decision.ts +0 -1
  172. package/scripts/epic/epic-fetch.ts +2 -2
  173. package/scripts/epic/epic-index.ts +2 -3
  174. package/scripts/epic/epic-issue.ts +1 -15
  175. package/scripts/epic/epic-lane-offer.ts +9 -8
  176. package/scripts/epic/epic-nested.ts +1 -1
  177. package/scripts/epic/epic-next-read.ts +1 -3
  178. package/scripts/epic/epic-next-views.ts +0 -1
  179. package/scripts/epic/epic-next.ts +1 -10
  180. package/scripts/epic/epic-parse.ts +0 -1
  181. package/scripts/epic/epic-promote.ts +0 -9
  182. package/scripts/epic/epic-rank.ts +2 -2
  183. package/scripts/epic/epic-read.ts +1 -2
  184. package/scripts/epic/epic-reconcile.ts +1 -1
  185. package/scripts/epic/epic-reference.ts +1 -13
  186. package/scripts/epic/epic-relation-recheck.ts +1 -1
  187. package/scripts/epic/epic-relations.ts +1 -1
  188. package/scripts/epic/epic-remove.ts +1 -1
  189. package/scripts/epic/epic-report.ts +0 -1
  190. package/scripts/epic/epic-run.ts +2 -3
  191. package/scripts/epic/epic-shape.ts +1 -1
  192. package/scripts/epic/epic-solo-stale.ts +107 -0
  193. package/scripts/epic/epic-solo.ts +3 -2
  194. package/scripts/epic/epic-triage.ts +1 -1
  195. package/scripts/epic/epic-validate.ts +1 -1
  196. package/scripts/epic/epic.ts +1 -1
  197. package/scripts/exports/unused-members-cli.ts +53 -0
  198. package/scripts/{git → followup}/followup-issue-number.ts +1 -6
  199. package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
  200. package/scripts/{git → followup}/git-followup-finish.ts +1 -3
  201. package/scripts/{git → followup}/git-followup-flush.ts +2 -2
  202. package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
  203. package/scripts/{git → followup}/git-followup-label.ts +4 -4
  204. package/scripts/followup/git-followup-merged.ts +112 -0
  205. package/scripts/{git → followup}/git-followup-pending.ts +1 -1
  206. package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
  207. package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
  208. package/scripts/{git → followup}/git-pr-followup.ts +53 -16
  209. package/scripts/gate/core-budget.ts +3 -9
  210. package/scripts/gate/gate-plan.ts +7 -4
  211. package/scripts/gate/gate-report.ts +0 -6
  212. package/scripts/gate/gate-tree.ts +1 -1
  213. package/scripts/gate/pre-commit-type-check.ts +0 -6
  214. package/scripts/gate/project-checks.ts +7 -8
  215. package/scripts/gate/scoped-green.ts +0 -1
  216. package/scripts/gate/type-check-step.ts +1 -1
  217. package/scripts/gate/verification-gate.ts +0 -2
  218. package/scripts/gh/fix-gh-packages.ts +15 -12
  219. package/scripts/gh/gh-spawn.ts +2 -2
  220. package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
  221. package/scripts/{git → gh}/git-gh-check.ts +2 -1
  222. package/scripts/{git → gh}/git-gh-exec.ts +1 -1
  223. package/scripts/{git → gh}/git-gh-failure.ts +1 -1
  224. package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
  225. package/scripts/{git → gh}/git-gh-issue-list.ts +2 -0
  226. package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
  227. package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
  228. package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
  229. package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
  230. package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
  231. package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
  232. package/scripts/{git → gh}/git-gh-pr.ts +3 -1
  233. package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
  234. package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
  235. package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
  236. package/scripts/{git → gh}/git-pr-checks.ts +2 -1
  237. package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
  238. package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
  239. package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
  240. package/scripts/{git → gh}/git-pr.ts +3 -3
  241. package/scripts/git/changed-file-scope.ts +0 -1
  242. package/scripts/git/git-branch.ts +3 -6
  243. package/scripts/git/git-commit.ts +1 -1
  244. package/scripts/git/git-common-directory.ts +80 -24
  245. package/scripts/git/git-error.ts +66 -9
  246. package/scripts/git/git-issue.ts +1 -1
  247. package/scripts/git/git-preflight.ts +2 -2
  248. package/scripts/git/git-prompt.ts +6 -31
  249. package/scripts/git/git-push.ts +1 -1
  250. package/scripts/git/git-staging.ts +1 -0
  251. package/scripts/git/git-status.ts +1 -1
  252. package/scripts/git/git-workflow.ts +1 -1
  253. package/scripts/git/gone-branch.ts +1 -0
  254. package/scripts/git/listing-cutoff.ts +1 -1
  255. package/scripts/git/main-merge.ts +1 -1
  256. package/scripts/git/main-sync.ts +19 -1
  257. package/scripts/git/parse-json-array.ts +0 -3
  258. package/scripts/git/repository-lock.ts +16 -16
  259. package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
  260. package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +1 -1
  261. package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
  262. package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
  263. package/scripts/hooks/codex-hook-adapter.ts +0 -1
  264. package/scripts/hooks/edited-cspell.ts +1 -1
  265. package/scripts/hooks/format-edited-file.ts +2 -0
  266. package/scripts/hooks/pre-push-unit.ts +0 -4
  267. package/scripts/hooks/pretool-guard.ts +22 -4
  268. package/scripts/hooks/reserved-run.ts +1 -1
  269. package/scripts/hooks/step-zero-notice.ts +76 -0
  270. package/scripts/hooks/stop-guard.ts +47 -21
  271. package/scripts/init/claude-plugin-config.ts +4 -5
  272. package/scripts/init/hook-command-rewrite.ts +16 -8
  273. package/scripts/init/hook-launch.ts +41 -15
  274. package/scripts/init/init-basic.ts +2 -5
  275. package/scripts/init/init-logic.ts +7 -0
  276. package/scripts/init/init.ts +0 -3
  277. package/scripts/init/project-profile.ts +6 -11
  278. package/scripts/init/start-exec.ts +1 -1
  279. package/scripts/init/start-setup-pr.ts +6 -6
  280. package/scripts/init/start-steps.ts +1 -0
  281. package/scripts/issue/behavior-change-lint.ts +0 -1
  282. package/scripts/issue/defect-rate-cli.ts +3 -3
  283. package/scripts/issue/defect-rate.ts +1 -2
  284. package/scripts/{git → issue}/git-next-issues.ts +3 -3
  285. package/scripts/issue/issue-backlinks-cli.ts +1 -5
  286. package/scripts/issue/issue-cite-cli.ts +2 -6
  287. package/scripts/issue/issue-cite.ts +0 -2
  288. package/scripts/issue/issue-classification.ts +1 -9
  289. package/scripts/issue/issue-closing-pr.ts +4 -4
  290. package/scripts/issue/issue-comment-cli.ts +2 -2
  291. package/scripts/issue/issue-file-cli.ts +5 -5
  292. package/scripts/issue/issue-file.ts +2 -2
  293. package/scripts/issue/issue-fold-cli.ts +1 -1
  294. package/scripts/issue/issue-fold-existing-cli.ts +1 -1
  295. package/scripts/{git → issue}/issue-labels.ts +8 -0
  296. package/scripts/issue/issue-lint-cli.ts +1 -1
  297. package/scripts/issue/issue-merged.ts +2 -2
  298. package/scripts/{git → issue}/issue-rank.ts +1 -1
  299. package/scripts/issue/issue-read-cli.ts +8 -47
  300. package/scripts/issue/issue-read.ts +0 -2
  301. package/scripts/issue/issue-report-failures.ts +80 -0
  302. package/scripts/issue/issue-scout-cli.ts +1 -7
  303. package/scripts/issue/issue-scout-closed.ts +2 -2
  304. package/scripts/issue/issue-scout.ts +0 -2
  305. package/scripts/issue/issue-state-cli.ts +5 -46
  306. package/scripts/issue/issue-state.ts +1 -5
  307. package/scripts/issue/markdown-section.ts +1 -1
  308. package/scripts/issue/measure-rerun-cli.ts +1 -1
  309. package/scripts/issue/reproduction-measure.ts +1 -1
  310. package/scripts/josh/cli-body.ts +1 -1
  311. package/scripts/josh/file-map-stamp.ts +0 -3
  312. package/scripts/josh/josh-command-map.ts +2 -0
  313. package/scripts/josh/josh-commands-ai.ts +9 -102
  314. package/scripts/josh/josh-commands-backlog.ts +5 -1
  315. package/scripts/josh/josh-commands-development.ts +8 -1
  316. package/scripts/josh/josh-commands-issue.ts +2 -2
  317. package/scripts/josh/josh-commands-maintenance.ts +7 -0
  318. package/scripts/josh/josh-commands-project.ts +6 -0
  319. package/scripts/josh/josh-commands-run.ts +114 -0
  320. package/scripts/josh/josh-commands-versioning.ts +8 -0
  321. package/scripts/josh/josh-commands-workflow.ts +2 -2
  322. package/scripts/josh/path-decision.ts +0 -3
  323. package/scripts/josh/process-owner.ts +16 -0
  324. package/scripts/josh/session-language-cli.ts +0 -1
  325. package/scripts/lane/lane-await.ts +3 -6
  326. package/scripts/lane/lane-capacity.ts +6 -3
  327. package/scripts/lane/lane-child-invocation.ts +20 -7
  328. package/scripts/lane/lane-cli.ts +1 -4
  329. package/scripts/lane/lane-close.ts +1 -3
  330. package/scripts/lane/lane-dispatch.ts +3 -4
  331. package/scripts/lane/lane-environment.ts +0 -9
  332. package/scripts/lane/lane-handoff.ts +38 -0
  333. package/scripts/lane/lane-launch-cli.ts +21 -11
  334. package/scripts/lane/lane-open.ts +0 -3
  335. package/scripts/lane/lane-output.ts +0 -1
  336. package/scripts/lane/lane-registry.ts +9 -0
  337. package/scripts/lane/openai-lane-ship.ts +2 -0
  338. package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
  339. package/scripts/lane/openai-lane-supervisor.ts +6 -4
  340. package/scripts/lane/openai-review-broker.ts +3 -0
  341. package/scripts/lib/bounded-pool.ts +1 -0
  342. package/scripts/lib/json-value.ts +5 -4
  343. package/scripts/lib/poll.ts +3 -1
  344. package/scripts/lib/timed-fetch.ts +15 -0
  345. package/scripts/lib/timeouts.ts +13 -0
  346. package/scripts/{yaml → lib}/yaml-document.ts +3 -1
  347. package/scripts/{bytes → lines}/bytes-command.ts +0 -2
  348. package/scripts/lines/lines-command.ts +0 -1
  349. package/scripts/lint/lint-related-scope.ts +0 -1
  350. package/scripts/lint/lint-related.ts +1 -1
  351. package/scripts/{git → notify}/telegram-notify.ts +2 -2
  352. package/scripts/{git → notify}/telegram-test.ts +4 -4
  353. package/scripts/observations/observation-ledger-home.ts +0 -1
  354. package/scripts/observations/observation-ledger-line.ts +0 -1
  355. package/scripts/observations/observation-ledger-migrate.ts +1 -1
  356. package/scripts/observations/observations-flush-landing.ts +3 -3
  357. package/scripts/observations/observations-flush.ts +2 -2
  358. package/scripts/overrides/lockfile-overrides.ts +1 -1
  359. package/scripts/overrides/overrides-logic.ts +1 -1
  360. package/scripts/package/package-scout-cli.ts +2 -7
  361. package/scripts/package/package-scout.ts +0 -2
  362. package/scripts/propagate/propagate-git-failure.ts +0 -1
  363. package/scripts/propagate/propagate-git.ts +0 -2
  364. package/scripts/propagate/propagate-publish.ts +2 -3
  365. package/scripts/propagate/propagate-run.ts +0 -2
  366. package/scripts/propagate/propagate-steps.ts +3 -5
  367. package/scripts/propagate/propagate-targets.ts +0 -4
  368. package/scripts/propagate/propagate.ts +0 -4
  369. package/scripts/refactor/import-graph.ts +0 -1
  370. package/scripts/refactor/refactor-lint.ts +0 -2
  371. package/scripts/refactor/refactor-scan.ts +0 -1
  372. package/scripts/refactor/refactor-targets.ts +0 -1
  373. package/scripts/registry-migration/migrate-logic.ts +0 -2
  374. package/scripts/registry-migration/migrate.ts +19 -9
  375. package/scripts/release/github-release-cli.ts +8 -6
  376. package/scripts/release/github-release-environment.ts +46 -0
  377. package/scripts/release/github-release.ts +151 -94
  378. package/scripts/release/release-history.ts +0 -1
  379. package/scripts/release/release-plan.ts +0 -1
  380. package/scripts/release/release-publish.ts +2 -3
  381. package/scripts/release/release-scope-cli.ts +1 -2
  382. package/scripts/release/release-tag.ts +2 -4
  383. package/scripts/repo/auto-merge-setting-logic.ts +1 -4
  384. package/scripts/repo/repo-setting.ts +1 -1
  385. package/scripts/repo/repository-labels.ts +3 -3
  386. package/scripts/repo/required-checks-logic.ts +206 -0
  387. package/scripts/repo/required-checks-report.ts +71 -0
  388. package/scripts/repo/ruleset-check-cli.ts +53 -0
  389. package/scripts/repo/ruleset-check.ts +147 -0
  390. package/scripts/report/report-lint-cli.ts +0 -4
  391. package/scripts/review/disposition-cli.ts +1 -1
  392. package/scripts/review/live-evidence.ts +1 -1
  393. package/scripts/review/review-attest-cli.ts +0 -6
  394. package/scripts/review/review-attest.ts +4 -16
  395. package/scripts/review/review-brief-cli.ts +23 -6
  396. package/scripts/review/review-brief.ts +21 -8
  397. package/scripts/review/review-diff-parts.ts +89 -0
  398. package/scripts/review/review-diff-write.ts +97 -0
  399. package/scripts/review/review-finding-ledger.ts +0 -1
  400. package/scripts/review/review-record-cli.ts +1 -1
  401. package/scripts/review/review-record.ts +0 -1
  402. package/scripts/review/review-round2-cli.ts +1 -1
  403. package/scripts/review/review-stamps.ts +0 -3
  404. package/scripts/review/review-tree.ts +14 -2
  405. package/scripts/rules/decision-oracle-stage.ts +18 -0
  406. package/scripts/rules/decision-oracle.ts +10 -7
  407. package/scripts/rules/delivered-rules.ts +9 -1
  408. package/scripts/rules/destructive-command.ts +119 -0
  409. package/scripts/rules/direct-filing.ts +1 -1
  410. package/scripts/rules/file-body.ts +0 -3
  411. package/scripts/rules/filing-cap.ts +0 -2
  412. package/scripts/rules/gh-api.ts +7 -2
  413. package/scripts/rules/git-argv.ts +18 -7
  414. package/scripts/rules/git-force.ts +0 -2
  415. package/scripts/rules/implementation-cut.ts +0 -1
  416. package/scripts/rules/index-guard.ts +71 -0
  417. package/scripts/rules/issue-citation.ts +50 -25
  418. package/scripts/rules/lane-background.ts +15 -7
  419. package/scripts/rules/lane-park.ts +13 -6
  420. package/scripts/rules/last-prompt.ts +1 -0
  421. package/scripts/rules/oracle-consulted.ts +1 -1
  422. package/scripts/rules/oracle-firing.ts +1 -0
  423. package/scripts/rules/oracle-list-cli.ts +0 -3
  424. package/scripts/rules/permission-guards.ts +14 -0
  425. package/scripts/rules/protected-files.ts +74 -0
  426. package/scripts/rules/reply-language.ts +1 -1
  427. package/scripts/rules/rule-body-guard.ts +0 -3
  428. package/scripts/rules/rule-value-cli.ts +0 -1
  429. package/scripts/rules/shell-body-trigger.ts +0 -1
  430. package/scripts/rules/shell-segments.ts +0 -1
  431. package/scripts/rules/stop-rules.ts +13 -5
  432. package/scripts/rules/tail-commands.ts +1 -1
  433. package/scripts/rules/test-declared-commit.ts +1 -1
  434. package/scripts/rules/third-party-write.ts +0 -1
  435. package/scripts/rules/worktree-guard.ts +26 -9
  436. package/scripts/run/run-carry-cli.ts +0 -2
  437. package/scripts/run/run-carry-stash.ts +2 -2
  438. package/scripts/run/run-carry-streak.ts +1 -1
  439. package/scripts/run/run-cut-cli.ts +0 -7
  440. package/scripts/run/run-cut.ts +8 -54
  441. package/scripts/run/run-ending-cli.ts +1 -1
  442. package/scripts/run/run-ending.ts +1 -4
  443. package/scripts/run/run-entry-cli.ts +101 -24
  444. package/scripts/run/run-entry.ts +0 -1
  445. package/scripts/run/run-event-cli.ts +0 -2
  446. package/scripts/run/run-event-follow.ts +1 -0
  447. package/scripts/run/run-event-render.ts +1 -1
  448. package/scripts/run/run-event-scope.ts +53 -4
  449. package/scripts/run/run-event-stream.ts +0 -3
  450. package/scripts/run/run-event-watch.ts +1 -0
  451. package/scripts/run/run-halfrun-resume.ts +20 -7
  452. package/scripts/run/run-headless.ts +2 -2
  453. package/scripts/run/run-hold-cli.ts +33 -10
  454. package/scripts/run/run-hold.ts +25 -5
  455. package/scripts/run/run-issue-number.ts +1 -1
  456. package/scripts/run/run-liveness-cli.ts +1 -1
  457. package/scripts/run/run-liveness.ts +2 -3
  458. package/scripts/run/run-merge-cli.ts +5 -13
  459. package/scripts/run/run-merge-steps.ts +5 -5
  460. package/scripts/run/run-merge.ts +1 -1
  461. package/scripts/run/run-next-cli.ts +1 -1
  462. package/scripts/run/run-parent-cut-hook.ts +0 -1
  463. package/scripts/run/run-preflight.ts +2 -9
  464. package/scripts/run/run-prep-cli.ts +2 -2
  465. package/scripts/run/run-prep-locate.ts +1 -1
  466. package/scripts/run/run-progress-cli.ts +4 -7
  467. package/scripts/run/run-progress-clock.ts +6 -34
  468. package/scripts/run/run-progress-config.ts +0 -4
  469. package/scripts/run/run-progress-read.ts +1 -2
  470. package/scripts/run/run-progress.ts +1 -2
  471. package/scripts/run/run-prrun-resume.ts +117 -0
  472. package/scripts/run/run-report-cli.ts +1 -2
  473. package/scripts/run/run-report.ts +0 -1
  474. package/scripts/run/run-retrospective.ts +1 -1
  475. package/scripts/run/run-review-cli.ts +0 -3
  476. package/scripts/run/run-review-steps.ts +2 -0
  477. package/scripts/run/run-review.ts +0 -2
  478. package/scripts/run/run-ship-cli.ts +21 -3
  479. package/scripts/run/run-ship-detach.ts +1 -0
  480. package/scripts/run/run-ship-next.ts +106 -0
  481. package/scripts/run/run-ship-preflight.ts +1 -1
  482. package/scripts/run/run-ship-return.ts +8 -3
  483. package/scripts/run/run-ship-review-steps.ts +18 -4
  484. package/scripts/run/run-ship-review.ts +11 -0
  485. package/scripts/run/run-ship-scoped.ts +1 -0
  486. package/scripts/run/run-ship-steps.ts +1 -1
  487. package/scripts/run/run-ship.ts +0 -1
  488. package/scripts/run/run-stage-read.ts +62 -0
  489. package/scripts/run/run-stage.ts +160 -0
  490. package/scripts/run/run-status-cli.ts +1 -1
  491. package/scripts/run/run-step-cli.ts +21 -14
  492. package/scripts/run/run-step.ts +1 -1
  493. package/scripts/run/run-stop-notify.ts +1 -3
  494. package/scripts/run/run-stranded-cli.ts +0 -4
  495. package/scripts/run/run-stranded-detect.ts +2 -2
  496. package/scripts/run/run-tail-cli.ts +17 -11
  497. package/scripts/run/run-tail.ts +2 -0
  498. package/scripts/run/run-tidy-lanes.ts +2 -1
  499. package/scripts/run/run-tidy-stashes.ts +12 -12
  500. package/scripts/run/run-wake-cli.ts +2 -3
  501. package/scripts/run/run-wake-loop.ts +2 -2
  502. package/scripts/run/run-wake.ts +2 -4
  503. package/scripts/run/run-watcher-guard-cli.ts +0 -4
  504. package/scripts/run/run-watcher-guard.ts +9 -7
  505. package/scripts/run/run-watcher-hook.ts +1 -1
  506. package/scripts/safe-chain/ci-installer-pin.ts +11 -5
  507. package/scripts/safe-chain/project-config.ts +1 -1
  508. package/scripts/security/security-audit-provision-logic.ts +0 -1
  509. package/scripts/security/security-audit-provision.ts +3 -2
  510. package/scripts/security/security-audit.ts +0 -1
  511. package/scripts/security/security-updates-logic.ts +0 -1
  512. package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
  513. package/scripts/sonar/sonar-hotspots.ts +0 -1
  514. package/scripts/sonar/sonar-new-code-cli.ts +150 -0
  515. package/scripts/sonar/sonar-new-code.ts +79 -0
  516. package/scripts/sonar/sonar-project.ts +97 -0
  517. package/scripts/split/split-assess-cli.ts +1 -1
  518. package/scripts/split/split-assess.ts +2 -5
  519. package/scripts/sync/managed-config-scope-cli.ts +1 -1
  520. package/scripts/sync/skill-migration.ts +0 -1
  521. package/scripts/sync/sync-hook-safety.ts +2 -3
  522. package/scripts/sync/sync.ts +1 -8
  523. package/scripts/sync/template-source-logic.ts +0 -1
  524. package/scripts/sync/workflow-pin-logic.ts +16 -28
  525. package/scripts/test/test-declared-logic.ts +0 -1
  526. package/scripts/test/test-declared.ts +0 -2
  527. package/scripts/test/test-red-commit.ts +2 -2
  528. package/scripts/test/test-red.ts +14 -7
  529. package/scripts/test/test-type-logic.ts +1 -1
  530. package/scripts/test/unit-worker-share.ts +7 -16
  531. package/scripts/time-runtime/time-batch-guard.ts +1 -2
  532. package/scripts/time-runtime/time-bundle-call.ts +0 -1
  533. package/scripts/time-runtime/time-bundles.ts +0 -4
  534. package/scripts/time-runtime/time-density-hook.ts +0 -2
  535. package/scripts/time-runtime/time-followup-stage.ts +1 -1
  536. package/scripts/time-runtime/time-format.ts +0 -73
  537. package/scripts/time-runtime/time-round-trips.ts +0 -4
  538. package/scripts/time-runtime/time-single-check.ts +1 -1
  539. package/scripts/time-runtime/time-spans.ts +1 -1
  540. package/scripts/time-runtime/time-transcript-line.ts +1 -2
  541. package/scripts/ui/ui-routes-cli.ts +0 -5
  542. package/scripts/ui/ui-routes.ts +0 -5
  543. package/scripts/version/effective-upstream.ts +2 -2
  544. package/scripts/version/latest-corepack.ts +7 -9
  545. package/scripts/version/latest-scope-cli.ts +0 -2
  546. package/scripts/version/latest-update.ts +0 -2
  547. package/scripts/version/npm-registry.ts +2 -2
  548. package/scripts/version/publishable-range-check.ts +1 -1
  549. package/scripts/version/release-hold.ts +0 -4
  550. package/scripts/version/running-binary.ts +2 -2
  551. package/scripts/version/version-check-logic.ts +0 -2
  552. package/scripts/version/version-remote.ts +3 -3
  553. package/scripts/version/version-targets.ts +4 -4
  554. package/templates/sonar-project.properties +28 -1
  555. package/templates/workflows/dependabot-auto-merge.yml +5 -3
  556. package/templates/workflows/github-release.yml +81 -0
  557. package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
  558. package/prompts/collaboration-workflow/epic-audit.md +0 -5
  559. package/prompts/collaboration-workflow/epic-bundle.md +0 -5
  560. package/scripts/init/plugin-install-hint.ts +0 -47
  561. package/scripts/version/parse-json.ts +0 -13
  562. /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
  563. /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
  564. /package/scripts/{git → gh}/git-gh-command.ts +0 -0
  565. /package/scripts/{git → gh}/git-gh-issue-write.ts +0 -0
  566. /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
  567. /package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +0 -0
  568. /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
  569. /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
  570. /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
  571. /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
  572. /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
  573. /package/scripts/{git → gh}/git-pr-error.ts +0 -0
  574. /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
  575. /package/scripts/{git → gh}/github-issue-url.ts +0 -0
  576. /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
  577. /package/scripts/{git → issue}/issue-reference.ts +0 -0
  578. /package/scripts/{git → lib}/animation-helpers.ts +0 -0
  579. /package/scripts/{git → lib}/git-animation.ts +0 -0
  580. /package/scripts/{git → notify}/git-notify.ts +0 -0
  581. /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
@@ -40,6 +40,7 @@ const ALIASES: Record<string, string> = {
40
40
  f: 'format',
41
41
  sd: 'cspell:dot',
42
42
  bh: 'behavior',
43
+ eu: 'exports:unused',
43
44
  t: 'test',
44
45
  tu: 'test:unit',
45
46
  tr: 'test:related',
@@ -62,6 +63,7 @@ const ALIASES: Record<string, string> = {
62
63
  v: 'version',
63
64
  r: 'ranges',
64
65
  dr: 'doctor',
66
+ rc: 'ruleset:check',
65
67
  pg: 'propagate',
66
68
  ad: 'adopt',
67
69
  ov: 'overrides',
@@ -4,10 +4,9 @@ import { DOCUMENT_COMMANDS } from './josh-commands-document'
4
4
  import { GUARD_COMMANDS } from './josh-commands-guard'
5
5
  import { ISSUE_COMMANDS } from './josh-commands-issue'
6
6
  import { LANE_COMMANDS } from './josh-commands-lane'
7
+ import { RUN_COMMANDS } from './josh-commands-run'
7
8
  import { SPLIT_COMMANDS } from './josh-commands-split'
8
9
 
9
- // One script answers both `run:hold` and `run:release`; the flag below is what tells them apart.
10
- const RUN_HOLD_SCRIPT = 'scripts/run/run-hold-cli.ts'
11
10
  const ISSUE_WITH_OPTIONS = '<issue> [options]'
12
11
 
13
12
  /* eslint-disable @typescript-eslint/naming-convention */
@@ -21,7 +20,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
21
20
  reference: ['<keywords> [--size <n>]', 'automation', ['network']],
22
21
  },
23
22
  'stash:pop': {
24
- script: 'scripts/git/stash-pop-cli.ts',
23
+ script: 'scripts/git/stash/stash-pop-cli.ts',
25
24
  description: 'Pop the stash matching this message, not whichever a shared stack has on top',
26
25
  category: 'AI tools',
27
26
  reference: ['<message>', 'automation', ['git']],
@@ -36,7 +35,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
36
35
  script: 'scripts/epic/epic-next.ts',
37
36
  description: "List an epic's runnable children, bundled per repository",
38
37
  category: 'AI tools',
39
- reference: ['<epic>', 'automation', ['network']],
38
+ reference: ['<epic>... [--repo <owner/repo>] [--lanes]', 'automation', ['network']],
40
39
  },
41
40
  'epic:bundle': {
42
41
  script: 'scripts/epic/epic-bundle-cli.ts',
@@ -65,9 +64,10 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
65
64
  ...BACKLOG_COMMANDS,
66
65
  cost: {
67
66
  script: 'scripts/cost-runtime/cost-cli.ts',
68
- description: "Report a run's token and credit cost from Claude Code's session transcripts",
67
+ description:
68
+ 'Say whether the next turn of a run crosses the context-cut threshold (--cut) or a given tokens-per-request figure (--over)',
69
69
  category: 'AI tools',
70
- reference: ['[--cut|--over]', 'automation', ['none']],
70
+ reference: ['(--cut | --over <tokens-per-request>) [--path <dir>]', 'automation', ['none']],
71
71
  },
72
72
  ...DOCUMENT_COMMANDS,
73
73
  time: {
@@ -134,100 +134,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
134
134
  category: 'AI tools',
135
135
  reference: ['<unit-files> <unit-files> [<unit-files> …]', 'automation', ['none']],
136
136
  },
137
- 'run:hold': {
138
- script: RUN_HOLD_SCRIPT,
139
- description: 'Claim this working tree for a run, or say which run already holds it',
140
- category: 'AI tools',
141
- reference: ['[issue]', 'automation', ['files']],
142
- },
143
- 'run:release': {
144
- script: RUN_HOLD_SCRIPT,
145
- description: "Release this working tree's run record",
146
- category: 'AI tools',
147
- reference: ['[issue|--force]', 'automation', ['files']],
148
- default_script_arguments: ['--release'],
149
- },
150
- 'run:tidy': {
151
- script: 'scripts/run/run-tidy-cli.ts',
152
- description: 'Close merged lanes and drop stashes whose issues are all merged',
153
- category: 'AI tools',
154
- reference: ['', 'automation', ['git', 'network', 'files']],
155
- },
156
- 'run:carry': {
157
- script: 'scripts/run/run-carry-cli.ts',
158
- description: 'Carry one invocation’s budget across its own session cuts',
159
- category: 'AI tools',
160
- reference: ['<operation> [arguments...]', 'automation', ['files']],
161
- },
162
- 'run:wake': {
163
- script: 'scripts/run/run-wake-cli.ts',
164
- // `.env` rather than the ambient environment:
165
- // the failure warning needs the Telegram credentials, the same
166
- // reasons `notify` and `followup` carry these flags.
167
- tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
168
- description: 'Wake the next session of a cut backlogrun from outside the conversation',
169
- category: 'AI tools',
170
- reference: ['[options]', 'automation', ['processes', 'notifications']],
171
- },
172
- 'run:cut': {
173
- script: 'scripts/run/run-cut-cli.ts',
174
- description: 'Cut a lane child before the gate and resume a fresh process',
175
- category: 'AI tools',
176
- reference: ['[--resume] <issue> [--impl] [--handoff <path>]', 'automation', ['files']],
177
- },
178
- 'run:liveness': {
179
- script: 'scripts/run/run-liveness-cli.ts',
180
- description: 'Say whether a delegated unit is still working, or stopped without reporting',
181
- category: 'AI tools',
182
- reference: ['<issue> --output <path> [options]', 'automation', ['processes']],
183
- },
184
- 'run:ending': {
185
- script: 'scripts/run/run-ending-cli.ts',
186
- description: 'Classify how a dispatched lane child ended (merged, cut, abandoned, unreadable)',
187
- category: 'AI tools',
188
- reference: ['<issue> --output <path> [--repo <owner/repo>]', 'automation', ['network']],
189
- },
190
- 'run:progress': {
191
- script: 'scripts/run/run-progress-cli.ts',
192
- description: 'Report an unattended run’s progress once it has gone quiet for an interval',
193
- category: 'AI tools',
194
- reference: ['[--wait|--mark]', 'automation', ['files']],
195
- },
196
- 'run:prep': {
197
- script: 'scripts/run/run-prep-cli.ts',
198
- description: 'Bundle a run’s pre-edit reads: body, comments, state, dependency scope',
199
- category: 'AI tools',
200
- reference: ['<issue>', 'automation', ['network']],
201
- },
202
- // The entry sequence a lane opened on, folded into one call (joshuafolkken/kit#2372): claim the tree,
203
- // read the budget, gather the issue reads and decide the pre-implementation step. `run:hold`,
204
- // `cost --cut`, `run:prep` and `run:step` were four round trips re-billing a lane's full context each.
205
- 'run:entry': {
206
- script: 'scripts/run/run-entry-cli.ts',
207
- description:
208
- 'Open a run in one call: claim the tree, read the budget, bundle the reads, decide the pre-implementation step',
209
- category: 'AI tools',
210
- reference: ['<issue>', 'automation', ['git', 'network', 'files']],
211
- },
212
- 'run:status': {
213
- script: 'scripts/run/run-status-cli.ts',
214
- description: 'Bundle a run’s read-only status: issue state, cost verdict, carry counters',
215
- category: 'AI tools',
216
- reference: ['<issue> [--repo <owner/repo>]', 'automation', ['network']],
217
- },
218
- 'run:next': {
219
- script: 'scripts/run/run-next-cli.ts',
220
- description: 'Print the next step a fullrun takes, computed from the run’s state',
221
- category: 'AI tools',
222
- reference: ['<issue>', 'automation', ['network']],
223
- },
224
- 'run:step': {
225
- script: 'scripts/run/run-step-cli.ts',
226
- description:
227
- 'Print the run’s next single action, computed from the event stream, carry record and issue state',
228
- category: 'AI tools',
229
- reference: ['<issue>', 'automation', ['network', 'files']],
230
- },
137
+ ...RUN_COMMANDS,
231
138
  'repo:party': {
232
139
  script: 'scripts/discovery/repo-party-cli.ts',
233
140
  description:
@@ -255,7 +162,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
255
162
  'run:tail': {
256
163
  script: 'scripts/run/run-tail-cli.ts',
257
164
  description:
258
- 'Close a run in one call: commit the observation ledger, read the citations, decide the release scope',
165
+ 'Close a run in one call: return to the default branch, commit the observation ledger, read the citations, decide the release scope',
259
166
  category: 'AI tools',
260
167
  reference: ['[<issue> ...]', 'automation', ['git', 'network']],
261
168
  },
@@ -269,7 +176,7 @@ const AI_COMMANDS: Record<string, CommandEntry> = {
269
176
  'Ship a change in one call: gate, commit/push/PR, the CI-wait merge and the report bookkeeping, stopping at the first failed step',
270
177
  category: 'AI tools',
271
178
  reference: [
272
- '"<title> #<N>" [<follow-up-N> ...] [--cite <N>] [--review] [--detach] [--notify-message <text> | --notify-message-file <path>] | --log <N>',
179
+ '"<title> #<N>" [<follow-up-N> ...] [--cite <N>] [--review] [--detach] [--body-file <path>] [--notify-message <text> | --notify-message-file <path>] | --log <N>',
273
180
  'automation',
274
181
  ['git', 'network'],
275
182
  ],
@@ -33,7 +33,11 @@ const BACKLOG_COMMANDS: Record<string, CommandEntry> = {
33
33
  description:
34
34
  'Print the whole backlog as a plan: ready now, waiting on what, waiting on a person, out of scope',
35
35
  category: 'AI tools',
36
- reference: ['[issue...] [--only]', 'automation', ['network']],
36
+ reference: [
37
+ '[issue...] [--only] [--waves] [--exclude <n>[,<n>...]]',
38
+ 'automation',
39
+ ['network'],
40
+ ],
37
41
  },
38
42
  'backlog:stalled': {
39
43
  script: 'scripts/backlog/backlog-stalled-cli.ts',
@@ -46,7 +46,7 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
46
46
  reference: ['', 'automation', ['processes']],
47
47
  },
48
48
  bytes: {
49
- script: 'scripts/bytes/bytes-command.ts',
49
+ script: 'scripts/lines/bytes-command.ts',
50
50
  description:
51
51
  "Print an agent-read document's byte size against its ceiling and the headroom left",
52
52
  category: 'Development',
@@ -128,6 +128,13 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
128
128
  category: 'Development',
129
129
  reference: ['', 'developer', ['files']],
130
130
  },
131
+ 'exports:unused': {
132
+ script: 'scripts/exports/unused-members-cli.ts',
133
+ description:
134
+ 'Report exported namespace members nothing reads (kit only; a consumer project skips it)',
135
+ category: 'Development',
136
+ reference: ['', 'developer', ['none']],
137
+ },
131
138
  'test:unit': {
132
139
  script: 'scripts/test/test-unit-guard.ts',
133
140
  description:
@@ -29,7 +29,7 @@ const ISSUE_COMMANDS: Record<string, CommandEntry> = {
29
29
  description:
30
30
  'Before filing: say whether an issue like this exists and which epic it belongs to',
31
31
  category: 'AI tools',
32
- reference: ['<title> [--body <summary>]', 'automation', ['network']],
32
+ reference: ['<title> [--body <summary> | --body-file <path>]', 'automation', ['network']],
33
33
  },
34
34
  'defect:rate': {
35
35
  script: 'scripts/issue/defect-rate-cli.ts',
@@ -49,7 +49,7 @@ const ISSUE_COMMANDS: Record<string, CommandEntry> = {
49
49
  script: 'scripts/issue/issue-fold-existing-cli.ts',
50
50
  description: 'Assess whether a complete draft can join an unstarted issue',
51
51
  category: 'AI tools',
52
- reference: ['<assessment.json>', 'automation', ['none']],
52
+ reference: ['<assessment.json> [--json]', 'automation', ['none']],
53
53
  },
54
54
  'issue:cite': {
55
55
  script: 'scripts/issue/issue-cite-cli.ts',
@@ -10,6 +10,13 @@ const MAINTENANCE_COMMANDS: Record<string, CommandEntry> = {
10
10
  reference: ['[--fix]', 'developer', ['files']],
11
11
  tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
12
12
  },
13
+ 'ruleset:check': {
14
+ script: 'scripts/repo/ruleset-check-cli.ts',
15
+ description:
16
+ "Check that the default branch requires every status check kit's workflows report (--apply adds the missing ones)",
17
+ category: 'Maintenance',
18
+ reference: ['[--apply]', 'maintainer', ['network']],
19
+ },
13
20
  overrides: {
14
21
  script: 'scripts/overrides/overrides-check.ts',
15
22
  description: 'Check pnpm overrides for drift',
@@ -57,6 +57,12 @@ const PROJECT_COMMANDS: Record<string, CommandEntry> = {
57
57
  category: 'Project',
58
58
  reference: ['<PR>', 'automation', ['network']],
59
59
  },
60
+ 'sonar:new-code': {
61
+ script: 'scripts/sonar/sonar-new-code-cli.ts',
62
+ description: 'Fail when a pull request adds any new SonarCloud issue or duplicated block',
63
+ category: 'Project',
64
+ reference: ['<PR>', 'automation', ['network']],
65
+ },
60
66
  'ui:routes': {
61
67
  script: 'scripts/ui/ui-routes-cli.ts',
62
68
  description: 'List the screenshot-target routes the current change touches',
@@ -0,0 +1,114 @@
1
+ import { OPTIONAL_ENV_FILE_FLAGS, type CommandEntry } from './josh-command-types'
2
+
3
+ // The run-lifecycle registry (`run:hold` through `run:step`), split out of `josh-commands-ai.ts` so
4
+ // that file stays under its 300-code-line limit, as `BACKLOG_COMMANDS` and `LANE_COMMANDS` were
5
+ // (joshuafolkken/kit#2992). It is spread into `AI_COMMANDS` at the place the entries used to sit, so
6
+ // the generated catalog keeps their order.
7
+
8
+ // One script answers both `run:hold` and `run:release`; the flag below is what tells them apart.
9
+ const RUN_HOLD_SCRIPT = 'scripts/run/run-hold-cli.ts'
10
+
11
+ /* eslint-disable @typescript-eslint/naming-convention */
12
+ const RUN_COMMANDS: Record<string, CommandEntry> = {
13
+ 'run:hold': {
14
+ script: RUN_HOLD_SCRIPT,
15
+ description: 'Claim this working tree for a run, or say which run already holds it',
16
+ category: 'AI tools',
17
+ reference: ['[<issue> [--fullrun | --halfrun-stop | --prrun-stop]]', 'automation', ['files']],
18
+ },
19
+ 'run:release': {
20
+ script: RUN_HOLD_SCRIPT,
21
+ description: "Release this working tree's run record",
22
+ category: 'AI tools',
23
+ reference: ['[issue|--force]', 'automation', ['files']],
24
+ default_script_arguments: ['--release'],
25
+ },
26
+ 'run:tidy': {
27
+ script: 'scripts/run/run-tidy-cli.ts',
28
+ description: 'Close merged lanes and drop stashes whose issues are all merged',
29
+ category: 'AI tools',
30
+ reference: ['', 'automation', ['git', 'network', 'files']],
31
+ },
32
+ 'run:carry': {
33
+ script: 'scripts/run/run-carry-cli.ts',
34
+ description: 'Carry one invocation’s budget across its own session cuts',
35
+ category: 'AI tools',
36
+ reference: ['<operation> [arguments...]', 'automation', ['files']],
37
+ },
38
+ 'run:wake': {
39
+ script: 'scripts/run/run-wake-cli.ts',
40
+ // `.env` rather than the ambient environment:
41
+ // the failure warning needs the Telegram credentials, the same
42
+ // reasons `notify` and `followup` carry these flags.
43
+ tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
44
+ description: 'Wake the next session of a cut backlogrun from outside the conversation',
45
+ category: 'AI tools',
46
+ reference: ['[options]', 'automation', ['processes', 'notifications']],
47
+ },
48
+ 'run:cut': {
49
+ script: 'scripts/run/run-cut-cli.ts',
50
+ description: 'Cut a lane child before the gate and resume a fresh process',
51
+ category: 'AI tools',
52
+ reference: ['[--resume] <issue> [--impl] [--handoff <path>]', 'automation', ['files']],
53
+ },
54
+ 'run:liveness': {
55
+ script: 'scripts/run/run-liveness-cli.ts',
56
+ description: 'Say whether a delegated unit is still working, or stopped without reporting',
57
+ category: 'AI tools',
58
+ reference: ['<issue> --output <path> [options]', 'automation', ['processes']],
59
+ },
60
+ 'run:ending': {
61
+ script: 'scripts/run/run-ending-cli.ts',
62
+ description: 'Classify how a dispatched lane child ended (merged, cut, abandoned, unreadable)',
63
+ category: 'AI tools',
64
+ reference: ['<issue> --output <path> [--repo <owner/repo>]', 'automation', ['network']],
65
+ },
66
+ 'run:progress': {
67
+ script: 'scripts/run/run-progress-cli.ts',
68
+ description: 'Report an unattended run’s progress once it has gone quiet for an interval',
69
+ category: 'AI tools',
70
+ reference: [
71
+ '[--once | --wait] [--interval <minutes>] [--hours <hours>] [--repo <owner/repo>] [--output <path>] | --mark | --path',
72
+ 'automation',
73
+ ['files'],
74
+ ],
75
+ },
76
+ 'run:prep': {
77
+ script: 'scripts/run/run-prep-cli.ts',
78
+ description: 'Bundle a run’s pre-edit reads: body, comments, state, dependency scope',
79
+ category: 'AI tools',
80
+ reference: ['<issue>', 'automation', ['network']],
81
+ },
82
+ // The entry sequence a lane opened on, folded into one call (joshuafolkken/kit#2372): claim the tree,
83
+ // read the budget, gather the issue reads and decide the pre-implementation step. `run:hold`,
84
+ // `cost --cut`, `run:prep` and `run:step` were four round trips re-billing a lane's full context each.
85
+ 'run:entry': {
86
+ script: 'scripts/run/run-entry-cli.ts',
87
+ description:
88
+ 'Open a run in one call: claim the tree, read the budget, bundle the reads, decide the pre-implementation step',
89
+ category: 'AI tools',
90
+ reference: ['<issue> [--to <command>]', 'automation', ['git', 'network', 'files']],
91
+ },
92
+ 'run:status': {
93
+ script: 'scripts/run/run-status-cli.ts',
94
+ description: 'Bundle a run’s read-only status: issue state, cost verdict, carry counters',
95
+ category: 'AI tools',
96
+ reference: ['<issue> [--repo <owner/repo>]', 'automation', ['network']],
97
+ },
98
+ 'run:next': {
99
+ script: 'scripts/run/run-next-cli.ts',
100
+ description: 'Print the next step a fullrun takes, computed from the run’s state',
101
+ category: 'AI tools',
102
+ reference: ['<issue>', 'automation', ['network']],
103
+ },
104
+ 'run:step': {
105
+ script: 'scripts/run/run-step-cli.ts',
106
+ description:
107
+ 'Print the run’s next single action, computed from the event stream, carry record and issue state',
108
+ category: 'AI tools',
109
+ reference: ['<issue>', 'automation', ['network', 'files']],
110
+ },
111
+ }
112
+ /* eslint-enable @typescript-eslint/naming-convention */
113
+
114
+ export { RUN_COMMANDS }
@@ -42,6 +42,14 @@ const VERSIONING_COMMANDS: Record<string, CommandEntry> = {
42
42
  category: 'Versioning',
43
43
  reference: ['[--json]', 'automation', ['none']],
44
44
  },
45
+ // Run by the release workflows, kit's and the one sync distributes, after a tag has published
46
+ // (joshuafolkken/kit#3007). Settings come from the environment, so the workflow decides them.
47
+ 'release:github': {
48
+ script: 'scripts/release/github-release-cli.ts',
49
+ description: 'Create the GitHub Release for a published tag, with generated notes',
50
+ category: 'Versioning',
51
+ reference: ['', 'automation', ['network', 'release']],
52
+ },
45
53
  }
46
54
  /* eslint-enable @typescript-eslint/naming-convention */
47
55
 
@@ -35,7 +35,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
35
35
  // than dropped: `telegram_notify.send` now throws on missing credentials and on a failed send, so
36
36
  // `josh notify` exits non-zero instead of warning and answering 0.
37
37
  followup: {
38
- script: 'scripts/git/git-followup-workflow.ts',
38
+ script: 'scripts/followup/git-followup-workflow.ts',
39
39
  description: 'Follow-up git workflow',
40
40
  category: 'Workflow',
41
41
  reference: [
@@ -46,7 +46,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
46
46
  tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
47
47
  },
48
48
  notify: {
49
- script: 'scripts/git/telegram-test.ts',
49
+ script: 'scripts/notify/telegram-test.ts',
50
50
  description: 'Send Telegram notification',
51
51
  category: 'Workflow',
52
52
  reference: ['--task-type <type> --body <text>', 'automation', ['notifications']],
@@ -93,12 +93,9 @@ const path_decision = {
93
93
  format_path_list,
94
94
  has_unknown_flag,
95
95
  JSON_FLAG,
96
- KNOWN_FLAGS,
97
- MAX_LISTED_PATHS,
98
96
  parse_options,
99
97
  print_decision,
100
98
  run_path_decision,
101
- STAGED_FLAG,
102
99
  }
103
100
 
104
101
  export { path_decision }
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod'
2
+
3
+ // The pair a record names its writing process by, as `process_identity` reads it back
4
+ // (joshuafolkken/kit#1245): the pid, and the opaque start token `process_identity.own_fields` wrote
5
+ // beside it. Every lock, marker and ledger entry that later asks `is_same_process` carries this pair,
6
+ // so its shape is declared once here and each record extends it (joshuafolkken/kit#2986).
7
+ //
8
+ // `process_start` is optional because a record written before joshuafolkken/kit#1245, or on a platform
9
+ // whose start time cannot be read, carries only the pid — `is_same_process` has an answer of its own
10
+ // for that case rather than the record being rejected.
11
+ const process_owner_schema = z.object({ pid: z.number(), process_start: z.string().optional() })
12
+
13
+ type ProcessOwner = z.infer<typeof process_owner_schema>
14
+
15
+ export { process_owner_schema }
16
+ export type { ProcessOwner }
@@ -41,7 +41,6 @@ const session_language_cli = {
41
41
  DEFAULT_SESSION_LANG,
42
42
  ENV_KEY,
43
43
  format_line,
44
- main,
45
44
  resolve_session_lang,
46
45
  SCOPE_NOTE,
47
46
  }
@@ -1,8 +1,7 @@
1
1
  import { spawnSync } from 'node:child_process'
2
2
  import { setTimeout as sleep } from 'node:timers/promises'
3
- import { git_common_directory } from '#scripts/git/git-common-directory'
4
- import { run_ship_detach } from '#scripts/run/run-ship-detach'
5
3
  import { lane_child_invocation } from './lane-child-invocation'
4
+ import { lane_handoff } from './lane-handoff'
6
5
 
7
6
  // Detached lane children are not harness-tracked processes, so their completion fires no
8
7
  // re-invocation event in the parent's session. Without a blocking wait the parent notices only
@@ -52,11 +51,8 @@ function is_process_running_default(issue: string): boolean {
52
51
  const result = spawnSync('pgrep', ['-f', pattern], { encoding: 'utf8' })
53
52
 
54
53
  if (result.status === PROCESS_FOUND) return true
55
- const repository = git_common_directory.repository(process.cwd())
56
54
 
57
- return (
58
- repository !== undefined && run_ship_detach.read_result(repository, issue)?.result === 'running'
59
- )
55
+ return lane_handoff.is_ship_running(issue, process.cwd())
60
56
  }
61
57
 
62
58
  function make_initial_state(): AwaitState {
@@ -155,6 +151,7 @@ async function wait_for_any(
155
151
 
156
152
  if (completed !== undefined) return completed
157
153
 
154
+ // eslint-disable-next-line no-await-in-loop -- polling: each read waits on the state the previous one saw
158
155
  await sleep(config.poll_ms)
159
156
  }
160
157
  }
@@ -1,4 +1,5 @@
1
1
  import type { LaneEnvironment } from './lane-paths'
2
+ import { lane_seed_policy } from './lane-seed'
2
3
 
3
4
  // How many lanes one repository may run at once, and how many of them are free
4
5
  // (joshuafolkken/kit#1491).
@@ -54,14 +55,16 @@ function lane_limit(environment: LaneEnvironment = process.env): LimitChoice {
54
55
  // Never negative: a repository holding more `in-progress` issues than the limit allows — the limit
55
56
  // was lowered, or a stale label outlived its run — has no free lane, and a negative count read as
56
57
  // "how many to offer" would be a slice nobody meant.
58
+ //
59
+ // **A limit above the seat count is capped at the seats** (joshuafolkken/kit#3027). `lane:open` refuses
60
+ // a tenth lane however high `JOSH_LANE_LIMIT` is set, so counting free lanes past the seats offers a
61
+ // launch that is bound to be refused.
57
62
  function free_lanes(limit: number, occupied: number): number {
58
- return Math.max(NO_LANES, limit - occupied)
63
+ return Math.max(NO_LANES, Math.min(limit, lane_seed_policy.LAST_LANE_SEAT) - occupied)
59
64
  }
60
65
 
61
66
  const lane_capacity = {
62
- DEFAULT_LANE_LIMIT,
63
67
  LANE_LIMIT_KEY,
64
- read_limit,
65
68
  lane_limit,
66
69
  free_lanes,
67
70
  }
@@ -1,4 +1,10 @@
1
1
  import { run_issue_number } from '#scripts/run/run-issue-number'
2
+ import { run_ship_next, type ShipResume } from '#scripts/run/run-ship-next'
3
+ import type { Stage } from '#scripts/run/run-ship-stage'
4
+
5
+ interface ShipStop extends ShipResume {
6
+ stage: Stage
7
+ }
2
8
 
3
9
  const CHILD_INVOCATION = 'fullrun'
4
10
  const RESUME_GUIDE = '.claude/skills/workflow-commands/pre-gate-cut.md'
@@ -52,17 +58,24 @@ function outage_resume_invocation(issue: string): string {
52
58
 
53
59
  // The prompt a lane child is relaunched with when its detached ship supervisor stopped at a failed
54
60
  // stage (joshuafolkken/kit#2428) — a red gate, a High/Medium review, a failed push or red CI. The agent
55
- // ended at the hand-off, so this is how control comes back to one: it reads the stopped report through
56
- // the command `run:step` names, fixes it and hands the region back. It ends with `child_invocation` for
57
- // the reason `resume_invocation` does — the parent's poll keeps matching the relaunched process.
58
- function ship_stop_invocation(issue: string): string {
59
- const preamble = `Resuming the lane child for issue #${issue} after its detached ship supervisor stopped at a failed stage — do not re-read the workflow-commands entry documents (SKILL.md, fullrun.md). Run \`pnpm josh run:step ${issue}\` and read the stopped report it names, fix what stopped the ship, then hand the region back per chain-rule.md. Do not re-plan or re-implement what is already on the branch.`
61
+ // ended at the hand-off, so this is how control comes back to one: it reads the stopped report, fixes it
62
+ // and hands the region back. It ends with `child_invocation` for the reason `resume_invocation` does —
63
+ // the parent's poll keeps matching the relaunched process.
64
+ //
65
+ // **A known stage puts the next command in the prompt** (joshuafolkken/kit#2964), so the relaunched
66
+ // session runs it rather than re-deriving it from `chain-rule.md`. An OpenAI lane's supervisor sees only
67
+ // that the ship failed, not where, so without a stage the prompt points at `run:step` as before.
68
+ function ship_stop_invocation(issue: string, stop?: ShipStop): string {
69
+ const opening = `Resuming the lane child for issue #${issue} after its detached ship supervisor stopped at a failed stage — do not re-read the workflow-commands entry documents (SKILL.md, fullrun.md).`
70
+ const next =
71
+ stop === undefined
72
+ ? `Run \`pnpm josh run:step ${issue}\` and read the stopped report it names, fix what stopped the ship, then hand the region back per chain-rule.md.`
73
+ : run_ship_next.next_step(issue, stop.stage, stop)
60
74
 
61
- return `${preamble} ${child_invocation(issue)}`
75
+ return `${opening} ${next} Do not re-plan or re-implement what is already on the branch. ${child_invocation(issue)}`
62
76
  }
63
77
 
64
78
  const lane_child_invocation = {
65
- CHILD_INVOCATION,
66
79
  child_invocation,
67
80
  outage_resume_invocation,
68
81
  process_pattern,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
3
  import { epic_busy } from '#scripts/epic/epic-busy'
4
- import { git_gh_command } from '#scripts/git/git-gh-command'
4
+ import { git_gh_command } from '#scripts/gh/git-gh-command'
5
5
  import type { OpenIssueData } from '#scripts/git/schemas'
6
6
  import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
7
7
  import { error_text } from '#scripts/lib/error-message'
@@ -417,9 +417,6 @@ const lane_cli = {
417
417
  ALL_FLAG,
418
418
  NONE_TOKEN,
419
419
  USAGE,
420
- main,
421
- parse_issue,
422
- parse_lane_issue,
423
420
  refusal_message,
424
421
  run,
425
422
  }
@@ -158,6 +158,7 @@ async function close_each(issues: ReadonlyArray<string>): Promise<SweepOutcome>
158
158
  const sweep: SweepOutcome = { closed: [], failed: [] }
159
159
 
160
160
  for (const issue of issues) {
161
+ // eslint-disable-next-line no-await-in-loop -- worktree writes contend for the same registration directory
161
162
  const bucket = (await try_close(issue)) ? sweep.closed : sweep.failed
162
163
 
163
164
  bucket.push(issue)
@@ -186,10 +187,7 @@ async function close_all_lanes(): Promise<SweepOutcome> {
186
187
  const lane_close = {
187
188
  close_all_lanes,
188
189
  close_lane,
189
- lane_root_directory,
190
- lane_targets,
191
190
  prune_lanes,
192
- remove_lane,
193
191
  resolve_lane,
194
192
  }
195
193
 
@@ -1,8 +1,8 @@
1
1
  import { agent_argv, type AgentArgv, type AgentArgvResult } from '#scripts/agent/agent-argv'
2
2
  import { agent_role_profile, type AgentProfile } from '#scripts/agent/agent-role-profile'
3
- import { git_gh_command } from '#scripts/git/git-gh-command'
4
- import { IN_PROGRESS_LABEL } from '#scripts/git/issue-labels'
5
- import { telegram_notify } from '#scripts/git/telegram-notify'
3
+ import { git_gh_command } from '#scripts/gh/git-gh-command'
4
+ import { IN_PROGRESS_LABEL } from '#scripts/issue/issue-labels'
5
+ import { telegram_notify } from '#scripts/notify/telegram-notify'
6
6
  import { detached_launch } from '#scripts/run/detached-launch'
7
7
  import { run_ending } from '#scripts/run/run-ending'
8
8
  import { run_event_stream } from '#scripts/run/run-event-stream'
@@ -444,7 +444,6 @@ async function warn_of_problem(outcome: DispatchOutcome, issue: string): Promise
444
444
  }
445
445
 
446
446
  const lane_dispatch = {
447
- CHILD_INVOCATION: lane_child_invocation.CHILD_INVOCATION,
448
447
  child_invocation,
449
448
  default_log_path,
450
449
  describe,
@@ -58,10 +58,6 @@ function is_key_line(line: string, key: string): boolean {
58
58
  return body.slice(key.length).trimStart().startsWith(ASSIGNMENT_SEPARATOR)
59
59
  }
60
60
 
61
- function is_seed_line(line: string): boolean {
62
- return is_key_line(line, PORT_SEED_KEY)
63
- }
64
-
65
61
  function is_seat_line(line: string): boolean {
66
62
  return is_key_line(line, LANE_SEAT_KEY)
67
63
  }
@@ -235,12 +231,7 @@ function with_lane_output(content: string, output: string, profile?: AgentProfil
235
231
  }
236
232
 
237
233
  const lane_environment = {
238
- LANE_OUTPUT_KEY,
239
- LANE_PROVIDER_KEY,
240
- LANE_ROLE_KEY,
241
- is_output_line,
242
234
  is_seat_line,
243
- is_seed_line,
244
235
  lane_file_content,
245
236
  read_lane_output,
246
237
  read_lane_profile,