@joshuafolkken/kit 1.1240.0 → 1.1373.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +52 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +23 -66
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +43 -11
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
  51. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
  52. package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
  53. package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
  57. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  60. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
  61. package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
  62. package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
  63. package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +195 -181
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +282 -95
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +17 -11
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +30 -5
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +21 -7
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cross-file-recheck.ts +155 -0
  560. package/scripts/lint/cspell-cached.ts +1 -1
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +35 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +6 -7
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +26 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +64 -18
  801. package/scripts/run/run-step.ts +107 -51
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'
3
3
  import { refactor_scan } from './refactor-scan'
4
4
 
5
5
  // The `josh refactor:scan` entry point. It takes no arguments: the scope is the changed files, or
6
- // `scripts/` when nothing changed, decided the same way for every run (joshuafolkken/kit#2180).
6
+ // `scripts/` when nothing changed, decided the same way for every run.
7
7
 
8
8
  if (process.argv[1] === fileURLToPath(import.meta.url)) {
9
9
  process.exitCode = await refactor_scan.run_scan()
@@ -5,7 +5,7 @@ import { refactor_lint, type CategoryResult } from './refactor-lint'
5
5
  import { refactor_targets } from './refactor-targets'
6
6
 
7
7
  // `josh refactor:scan` — the command `prompts/refactoring.md` §4.1–§4.3 now point to instead of
8
- // describing the search by hand (joshuafolkken/kit#2180). It selects the target files, expands the
8
+ // describing the search by hand. It selects the target files, expands the
9
9
  // scope along the import graph, asks the project's own eslint which refactoring candidates the scope
10
10
  // holds, and answers whether any high- or medium-priority candidate remains.
11
11
  //
@@ -16,7 +16,7 @@ import { refactor_targets } from './refactor-targets'
16
16
 
17
17
  // The convergence vocabulary. `clear` is what §4.3's self-reported "no high- or medium-priority
18
18
  // candidate left" loop exit becomes once a command answers it: a token a caller can read, not a claim.
19
- // `error` is the third answer (joshuafolkken/kit#2180): the eslint run itself did not complete, so the
19
+ // `error` is the third answer: the eslint run itself did not complete, so the
20
20
  // scope's state is unknown — kept distinct from `clear` so a failed scan is never read as converged.
21
21
  const CLEAR = 'clear'
22
22
  const CANDIDATES = 'candidates'
@@ -4,7 +4,7 @@ import { changed_paths } from '#scripts/git/changed-paths'
4
4
  import { line_targets } from '#scripts/lines/line-targets'
5
5
 
6
6
  // The target-file selection of `josh refactor:scan` — the priority `prompts/refactoring.md` §4.1
7
- // used to spell out in prose (joshuafolkken/kit#2180). The scope is the same reading every scoped
7
+ // used to spell out in prose. The scope is the same reading every scoped
8
8
  // command decides from — the branch diff plus the untracked files (`changed-paths.ts`) — and only
9
9
  // when that is empty does it fall back to `scripts/`, so a run on a clean `main` still has something
10
10
  // to scan rather than reporting nothing.
@@ -1,8 +1,14 @@
1
1
  import { fileURLToPath } from 'node:url'
2
2
  import { git_spawn_sync } from '#scripts/git/git-spawn-sync'
3
+ import { cli_flags } from '#scripts/lib/cli-flags'
3
4
  import { github_release } from './github-release'
4
5
  import { github_release_environment } from './github-release-environment'
5
6
 
7
+ const KNOWN_FLAGS: ReadonlyArray<string> = []
8
+ const COMMAND_NAME = 'release:github'
9
+ const ARGUMENT_START = 2
10
+ const SUCCESS_EXIT_CODE = 0
11
+
6
12
  // A release published without the tag list would pick its previous tag from nothing, so a failed
7
13
  // `git tag` stops the run rather than reading as "no tags".
8
14
  function local_tags(): Array<string> {
@@ -12,13 +18,29 @@ function local_tags(): Array<string> {
12
18
  return output.split('\n')
13
19
  }
14
20
 
15
- async function main(): Promise<void> {
21
+ // **No argument reaches the publish**. The command reads only the
22
+ // environment, so a `--help` it ignored would create a real GitHub Release; a help request prints
23
+ // the usage and any other argument is refused, both before the environment is read.
24
+ async function run_argv(argv: ReadonlyArray<string>): Promise<number> {
25
+ const answer = cli_flags.answer_help_or_unknown(
26
+ argv.slice(ARGUMENT_START),
27
+ KNOWN_FLAGS,
28
+ COMMAND_NAME,
29
+ )
30
+ if (answer !== undefined) return answer
31
+
16
32
  const { token, tag, settings } = github_release_environment.read_release_input(process.env)
17
33
 
18
34
  console.info(await github_release.publish(fetch, token, tag, { ...settings, tags: local_tags() }))
35
+
36
+ return SUCCESS_EXIT_CODE
37
+ }
38
+
39
+ async function main(argv: ReadonlyArray<string>): Promise<void> {
40
+ process.exitCode = await run_argv(argv)
19
41
  }
20
42
 
21
- if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
43
+ if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv)
22
44
 
23
- const github_release_cli = { local_tags }
45
+ const github_release_cli = { local_tags, run_argv }
24
46
  export { github_release_cli }
@@ -85,7 +85,7 @@ async function is_release_over(source: RunSource, tag: string): Promise<boolean>
85
85
  }
86
86
 
87
87
  // A lower tag whose publication failed, or finished while no release run is left at work on it,
88
- // never gains a release: a tag cut before joshuafolkken/kit#3138 was fixed would hold every later one.
88
+ // never gains a release, so waiting on it would hold every later one.
89
89
  async function is_release_lost(source: RunSource, tag: string): Promise<boolean> {
90
90
  if (source.workflow === undefined) return false
91
91
 
@@ -1,23 +1,26 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
3
  import { git_command } from '#scripts/git/git-command'
4
+ import { cli_flags } from '#scripts/lib/cli-flags'
4
5
  import { error_text } from '#scripts/lib/error-message'
5
6
  import { release_history } from './release-history'
6
7
  import { release_plan, type ReleasePlan } from './release-plan'
7
8
  import { release_publish } from './release-publish'
8
9
 
9
- // `pnpm josh release` — the one place that decides a version (joshuafolkken/kit#1169).
10
+ // `pnpm josh release` — the one place that decides a version.
10
11
  //
11
12
  // It does three things and no more: count the merges main has taken since the version last changed,
12
13
  // report and stop when that count is zero, and otherwise raise the version by that many minors, open
13
14
  // a pull request, merge it and watch for the tag.
14
15
  //
15
- // **It never touches the root checkout** (joshuafolkken/kit#2411). The count is read from
16
+ // **It never touches the root checkout**. The count is read from
16
17
  // `origin/<default>`, and the version bump / commit / push happen in a dedicated work tree
17
18
  // `release_publish` cuts for the release — so a release can run beside a `backlogrun` (which keeps the
18
19
  // root on the default branch) and can start even when the root is dirty or on another branch.
19
20
 
20
21
  const DRY_RUN_FLAG = '--dry-run'
22
+ const KNOWN_FLAGS: ReadonlyArray<string> = [DRY_RUN_FLAG]
23
+ const COMMAND_NAME = 'release'
21
24
  const ARGUMENT_START = 2
22
25
  const SUCCESS_EXIT_CODE = 0
23
26
  const FAILURE_EXIT_CODE = 1
@@ -73,9 +76,23 @@ function is_dry_run_requested(argv: ReadonlyArray<string>): boolean {
73
76
  return argv.slice(ARGUMENT_START).includes(DRY_RUN_FLAG)
74
77
  }
75
78
 
79
+ // **Only a known argument reaches the release**. The command publishes,
80
+ // so a `--help` it did not read once started a real release; a help request now prints the usage, and
81
+ // anything else unknown is refused, both before the first fetch.
82
+ async function run_argv(argv: ReadonlyArray<string>): Promise<number> {
83
+ const answer = cli_flags.answer_help_or_unknown(
84
+ argv.slice(ARGUMENT_START),
85
+ KNOWN_FLAGS,
86
+ COMMAND_NAME,
87
+ )
88
+ if (answer !== undefined) return answer
89
+
90
+ return await run(is_dry_run_requested(argv))
91
+ }
92
+
76
93
  async function main(): Promise<void> {
77
94
  try {
78
- process.exit(await run(is_dry_run_requested(process.argv)))
95
+ process.exit(await run_argv(process.argv))
79
96
  } catch (error) {
80
97
  console.error(error_text.message_of(error))
81
98
  process.exit(FAILURE_EXIT_CODE)
@@ -84,6 +101,6 @@ async function main(): Promise<void> {
84
101
 
85
102
  if (process.argv[1] === fileURLToPath(import.meta.url)) void main()
86
103
 
87
- const release_cli = { is_dry_run_requested, run, DRY_RUN_FLAG }
104
+ const release_cli = { is_dry_run_requested, run, run_argv, DRY_RUN_FLAG }
88
105
 
89
106
  export { release_cli }
@@ -1,15 +1,16 @@
1
1
  import { git_command } from '#scripts/git/git-command'
2
+ import { json_value } from '#scripts/lib/json-value'
2
3
  import { package_with_version_schema } from '#scripts/lib/schemas'
3
4
  import { version_targets } from '#scripts/version/version-targets'
4
5
  import { release_plan, type ReleasePlan, type VersionedCommit } from './release-plan'
5
6
 
6
7
  // Reading main's history for the two numbers a release is made of: where the version last changed,
7
- // and how many merges have landed since (joshuafolkken/kit#1169).
8
+ // and how many merges have landed since.
8
9
 
9
10
  const { PACKAGE_JSON } = version_targets
10
11
 
11
12
  // How far back the search for "the commit that last changed the version" goes, counted in commits
12
- // that touched `package.json`. Once children stop bumping (joshuafolkken/kit#1486) that file still
13
+ // that touched `package.json`. Once children stop bumping that file still
13
14
  // changes for every dependency update, so the base can sit several entries down — but a repository
14
15
  // that has taken thirty `package.json` commits without a single release has a different problem, and
15
16
  // guessing past that point would be worse than saying so.
@@ -18,8 +19,7 @@ const BASE_SEARCH_LIMIT = 30
18
19
  // **Which ref the history is read from.** `josh release` runs on a pulled default branch, so `HEAD`
19
20
  // is main there and the default is right. A caller on a feature branch names the ref it means —
20
21
  // `origin/main` — because `--first-parent` from a branch tip walks that branch rather than main, and
21
- // the count would silently omit every merge main took after the branch was cut
22
- // (joshuafolkken/kit#1486).
22
+ // the count would silently omit every merge main took after the branch was cut.
23
23
  const DEFAULT_TIP = 'HEAD'
24
24
 
25
25
  // The reads this module makes, named so a test can answer them without a git repository. Production
@@ -42,11 +42,7 @@ const git_reader: HistoryReader = {
42
42
  function parse_version(content: string | undefined): string | undefined {
43
43
  if (content === undefined) return undefined
44
44
 
45
- try {
46
- return package_with_version_schema.parse(JSON.parse(content)).version
47
- } catch {
48
- return undefined
49
- }
45
+ return json_value.parse_with(content, package_with_version_schema)?.version
50
46
  }
51
47
 
52
48
  async function read_version_at(
@@ -90,7 +86,7 @@ async function read_base(
90
86
 
91
87
  // The version `package.json` carries at a git revision. `josh release` reads it from
92
88
  // `origin/<default>` rather than from the checkout's own `package.json`, so the number it raises is
93
- // main's latest even when the run happens in a work tree cut for the release (joshuafolkken/kit#2411).
89
+ // main's latest even when the run happens in a work tree cut for the release.
94
90
  async function read_current_version(
95
91
  tip: string = DEFAULT_TIP,
96
92
  reader: HistoryReader = git_reader,
@@ -1,6 +1,6 @@
1
1
  import semver from 'semver'
2
2
 
3
- // What a release is, decided from main's history alone (joshuafolkken/kit#1169).
3
+ // What a release is, decided from main's history alone.
4
4
  //
5
5
  // **A version is a property of main's history, not of a branch.** `bump-version.ts` reads the local
6
6
  // `package.json` and increments it, so two branches cut from the same version both claim the same
@@ -51,7 +51,7 @@ function previous_version_of(
51
51
  // **The newest commit whose `package.json` version differs from the version immediately before it.**
52
52
  //
53
53
  // **A commit that touched `package.json` without moving the version is skipped**, which is what makes
54
- // this right once children stop bumping (joshuafolkken/kit#1486): a dependency update rewrites the
54
+ // this right once children stop bumping: a dependency update rewrites the
55
55
  // file every time and must not be mistaken for a release.
56
56
  //
57
57
  // **Both sides have to be readable for this to be a version change.** An unreadable neighbor makes
@@ -96,7 +96,7 @@ function short_sha(sha: string): string {
96
96
 
97
97
  // **The count is the line a person reads**, which is why it is built here rather than at each caller:
98
98
  // the release command prints it, and so does anything else that wants to say how much is waiting to
99
- // ship (joshuafolkken/kit#1169 → "the count of unreleased merges shows somewhere visible").
99
+ // ship.
100
100
  function format_pending_line(pending: number): string {
101
101
  return `${PENDING_ICON} unreleased merges on main: ${String(pending)}`
102
102
  }
@@ -9,13 +9,12 @@ import { version_targets } from '#scripts/version/version-targets'
9
9
  import { z } from 'zod'
10
10
  import { release_tag } from './release-tag'
11
11
 
12
- // The stage lines `pnpm josh release` prints, and the two stages it waits for after the tag
13
- // (joshuafolkken/kit#3193).
12
+ // The stage lines `pnpm josh release` prints, and the two stages it waits for after the tag.
14
13
  //
15
14
  // **The tag starts the distribution, it does not finish it.** `publish.yml` runs off the tag:
16
15
  // `publish-npm` puts the version on npm and `create-release` opens the GitHub Release once the
17
- // publishing jobs pass. The command used to stop at the tag and call the release published, ahead of
18
- // both. It now waits for each, prints one line per stage reached, and prints the completion line only
16
+ // publishing jobs pass. Stopping at the tag would call the release published ahead of both, so the
17
+ // command waits for each, prints one line per stage reached, and prints the completion line only
19
18
  // when every stage has — a stage that times out is named with ❌ and the run exits non-zero.
20
19
 
21
20
  const { PACKAGE_JSON } = version_targets
@@ -11,8 +11,7 @@ import { release_tag } from './release-tag'
11
11
  import { release_worktree } from './release-worktree'
12
12
 
13
13
  // The write half of `pnpm josh release`: the branch, the commit, the pull request, the merge, the
14
- // wait for the tag (joshuafolkken/kit#1169) and the watch on what the tag publishes
15
- // (`release-progress.ts`, joshuafolkken/kit#3193).
14
+ // wait for the tag and the watch on what the tag publishes (`release-progress.ts`).
16
15
  //
17
16
  // **The merge goes through the same gate every other pull request does.** `wait_for_pr_success` is
18
17
  // the merge gate `pnpm josh followup` waits on, and it is called here rather than reimplemented —
@@ -57,7 +56,7 @@ function existing_branch_message(branch_name: string): string {
57
56
  return `\`${branch_name}\` already exists — a previous release attempt got as far as opening it. Finish or delete that pull request and branch, then run \`pnpm josh release\` again.`
58
57
  }
59
58
 
60
- // **A remote that cannot be asked is refused, not read as "no branch there"** (joshuafolkken/kit#1641).
59
+ // **A remote that cannot be asked is refused, not read as "no branch there"**.
61
60
  // `pnpm josh release` pushes, opens a pull request, merges it and waits for a tag, so it cannot
62
61
  // finish without the remote in any case: refusing here is the failure the run was going to have
63
62
  // anyway, moved in front of the version write and the commit — which is the whole point of this
@@ -72,9 +71,9 @@ function unreachable_remote_message(branch_name: string): string {
72
71
  // it and reach `push`, which then fails with git's non-fast-forward message: the raw error this
73
72
  // guard exists to replace, and now after two writes rather than before them.
74
73
  //
75
- // **`git branch --list --remotes` could not answer it, which is why origin is asked directly.** Its
76
- // short names carry the remote — `origin/x`, never `x` — so the unprefixed pattern this used to pass
77
- // matched nothing and the remote arm reported "absent" for every branch that has ever existed. The
74
+ // **`git branch --list --remotes` cannot answer it, which is why origin is asked directly.** Its
75
+ // short names carry the remote — `origin/x`, never `x` — so an unprefixed pattern matches nothing and
76
+ // reports "absent" for every branch that has ever existed. The
78
77
  // remote-tracking refs it reads are stale anyway, since nothing in this workflow prunes them, so
79
78
  // `git_remote_branch.ask` puts the question to origin itself.
80
79
  async function is_release_branch_taken(branch_name: string): Promise<boolean> {
@@ -93,7 +92,7 @@ async function refuse_existing_branch(branch_name: string): Promise<void> {
93
92
  throw new Error(existing_branch_message(branch_name))
94
93
  }
95
94
 
96
- // **The leftovers go before the guard asks** (joshuafolkken/kit#3058). A run cut off before its
95
+ // **The leftovers go before the guard asks**. A run cut off before its
97
96
  // `finally`, or a `worktree add` that failed after creating its branch, leaves a local
98
97
  // `release/v<version>` that the guard would otherwise refuse as a release already opened.
99
98
  async function clear_the_way(branch_name: string): Promise<void> {
@@ -101,7 +100,7 @@ async function clear_the_way(branch_name: string): Promise<void> {
101
100
  await refuse_existing_branch(branch_name)
102
101
  }
103
102
 
104
- // **No `checkout -b` and no branch guard here** (joshuafolkken/kit#2411). The work tree is already
103
+ // **No `checkout -b` and no branch guard here**. The work tree is already
105
104
  // sitting on the release branch — `release_worktree.create` cut it that way — and the guard ran
106
105
  // before that creation, because `worktree_add` makes the branch local and `branch_exists` would then
107
106
  // report every release as already taken. This runs after `process.chdir` into the work tree, so the
@@ -167,7 +166,7 @@ function release_running_message(target: string): string {
167
166
  return `Another \`pnpm josh release\` is running in this repository (lock \`${target}\`); wait for it to finish, then run it again.`
168
167
  }
169
168
 
170
- // **One release at a time per repository, held for the whole run** (joshuafolkken/kit#3058).
169
+ // **One release at a time per repository, held for the whole run**.
171
170
  // `clear_leftover` removes an unpushed, commit-less release branch, which is also what a live run
172
171
  // looks like while it installs dependencies — so it may only run once no other release is alive. The
173
172
  // lock answers that: a run cut off before its `finally` leaves a record whose owner is gone, which
@@ -4,12 +4,11 @@ import { git_followup_pending } from '#scripts/followup/git-followup-pending'
4
4
  import { path_decision } from '#scripts/josh/path-decision'
5
5
  import { release_plan } from './release-plan'
6
6
 
7
- // **Whether a release is owed is a command's answer, not a judgement** (joshuafolkken/kit#1582).
7
+ // **Whether a release is owed is a command's answer, not a judgement**.
8
8
  //
9
- // joshuafolkken/kit#1169 took the version off the branch and put it behind one command a person
10
- // types, and nothing ever said *when* to type it. Nothing fails when nobody does — CI green, every
11
- // pull request merged, every Issue closed — so 53 merges reached main unreleased and no consumer of
12
- // this package saw one of them.
9
+ // A release is one command a person types, and nothing fails when nobody types it — CI green, every
10
+ // pull request merged, every Issue closed — so merges can pile up on main that no consumer of this
11
+ // package ever sees.
13
12
  //
14
13
  // **`pnpm josh release --dry-run` cannot be the check.** It refuses off the default branch and on a
15
14
  // dirty working tree, and it counts against `HEAD`; every position a run asks the question from is
@@ -37,8 +36,8 @@ const FAILURE_EXIT_CODE = 1
37
36
  const NOTHING_PENDING_REASON = 'main has taken no merge since the version last changed'
38
37
  const RELEASE_HINT = 'run `pnpm josh release` on the default branch of the primary checkout'
39
38
  // **Not `skip`.** An unreadable version, a fetch that could not run or a base the search cannot
40
- // resolve is not "nothing is waiting to ship", and reporting it as one is how a release goes
41
- // missing quietly a second time.
39
+ // resolve is not "nothing is waiting to ship", and reporting it as one lets a release go missing
40
+ // quietly.
42
41
  const UNKNOWN_REASON = 'the unreleased-merge count could not be read — report unknown, never skip'
43
42
 
44
43
  type ReleaseScope = typeof REQUIRED_SCOPE | typeof SKIPPED_SCOPE | typeof UNKNOWN_SCOPE
@@ -48,9 +47,8 @@ interface Decision {
48
47
  reason: string
49
48
  }
50
49
 
51
- // **The threshold is one, and the position carries the rest.** A release per invocation is the
52
- // cadence joshuafolkken/kit#1582 asks for — its own complaint is that accumulating makes a single
53
- // version larger and its contents harder to trace afterwards — so anything above zero is owed. What
50
+ // **The threshold is one, and the position carries the rest.** A release per invocation keeps each
51
+ // version small and its contents traceable, so anything above zero is owed. What
54
52
  // keeps this from firing per child of a batch is where the question is asked, which belongs to the
55
53
  // procedure rather than to this command.
56
54
  function decide(pending: number | undefined): Decision {
@@ -6,12 +6,11 @@ import { poll, type PollOptions } from '#scripts/lib/poll'
6
6
  //
7
7
  // Merging is what starts the distribution chain: `ci.yml`'s `notify-auto-tag` dispatches, `auto-tag.yml`
8
8
  // creates `v<version>`, and `publish.yml` / `production.yml` run off that tag. Every link after the
9
- // merge can fail silently, and one of them is known to (joshuafolkken/kit#1481: a later push to main
10
- // cancels the release commit's CI run, so nothing dispatches and nothing is tagged). An automatic
11
- // release would have been picked up by the next cycle; a release a person types has no next cycle, so
12
- // the person walks away believing something shipped when nothing did.
9
+ // merge can fail silently — a later push to main cancels the release commit's CI run, so nothing
10
+ // dispatches and nothing is tagged. A release a person types has no next cycle to pick it up, so the
11
+ // person would walk away believing something shipped when nothing did.
13
12
  //
14
- // So this waits for the tag and **reports its absence as a failure** (joshuafolkken/kit#1169 → §3).
13
+ // So this waits for the tag and **reports its absence as a failure**.
15
14
 
16
15
  const HTTP_OK = 200
17
16
  const TAG_POLL_INTERVAL_MS = 15_000
@@ -50,8 +49,7 @@ async function tag_exists(version: string): Promise<boolean> {
50
49
  }
51
50
 
52
51
  // The poll budget for one watched stage, read from that stage's environment variable. Every stage
53
- // `josh release` waits on — the tag, npm and the GitHub Release — is tuned the same way
54
- // (joshuafolkken/kit#3193).
52
+ // `josh release` waits on — the tag, npm and the GitHub Release — is tuned the same way.
55
53
  function poll_options_for(
56
54
  timeout_environment: string,
57
55
  sleeper?: (duration_ms: number) => Promise<void>,
@@ -79,7 +77,7 @@ async function wait_for_tag(
79
77
 
80
78
  // **The failure text says what did not happen rather than what went wrong**, because the command
81
79
  // cannot know which link broke — only that the tag it was waiting for is not there, and that nothing
82
- // downstream of the tag can have run. **The tag is not the release** (joshuafolkken/kit#3193): npm and
80
+ // downstream of the tag can have run. **The tag is not the release**: npm and
83
81
  // the GitHub Release follow it, so the success line names only the tag.
84
82
  function format_result(version: string, is_tagged: boolean): string {
85
83
  if (is_tagged) return `🏷 Tag ${tag_name(version)} created`
@@ -6,7 +6,7 @@ import { lane_install } from '#scripts/lane/lane-install'
6
6
  import { lane_leftover } from '#scripts/lane/lane-leftover'
7
7
  import { lane_paths } from '#scripts/lane/lane-paths'
8
8
 
9
- // The dedicated linked work tree `pnpm josh release` runs inside (joshuafolkken/kit#2411). The whole
9
+ // The dedicated linked work tree `pnpm josh release` runs inside. The whole
10
10
  // point is that the release never touches the root checkout: it is cut fresh from
11
11
  // `origin/<default>` as the `release/v<version>` branch, the version bump / commit / push all happen
12
12
  // there, and it is removed whichever way the run ends. That lets a release run beside a `backlogrun`
@@ -35,8 +35,8 @@ async function remove(directory: string, branch_name: string): Promise<void> {
35
35
  await git_worktree.branch_delete(branch_name)
36
36
  }
37
37
 
38
- // **The dependency install is not optional, and disabling the hook is not the way around it**
39
- // (joshuafolkken/kit#2411). The release commit goes through lefthook's pre-commit, which runs
38
+ // **The dependency install is not optional, and disabling the hook is not the way around it**.
39
+ // The release commit goes through lefthook's pre-commit, which runs
40
40
  // `pnpm exec` / `pnpm josh`, and a sibling work tree has no `node_modules` above it — so the tree
41
41
  // needs its own, installed the same way a lane's is. A failed install cleans up the tree it created
42
42
  // rather than leaving debris, then reports what git printed.
@@ -54,7 +54,7 @@ async function install_or_clean(directory: string, branch_name: string): Promise
54
54
  // add --no-track -b release/v<version> <dir> origin/<default>`, which `worktree_add` already spells
55
55
  // when it is given a start point.
56
56
  //
57
- // **A failed add takes back the branch it made** (joshuafolkken/kit#3058). `git worktree add -b`
57
+ // **A failed add takes back the branch it made**. `git worktree add -b`
58
58
  // creates the branch before it looks at the path, so an add refused for a path that already exists
59
59
  // still leaves `release/v<version>` behind — and the next run's branch guard then refuses that name
60
60
  // as a release already opened. The guard ran before this call and found no such branch, so one
@@ -80,7 +80,7 @@ async function create(branch_name: string): Promise<string> {
80
80
  return directory
81
81
  }
82
82
 
83
- // **A run that never reached its `finally` leaves its tree and branch behind** (joshuafolkken/kit#3058)
83
+ // **A run that never reached its `finally` leaves its tree and branch behind**
84
84
  // — a Ctrl-C, a closed terminal — and every later release then fails on them until a person removes
85
85
  // both by hand. They are cleared here only when clearing loses nothing: a release branch origin does
86
86
  // not have and that carries no commit beyond `origin/<default>`. Uncommitted edits in the tree are
@@ -3,13 +3,11 @@ import { repo_setting, type RepoSettingStatus } from './repo-setting'
3
3
  // GitHub's repository-level "Allow auto-merge" setting, as reported by the `allow_auto_merge` field
4
4
  // of `GET /repos/{owner}/{repo}`.
5
5
  //
6
- // joshuafolkken/kit#834 added `.github/workflows/dependabot-auto-merge.yml` to the distributed
7
- // files, so a synced consumer now runs `gh pr merge --auto` on every github-actions patch and minor
8
- // bump. That command needs this setting: without it the step fails with `Auto-merge is not allowed
9
- // for this repository`, and the pull request sits green and unmerged — which is the exact state
10
- // joshuafolkken/app-kit#184 was found in, and the same defect kit itself hit in
11
- // joshuafolkken/kit#802. The setting is off by default, so distributing the workflow without
12
- // reporting it would hand every consumer a workflow that never merges anything.
6
+ // `.github/workflows/dependabot-auto-merge.yml` is a distributed file, so a synced consumer runs
7
+ // `gh pr merge --auto` on every github-actions patch and minor bump. That command needs this
8
+ // setting: without it the step fails with `Auto-merge is not allowed for this repository`, and the
9
+ // pull request sits green and unmerged. The setting is off by default, so distributing the workflow
10
+ // without reporting it would hand every consumer a workflow that never merges anything.
13
11
  type AutoMergeStatus = RepoSettingStatus
14
12
 
15
13
  const SETTING_LABEL = 'Repository auto-merge'
@@ -19,8 +17,8 @@ const WORKFLOW_PATH = '.github/workflows/dependabot-auto-merge.yml'
19
17
 
20
18
  // The remediation for `disabled`, addressed at the repository the report actually resolved. kit
21
19
  // prints it and never runs it: changing a repository setting is outward-facing, needs admin scope,
22
- // and is the maintainer's call — the same line joshuafolkken/kit#805 drew for
23
- // `automated-security-fixes`, which is why `josh doctor --fix` does not enable this either.
20
+ // and is the maintainer's call — the same line drawn for `automated-security-fixes`, which is why
21
+ // `josh doctor --fix` does not enable this either.
24
22
  function enable_command(repo: string | undefined): string {
25
23
  return `gh api -X PATCH repos/${repo_setting.command_target(repo)} -f ${ALLOW_AUTO_MERGE_FIELD}=true`
26
24
  }
@@ -2,7 +2,7 @@ import { auto_merge_setting_logic, type AutoMergeStatus } from './auto-merge-set
2
2
  import { repo_setting } from './repo-setting'
3
3
 
4
4
  // Read the repository's "Allow auto-merge" setting. Never throws and never propagates a non-zero
5
- // exit: an unreadable answer is a reported status, not a command failure (joshuafolkken/kit#834).
5
+ // exit: an unreadable answer is a reported status, not a command failure.
6
6
  //
7
7
  // The whole repository object is requested rather than a `--jq` projection, because a projection
8
8
  // cannot distinguish a field that is `false` from a field the response never carried — and that
@@ -3,16 +3,16 @@ import { PROJECT_ROOT } from '#scripts/init/init-paths'
3
3
 
4
4
  // The shared half of every "report a GitHub repository setting kit cannot write" check.
5
5
  //
6
- // Two such checks exist — `automated-security-fixes` (joshuafolkken/kit#805) and `allow_auto_merge`
7
- // (joshuafolkken/kit#834) — and they agree on everything that is not wording: the same bounded
6
+ // Two such checks exist — `automated-security-fixes` and `allow_auto_merge`
7
+ // — and they agree on everything that is not wording: the same bounded
8
8
  // `gh api` call, the same rule that an answer which cannot be read is never reported as a negative
9
9
  // answer, and the same blank-line-separated report block. That agreement is the contract, so it
10
10
  // lives here once rather than being re-derived per setting.
11
11
  type RepoSettingStatus = 'enabled' | 'disabled' | 'unreadable'
12
12
 
13
13
  // Bounded, unlike the repository lookup: these calls only decide what a report *says*, never what
14
- // gets written, so a timeout degrades to `could not be read` and costs nothing. `josh doctor` made
15
- // no network calls at all before joshuafolkken/kit#805, and this keeps it prompt.
14
+ // gets written, so a timeout degrades to `could not be read` and costs nothing, and keeps
15
+ // `josh doctor` prompt.
16
16
  const GH_TIMEOUT_MS = 5000
17
17
 
18
18
  // A literal `<owner>/<repo>` would be unusable when pasted into a shell, where `<` redirects — but
@@ -2,7 +2,7 @@ import { git_gh_exec } from '#scripts/gh/git-gh-exec'
2
2
  import { REPOSITORY_LABELS, type LabelDefinition } from '#scripts/issue/issue-labels'
3
3
 
4
4
  // Creates the labels kit's workflow and the distributed `pr-classification.yml` rely on, and only
5
- // those the repository is missing (joshuafolkken/kit#2797). The one place labels are created: `josh
5
+ // those the repository is missing. The one place labels are created: `josh
6
6
  // start` provisions a new repository through it and `josh sync` brings every existing one up to date.
7
7
  //
8
8
  // Labels already present are left as they are, so a repository that recolored one keeps its choice
@@ -3,11 +3,11 @@ import { z } from 'zod'
3
3
 
4
4
  // The status checks kit's distributed workflows report, keyed by the workflow that reports them —
5
5
  // the single source `josh ruleset:check` and `josh doctor` compare a repository's required status
6
- // checks against (joshuafolkken/kit#3012). Each name is the job's `name:`, the string a ruleset's
6
+ // checks against. Each name is the job's `name:`, the string a ruleset's
7
7
  // required check is matched by; `required-checks-logic.test.ts` reads it back off the workflows.
8
8
  //
9
- // `E2E` belongs here even though `josh followup` deliberately does not wait on it
10
- // (joshuafolkken/kit#991): a ruleset counts a skipped job as passing, and the job is skipped when the
9
+ // `E2E` belongs here even though `josh followup` deliberately does not wait on it:
10
+ // a ruleset counts a skipped job as passing, and the job is skipped when the
11
11
  // project has no E2E suite, so requiring it never blocks a merge — it only refuses a red one.
12
12
  interface WorkflowChecks {
13
13
  workflow: string
@@ -2,7 +2,7 @@ import { repo_setting } from './repo-setting'
2
2
  import type { RequiredSource } from './required-checks-logic'
3
3
 
4
4
  // What one read of a repository's required status checks found, against what kit's distributed
5
- // workflows report (joshuafolkken/kit#3012).
5
+ // workflows report.
6
6
  interface RequiredChecksReport {
7
7
  repo: string | undefined
8
8
  branch: string | undefined
@@ -7,7 +7,7 @@ import { required_checks_report, type RequiredChecksReport } from './required-ch
7
7
  import { ruleset_check } from './ruleset-check'
8
8
 
9
9
  // `josh ruleset:check [--apply]` — say whether the default branch requires every status check kit's
10
- // distributed workflows report, and with `--apply` add the missing ones (joshuafolkken/kit#3012).
10
+ // distributed workflows report, and with `--apply` add the missing ones.
11
11
  // Changing a repository setting is outward-facing, so the write happens only on the flag a person
12
12
  // typed; `josh sync` and `josh doctor` never pass it. Exits non-zero while anything is left to do.
13
13
 
@@ -8,7 +8,7 @@ import { required_checks_logic, type ApiRead, type RequiredSource } from './requ
8
8
  import { required_checks_report, type RequiredChecksReport } from './required-checks-report'
9
9
 
10
10
  // Read a repository's required status checks on its default branch and compare them with the checks
11
- // kit's distributed workflows report (joshuafolkken/kit#3012). Every read degrades to `unreadable`
11
+ // kit's distributed workflows report. Every read degrades to `unreadable`
12
12
  // rather than throwing; the one write, `apply_missing`, runs only on `josh ruleset:check --apply`.
13
13
 
14
14
  function read_api(api_path: string): string | undefined {
@@ -0,0 +1,26 @@
1
+ // Where a fixed-shape failure points its reader. `report:lint`, `test:declared
2
+ // --match` and the live-evidence check each said what was missing but not where the shape is written,
3
+ // so the reader grepped for it. **The document and its headings are named once, here**, and every
4
+ // failure builds its pointer from them — a renamed heading then fails this module's test rather than
5
+ // sending the reader to a section that no longer exists.
6
+
7
+ const REPORT_FORMAT_PATH = 'prompts/collaboration-workflow/report-format.md'
8
+ const SUMMARY_RULES_HEADING = '作業前サマリはいつ・どう出すか'
9
+ const SUMMARY_TEMPLATE_HEADING = '作業前サマリ(セッション向け・`JOSH_SESSION_LANG` の言語)'
10
+ const COMPLETION_REPORT_HEADING = '完了報告(セッション向け)'
11
+
12
+ // The heading goes in single quotes in the runnable form: the template heading carries backticks,
13
+ // which a double-quoted shell argument would run as a command substitution.
14
+ function pointer(heading: string): string {
15
+ return `${REPORT_FORMAT_PATH} → "${heading}" (read it: pnpm josh doc:section ${REPORT_FORMAT_PATH} '${heading}')`
16
+ }
17
+
18
+ const report_format_reference = {
19
+ COMPLETION_REPORT_HEADING,
20
+ pointer,
21
+ REPORT_FORMAT_PATH,
22
+ SUMMARY_RULES_HEADING,
23
+ SUMMARY_TEMPLATE_HEADING,
24
+ }
25
+
26
+ export { report_format_reference }
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url'
4
4
  import { report_lint } from './report-lint'
5
5
 
6
6
  // `josh report:lint` — read a two-layer work summary candidate from stdin and print `ok`, or the
7
- // mechanical violations one per line, exiting non-zero so it works as a gate (joshuafolkken/kit#2123).
7
+ // mechanical violations one per line, exiting non-zero so it works as a gate.
8
8
 
9
9
  const SUCCESS_EXIT_CODE = 0
10
10
  const FAILURE_EXIT_CODE = 1
@@ -27,7 +27,7 @@ function run(summary: string): number {
27
27
  return SUCCESS_EXIT_CODE
28
28
  }
29
29
 
30
- console.error(violations.join('\n'))
30
+ console.error(report_lint.with_reference(violations).join('\n'))
31
31
 
32
32
  return FAILURE_EXIT_CODE
33
33
  }