@joshuafolkken/kit 1.1229.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (939) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +24 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +27 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +18 -29
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.github/workflows/publish.yml +2 -0
  42. package/.vscode/tasks.json +14 -0
  43. package/CLAUDE.md +10 -61
  44. package/README.md +38 -57
  45. package/SECURITY.md +1 -1
  46. package/dist/CLAUDE.md +10 -61
  47. package/dist/commands/document-section-cli.js +42 -10
  48. package/dist/config-merge/index.js +11 -2
  49. package/dist/hooks/audit-provision.js +2 -2
  50. package/dist/hooks/batch-guard.js +7 -7
  51. package/dist/hooks/{chunk-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
  52. package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
  53. package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
  54. package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
  55. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  56. package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
  57. package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
  58. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  59. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  60. package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
  61. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  62. package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
  63. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  64. package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
  65. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  66. package/dist/hooks/codex-hook-adapter.js +26 -21
  67. package/dist/hooks/duplicate-read-guard.js +8 -8
  68. package/dist/hooks/format-edited.js +4 -4
  69. package/dist/hooks/inputs.json +213 -197
  70. package/dist/hooks/investigation-guard.js +8 -8
  71. package/dist/hooks/pretool-guard.js +15 -15
  72. package/dist/hooks/session-lang.js +406 -8
  73. package/dist/hooks/stop-guard.js +122 -201
  74. package/dist/josh.js +540 -137
  75. package/dist/version/index.js +15 -13
  76. package/eslint/base.js +43 -5
  77. package/eslint/rules/english-only-prose.js +3 -3
  78. package/eslint/rules/import.js +12 -0
  79. package/eslint/rules/namespace-object-export.js +2 -2
  80. package/package.json +16 -10
  81. package/pnpm-workspace.yaml +2 -4
  82. package/prompts/coding-standards.md +14 -48
  83. package/prompts/collaboration-workflow/file-edits.md +1 -1
  84. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  85. package/prompts/collaboration-workflow/issue-template.md +4 -10
  86. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  87. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  88. package/prompts/collaboration-workflow/overview.md +1 -1
  89. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  90. package/prompts/collaboration-workflow/principles.md +21 -3
  91. package/prompts/collaboration-workflow/report-format.md +16 -29
  92. package/prompts/collaboration-workflow/residency.md +1 -1
  93. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  94. package/prompts/collaboration-workflow/shell-body.md +3 -23
  95. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  96. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  97. package/prompts/refactoring.md +1 -1
  98. package/prompts/review-rubric.md +3 -22
  99. package/prompts/review.md +15 -38
  100. package/prompts/testing-guide.md +2 -4
  101. package/scripts/adopt/adopt-logic.ts +5 -5
  102. package/scripts/adopt/adopt-toolkits.ts +4 -5
  103. package/scripts/adopt/adopt.ts +2 -3
  104. package/scripts/agent/agent-argv.ts +7 -7
  105. package/scripts/agent/agent-diagnostics.ts +2 -2
  106. package/scripts/agent/agent-exit-record.ts +1 -1
  107. package/scripts/agent/agent-headless.ts +1 -1
  108. package/scripts/agent/agent-launch-environment.ts +6 -1
  109. package/scripts/agent/agent-role-profile.ts +49 -22
  110. package/scripts/agent/agent-session-role.ts +32 -0
  111. package/scripts/agent/api-outage.ts +1 -1
  112. package/scripts/agent/claude-agent-argv.ts +4 -4
  113. package/scripts/agent/claude-result-event.ts +4 -4
  114. package/scripts/agent/codex-hooks.ts +2 -2
  115. package/scripts/agent/interactive-ask.ts +3 -6
  116. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  117. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  118. package/scripts/backlog/backlog-arrival.ts +54 -17
  119. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  120. package/scripts/backlog/backlog-budget.ts +17 -24
  121. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  122. package/scripts/backlog/backlog-drive-args.ts +5 -4
  123. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  124. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  125. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  126. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  127. package/scripts/backlog/backlog-drive-named.ts +39 -9
  128. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  129. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  130. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  131. package/scripts/backlog/backlog-drive.ts +43 -28
  132. package/scripts/backlog/backlog-idle.ts +88 -0
  133. package/scripts/backlog/backlog-named.ts +11 -15
  134. package/scripts/backlog/backlog-next.ts +26 -30
  135. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  136. package/scripts/backlog/backlog-offer.ts +7 -7
  137. package/scripts/backlog/backlog-overlap.ts +178 -0
  138. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  139. package/scripts/backlog/backlog-plan-read.ts +111 -0
  140. package/scripts/backlog/backlog-plan.ts +11 -10
  141. package/scripts/backlog/backlog-pool.ts +13 -14
  142. package/scripts/backlog/backlog-rank.ts +11 -11
  143. package/scripts/backlog/backlog-ready.ts +15 -10
  144. package/scripts/backlog/backlog-scope.ts +14 -15
  145. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  146. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  147. package/scripts/backlog/backlog-stalled.ts +5 -6
  148. package/scripts/backlog/backlog-waves.ts +4 -4
  149. package/scripts/backlog/backlogrun-args.ts +74 -0
  150. package/scripts/backlog/backlogrun-cli.ts +113 -0
  151. package/scripts/backlog/backlogrun-launch.ts +178 -0
  152. package/scripts/behavior/behavior-assertion.ts +6 -8
  153. package/scripts/behavior/behavior-cli.ts +1 -1
  154. package/scripts/behavior/behavior-rules.ts +3 -3
  155. package/scripts/build/build-claude-md.ts +4 -4
  156. package/scripts/build/build-codex-hooks.ts +2 -2
  157. package/scripts/build/build-commands.ts +1 -1
  158. package/scripts/build/build-hooks.ts +5 -5
  159. package/scripts/build/build.ts +1 -1
  160. package/scripts/build/hook-bundle-stamp.ts +109 -7
  161. package/scripts/build/local-bin.ts +2 -2
  162. package/scripts/cases/cases-cli.ts +1 -1
  163. package/scripts/cases/cases-logic.ts +2 -2
  164. package/scripts/ci/composite-actions.ts +1 -2
  165. package/scripts/ci/pr-classification.ts +2 -2
  166. package/scripts/claude/workflow-destination.ts +1 -1
  167. package/scripts/clone/clone-aggregate.ts +1 -1
  168. package/scripts/clone/clone-fingerprint.ts +1 -1
  169. package/scripts/clone/clone-scan-cli.ts +1 -1
  170. package/scripts/clone/clone-scan.ts +1 -1
  171. package/scripts/config-merge/index.ts +1 -1
  172. package/scripts/config-merge/json-format.ts +1 -3
  173. package/scripts/config-merge/patch-json-array.ts +90 -0
  174. package/scripts/config-merge/patch-json-key.ts +6 -3
  175. package/scripts/config-merge/patch-json-list.ts +1 -1
  176. package/scripts/cost-runtime/codex-usage.ts +1 -1
  177. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  178. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  179. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  180. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  181. package/scripts/cost-runtime/cost-cli.ts +14 -11
  182. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  183. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  184. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  185. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  186. package/scripts/cost-runtime/cost-usage.ts +6 -7
  187. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  188. package/scripts/cost-runtime/own-session.ts +1 -1
  189. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  190. package/scripts/delegation/delegation-cli.ts +4 -4
  191. package/scripts/delegation/delegation-policy.ts +13 -15
  192. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  193. package/scripts/delegation/fanout-cli.ts +1 -1
  194. package/scripts/delegation/fanout.ts +1 -1
  195. package/scripts/delegation/investigation-guard.ts +18 -22
  196. package/scripts/delegation/investigation-reads.ts +48 -238
  197. package/scripts/discovery/repo-discovery.ts +1 -1
  198. package/scripts/discovery/repo-map-logic.ts +1 -2
  199. package/scripts/discovery/repo-origin.ts +3 -3
  200. package/scripts/discovery/repo-party-cli.ts +2 -2
  201. package/scripts/discovery/repo-party.ts +2 -2
  202. package/scripts/doctor/doctor-consumer.ts +1 -1
  203. package/scripts/doctor/doctor-io.ts +6 -7
  204. package/scripts/doctor/doctor-logic.ts +1 -1
  205. package/scripts/doctor/doctor-ports.ts +1 -1
  206. package/scripts/doctor/doctor.ts +8 -9
  207. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  208. package/scripts/document/bash-output-cap.ts +5 -7
  209. package/scripts/document/capped-print-part.ts +1 -1
  210. package/scripts/document/capped-print.ts +1 -1
  211. package/scripts/document/document-byte-budget.ts +33 -64
  212. package/scripts/document/document-byte-check.ts +4 -4
  213. package/scripts/document/document-reachability.ts +7 -8
  214. package/scripts/document/document-read-cli.ts +2 -2
  215. package/scripts/document/document-scan.ts +26 -2
  216. package/scripts/document/document-section-cli.ts +6 -8
  217. package/scripts/document/document-section.ts +8 -12
  218. package/scripts/document/edit-files-cli.ts +3 -4
  219. package/scripts/document/entry-read-budget.ts +8 -70
  220. package/scripts/document/entry-read-set.ts +51 -34
  221. package/scripts/document/lane-child-read-set.ts +9 -9
  222. package/scripts/document/read-files-cli.ts +1 -2
  223. package/scripts/document/read-set-cli.ts +16 -19
  224. package/scripts/document/read-set-cost.ts +4 -4
  225. package/scripts/document/read-set-point-of-use.ts +28 -38
  226. package/scripts/document/read-set-pricing.ts +1 -1
  227. package/scripts/document/read-set-trim.ts +3 -3
  228. package/scripts/document/resident-budget.ts +8 -10
  229. package/scripts/epic/epic-add-body.ts +15 -18
  230. package/scripts/epic/epic-add-plan.ts +26 -28
  231. package/scripts/epic/epic-add.ts +32 -25
  232. package/scripts/epic/epic-audit-checks.ts +27 -37
  233. package/scripts/epic/epic-audit-cli.ts +21 -22
  234. package/scripts/epic/epic-audit-orphans.ts +16 -17
  235. package/scripts/epic/epic-audit-rationale.ts +10 -15
  236. package/scripts/epic/epic-audit-report.ts +2 -5
  237. package/scripts/epic/epic-audit.ts +18 -14
  238. package/scripts/epic/epic-body.ts +10 -10
  239. package/scripts/epic/epic-bundle-cli.ts +36 -34
  240. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  241. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  242. package/scripts/epic/epic-bundle-poll.ts +1 -1
  243. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  244. package/scripts/epic/epic-bundle.ts +19 -20
  245. package/scripts/epic/epic-busy.ts +44 -21
  246. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  247. package/scripts/epic/epic-chains.ts +18 -23
  248. package/scripts/epic/epic-classify.ts +11 -12
  249. package/scripts/epic/epic-cli-argv.ts +5 -6
  250. package/scripts/epic/epic-cli-remove.ts +9 -4
  251. package/scripts/epic/epic-cli.ts +38 -26
  252. package/scripts/epic/epic-close-comment.ts +14 -15
  253. package/scripts/epic/epic-close.ts +25 -29
  254. package/scripts/epic/epic-cross-repo.ts +18 -21
  255. package/scripts/epic/epic-decision.ts +14 -18
  256. package/scripts/epic/epic-fetch.ts +25 -31
  257. package/scripts/epic/epic-graph.ts +15 -17
  258. package/scripts/epic/epic-index.ts +14 -16
  259. package/scripts/epic/epic-issue.ts +9 -11
  260. package/scripts/epic/epic-label-age.ts +74 -0
  261. package/scripts/epic/epic-lane-offer.ts +35 -24
  262. package/scripts/epic/epic-nested.ts +1 -1
  263. package/scripts/epic/epic-next-read.ts +8 -8
  264. package/scripts/epic/epic-next-views.ts +12 -12
  265. package/scripts/epic/epic-next.ts +29 -33
  266. package/scripts/epic/epic-outside-blocker.ts +11 -10
  267. package/scripts/epic/epic-parse.ts +22 -24
  268. package/scripts/epic/epic-promote.ts +3 -2
  269. package/scripts/epic/epic-rank.ts +1 -1
  270. package/scripts/epic/epic-read.ts +10 -8
  271. package/scripts/epic/epic-reconcile.ts +8 -6
  272. package/scripts/epic/epic-reference.ts +5 -4
  273. package/scripts/epic/epic-relation-recheck.ts +10 -11
  274. package/scripts/epic/epic-relations.ts +9 -8
  275. package/scripts/epic/epic-remove-plan.ts +4 -5
  276. package/scripts/epic/epic-remove.ts +7 -5
  277. package/scripts/epic/epic-report.ts +18 -20
  278. package/scripts/epic/epic-run.ts +6 -5
  279. package/scripts/epic/epic-sections.ts +2 -2
  280. package/scripts/epic/epic-shape.ts +3 -3
  281. package/scripts/epic/epic-solo-stale.ts +3 -2
  282. package/scripts/epic/epic-solo.ts +8 -8
  283. package/scripts/epic/epic-triage.ts +5 -4
  284. package/scripts/epic/epic-validate.ts +8 -7
  285. package/scripts/epic/epic.ts +5 -5
  286. package/scripts/exports/unused-members-cli.ts +1 -1
  287. package/scripts/followup/followup-issue-number.ts +1 -2
  288. package/scripts/followup/git-followup-cleanup.ts +6 -7
  289. package/scripts/followup/git-followup-finish.ts +11 -13
  290. package/scripts/followup/git-followup-flush.ts +11 -7
  291. package/scripts/followup/git-followup-issue-close.ts +16 -13
  292. package/scripts/followup/git-followup-label.ts +9 -6
  293. package/scripts/followup/git-followup-merged.ts +1 -1
  294. package/scripts/followup/git-followup-pending.ts +7 -9
  295. package/scripts/followup/git-followup-stages.ts +28 -17
  296. package/scripts/followup/git-followup-workflow.ts +19 -21
  297. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  298. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  299. package/scripts/followup/git-pr-followup.ts +18 -17
  300. package/scripts/gate/core-admission.ts +162 -0
  301. package/scripts/gate/core-budget.ts +134 -91
  302. package/scripts/gate/gate-ledger.ts +114 -0
  303. package/scripts/gate/gate-log.ts +7 -9
  304. package/scripts/gate/gate-plan.ts +103 -35
  305. package/scripts/gate/gate-report.ts +39 -21
  306. package/scripts/gate/gate-skip.ts +11 -13
  307. package/scripts/gate/gate-steps.ts +5 -1
  308. package/scripts/gate/gate-tree.ts +3 -4
  309. package/scripts/gate/hook-gate-reuse.ts +9 -9
  310. package/scripts/gate/machine-capacity.ts +313 -0
  311. package/scripts/gate/pre-commit-type-check.ts +4 -4
  312. package/scripts/gate/project-checks.ts +12 -4
  313. package/scripts/gate/scoped-green.ts +11 -18
  314. package/scripts/gate/type-check-command.ts +2 -2
  315. package/scripts/gate/type-check-step.ts +4 -4
  316. package/scripts/gate/verification-gate.ts +60 -53
  317. package/scripts/gh/gh-spawn.ts +2 -2
  318. package/scripts/gh/git-ai-review-scan.ts +3 -2
  319. package/scripts/gh/git-gh-api-path.ts +10 -11
  320. package/scripts/gh/git-gh-exec.ts +43 -48
  321. package/scripts/gh/git-gh-failure.ts +6 -9
  322. package/scripts/gh/git-gh-helpers.ts +1 -1
  323. package/scripts/gh/git-gh-issue-list.ts +15 -19
  324. package/scripts/gh/git-gh-issue-read.ts +43 -60
  325. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  326. package/scripts/gh/git-gh-issue-write.ts +52 -40
  327. package/scripts/gh/git-gh-issue.ts +23 -24
  328. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  329. package/scripts/gh/git-gh-pr-read.ts +46 -50
  330. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  331. package/scripts/gh/git-gh-pr-review.ts +2 -2
  332. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  333. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  334. package/scripts/gh/git-gh-pr.ts +16 -16
  335. package/scripts/gh/git-gh-reachability.ts +11 -12
  336. package/scripts/gh/git-gh-repo.ts +2 -3
  337. package/scripts/gh/git-gh-rest-state.ts +1 -1
  338. package/scripts/gh/git-pr-ai-review.ts +6 -5
  339. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  340. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  341. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  342. package/scripts/gh/git-pr-checks.ts +20 -23
  343. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  344. package/scripts/gh/git-pr-confirmation.ts +5 -5
  345. package/scripts/gh/git-pr-managed-config.ts +7 -9
  346. package/scripts/gh/git-pr-messages.ts +1 -1
  347. package/scripts/gh/git-pr.ts +15 -16
  348. package/scripts/gh/github-issue-url.ts +8 -9
  349. package/scripts/git/base-tree.ts +66 -0
  350. package/scripts/git/change-base.ts +42 -2
  351. package/scripts/git/changed-file-scope.ts +5 -5
  352. package/scripts/git/changed-paths.ts +1 -2
  353. package/scripts/git/constants.ts +2 -2
  354. package/scripts/git/git-branch.ts +1 -1
  355. package/scripts/git/git-closes-keyword.ts +3 -3
  356. package/scripts/git/git-command.ts +53 -41
  357. package/scripts/git/git-common-directory.ts +3 -3
  358. package/scripts/git/git-diff-reads.ts +14 -15
  359. package/scripts/git/git-error.ts +1 -1
  360. package/scripts/git/git-execa-error.ts +1 -2
  361. package/scripts/git/git-issue.ts +10 -8
  362. package/scripts/git/git-location-environment.ts +3 -4
  363. package/scripts/git/git-ls-remote.ts +6 -8
  364. package/scripts/git/git-pre-push-hook.ts +11 -10
  365. package/scripts/git/git-preflight.ts +5 -5
  366. package/scripts/git/git-push-transport.ts +2 -2
  367. package/scripts/git/git-remote-branch.ts +1 -2
  368. package/scripts/git/git-schemas.ts +16 -23
  369. package/scripts/git/git-spawn-sync.ts +1 -1
  370. package/scripts/git/git-spawn.ts +37 -14
  371. package/scripts/git/git-ssh-keepalive.ts +12 -5
  372. package/scripts/git/git-staging.ts +7 -8
  373. package/scripts/git/git-workflow.ts +1 -1
  374. package/scripts/git/git-worktree.ts +35 -27
  375. package/scripts/git/gone-branch.ts +2 -2
  376. package/scripts/git/listing-cutoff.ts +1 -2
  377. package/scripts/git/lockfile-sync.ts +65 -0
  378. package/scripts/git/main-merge-guard.ts +1 -2
  379. package/scripts/git/main-merge.ts +7 -7
  380. package/scripts/git/main-sync.ts +23 -8
  381. package/scripts/git/parse-json-array.ts +18 -23
  382. package/scripts/git/repository-lock.ts +34 -2
  383. package/scripts/git/stash/git-stash.ts +4 -5
  384. package/scripts/git/stash/stash-orphans.ts +5 -3
  385. package/scripts/git/stash/stash-pop-args.ts +1 -1
  386. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  387. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  388. package/scripts/hooks/batch-guard.ts +11 -13
  389. package/scripts/hooks/check-commit-message.ts +12 -9
  390. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  391. package/scripts/hooks/edited-cspell.ts +3 -4
  392. package/scripts/hooks/format-edited-cli.ts +1 -1
  393. package/scripts/hooks/format-edited-file.ts +11 -17
  394. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  395. package/scripts/hooks/pre-push-unit.ts +10 -14
  396. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  397. package/scripts/hooks/pretool-guard.ts +93 -18
  398. package/scripts/hooks/reserved-run.ts +2 -2
  399. package/scripts/hooks/step-zero-notice.ts +1 -1
  400. package/scripts/hooks/stop-guard.ts +21 -10
  401. package/scripts/init/basic-path-migration.ts +2 -2
  402. package/scripts/init/claude-kit-only-settings.ts +2 -2
  403. package/scripts/init/claude-plugin-config.ts +2 -2
  404. package/scripts/init/distributed-paths.ts +4 -4
  405. package/scripts/init/hook-command-rewrite.ts +3 -3
  406. package/scripts/init/hook-launch.ts +5 -5
  407. package/scripts/init/init-actions.ts +13 -0
  408. package/scripts/init/init-ai-copy.ts +11 -11
  409. package/scripts/init/init-bootstrap.ts +3 -3
  410. package/scripts/init/init-copy-content.ts +4 -4
  411. package/scripts/init/init-logic-json-merge.ts +7 -9
  412. package/scripts/init/init-logic-migrate.ts +1 -1
  413. package/scripts/init/init-logic-templates.ts +1 -1
  414. package/scripts/init/init-logic-workspace.ts +4 -4
  415. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  416. package/scripts/init/init-logic.ts +19 -22
  417. package/scripts/init/init.ts +12 -8
  418. package/scripts/init/kit-base-preset.ts +1 -1
  419. package/scripts/init/kit-setup-state.ts +1 -1
  420. package/scripts/init/kit-written-paths.ts +1 -2
  421. package/scripts/init/package-manager-pin.ts +35 -0
  422. package/scripts/init/project-profile-cli.ts +1 -1
  423. package/scripts/init/project-profile.ts +3 -3
  424. package/scripts/init/session-language-environment.ts +1 -1
  425. package/scripts/init/start-exec.ts +3 -4
  426. package/scripts/init/start-plan.ts +2 -2
  427. package/scripts/init/start-setup-pr.ts +3 -2
  428. package/scripts/init/start-steps.ts +2 -2
  429. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  430. package/scripts/init/vscode-tasks.ts +62 -0
  431. package/scripts/issue/baseline-measure.ts +2 -2
  432. package/scripts/issue/behavior-change-lint.ts +2 -2
  433. package/scripts/issue/defect-rate-cli.ts +6 -7
  434. package/scripts/issue/defect-rate.ts +37 -27
  435. package/scripts/issue/git-next-issues.ts +9 -8
  436. package/scripts/issue/issue-auto-ok.ts +49 -11
  437. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  438. package/scripts/issue/issue-backlinks.ts +6 -6
  439. package/scripts/issue/issue-cite-cli.ts +20 -18
  440. package/scripts/issue/issue-cite.ts +18 -8
  441. package/scripts/issue/issue-closing-pr.ts +4 -4
  442. package/scripts/issue/issue-comment-cli.ts +6 -4
  443. package/scripts/issue/issue-file-cli.ts +75 -15
  444. package/scripts/issue/issue-file-fold.ts +155 -0
  445. package/scripts/issue/issue-file.ts +14 -6
  446. package/scripts/issue/issue-fold-cli.ts +14 -9
  447. package/scripts/issue/issue-fold.ts +23 -8
  448. package/scripts/issue/issue-labels.ts +46 -37
  449. package/scripts/issue/issue-lint-cli.ts +2 -2
  450. package/scripts/issue/issue-lint.ts +1 -1
  451. package/scripts/issue/issue-merged.ts +10 -4
  452. package/scripts/issue/issue-number-shape.ts +27 -0
  453. package/scripts/issue/issue-rank.ts +1 -1
  454. package/scripts/issue/issue-read-cli.ts +4 -5
  455. package/scripts/issue/issue-read.ts +4 -5
  456. package/scripts/issue/issue-reference.ts +5 -5
  457. package/scripts/issue/issue-release-cli.ts +165 -0
  458. package/scripts/issue/issue-release.ts +58 -0
  459. package/scripts/issue/issue-report-failures.ts +7 -4
  460. package/scripts/issue/issue-scout-cli.ts +11 -11
  461. package/scripts/issue/issue-scout-closed.ts +4 -4
  462. package/scripts/issue/issue-scout.ts +4 -5
  463. package/scripts/issue/issue-state-cli.ts +17 -10
  464. package/scripts/issue/issue-state.ts +12 -13
  465. package/scripts/issue/issue-wip.ts +7 -7
  466. package/scripts/issue/markdown-section.ts +3 -3
  467. package/scripts/issue/measure-rerun-cli.ts +10 -9
  468. package/scripts/issue/reproduction-measure.ts +3 -3
  469. package/scripts/issue/session-cite.ts +56 -0
  470. package/scripts/josh/agent-session-environment.ts +10 -8
  471. package/scripts/josh/cli-body.ts +2 -2
  472. package/scripts/josh/command-suggest.ts +1 -1
  473. package/scripts/josh/file-map-stamp.ts +20 -23
  474. package/scripts/josh/hook-decision.ts +24 -28
  475. package/scripts/josh/josh-command-map.ts +4 -1
  476. package/scripts/josh/josh-command-types.ts +32 -34
  477. package/scripts/josh/josh-commands-ai.ts +6 -6
  478. package/scripts/josh/josh-commands-backlog.ts +15 -3
  479. package/scripts/josh/josh-commands-clone.ts +1 -1
  480. package/scripts/josh/josh-commands-development.ts +33 -4
  481. package/scripts/josh/josh-commands-document.ts +3 -3
  482. package/scripts/josh/josh-commands-guard.ts +3 -3
  483. package/scripts/josh/josh-commands-issue.ts +11 -5
  484. package/scripts/josh/josh-commands-lane.ts +16 -5
  485. package/scripts/josh/josh-commands-lint.ts +1 -1
  486. package/scripts/josh/josh-commands-maintenance.ts +2 -2
  487. package/scripts/josh/josh-commands-run.ts +20 -6
  488. package/scripts/josh/josh-commands-split.ts +1 -2
  489. package/scripts/josh/josh-commands-versioning.ts +5 -5
  490. package/scripts/josh/josh-commands-workflow.ts +30 -22
  491. package/scripts/josh/josh-environment-file.ts +1 -1
  492. package/scripts/josh/josh-in-process.ts +3 -3
  493. package/scripts/josh/josh-logic.ts +10 -10
  494. package/scripts/josh/josh-run.ts +3 -3
  495. package/scripts/josh/josh-verdict.ts +9 -12
  496. package/scripts/josh/josh.ts +3 -3
  497. package/scripts/josh/kit-only.ts +2 -2
  498. package/scripts/josh/path-decision.ts +3 -3
  499. package/scripts/josh/platform-temporary.ts +7 -5
  500. package/scripts/josh/process-identity.ts +24 -6
  501. package/scripts/josh/process-owner.ts +4 -4
  502. package/scripts/josh/session-language-cli.ts +53 -11
  503. package/scripts/josh/session-language.ts +1 -1
  504. package/scripts/josh/stamp-file.ts +48 -29
  505. package/scripts/josh/stamp-record.ts +57 -0
  506. package/scripts/lane/lane-await.ts +35 -11
  507. package/scripts/lane/lane-cache.ts +6 -6
  508. package/scripts/lane/lane-capacity.ts +32 -17
  509. package/scripts/lane/lane-child-invocation.ts +17 -15
  510. package/scripts/lane/lane-child-marker.ts +12 -12
  511. package/scripts/lane/lane-cli.ts +20 -13
  512. package/scripts/lane/lane-close.ts +6 -6
  513. package/scripts/lane/lane-dispatch.ts +61 -72
  514. package/scripts/lane/lane-environment.ts +5 -5
  515. package/scripts/lane/lane-guard-policy.ts +7 -21
  516. package/scripts/lane/lane-handoff.ts +2 -2
  517. package/scripts/lane/lane-install.ts +9 -10
  518. package/scripts/lane/lane-launch-cli.ts +13 -8
  519. package/scripts/lane/lane-ledger.ts +73 -11
  520. package/scripts/lane/lane-leftover.ts +44 -30
  521. package/scripts/lane/lane-limit-cli.ts +160 -0
  522. package/scripts/lane/lane-limit-override.ts +74 -0
  523. package/scripts/lane/lane-load.ts +19 -68
  524. package/scripts/lane/lane-measure-cli.ts +15 -25
  525. package/scripts/lane/lane-occupancy.ts +6 -4
  526. package/scripts/lane/lane-open.ts +25 -24
  527. package/scripts/lane/lane-output.ts +4 -3
  528. package/scripts/lane/lane-paths.ts +22 -8
  529. package/scripts/lane/lane-phase.ts +33 -0
  530. package/scripts/lane/lane-reap.ts +2 -2
  531. package/scripts/lane/lane-registry.ts +27 -15
  532. package/scripts/lane/lane-relaunch.ts +9 -9
  533. package/scripts/lane/lane-report.ts +5 -4
  534. package/scripts/lane/lane-resume.ts +2 -2
  535. package/scripts/lane/lane-sampler.ts +55 -0
  536. package/scripts/lane/lane-seed.ts +7 -7
  537. package/scripts/lane/lane-stage-stats.ts +135 -0
  538. package/scripts/lane/lane-start-point.ts +8 -11
  539. package/scripts/lane/lane-stats.ts +60 -15
  540. package/scripts/lane/lane-stray.ts +140 -0
  541. package/scripts/lane/lane-vacant.ts +1 -1
  542. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  543. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  544. package/scripts/lane/openai-review-broker.ts +2 -4
  545. package/scripts/lib/ancestor-directories.ts +1 -1
  546. package/scripts/lib/bounded-pool.ts +2 -2
  547. package/scripts/lib/buffered-process.ts +4 -6
  548. package/scripts/lib/caddy-logs.sh +0 -0
  549. package/scripts/lib/cli-flags.ts +39 -6
  550. package/scripts/lib/error-message.ts +1 -1
  551. package/scripts/lib/json-value.ts +17 -3
  552. package/scripts/lib/poll.ts +1 -1
  553. package/scripts/lib/status-icons.ts +3 -3
  554. package/scripts/lib/timed-fetch.ts +1 -1
  555. package/scripts/lib/timeouts.ts +1 -1
  556. package/scripts/lines/bytes-command.ts +3 -4
  557. package/scripts/lines/effective-limit.ts +25 -12
  558. package/scripts/lines/line-budget.ts +47 -55
  559. package/scripts/lines/line-targets.ts +6 -2
  560. package/scripts/lines/lines-command.ts +3 -3
  561. package/scripts/lint/cspell-cached.ts +1 -1
  562. package/scripts/lint/cycle-recheck.ts +122 -0
  563. package/scripts/lint/format.ts +1 -2
  564. package/scripts/lint/lint-parallel.ts +34 -19
  565. package/scripts/lint/lint-related-scope.ts +25 -15
  566. package/scripts/lint/lint-related.ts +6 -7
  567. package/scripts/managed-marker/index.ts +1 -1
  568. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  569. package/scripts/notify/git-notify.ts +9 -7
  570. package/scripts/notify/telegram-notify.ts +53 -37
  571. package/scripts/notify/telegram-test-logic.ts +3 -3
  572. package/scripts/notify/telegram-test.ts +45 -30
  573. package/scripts/observations/observation-ledger-home.ts +14 -8
  574. package/scripts/observations/observation-ledger-line.ts +3 -2
  575. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  576. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  577. package/scripts/observations/observation-ledger.ts +14 -15
  578. package/scripts/observations/observation-record-cli.ts +83 -0
  579. package/scripts/observations/observation-record.ts +91 -0
  580. package/scripts/observations/observations-flush-cli.ts +1 -1
  581. package/scripts/observations/observations-flush-landing.ts +7 -6
  582. package/scripts/observations/observations-flush.ts +26 -27
  583. package/scripts/overrides/overrides-check.ts +18 -8
  584. package/scripts/package/package-scout-cli.ts +1 -1
  585. package/scripts/package/package-scout-format.ts +2 -2
  586. package/scripts/package/package-scout.ts +1 -1
  587. package/scripts/propagate/propagate-git-failure.ts +1 -1
  588. package/scripts/propagate/propagate-git.ts +7 -7
  589. package/scripts/propagate/propagate-plan.ts +2 -2
  590. package/scripts/propagate/propagate-publish.ts +2 -3
  591. package/scripts/propagate/propagate-run.ts +5 -7
  592. package/scripts/propagate/propagate-select.ts +1 -1
  593. package/scripts/propagate/propagate-steps.ts +19 -20
  594. package/scripts/propagate/propagate-targets.ts +6 -10
  595. package/scripts/propagate/propagate.ts +5 -5
  596. package/scripts/refactor/import-graph.ts +1 -1
  597. package/scripts/refactor/refactor-lint.ts +4 -10
  598. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  599. package/scripts/refactor/refactor-scan.ts +2 -2
  600. package/scripts/refactor/refactor-targets.ts +1 -1
  601. package/scripts/release/github-release-cli.ts +25 -3
  602. package/scripts/release/github-release-environment.ts +1 -0
  603. package/scripts/release/github-release-runs.ts +115 -0
  604. package/scripts/release/github-release.ts +13 -67
  605. package/scripts/release/release-cli.ts +21 -4
  606. package/scripts/release/release-history.ts +6 -10
  607. package/scripts/release/release-plan.ts +3 -3
  608. package/scripts/release/release-progress.ts +3 -4
  609. package/scripts/release/release-publish.ts +8 -9
  610. package/scripts/release/release-scope-cli.ts +8 -10
  611. package/scripts/release/release-tag.ts +6 -8
  612. package/scripts/release/release-worktree.ts +5 -5
  613. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  614. package/scripts/repo/auto-merge-setting.ts +1 -1
  615. package/scripts/repo/repo-setting.ts +4 -4
  616. package/scripts/repo/repository-labels.ts +1 -1
  617. package/scripts/repo/required-checks-logic.ts +3 -3
  618. package/scripts/repo/required-checks-report.ts +1 -1
  619. package/scripts/repo/ruleset-check-cli.ts +1 -1
  620. package/scripts/repo/ruleset-check.ts +1 -1
  621. package/scripts/report/report-format-reference.ts +26 -0
  622. package/scripts/report/report-lint-cli.ts +2 -2
  623. package/scripts/report/report-lint.ts +16 -2
  624. package/scripts/review/disposition-cli.ts +2 -2
  625. package/scripts/review/disposition-logic.ts +1 -1
  626. package/scripts/review/live-evidence.ts +9 -6
  627. package/scripts/review/review-attest-cli.ts +1 -2
  628. package/scripts/review/review-attest.ts +3 -3
  629. package/scripts/review/review-brief-cli.ts +19 -20
  630. package/scripts/review/review-brief.ts +29 -32
  631. package/scripts/review/review-checkout.ts +2 -2
  632. package/scripts/review/review-diff-parts.ts +3 -5
  633. package/scripts/review/review-diff-write.ts +1 -1
  634. package/scripts/review/review-finding-ledger.ts +7 -4
  635. package/scripts/review/review-findings-cli.ts +2 -2
  636. package/scripts/review/review-level.ts +4 -7
  637. package/scripts/review/review-record-cli.ts +73 -16
  638. package/scripts/review/review-record.ts +5 -4
  639. package/scripts/review/review-round2-cli.ts +2 -3
  640. package/scripts/review/review-round2.ts +13 -21
  641. package/scripts/review/review-stamps.ts +9 -71
  642. package/scripts/review/review-tree.ts +4 -5
  643. package/scripts/rules/bash-triggers.ts +4 -4
  644. package/scripts/rules/decision-oracle-batch.ts +5 -6
  645. package/scripts/rules/decision-oracle-stage.ts +1 -1
  646. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  647. package/scripts/rules/decision-oracle.ts +2 -2
  648. package/scripts/rules/delivered-rules.ts +61 -406
  649. package/scripts/rules/destructive-command.ts +2 -2
  650. package/scripts/rules/direct-filing.ts +4 -4
  651. package/scripts/rules/direct-pr-create.ts +2 -2
  652. package/scripts/rules/early-heartbeat.ts +15 -19
  653. package/scripts/rules/file-body.ts +5 -6
  654. package/scripts/rules/filing-cap.ts +6 -7
  655. package/scripts/rules/filing-offer.ts +1 -1
  656. package/scripts/rules/firing-point.ts +6 -6
  657. package/scripts/rules/gh-api.ts +2 -2
  658. package/scripts/rules/git-argv.ts +3 -3
  659. package/scripts/rules/git-force.ts +2 -2
  660. package/scripts/rules/hook-context-line.ts +31 -0
  661. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  662. package/scripts/rules/implementation-cut.ts +35 -32
  663. package/scripts/rules/index-guard.ts +2 -2
  664. package/scripts/rules/issue-citation.ts +7 -7
  665. package/scripts/rules/issue-comments.ts +21 -13
  666. package/scripts/rules/josh-git-bare.ts +2 -2
  667. package/scripts/rules/lane-background.ts +14 -16
  668. package/scripts/rules/lane-carry-conflict.ts +41 -5
  669. package/scripts/rules/lane-interactive-ask.ts +6 -9
  670. package/scripts/rules/lane-park.ts +12 -16
  671. package/scripts/rules/lane-split-park.ts +1 -2
  672. package/scripts/rules/lane-switch-main.ts +10 -13
  673. package/scripts/rules/last-prompt.ts +1 -1
  674. package/scripts/rules/oracle-consulted.ts +5 -5
  675. package/scripts/rules/oracle-firing.ts +6 -9
  676. package/scripts/rules/oracle-list-cli.ts +2 -2
  677. package/scripts/rules/permission-guards.ts +2 -2
  678. package/scripts/rules/piped-verification.ts +79 -9
  679. package/scripts/rules/poll-loop.ts +9 -11
  680. package/scripts/rules/pre-gate-cut.ts +33 -30
  681. package/scripts/rules/prior-comment-read.ts +3 -3
  682. package/scripts/rules/protected-files.ts +25 -13
  683. package/scripts/rules/raw-field-body.ts +3 -4
  684. package/scripts/rules/reply-language.ts +1 -1
  685. package/scripts/rules/rule-body-guard.ts +10 -12
  686. package/scripts/rules/rule-guard.ts +1 -1
  687. package/scripts/rules/rule-list.ts +51 -0
  688. package/scripts/rules/rule-registry-rows.ts +282 -0
  689. package/scripts/rules/rule-registry.ts +109 -0
  690. package/scripts/rules/rule-value-cache.ts +2 -2
  691. package/scripts/rules/rule-value-cli.ts +6 -4
  692. package/scripts/rules/rule-value.ts +61 -22
  693. package/scripts/rules/run-tail-rule.ts +11 -15
  694. package/scripts/rules/shell-body-trigger.ts +7 -7
  695. package/scripts/rules/shell-segments.ts +2 -4
  696. package/scripts/rules/stop-rules.ts +54 -41
  697. package/scripts/rules/tail-commands.ts +1 -1
  698. package/scripts/rules/test-declared-commit.ts +2 -2
  699. package/scripts/rules/third-party-write.ts +3 -3
  700. package/scripts/rules/worktree-guard.ts +12 -5
  701. package/scripts/run/add/run-add-cli.ts +165 -0
  702. package/scripts/run/add/run-add.ts +124 -0
  703. package/scripts/run/board/run-board-cli.ts +207 -0
  704. package/scripts/run/board/run-board-closed.ts +95 -0
  705. package/scripts/run/board/run-board-every.ts +60 -0
  706. package/scripts/run/board/run-board-fetch.ts +38 -0
  707. package/scripts/run/board/run-board-fit.ts +219 -0
  708. package/scripts/run/board/run-board-github.ts +162 -0
  709. package/scripts/run/board/run-board-header.ts +275 -0
  710. package/scripts/run/board/run-board-kind.ts +35 -0
  711. package/scripts/run/board/run-board-labels.ts +299 -0
  712. package/scripts/run/board/run-board-layout.ts +222 -0
  713. package/scripts/run/board/run-board-link.ts +31 -0
  714. package/scripts/run/board/run-board-machine.ts +198 -0
  715. package/scripts/run/board/run-board-notes.ts +103 -0
  716. package/scripts/run/board/run-board-phase.ts +136 -0
  717. package/scripts/run/board/run-board-plan.ts +129 -0
  718. package/scripts/run/board/run-board-read.ts +62 -0
  719. package/scripts/run/board/run-board-render-legend.ts +82 -0
  720. package/scripts/run/board/run-board-render-notes.ts +77 -0
  721. package/scripts/run/board/run-board-render-slot.ts +50 -0
  722. package/scripts/run/board/run-board-render.ts +407 -0
  723. package/scripts/run/board/run-board-scope.ts +17 -0
  724. package/scripts/run/board/run-board-screen.ts +43 -0
  725. package/scripts/run/board/run-board-span.ts +66 -0
  726. package/scripts/run/board/run-board-spin.ts +115 -0
  727. package/scripts/run/board/run-board-state.ts +113 -0
  728. package/scripts/run/board/run-board-status.ts +279 -0
  729. package/scripts/run/board/run-board-tick.ts +210 -0
  730. package/scripts/run/board/run-board-track.ts +22 -0
  731. package/scripts/run/board/run-board-usage-read.ts +255 -0
  732. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  733. package/scripts/run/board/run-board-usage-text.ts +80 -0
  734. package/scripts/run/board/run-board-usage.ts +165 -0
  735. package/scripts/run/carry/run-carry-added.ts +62 -0
  736. package/scripts/run/carry/run-carry-args.ts +25 -22
  737. package/scripts/run/carry/run-carry-change.ts +1 -1
  738. package/scripts/run/carry/run-carry-cli.ts +71 -48
  739. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  740. package/scripts/run/carry/run-carry-ended.ts +85 -0
  741. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  742. package/scripts/run/carry/run-carry-stash.ts +3 -2
  743. package/scripts/run/carry/run-carry-streak.ts +8 -10
  744. package/scripts/run/carry/run-carry.ts +85 -89
  745. package/scripts/run/cut/run-cut-args.ts +7 -7
  746. package/scripts/run/cut/run-cut-cli.ts +68 -37
  747. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  748. package/scripts/run/cut/run-cut-report.ts +37 -16
  749. package/scripts/run/cut/run-cut.ts +63 -77
  750. package/scripts/run/detached-launch.ts +35 -50
  751. package/scripts/run/entry/run-entry-cli.ts +48 -27
  752. package/scripts/run/entry/run-entry-stop.ts +7 -9
  753. package/scripts/run/entry/run-entry.ts +5 -6
  754. package/scripts/run/event/run-event-cli.ts +5 -6
  755. package/scripts/run/event/run-event-filed.ts +69 -0
  756. package/scripts/run/event/run-event-follow.ts +3 -3
  757. package/scripts/run/event/run-event-plan.ts +38 -0
  758. package/scripts/run/event/run-event-render.ts +10 -4
  759. package/scripts/run/event/run-event-scope.ts +47 -18
  760. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  761. package/scripts/run/event/run-event-stream.ts +172 -43
  762. package/scripts/run/event/run-event-watch.ts +4 -6
  763. package/scripts/run/hold/run-hold-cli.ts +65 -62
  764. package/scripts/run/hold/run-hold.ts +88 -46
  765. package/scripts/run/merge/run-merge-cli.ts +116 -77
  766. package/scripts/run/merge/run-merge-collect.ts +107 -0
  767. package/scripts/run/merge/run-merge-steps.ts +112 -65
  768. package/scripts/run/merge/run-merge-token.ts +30 -0
  769. package/scripts/run/merge/run-merge.ts +31 -22
  770. package/scripts/run/progress/run-progress-args.ts +4 -4
  771. package/scripts/run/progress/run-progress-cli.ts +39 -50
  772. package/scripts/run/progress/run-progress-clock.ts +25 -32
  773. package/scripts/run/progress/run-progress-config.ts +6 -9
  774. package/scripts/run/progress/run-progress-read.ts +9 -10
  775. package/scripts/run/progress/run-progress.ts +48 -53
  776. package/scripts/run/review/run-review-cli.ts +6 -6
  777. package/scripts/run/review/run-review-steps.ts +6 -6
  778. package/scripts/run/review/run-review.ts +9 -11
  779. package/scripts/run/run-cli-fault.ts +29 -0
  780. package/scripts/run/run-ending-cli.ts +3 -3
  781. package/scripts/run/run-ending.ts +10 -14
  782. package/scripts/run/run-halfrun-resume.ts +6 -8
  783. package/scripts/run/run-headless.ts +25 -12
  784. package/scripts/run/run-invocation.ts +17 -22
  785. package/scripts/run/run-label.ts +7 -5
  786. package/scripts/run/run-liveness-cli.ts +19 -6
  787. package/scripts/run/run-liveness.ts +27 -38
  788. package/scripts/run/run-next-cli.ts +5 -9
  789. package/scripts/run/run-next.ts +4 -5
  790. package/scripts/run/run-parent-cut-hook.ts +10 -12
  791. package/scripts/run/run-preflight.ts +25 -29
  792. package/scripts/run/run-prep-cli.ts +17 -13
  793. package/scripts/run/run-prep-locate.ts +4 -5
  794. package/scripts/run/run-prep.ts +7 -10
  795. package/scripts/run/run-prrun-resume.ts +2 -2
  796. package/scripts/run/run-report-cli.ts +4 -4
  797. package/scripts/run/run-report.ts +9 -14
  798. package/scripts/run/run-retrospective.ts +3 -3
  799. package/scripts/run/run-section.ts +42 -0
  800. package/scripts/run/run-stage-read.ts +2 -2
  801. package/scripts/run/run-stage.ts +6 -4
  802. package/scripts/run/run-status-cli.ts +7 -5
  803. package/scripts/run/run-status.ts +6 -7
  804. package/scripts/run/run-step-cli.ts +13 -15
  805. package/scripts/run/run-step.ts +62 -48
  806. package/scripts/run/run-stop-notify.ts +7 -8
  807. package/scripts/run/run-stranded-cli.ts +1 -1
  808. package/scripts/run/run-stranded-detect.ts +4 -4
  809. package/scripts/run/run-stranded.ts +11 -13
  810. package/scripts/run/run-tail-cli.ts +15 -16
  811. package/scripts/run/run-tail.ts +14 -33
  812. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  813. package/scripts/run/run-watcher-guard.ts +11 -12
  814. package/scripts/run/run-watcher-hook.ts +6 -12
  815. package/scripts/run/ship/run-ship-cli.ts +67 -33
  816. package/scripts/run/ship/run-ship-detach.ts +15 -13
  817. package/scripts/run/ship/run-ship-lock.ts +1 -1
  818. package/scripts/run/ship/run-ship-next.ts +7 -8
  819. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  820. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  821. package/scripts/run/ship/run-ship-probe.ts +4 -4
  822. package/scripts/run/ship/run-ship-return.ts +1 -1
  823. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  824. package/scripts/run/ship/run-ship-review.ts +12 -14
  825. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  826. package/scripts/run/ship/run-ship-stage.ts +80 -26
  827. package/scripts/run/ship/run-ship-steps.ts +26 -16
  828. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  829. package/scripts/run/ship/run-ship-sync.ts +9 -8
  830. package/scripts/run/ship/run-ship.ts +17 -32
  831. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  832. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  833. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  834. package/scripts/run/tidy/run-tidy.ts +4 -3
  835. package/scripts/run/wake/run-wake-cli.ts +27 -33
  836. package/scripts/run/wake/run-wake-describe.ts +76 -29
  837. package/scripts/run/wake/run-wake-driver.ts +14 -14
  838. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  839. package/scripts/run/wake/run-wake-loop.ts +13 -21
  840. package/scripts/run/wake/run-wake-restart.ts +4 -5
  841. package/scripts/run/wake/run-wake-session.ts +23 -27
  842. package/scripts/run/wake/run-wake.ts +57 -328
  843. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  844. package/scripts/safe-chain/pack-hook.ts +2 -2
  845. package/scripts/safe-chain/preinstall-command.ts +2 -2
  846. package/scripts/security/security-audit-logic.ts +1 -1
  847. package/scripts/security/security-audit-provision-logic.ts +1 -1
  848. package/scripts/security/security-audit-provision.ts +2 -2
  849. package/scripts/security/security-audit.ts +5 -5
  850. package/scripts/security/security-updates-logic.ts +2 -3
  851. package/scripts/security/security-updates.ts +2 -4
  852. package/scripts/self-sync-guard/index.ts +1 -1
  853. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  854. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  855. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  856. package/scripts/sonar/sonar-hotspots.ts +1 -1
  857. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  858. package/scripts/sonar/sonar-new-code.ts +1 -1
  859. package/scripts/sonar/sonar-project.ts +1 -1
  860. package/scripts/split/split-assess-cli.ts +1 -1
  861. package/scripts/split/split-assess.ts +3 -3
  862. package/scripts/sync/directory-copy-guard.ts +2 -3
  863. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  864. package/scripts/sync/managed-config-scope.ts +4 -4
  865. package/scripts/sync/plugin-skill-directories.ts +2 -2
  866. package/scripts/sync/reconcile-templates.ts +17 -8
  867. package/scripts/sync/removed-skill-manifest.ts +2 -3
  868. package/scripts/sync/sync-ai-files.ts +7 -7
  869. package/scripts/sync/sync-configs.ts +30 -3
  870. package/scripts/sync/sync-hook-safety.ts +2 -2
  871. package/scripts/sync/sync.ts +23 -10
  872. package/scripts/sync/synced-paths.ts +2 -1
  873. package/scripts/sync/workflow-pin-logic.ts +1 -1
  874. package/scripts/test/test-declared-changed.ts +4 -4
  875. package/scripts/test/test-declared-logic.ts +2 -3
  876. package/scripts/test/test-declared-match.ts +25 -4
  877. package/scripts/test/test-declared.ts +26 -9
  878. package/scripts/test/test-red-commit.ts +3 -2
  879. package/scripts/test/test-red-logic.ts +7 -14
  880. package/scripts/test/test-red.ts +12 -47
  881. package/scripts/test/test-related-scope.ts +2 -3
  882. package/scripts/test/test-related.ts +3 -3
  883. package/scripts/test/test-type-logic.ts +1 -2
  884. package/scripts/test/test-unit-guard.ts +13 -17
  885. package/scripts/test/unit-worker-share.ts +7 -8
  886. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  887. package/scripts/time-runtime/time-background.ts +17 -21
  888. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  889. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  890. package/scripts/time-runtime/time-bundles.ts +11 -12
  891. package/scripts/time-runtime/time-call-identity.ts +1 -1
  892. package/scripts/time-runtime/time-command-key.ts +2 -2
  893. package/scripts/time-runtime/time-density-hook.ts +8 -11
  894. package/scripts/time-runtime/time-density.ts +5 -5
  895. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  896. package/scripts/time-runtime/time-format.ts +5 -5
  897. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  898. package/scripts/time-runtime/time-instant.ts +1 -1
  899. package/scripts/time-runtime/time-markers.ts +15 -19
  900. package/scripts/time-runtime/time-phase-names.ts +3 -3
  901. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  902. package/scripts/time-runtime/time-round-trips.ts +20 -23
  903. package/scripts/time-runtime/time-shell.ts +8 -8
  904. package/scripts/time-runtime/time-single-check.ts +1 -2
  905. package/scripts/time-runtime/time-spans.ts +35 -40
  906. package/scripts/time-runtime/time-tool-call.ts +15 -16
  907. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  908. package/scripts/time-runtime/time-writes.ts +5 -5
  909. package/scripts/ui/ui-routes-cli.ts +1 -2
  910. package/scripts/ui/ui-routes.ts +1 -2
  911. package/scripts/version/bump-version.ts +1 -1
  912. package/scripts/version/fresh-metadata-cache.ts +2 -2
  913. package/scripts/version/latest-corepack.ts +129 -98
  914. package/scripts/version/latest-lane-guard.ts +1 -1
  915. package/scripts/version/latest-scope-cli.ts +2 -2
  916. package/scripts/version/latest-stamp.ts +1 -2
  917. package/scripts/version/latest-update.ts +2 -2
  918. package/scripts/version/npm-registry.ts +2 -2
  919. package/scripts/version/package-manager-version.ts +18 -0
  920. package/scripts/version/publishable-range-check.ts +2 -1
  921. package/scripts/version/publishable-range.ts +1 -1
  922. package/scripts/version/release-age.ts +11 -11
  923. package/scripts/version/release-hold.ts +2 -2
  924. package/scripts/version/safe-chain-version-update.ts +3 -3
  925. package/scripts/version/version-check-logic.ts +2 -3
  926. package/scripts/version/version-check.ts +1 -2
  927. package/scripts/version/version-command-config.ts +2 -2
  928. package/scripts/version/version-commands.ts +3 -3
  929. package/scripts/version/version-remote.ts +4 -4
  930. package/scripts/version/version-targets.ts +2 -2
  931. package/templates/gitignore +7 -0
  932. package/templates/workflows/github-release.yml +4 -0
  933. package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
  934. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  935. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  936. package/scripts/backlog/backlog-restructure.ts +0 -152
  937. package/scripts/rules/issue-fold-rule.ts +0 -72
  938. package/scripts/rules/wip-cap.ts +0 -63
  939. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,14 +1,14 @@
1
1
  import { hook_decision } from '#scripts/josh/hook-decision'
2
2
  import { lane_child_marker } from '#scripts/lane/lane-child-marker'
3
+ import { json_value } from '#scripts/lib/json-value'
3
4
  import { run_progress_read } from '#scripts/run/progress/run-progress-read'
4
5
  import { z } from 'zod'
5
6
  import { run_watcher_guard } from './run-watcher-guard'
6
7
 
7
8
  // The `PreToolUse` adapter that turns `run_watcher_guard`'s verdict into a deny reason, so the guard
8
- // the CLI already carries is finally *called* on every tool call rather than left to prose asking the
9
- // run to call it (joshuafolkken/kit#2353). It is composed into `pretool-guard.ts` — the one PreToolUse
10
- // hook, kept one by joshuafolkken/kit#1930 — rather than added as a second `.claude/settings.json`
11
- // entry, so the consolidation invariant holds; the detection itself is unchanged.
9
+ // the CLI already carries is *called* on every tool call rather than left to prose asking the run to
10
+ // call it. It is composed into `pretool-guard.ts` — the one PreToolUse hook — rather than added as a
11
+ // second `.claude/settings.json` entry, so the consolidation invariant holds.
12
12
  //
13
13
  // **It fires once per run, for the same reason every guard here stamps.** A stale watcher would other-
14
14
  // wise refuse *every* tool call, including the `pnpm josh run:progress --wait` that fixes it — a wedge.
@@ -24,13 +24,7 @@ const STAMP_PREFIX = 'josh-watcher-guard-'
24
24
  const payload_schema = z.object({ transcript_path: z.string().min(1) })
25
25
 
26
26
  function transcript_of(raw_payload: string): string | undefined {
27
- try {
28
- const parsed = payload_schema.safeParse(JSON.parse(raw_payload))
29
-
30
- return parsed.success ? parsed.data.transcript_path : undefined
31
- } catch {
32
- return undefined
33
- }
27
+ return json_value.parse_with(raw_payload, payload_schema)?.transcript_path
34
28
  }
35
29
 
36
30
  // The once-per-run arm: refuse only when nothing has been recorded yet, and record before returning so
@@ -56,7 +50,7 @@ function is_active(): boolean {
56
50
 
57
51
  // The guard's note when the watcher is stale and this call is the once-per-run one that refuses, or
58
52
  // `undefined` when the watcher is fresh (or the refusal was already spent this run). No session is asked
59
- // to relay the run's stream any more — the watch pane does (joshuafolkken/kit#2492).
53
+ // to relay the run's stream — the watch pane does.
60
54
  async function stale_reason(transcript: string, now_ms: number): Promise<string | undefined> {
61
55
  const result = await run_watcher_guard.check(await run_progress_read.live_target())
62
56
 
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
3
4
  import { lane_child_marker } from '#scripts/lane/lane-child-marker'
5
+ import { lane_ledger } from '#scripts/lane/lane-ledger'
4
6
  import { cli_flags } from '#scripts/lib/cli-flags'
5
7
  import { run_event_stream } from '#scripts/run/event/run-event-stream'
6
8
  import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
@@ -13,28 +15,27 @@ import { run_ship_return } from './run-ship-return'
13
15
  import { run_ship_stage, type Phase, type ShipState, type Stage } from './run-ship-stage'
14
16
  import { run_ship_steps, type ShipArguments, type Step } from './run-ship-steps'
15
17
 
16
- // `josh ship "<title> #<N>"` — one call for the fixed commit-to-report region a run ships a change on
17
- // (joshuafolkken/kit#2398). The loop used to spend a round trip each on `gate`, `git -y`, `followup`
18
- // and `run:tail`, re-billing a lane's full context every time; this runs the four internally and
19
- // prints one composite report, the same way `run:tail` folds the post-merge bookkeeping. Each step's
20
- // stderr is forwarded, so the reader still sees every explanation — a red check, a CI wait, a refusal —
21
- // the four would have printed on their own.
18
+ // `josh ship "<title> #<N>"` — one call for the fixed commit-to-report region a run ships a change on.
19
+ // It runs `gate`, `git -y`, `followup` and `run:tail` internally, so no round trip re-bills a lane's
20
+ // full context, and prints one composite report, the same way `run:tail` folds the post-merge
21
+ // bookkeeping. Each step's stderr is forwarded, so the reader still sees every explanation — a red
22
+ // check, a CI wait, a refusal — the four would have printed on their own.
22
23
  //
23
24
  // It stops at the first failed step: the gate must be green before the commit, the commit before the
24
25
  // merge. The report ends at the failure and names the stopped step, so the run reads only that one.
25
26
  //
26
- // **Re-running it resumes rather than restarts** (joshuafolkken/kit#2426). Each stage's completion is
27
+ // **Re-running it resumes rather than restarts**. Each stage's completion is
27
28
  // kept in a per-issue record, and the repository's actual state — committed, pushed, merged — is read
28
29
  // before the first stage, so a ship that died mid-way passes over what already happened and never
29
30
  // commits, pushes or merges twice. Each stage's start, success, failure or skip goes onto the run's
30
31
  // event stream. `run-ship-stage.ts` carries which stage may be passed over, and why the gate never is
31
32
  // on the record's word alone.
32
33
  //
33
- // **`--review` owns the round-1 review too** (joshuafolkken/kit#2427): a `review` stage in front of the
34
+ // **`--review` owns the round-1 review too**: a `review` stage in front of the
34
35
  // gate launches the same-strength reviewer beside it and joins, attests and records the round without
35
36
  // an agent turn (`run-ship-review-steps.ts`); a High or Medium finding, or any failed join, stops there.
36
37
  //
37
- // **`--detach` hands the whole region to a supervisor that outlives the agent** (joshuafolkken/kit#2428):
38
+ // **`--detach` hands the whole region to a supervisor that outlives the agent**:
38
39
  // the agent ends at the hand-off instead of relaunching itself for the gate, a supervised ship that stops
39
40
  // hands the stage back (`run-ship-return.ts`), and `--log <N>` prints the report it stopped on.
40
41
  //
@@ -54,13 +55,10 @@ const EXTRA_CITE_START = 1
54
55
  // The issue reference at the tail of the title — `git -y` and `followup` read the whole string, and
55
56
  // `run:tail` needs the number alone.
56
57
  const TRAILING_ISSUE_PATTERN = /#([1-9]\d*)\s*$/u
57
- // A follow-up citation passed as a trailing positional — a bare issue number, so a stray flag is
58
- // refused rather than forwarded to the wrong step.
59
- const CITE_PATTERN = /^[1-9]\d*$/u
60
58
  // Both body forms `followup` documents, forwarded verbatim: the inline `--notify-message` and the
61
59
  // shell-body-safe `--notify-message-file` a body naming a command or path must use (`followup.md`).
62
60
  const NOTIFY_OPTIONS = ['notify-message', 'notify-message-file'] as const
63
- // joshuafolkken/kit#2446: the PR body carrying the live-execution evidence `followup` gates the merge
61
+ // The PR body carrying the live-execution evidence `followup` gates the merge
64
62
  // on, forwarded to `git -y` as a path because it holds commands and their output.
65
63
  const BODY_FILE_OPTION = 'body-file'
66
64
  const USAGE =
@@ -76,7 +74,7 @@ const OPTIONS = {
76
74
  [NOTIFY_OPTIONS[1]]: { type: 'string' },
77
75
  [BODY_FILE_OPTION]: { type: 'string' },
78
76
  review: { type: 'boolean' },
79
- // joshuafolkken/kit#2428: hand the region to a detached supervisor (`run-ship-detach.ts`), print the
77
+ // Hand the region to a detached supervisor (`run-ship-detach.ts`), print the
80
78
  // report a stopped supervisor left, and carry follow-up citations as options so the supervisor's
81
79
  // command line still ends with its title.
82
80
  detach: { type: 'boolean' },
@@ -88,10 +86,13 @@ type ShipCommand = { kind: 'ship'; args: ShipArguments } | { kind: 'log'; number
88
86
 
89
87
  // What a resumed ship knows before its first stage: the record's path (absent outside a repository),
90
88
  // the stages it says completed, and the repository's actual state (`run-ship-stage.ts` decides from it).
89
+ // `started` opens with the stages the record says this attempt started — a supervisor that ended
90
+ // without a stop leaves them — and grows as each stage starts; every stage line carries it.
91
91
  interface ShipContext {
92
92
  target: string | undefined
93
93
  done: ReadonlySet<string>
94
94
  state: ShipState
95
+ started: Array<string>
95
96
  }
96
97
 
97
98
  // The notify tail `followup` takes — whichever body form the caller composed, forwarded unchanged so a
@@ -122,6 +123,8 @@ interface ParsedValues extends NotifyValues {
122
123
  cite?: Array<string>
123
124
  }
124
125
 
126
+ // A follow-up citation passed as a trailing positional is a bare issue number, so a stray flag is
127
+ // refused rather than forwarded to the wrong step.
125
128
  function ship_args(
126
129
  title: string,
127
130
  rest: ReadonlyArray<string>,
@@ -130,7 +133,9 @@ function ship_args(
130
133
  const number = issue_number(title)
131
134
  const cites = [...rest, ...(values.cite ?? [])]
132
135
 
133
- if (number === undefined || cites.some((token) => !CITE_PATTERN.test(token))) return undefined
136
+ if (number === undefined || cites.some((token) => !issue_number_shape.is_issue_number(token))) {
137
+ return undefined
138
+ }
134
139
 
135
140
  return {
136
141
  title,
@@ -146,7 +151,9 @@ function ship_args(
146
151
 
147
152
  // `--log <N>` stands alone: a bare issue number and nothing to ship.
148
153
  function log_command(number: string, positionals: ReadonlyArray<string>): ShipCommand | undefined {
149
- return CITE_PATTERN.test(number) && positionals.length === 0 ? { kind: 'log', number } : undefined
154
+ return issue_number_shape.ISSUE_NUMBER_PATTERN.test(number) && positionals.length === 0
155
+ ? { kind: 'log', number }
156
+ : undefined
150
157
  }
151
158
 
152
159
  function command_of(
@@ -170,15 +177,34 @@ function parse(argv: ReadonlyArray<string>): ShipCommand | undefined {
170
177
  return parsed === undefined ? undefined : command_of(parsed.values, parsed.positionals)
171
178
  }
172
179
 
180
+ // Every stage that ran is timed into the lane ledger, failed ones included — a stage that stopped the
181
+ // ship cost the lane its time as well. The append is local and best-effort, so it adds no wait.
182
+ //
183
+ // **A stage that found nothing to do is not timed**: a round 2 that was not due, a round 1 already
184
+ // recorded, or a gate that reused its tree's green record would otherwise read as a run that took a
185
+ // second and pull the stage's median to zero.
186
+ async function record_timed(step: Step, issue: string, elapsed_ms: number): Promise<void> {
187
+ await lane_ledger.record_stage({ stage: step.stage, elapsed_ms, issue: Number(issue) })
188
+ }
189
+
173
190
  async function run_step(step: Step, args: ShipArguments, state: ShipState): Promise<ShipSection> {
191
+ const started_ms = performance.now()
174
192
  const result = await step.run(args, state)
193
+ const elapsed_ms = performance.now() - started_ms
194
+
195
+ if (result.is_skipped !== true) await record_timed(step, args.number, elapsed_ms)
175
196
  const section = { header: step.header, body: result.out, code: result.code }
176
197
 
177
198
  return result.conflicts === undefined ? section : { ...section, conflicts: result.conflicts }
178
199
  }
179
200
 
180
- async function emit_phase(args: ShipArguments, stage: Stage, phase: Phase): Promise<void> {
181
- const text = run_ship_stage.event_text(args.number, stage, phase)
201
+ async function emit_phase(
202
+ args: ShipArguments,
203
+ context: ShipContext,
204
+ stage: Stage,
205
+ phase: Phase,
206
+ ): Promise<void> {
207
+ const text = run_ship_stage.event_text(args.number, stage, phase, context.started)
182
208
 
183
209
  await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.SHIP_STAGE, text)
184
210
  }
@@ -203,7 +229,7 @@ async function settle(
203
229
  ): Promise<void> {
204
230
  const is_green = code === SUCCESS_EXIT_CODE
205
231
 
206
- await emit_phase(args, step.stage, is_green ? PHASE.DONE : PHASE.FAILED)
232
+ await emit_phase(args, context, step.stage, is_green ? PHASE.DONE : PHASE.FAILED)
207
233
 
208
234
  if (!is_green) return
209
235
 
@@ -219,12 +245,16 @@ async function run_stage(
219
245
  context: ShipContext,
220
246
  ): Promise<ShipSection> {
221
247
  if (run_ship_stage.is_done(step.stage, context.done, context.state, args.body.length > 0)) {
222
- await emit_phase(args, step.stage, PHASE.SKIPPED)
248
+ await emit_phase(args, context, step.stage, PHASE.SKIPPED)
223
249
 
224
250
  return { header: step.header, body: run_ship.SKIPPED_BODY, code: SUCCESS_EXIT_CODE }
225
251
  }
226
252
 
227
- await emit_phase(args, step.stage, PHASE.START)
253
+ context.started.push(step.stage)
254
+ record(context.target, (path) => {
255
+ run_ship_stage.mark_started(path, step.stage)
256
+ })
257
+ await emit_phase(args, context, step.stage, PHASE.START)
228
258
  const section = await run_step(step, args, context.state)
229
259
 
230
260
  await settle(step, args, context, section.code)
@@ -239,24 +269,28 @@ async function open_context(args: ShipArguments): Promise<ShipContext> {
239
269
  ])
240
270
 
241
271
  const done = target === undefined ? new Set<string>() : run_ship_stage.read_done(target)
272
+ const started = target === undefined ? [] : [...run_ship_stage.read_started(target)]
242
273
 
243
- return { target, done, state }
274
+ return { target, done, state, started }
244
275
  }
245
276
 
246
- // A detached supervisor hands the stopped stage back (`run-ship-return.ts`, joshuafolkken/kit#2428); a
247
- // ship in an agent's own turn has its report in front of that agent already.
277
+ // A detached supervisor hands the stopped stage back (`run-ship-return.ts`); a
278
+ // ship in an agent's own turn has its report in front of that agent already. The `ship-stop` ends the
279
+ // attempt, so the record's started stages go with it.
248
280
  async function stopped(
249
281
  sections: ReadonlyArray<ShipSection>,
250
282
  args: ShipArguments,
251
- stage: Stage,
283
+ step: Step,
284
+ context: ShipContext,
252
285
  ): Promise<ReadonlyArray<ShipSection>> {
253
286
  if (run_ship_detach.is_supervised()) {
254
287
  const conflicts = sections.at(-1)?.conflicts
255
288
  const resume = run_ship_next.resume_of(args)
256
289
 
290
+ record(context.target, run_ship_stage.end_attempt)
257
291
  await run_ship_return.return_control(
258
292
  args.number,
259
- stage,
293
+ step.stage,
260
294
  conflicts === undefined ? resume : { ...resume, conflicts },
261
295
  )
262
296
  }
@@ -278,7 +312,7 @@ async function ship(args: ShipArguments): Promise<ReadonlyArray<ShipSection>> {
278
312
  sections.push(section)
279
313
 
280
314
  // eslint-disable-next-line no-await-in-loop -- stages run in order and the first failure stops the ship
281
- if (section.code !== SUCCESS_EXIT_CODE) return await stopped(sections, args, step.stage)
315
+ if (section.code !== SUCCESS_EXIT_CODE) return await stopped(sections, args, step, context)
282
316
  }
283
317
 
284
318
  record(context.target, (path) => {
@@ -321,7 +355,7 @@ async function detach(args: ShipArguments): Promise<number> {
321
355
  return result.verdict === run_ship_detach.LAUNCHED ? SUCCESS_EXIT_CODE : FAILURE_EXIT_CODE
322
356
  }
323
357
 
324
- // joshuafolkken/kit#2457: a headless lane child's turn ending kills a ship it left in its own process,
358
+ // A headless lane child's turn ending kills a ship it left in its own process,
325
359
  // so inside a lane child the region always goes to the supervisor, flag or not. The supervisor itself
326
360
  // inherits the lane mark, and is the one ship that must run the stages here.
327
361
  function should_detach(args: ShipArguments): boolean {
@@ -330,11 +364,11 @@ function should_detach(args: ShipArguments): boolean {
330
364
  return !run_ship_detach.is_supervised() && lane_child_marker.is_child_of(process.cwd())
331
365
  }
332
366
 
333
- // joshuafolkken/kit#2966: the preflight is deterministic and fast, so it runs here, in the agent's own
334
- // turn, before the hand-off — a stop it finds is fixed by the same session instead of relaunching one
335
- // from the supervisor. Only the slow stages go to the supervisor, which re-asks the preflight itself.
336
- // joshuafolkken/kit#3222: the type check and the document tests follow it here for the same reason; they
337
- // are not a stage, so the supervisor's gate runs them again rather than passing over them.
367
+ // The preflight is deterministic and fast, so it runs here, in the agent's own turn, before the
368
+ // hand-off — a stop it finds is fixed by the same session instead of relaunching one from the
369
+ // supervisor. Only the slow stages go to the supervisor, which re-asks the preflight itself. The type
370
+ // check and the document tests follow it here for the same reason; they are not a stage, so the
371
+ // supervisor's gate runs them again rather than passing over them.
338
372
  async function pre_detach_sections(args: ShipArguments): Promise<ReadonlyArray<ShipSection>> {
339
373
  const preflight = await run_stage(run_ship_steps.PREFLIGHT_STEP, args, await open_context(args))
340
374
  if (preflight.code !== SUCCESS_EXIT_CODE) return [preflight]
@@ -1,18 +1,19 @@
1
1
  import { randomUUID } from 'node:crypto'
2
2
  import { setTimeout as sleep } from 'node:timers/promises'
3
3
  import { agent_role_profile } from '#scripts/agent/agent-role-profile'
4
+ import { issue_cite } from '#scripts/issue/issue-cite'
5
+ import { session_cite } from '#scripts/issue/session-cite'
4
6
  import { process_identity } from '#scripts/josh/process-identity'
5
7
  import { stamp_file } from '#scripts/josh/stamp-file'
8
+ import { json_value } from '#scripts/lib/json-value'
6
9
  import { detached_launch, type LaunchArgv } from '#scripts/run/detached-launch'
7
10
  import { run_event_stream } from '#scripts/run/event/run-event-stream'
8
11
  import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
9
12
  import { z } from 'zod'
10
13
 
11
- // `josh ship --detach` — hand the post-implementation region to a supervisor that outlives the agent
12
- // (joshuafolkken/kit#2428). A lane child used to take the pre-gate cut and relaunch a fresh agent session
13
- // to drive the gate, the review and the merge; that session re-read the issue to run fixed procedure,
14
- // and the wake role it billed was 59.8% of a run's wall time. This starts `josh ship` itself as a
15
- // detached process instead, so the agent ends at the hand-off and nothing but the mechanical region runs.
14
+ // `josh ship --detach` — hand the post-implementation region to a supervisor that outlives the agent.
15
+ // This starts `josh ship` itself as a detached process, so the agent ends at the hand-off and nothing
16
+ // but the mechanical region runs.
16
17
  //
17
18
  // **The supervisor's command line ends with the `"<title> #<N>"` title**, which is what the parent's
18
19
  // liveness pattern (`lane-child-invocation.ts`) anchors on — so a lane whose agent has ended is still
@@ -24,7 +25,7 @@ import { z } from 'zod'
24
25
  // while that process is alive is refused `busy`: two supervisors would race each other's commit and
25
26
  // merge, which the resume record (`run-ship-stage.ts`) orders but cannot serialize.
26
27
  //
27
- // **The supervisor names itself once it starts** (joshuafolkken/kit#2642). The launcher reads the child's
28
+ // **The supervisor names itself once it starts**. The launcher reads the child's
28
29
  // start time from outside, which a sandbox that refuses `ps` cannot answer; a pid with no start time
29
30
  // would then be believed for as long as any process holds that number. The supervisor therefore claims
30
31
  // the record with its own identity — whose socket beacon answers where `ps` cannot — and a record still
@@ -114,11 +115,8 @@ function result_path(repository: string, number: string): string {
114
115
  function read_record(repository: string, number: string): ShipRecord | undefined {
115
116
  try {
116
117
  const raw = stamp_file.read_stamp_text(result_path(repository, number))
117
- if (raw === undefined) return undefined
118
- const value: unknown = JSON.parse(raw)
119
- const parsed = ship_record_schema.safeParse(value)
120
118
 
121
- return parsed.success ? parsed.data : undefined
119
+ return raw === undefined ? undefined : json_value.parse_with(raw, ship_record_schema)
122
120
  } catch {
123
121
  return undefined
124
122
  }
@@ -291,7 +289,7 @@ function launch(request: DetachRequest): DetachResult {
291
289
  cwd: request.cwd,
292
290
  log_path: log,
293
291
  // The provider travels as a mark because the launch strips the session keys that name it, and
294
- // `ship --review` resolves its reviewer from it (joshuafolkken/kit#2456).
292
+ // `ship --review` resolves its reviewer from it.
295
293
  env: supervisor_environment(launch_id),
296
294
  },
297
295
  (note) => {
@@ -299,6 +297,7 @@ function launch(request: DetachRequest): DetachResult {
299
297
  },
300
298
  )
301
299
 
300
+ agent_role_profile.warn_of_default()
302
301
  if (result.kind === 'failed') return failed_launch(request, result.note)
303
302
 
304
303
  record_launch(request, result.pid, launch_id)
@@ -311,7 +310,10 @@ function launch(request: DetachRequest): DetachResult {
311
310
 
312
311
  async function detach(request: DetachRequest): Promise<DetachResult> {
313
312
  if (read_result(request.repository, request.number)?.result === 'running') {
314
- return { verdict: BUSY, note: `a ship supervisor for #${request.number} is already running` }
313
+ return {
314
+ verdict: BUSY,
315
+ note: `a ship supervisor for ${session_cite.issue(request.number)} is already running`,
316
+ }
315
317
  }
316
318
 
317
319
  const result = launch(request)
@@ -319,7 +321,7 @@ async function detach(request: DetachRequest): Promise<DetachResult> {
319
321
  if (result.verdict === LAUNCHED) {
320
322
  await run_event_stream_emit.emit(
321
323
  run_event_stream.EVENT_KIND.SHIP_LAUNCH,
322
- `#${request.number} ship supervisor launched`,
324
+ `${issue_cite.plain(request.number)} ship supervisor launched`,
323
325
  )
324
326
  }
325
327
 
@@ -4,7 +4,7 @@ import { stripVTControlCharacters } from 'node:util'
4
4
  import { buffered_process } from '#scripts/lib/buffered-process'
5
5
  import { INSTALL_TIMEOUT_MS } from '#scripts/lib/timeouts'
6
6
 
7
- // A lock file that no longer matches its inputs, asked before the gate (joshuafolkken/kit#3307).
7
+ // A lock file that no longer matches its inputs, asked before the gate.
8
8
  //
9
9
  // The pre-push hook's setup runs `pnpm install`, which rewrites a lock that has drifted — a
10
10
  // `.pnpmfile.mjs` edit moves `pnpmfileChecksum` — and so leaves the working tree dirty under the push.
@@ -1,12 +1,11 @@
1
1
  import { run_ship_stage, type Stage } from './run-ship-stage'
2
2
  import type { ShipArguments } from './run-ship-steps'
3
3
 
4
- // The command a relaunched lane child runs once it has fixed what stopped its detached ship
5
- // (joshuafolkken/kit#2964). The ship-stop prompt used to say only "hand the region back per
6
- // chain-rule.md", so every relaunched session searched that document and re-derived the next command
7
- // — 179 reads of it in one run. The stopped stage decides the command mechanically, so it is decided
8
- // here, once, and the prompt carries it. `chain-rule.md` step 0 stays the single source of the
9
- // procedure; `ship-stop-prompt-document-rule.test.ts` holds every command below to it.
4
+ // The command a relaunched lane child runs once it has fixed what stopped its detached ship.
5
+ // The stopped stage decides the command mechanically, so it is decided here, once, and the prompt
6
+ // carries it rather than each relaunched session re-deriving it. `chain-rule.md` step 0 stays the
7
+ // single source of the procedure; `ship-stop-prompt-document-rule.test.ts` holds every command below
8
+ // to it.
10
9
  //
11
10
  // The fix is left uncommitted on purpose: a dirty tree reads as not committed
12
11
  // (`run-ship-probe.ts`), so a re-detached ship runs the gate and the commit again on the fixed tree
@@ -42,7 +41,7 @@ interface ShipResume {
42
41
  title: string
43
42
  flags: ReadonlyArray<string>
44
43
  is_review: boolean
45
- // The paths a merge of the default branch left unmerged (joshuafolkken/kit#3221).
44
+ // The paths a merge of the default branch left unmerged.
46
45
  conflicts?: ReadonlyArray<string>
47
46
  }
48
47
 
@@ -99,7 +98,7 @@ const AFTER_FIX: Record<Stage, (resume: ShipResume) => string> = {
99
98
  [STAGE.REPORT]: detach_again,
100
99
  }
101
100
 
102
- // A conflict names its paths (joshuafolkken/kit#3221), so the resumed session resolves them without
101
+ // A conflict names its paths, so the resumed session resolves them without
103
102
  // reading the report or asking git which files are unmerged.
104
103
  function conflict_step(conflicts: ReadonlyArray<string>): string {
105
104
  return `Resolve the conflict with origin/main in ${conflicts.join(', ')} (the merge is left in progress: remove the conflict markers in those files), then`
@@ -1,24 +1,30 @@
1
1
  import { existsSync } from 'node:fs'
2
2
  import path from 'node:path'
3
+ import { project_checks } from '#scripts/gate/project-checks'
3
4
  import { type_check_step } from '#scripts/gate/type-check-step'
4
5
  import type { JoshResult } from '#scripts/josh/josh-run'
5
6
  import { buffered_process, type BufferedProcessResult } from '#scripts/lib/buffered-process'
6
7
 
7
8
  // The fast checks a detached `josh ship` runs in the agent's own turn, after the preflight and before
8
- // the hand-off (joshuafolkken/kit#3222). In one measured backlogrun about 7 of 31 lane resumes were a
9
- // gate failure first seen after the detach — a type error in a file the related-only checks never
10
- // touched, or a document test (a SKILL.md pointer, a byte budget, the command list) that only the full
11
- // suite runs — each paid for with a relaunched session. These two answer in seconds, so the same
12
- // session fixes what they find and ships again. **Nothing moves out of the gate**: the supervised gate
13
- // stage still runs every check, these included.
9
+ // the hand-off: a type error in a file the related-only checks never touched, or a document test (a
10
+ // SKILL.md pointer, a byte budget, the command list) that only the full suite runs, would otherwise
11
+ // first surface after the detach and cost a relaunched session. These two answer in seconds, so the
12
+ // same session fixes what they find and ships again. **Nothing moves out of the gate**: the
13
+ // supervised gate stage still runs every check, these included.
14
14
  //
15
- // The test targets are the directories those resumes failed in. A consumer has none of them, so only
15
+ // The test targets are the directories such failures land in. A consumer has none of them, so only
16
16
  // the ones present run, and a consumer meets the type check alone.
17
+ //
18
+ // In kit the metrics ratchet's totals join them: a feature grows a total almost every time, and here
19
+ // the session that grew the total writes the reason itself rather than a relaunched one. The
20
+ // durations are left out: they read the gate ledger, stale before the detach, so they stay with the
21
+ // supervised gate.
17
22
 
18
23
  const SUCCESS_EXIT_CODE = 0
19
24
  const FAILURE_EXIT_CODE = 1
20
25
  const SECTION_SEPARATOR = '\n\n'
21
- const PASSED = 'type check and document tests passed'
26
+ const PASSED = 'pre-detach checks passed'
27
+ const METRICS_TOTALS_COMMAND: ReadonlyArray<string> = ['josh', 'metrics', '--totals-only']
22
28
  const DOCUMENT_TEST_TARGETS: ReadonlyArray<string> = [
23
29
  'scripts/document',
24
30
  'scripts/claude',
@@ -33,11 +39,21 @@ function present_targets(directory: string): ReadonlyArray<string> {
33
39
  return DOCUMENT_TEST_TARGETS.filter((target) => existsSync(path.join(directory, target)))
34
40
  }
35
41
 
42
+ function document_tests(directory: string): Array<ReadonlyArray<string>> {
43
+ const targets = present_targets(directory)
44
+
45
+ return targets.length === 0 ? [] : [[...DOCUMENT_TEST_COMMAND, ...targets]]
46
+ }
47
+
48
+ // The same kit-only rule as the gate's `is_kit_only` step: a consumer's kit has no `josh metrics`.
49
+ function kit_only(directory: string): Array<ReadonlyArray<string>> {
50
+ return project_checks.is_kit_repository(directory) ? [METRICS_TOTALS_COMMAND] : []
51
+ }
52
+
36
53
  async function command_lists(directory: string): Promise<Array<ReadonlyArray<string>>> {
37
54
  const type_check = await type_check_step.resolve_type_check_args(directory)
38
- const targets = present_targets(directory)
39
55
 
40
- return targets.length === 0 ? [type_check] : [type_check, [...DOCUMENT_TEST_COMMAND, ...targets]]
56
+ return [type_check, ...document_tests(directory), ...kit_only(directory)]
41
57
  }
42
58
 
43
59
  async function run_in(
@@ -61,6 +77,6 @@ async function checks(directory: string = process.cwd()): Promise<JoshResult> {
61
77
  }
62
78
  }
63
79
 
64
- const run_ship_pre_detach = { DOCUMENT_TEST_TARGETS, PASSED, checks }
80
+ const run_ship_pre_detach = { DOCUMENT_TEST_TARGETS, METRICS_TOTALS_COMMAND, PASSED, checks }
65
81
 
66
82
  export { run_ship_pre_detach }
@@ -10,11 +10,10 @@ import { live_evidence } from '#scripts/review/live-evidence'
10
10
  import { run_ship_lock } from './run-ship-lock'
11
11
  import { run_ship_scoped } from './run-ship-scoped'
12
12
 
13
- // `josh ship`'s first stage (joshuafolkken/kit#2946). A detached ship used to meet the pull request's
14
- // preconditions only at the commit stage — `git -y`'s preflight — or at the merge — `followup`'s
15
- // live-evidence refusal — each after the review and the gate had already run, so every such stop
16
- // relaunched a session to repeat them. **Every precondition decidable before the review is asked here,
17
- // and all of them are reported at once.** No check is new: the classification, issue and branch answers
13
+ // `josh ship`'s first stage. The commit stage (`git -y`'s preflight) and the merge (`followup`'s
14
+ // live-evidence refusal) run after the review and the gate, so a stop there would repeat them.
15
+ // **Every precondition decidable before the review is asked here, and all of them are reported at
16
+ // once.** No check is new: the classification, issue and branch answers
18
17
  // are `git_preflight.problems_of`, and the evidence answer is `live_evidence.verdict_for` over the same
19
18
  // changed paths and the body this ship will deliver — `--body-file` when given, else the open PR's.
20
19
  //
@@ -23,8 +22,8 @@ import { run_ship_scoped } from './run-ship-scoped'
23
22
 
24
23
  const SUCCESS_EXIT_CODE = 0
25
24
  const FAILURE_EXIT_CODE = 1
26
- const EVIDENCE_PROBLEM = `This change touches runtime code, but the PR body has no ${live_evidence.EVIDENCE_HEADING} section: run the acceptance criteria for real and pass the body with --body-file <path>.`
27
- const EVIDENCE_PENDING = `This change touches runtime code and no PR is open yet: write the ${live_evidence.EVIDENCE_HEADING} section to a file and hand it to josh ship with --body-file <path>, or the ship refuses.`
25
+ const EVIDENCE_PROBLEM = `This change touches runtime code, but the PR body has no ${live_evidence.EVIDENCE_HEADING} section: run the acceptance criteria for real and pass the body with --body-file <path>. Write it ${live_evidence.EVIDENCE_FORMAT}`
26
+ const EVIDENCE_PENDING = `This change touches runtime code and no PR is open yet: write the ${live_evidence.EVIDENCE_HEADING} section to a file and hand it to josh ship with --body-file <path>, or the ship refuses. Write it ${live_evidence.EVIDENCE_FORMAT}`
28
27
 
29
28
  interface PreflightRequest {
30
29
  title: string
@@ -72,7 +71,7 @@ async function caught(problems: Promise<Array<string>>): Promise<Array<string>>
72
71
  }
73
72
  }
74
73
 
75
- // The lock file is asked here too (joshuafolkken/kit#3307), so a drift stops the ship before the gate
74
+ // The lock file is asked here too, so a drift stops the ship before the gate
76
75
  // rather than being rewritten by the pre-push hook's install under the push.
77
76
  async function asked_problems(request: PreflightRequest): Promise<Array<string>> {
78
77
  const [preflight, evidence, lock] = await Promise.all([
@@ -100,9 +99,9 @@ async function classification_problems(issue_number: string): Promise<Array<stri
100
99
  return []
101
100
  }
102
101
 
103
- // **The same two refusals, asked before the ship rather than by it** (joshuafolkken/kit#3154). In one
104
- // measured backlogrun 20 of 41 lane `ship` refusals were a missing classification or missing evidence —
105
- // facts fixed long before the ship, refused at the run's largest context. `run:prep` (and so `run:entry`)
102
+ // **The same two refusals, asked before the ship rather than by it**: a missing
103
+ // classification or missing evidence is known long before the ship, yet refused there at the run's
104
+ // largest context. `run:prep` (and so `run:entry`)
106
105
  // and `run:step` print this, so the Issue body and the evidence are met while they are cheap. Nothing
107
106
  // here replaces `stage`: the ship and `followup` still refuse on both. Before the PR exists the evidence
108
107
  // can only live in the file the ship will be handed, so it is asked for as that file, not reported as a
@@ -5,9 +5,9 @@ import { run_hold } from '#scripts/run/hold/run-hold'
5
5
  import { run_preflight } from '#scripts/run/run-preflight'
6
6
  import { run_ship_stage, type ShipState } from './run-ship-stage'
7
7
 
8
- // The read side of a resumed `josh ship` (joshuafolkken/kit#2426): the repository's actual state, asked
9
- // before any stage runs, and where the stage record lives. `run-ship-stage.ts` decides from what this
10
- // reads; this module only reads.
8
+ // The read side of a resumed `josh ship`: the repository's actual state, asked before any stage runs,
9
+ // and where the stage record lives. `run-ship-stage.ts` decides from what this reads; this module
10
+ // only reads.
11
11
  //
12
12
  // **Every read that cannot complete answers `false`** — "not done yet" — so the stage runs and its own
13
13
  // guard answers instead: `git -y` refuses an empty commit, a push of a commit origin already holds
@@ -82,7 +82,7 @@ async function read_state(): Promise<ShipState> {
82
82
  }
83
83
 
84
84
  // The common git directory every lane of the repository shares — what the stage record, the detached
85
- // supervisor's log and its pid are keyed on (joshuafolkken/kit#2428) — or `undefined` outside one.
85
+ // supervisor's log and its pid are keyed on — or `undefined` outside one.
86
86
  async function repository_directory(): Promise<string | undefined> {
87
87
  try {
88
88
  const directories = await git_command.git_directories()
@@ -9,7 +9,7 @@ import type { ShipResume } from './run-ship-next'
9
9
  import { run_ship_stage, type Stage } from './run-ship-stage'
10
10
  import { run_ship_stop_text } from './run-ship-stop-text'
11
11
 
12
- // How a detached `josh ship` supervisor hands a stopped stage back (joshuafolkken/kit#2428). The agent
12
+ // How a detached `josh ship` supervisor hands a stopped stage back. The agent
13
13
  // ended when it handed the region over, so a red gate, a High/Medium review, a failed push or red CI has
14
14
  // nobody to read it — this is what gives it one, in two halves:
15
15
  //