@joshuafolkken/kit 1.1240.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +29 -47
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +42 -10
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
  51. package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
  52. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
  53. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
  57. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
  60. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  61. package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
  62. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  63. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +216 -202
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +281 -94
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +16 -10
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +26 -2
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +20 -6
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cspell-cached.ts +1 -1
  560. package/scripts/lint/cycle-recheck.ts +122 -0
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +34 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +5 -6
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +25 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +13 -15
  801. package/scripts/run/run-step.ts +58 -47
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -7,9 +7,9 @@ import type { BrokenLine } from './observation-ledger-line'
7
7
  import { observation_ledger_prepare } from './observation-ledger-prepare'
8
8
  import { observations_flush_landing } from './observations-flush-landing'
9
9
 
10
- // The commit path for the ledger lines no run's own commit carried (joshuafolkken/kit#1756). Every run —
10
+ // The commit path for the ledger lines no run's own commit carried. Every run —
11
11
  // a lane's included — commits its appended lines with its own pull request (`scripts/git/
12
- // git-staging.ts`, joshuafolkken/kit#2763, joshuafolkken/kit#2919), and `pnpm josh followup` commits a
12
+ // git-staging.ts`), and `pnpm josh followup` commits a
13
13
  // line appended after that commit before it merges, so what is left here is a line written on the
14
14
  // default branch outside any issue's run — the date-named file `observation-ledger-home.ts` resolves.
15
15
  //
@@ -17,7 +17,7 @@ import { observations_flush_landing } from './observations-flush-landing'
17
17
  // their own over one path, wait on the same required checks every other pull request waits on, and
18
18
  // merge — so this reuses the same primitives rather than growing a second answer to "how does a
19
19
  // josh command open and land a pull request". The one difference is that this pull request is handed
20
- // to GitHub's auto-merge as soon as it opens (joshuafolkken/kit#2497), so it lands even when the wait
20
+ // to GitHub's auto-merge as soon as it opens, so it lands even when the wait
21
21
  // below does not survive — `observations-flush-landing.ts` carries why.
22
22
 
23
23
  const COMMIT_MESSAGE = 'Record observation ledger entries'
@@ -72,7 +72,7 @@ function status_paths(status_output: string): ReadonlyArray<string> {
72
72
  .map((line) => observation_ledger.status_path(line))
73
73
  }
74
74
 
75
- // **Single-sourced with `pnpm josh followup`'s pre-flush short-circuit** (joshuafolkken/kit#1810):
75
+ // **Single-sourced with `pnpm josh followup`'s pre-flush short-circuit**:
76
76
  // the ledger-change test lives in `observation-ledger.ts`, so the two callers cannot drift.
77
77
  function has_ledger_change(status_output: string): boolean {
78
78
  return observation_ledger.has_pending_append(status_output)
@@ -89,17 +89,17 @@ function other_changed_paths(status_output: string): ReadonlyArray<string> {
89
89
  // is what the ordinary off-default refusal says — would abandon them without a word, so this branch
90
90
  // of the refusal says the opposite.
91
91
  //
92
- // **The exits it names are ones the caller can actually take** (joshuafolkken/kit#1785). It used to
93
- // say "finish or delete that branch", and both are closed to an agent: the distributed
92
+ // **The exits it names are ones the caller can actually take**. "Finish or delete that branch" are
93
+ // both closed to an agent: the distributed
94
94
  // `.claude/settings.json` denies `Bash(git commit*)` and `Bash(git branch -d*)`, and `pnpm josh git`
95
- // excludes the ledger from staging by design (joshuafolkken/kit#1756), so finishing through it is not
95
+ // excludes the ledger from staging by design, so finishing through it is not
96
96
  // possible either. Pushing the branch and landing its pull request is the route that is open.
97
97
  function stranded_flush_message(current: string): string {
98
98
  return `\`${current}\` is a flush branch an earlier \`pnpm josh observations:flush\` left behind, and its appended observations are committed only there. Land it before flushing again — \`git push -u origin ${current}\`, then open and merge its pull request; \`pnpm josh ms\` here would leave the only copy of those lines behind.`
99
99
  }
100
100
 
101
- // **A flush branch with no commit on it strands nothing, so it is told the opposite**
102
- // (joshuafolkken/kit#1785). The appended lines never left the working tree, which makes the "only
101
+ // **A flush branch with no commit on it strands nothing, so it is told the opposite**.
102
+ // The appended lines never left the working tree, which makes the "only
103
103
  // copy" premise above factually false here — and makes `pnpm josh ms` the correct exit, the very one
104
104
  // the other message forbids.
105
105
  function empty_flush_message(current: string): string {
@@ -120,9 +120,9 @@ function off_default_message(current: string, default_branch: string): string {
120
120
  }
121
121
 
122
122
  // **A branch cut from a default branch that predates another merged flush conflicts by
123
- // construction** (joshuafolkken/kit#1768). The ledger is append-only and every writer adds at the
123
+ // construction**. The ledger is append-only and every writer adds at the
124
124
  // same tail, so a stale start point opens a pull request `wait_for_pr_success` waits on until it
125
- // exhausts its budget rather than merging. The flush fast-forwards first (joshuafolkken/kit#2462), so
125
+ // exhausts its budget rather than merging. The flush fast-forwards first, so
126
126
  // this is printed only when that fast-forward was refused — the reason is git's own.
127
127
  function behind_default_message(default_branch: string, reason: string): string {
128
128
  return `\`pnpm josh observations:flush\` cuts its branch from \`${default_branch}\`, which is behind \`origin/${default_branch}\` and could not be fast-forwarded (${reason}) — a branch cut here would open a pull request that cannot merge. Run \`pnpm josh ms\` first.`
@@ -183,7 +183,7 @@ async function refuse_off_default(current: string, default_branch: string): Prom
183
183
  }
184
184
 
185
185
  // **The start point's freshness is judged without moving the working tree**, which is the whole
186
- // point of doing it here rather than pulling (joshuafolkken/kit#1768). `git fetch` updates the
186
+ // point of doing it here rather than pulling. `git fetch` updates the
187
187
  // remote-tracking ref and `git rev-list --count HEAD..origin/<default>` reads it — neither writes a
188
188
  // file, so the ledger, dirty by definition when this runs, is left exactly as it is.
189
189
  async function commits_behind_default(default_branch: string): Promise<number> {
@@ -192,8 +192,8 @@ async function commits_behind_default(default_branch: string): Promise<number> {
192
192
  return await git_command.commit_count_beyond('HEAD', `origin/${default_branch}`)
193
193
  }
194
194
 
195
- // **A default branch that is only behind is brought forward rather than refused**
196
- // (joshuafolkken/kit#2462). A lane's flush acts on the primary checkout, whose default branch is
195
+ // **A default branch that is only behind is brought forward rather than refused**.
196
+ // A lane's flush acts on the primary checkout, whose default branch is
197
197
  // behind by the lane's own merge every time — so the refusal alone stopped every lane close. A
198
198
  // `--ff-only` merge moves no file the dirty ledger conflicts with: git refuses it, untouched, when an
199
199
  // incoming commit changes the ledger too, and only that case is still refused.
@@ -231,7 +231,7 @@ async function refuse_unsafe_flush(status_output: string): Promise<string> {
231
231
  // **Its exit code is read rather than discarded**: `run` catches its own errors and returns `1`, so a
232
232
  // checkout left on the flush branch would otherwise be reported as a completed flush.
233
233
  //
234
- // **The local default branch is fast-forwarded before it is checked out** (joshuafolkken/kit#2462).
234
+ // **The local default branch is fast-forwarded before it is checked out**.
235
235
  // Lines appended while the pull request waited leave the ledger dirty, and git refuses to check out a
236
236
  // default branch whose ledger differs from the flush branch's. Once the merge is in, the fast-forwarded
237
237
  // default branch holds the same ledger the flush branch does, so the checkout carries those lines over.
@@ -266,9 +266,8 @@ async function push_and_open(branch_name: string): Promise<string> {
266
266
  }
267
267
  }
268
268
 
269
- // **The side that created the branch is the side that rolls it back** (joshuafolkken/kit#1785). A
270
- // commit rejected by the pre-commit hook used to leave the branch behind with nothing on it, and the
271
- // refusal the next run printed named two exits an agent cannot take. Nothing is stranded at this
269
+ // **The side that created the branch is the side that rolls it back**, so a commit rejected by the
270
+ // pre-commit hook does not leave the branch behind with nothing on it. Nothing is stranded at this
272
271
  // point — the appended lines are still in the working tree, staged and uncommitted — so returning to
273
272
  // the default branch and removing the branch loses none of them.
274
273
  //
@@ -300,7 +299,7 @@ function rejection_message(
300
299
  return roll_back_failure_message(branch_name, reason, roll_back_reason)
301
300
  }
302
301
 
303
- // **Every ledger path the status names is staged, not the one constant** (joshuafolkken/kit#2724).
302
+ // **Every ledger path the status names is staged, not the one constant**.
304
303
  // After a migration the change is the new file together with the old one's deletion, and a commit
305
304
  // holding only the first would leave the deletion behind as a change no later flush could tell apart
306
305
  // from a fresh append.
@@ -342,8 +341,8 @@ async function open_pull_request(branch_name: string, default_branch: string): P
342
341
  // at any more. The next flush would read `has_ledger_change` as false and report `clean`, which is
343
342
  // the silent loss the refusals above exist to prevent. Left on the branch, the refusal fires.
344
343
  //
345
- // With auto-merge on, a failed wait no longer strands the lines for good — GitHub still merges once
346
- // the checks pass (joshuafolkken/kit#2497) — but the checkout stays on the branch all the same,
344
+ // With auto-merge on, a failed wait does not strand the lines for good — GitHub still merges once
345
+ // the checks pass — but the checkout stays on the branch all the same,
347
346
  // because only a merge this command has seen makes returning to the default branch safe.
348
347
  async function land(
349
348
  branch_name: string,
@@ -380,9 +379,9 @@ function broken_lines_message(broken: ReadonlyArray<BrokenLine>): string {
380
379
  }
381
380
 
382
381
  // **A malformed line is refused before a branch is cut, not after.** The ledger path was collected
383
- // without a line ever being parsed (joshuafolkken/kit#2123), so a broken append could ride a flush
382
+ // without a line ever being parsed, so a broken append could ride a flush
384
383
  // through; validating here keeps the committed ledger to its grammar. The migration and the parse are
385
- // `observation-ledger-prepare.ts`'s, shared with the run's own commit (joshuafolkken/kit#2763).
384
+ // `observation-ledger-prepare.ts`'s, shared with the run's own commit.
386
385
  async function prepare_ledger(): Promise<void> {
387
386
  const broken = await observation_ledger_prepare.prepare(process.cwd())
388
387
 
@@ -392,12 +391,12 @@ async function prepare_ledger(): Promise<void> {
392
391
  // **Nothing pulls in front of the branch, and that is deliberate.** The ledger is dirty by
393
392
  // definition at this point, so `git pull --ff-only` aborts on it in exactly the case a pull would
394
393
  // have been for — an upstream flush that already advanced the ledger — and reports a failure about
395
- // the wrong thing (joshuafolkken/kit#1756's second review round). So the freshness of the start
396
- // point is read from the remote first (joshuafolkken/kit#1768), and `catch_up_default` fast-forwards
397
- // only where git can do it without touching the ledger (joshuafolkken/kit#2462): a default branch
394
+ // the wrong thing. So the freshness of the start
395
+ // point is read from the remote first, and `catch_up_default` fast-forwards
396
+ // only where git can do it without touching the ledger: a default branch
398
397
  // that predates another merged flush still stops here — before a branch is cut — rather than opening
399
398
  // a pull request that cannot merge. An earlier flush pull request still open is checked for the same
400
- // reason (joshuafolkken/kit#2497): a branch cut beside it conflicts with it at the ledger's tail.
399
+ // reason: a branch cut beside it conflicts with it at the ledger's tail.
401
400
  async function flush(now: Date): Promise<string> {
402
401
  const status_output = await git_command.status()
403
402
  const default_branch = await refuse_unsafe_flush(status_output)
@@ -10,11 +10,15 @@
10
10
  */
11
11
  import { readFileSync, writeFileSync } from 'node:fs'
12
12
  import { fileURLToPath } from 'node:url'
13
- import { parseArgs } from 'node:util'
13
+ import { cli_flags } from '#scripts/lib/cli-flags'
14
14
  import { overrides_snapshot_schema } from '#scripts/lib/schemas'
15
15
  import { overrides_files } from './overrides-files'
16
16
  import { overrides_check, type OverridesDiff } from './overrides-logic'
17
17
 
18
+ const ARGV_OFFSET = 2
19
+ const OPTIONS = { save: { type: 'boolean', default: false } } as const
20
+ const USAGE = cli_flags.usage_line(['--save'], 'overrides')
21
+
18
22
  function is_file_not_found(error: unknown): boolean {
19
23
  return error instanceof Error && 'code' in error && error.code === 'ENOENT'
20
24
  }
@@ -70,15 +74,21 @@ function run_overrides_check(should_save: boolean): void {
70
74
  console.info(`✔ overrides unchanged (${summary}).`)
71
75
  }
72
76
 
73
- function main(): void {
74
- const { values } = parseArgs({
75
- options: { save: { type: 'boolean', default: false } },
76
- strict: true,
77
- })
77
+ // A line nobody can read is refused before the snapshot is read or written: a misspelled `--save` that
78
+ // fell through would compare against the record the caller meant to replace.
79
+ function refuse_usage(): never {
80
+ console.error(USAGE)
81
+
82
+ return process.exit(1)
83
+ }
84
+
85
+ function main(argv: ReadonlyArray<string>): void {
86
+ const values = cli_flags.values_of(argv, OPTIONS)
78
87
 
88
+ if (values === undefined) refuse_usage()
79
89
  run_overrides_check(values.save)
80
90
  }
81
91
 
82
- if (process.argv[1] === fileURLToPath(import.meta.url)) main()
92
+ if (process.argv[1] === fileURLToPath(import.meta.url)) main(process.argv.slice(ARGV_OFFSET))
83
93
 
84
- export { run_overrides_check }
94
+ export { run_overrides_check, main }
@@ -13,7 +13,7 @@ import { package_scout_format } from './package-scout-format'
13
13
 
14
14
  // `josh pkg:scout <keywords> [--size <n>]` — before the Package-First tier decision, rank the
15
15
  // candidate packages by measured metrics so "clearly best (Tier A)" and "genuine toss-up (Tier B)"
16
- // are read off the output rather than judged (joshuafolkken/kit#2216).
16
+ // are read off the output rather than judged.
17
17
  //
18
18
  // The registry answers in three reads: one search for the candidates, then per candidate a downloads
19
19
  // point and the latest version metadata (bundled types, license, unpacked size). A per-candidate read
@@ -6,8 +6,8 @@ import {
6
6
  } from './package-scout'
7
7
 
8
8
  // The printed shape of `josh pkg:scout` — one line per candidate with each metric labelled, then a
9
- // verdict line that names whether the choice is a Tier A pick or a Tier B question
10
- // (joshuafolkken/kit#2216). Formatting is pure so the layout and the verdict wording are unit-tested
9
+ // verdict line that names whether the choice is a Tier A pick or a Tier B question.
10
+ // Formatting is pure so the layout and the verdict wording are unit-tested
11
11
  // without a registry.
12
12
 
13
13
  // The blank shown for a metric the registry did not report — a fact absent, never a zero measured.
@@ -1,6 +1,6 @@
1
1
  // The measured metrics behind `josh pkg:scout` — the ranking of package candidates and the near-tie
2
2
  // verdict that turns the Package-First "clearly best (Tier A) / genuine toss-up (Tier B)" branch from
3
- // an impression into a computed answer (joshuafolkken/kit#2216).
3
+ // an impression into a computed answer.
4
4
  //
5
5
  // This module is the pure half: it takes candidates already gathered from the npm registry and
6
6
  // answers two things — the order they rank in, and whether the top two are close enough that the
@@ -7,7 +7,7 @@ import type { StepResult } from './propagate-run'
7
7
  // a failed spawn reports one exit code for all three. The run's report then appended "upgrade/sync
8
8
  // changes left uncommitted" to that code, which names the *first* of the three: so a consumer whose
9
9
  // pre-push hook refused the push was reported as a consumer whose sync never got committed, and the
10
- // reader went looking at a sync that had worked (joshuafolkken/kit#1417).
10
+ // reader went looking at a sync that had worked.
11
11
  //
12
12
  // **Nothing here changes whether a push is blocked.** A consumer's pre-push gate refusing a push is
13
13
  // the gate doing its job, and the probes below are read-only. What is fixed is the sentence.
@@ -10,7 +10,7 @@ import { GIT_TIMEOUT_MS } from '#scripts/lib/timeouts'
10
10
  // Propagation commits and pushes. A consumer with uncommitted work would have that work swept into
11
11
  // the upgrade commit — `josh git` stages the whole tree — and a supplier repository that is behind
12
12
  // its remote would propagate the *previous* release, which is already published and would report
13
- // success (joshuafolkken/kit#863).
13
+ // success.
14
14
 
15
15
  // The probes that talk to the remote get their own budget. Ten seconds is generous for a local
16
16
  // `rev-parse` and tight for an ssh handshake, and a probe that times out answers "no" — which for
@@ -27,7 +27,7 @@ interface TreeState {
27
27
  reason?: string
28
28
  }
29
29
 
30
- // **`cwd` alone does not say which repository this is about** (joshuafolkken/kit#1515). `GIT_DIR` and
30
+ // **`cwd` alone does not say which repository this is about**. `GIT_DIR` and
31
31
  // `GIT_WORK_TREE` beat it outright, and git exports both to every hook it runs — so under
32
32
  // `pnpm josh git`'s pre-push hook every probe below silently answered about the checkout the hook was
33
33
  // firing in rather than the path it was handed. The visible cost was in the unit suite, where
@@ -42,8 +42,8 @@ interface TreeState {
42
42
  // because every call below already passes the path this way and a second spelling of the same intent
43
43
  // is one more thing to keep in step.
44
44
  //
45
- // **The list itself moved to `#scripts/git/git-location-environment`** when joshuafolkken/kit#1530
46
- // found the same defect in a second file: three consumers now clear the same names, and a list kept
45
+ // **The list itself lives in `#scripts/git/git-location-environment`**: three consumers clear the
46
+ // same names, and a list kept
47
47
  // in one of them is a list the other two drift away from. It widened there past `GIT_DIR` /
48
48
  // `GIT_WORK_TREE` to the index and object-store variables, which redirect a *write* rather than a
49
49
  // lookup — inert for the read-only probes below, and required by the fixture that commits.
@@ -116,8 +116,8 @@ function commit_ahead(repository_path: string, default_name: string): string | u
116
116
  // remote-tracking ref: a push that was refused leaves no such ref behind, and neither does a branch
117
117
  // that was never pushed at all, so the ref cannot tell the two apart.
118
118
  //
119
- // **The arguments come from `git-ls-remote.ts`, which anchors the pattern at `refs/heads/`**
120
- // (joshuafolkken/kit#1732). Built here from the bare name, the query answered for any branch whose
119
+ // **The arguments come from `git-ls-remote.ts`, which anchors the pattern at `refs/heads/`**.
120
+ // Built here from the bare name, the query answered for any branch whose
121
121
  // ref ends in it — so a lane pushed as `wip/1641-lane` reported `1641-lane` as already on origin,
122
122
  // and propagation classified an unpushed branch as pushed.
123
123
  function has_remote_branch(repository_path: string, branch: string): boolean {
@@ -130,7 +130,7 @@ function has_remote_branch(repository_path: string, branch: string): boolean {
130
130
  // --git-path` does not. Without this the classification would name a hook on the strength of a dry
131
131
  // run alone, and **any** push failure that has cleared by the time the probe runs satisfies that: a
132
132
  // dropped ssh connection, a refreshed token, one 500 from GitHub. Naming a hook that does not exist
133
- // is the same misattribution joshuafolkken/kit#1417 was filed for, pointed the other way.
133
+ // is the same misattribution as blaming the wrong push sub-step, pointed the other way.
134
134
  function hooks_directory(repository_path: string): string | undefined {
135
135
  const configured = run_git(repository_path, ['config', '--get', 'core.hooksPath'])
136
136
  if (configured !== undefined && configured !== '') return configured
@@ -3,7 +3,7 @@ import { propagate_run, type RunStep, type StepResult } from './propagate-run'
3
3
  import { propagate_steps, type Release, type ReleasePlan } from './propagate-steps'
4
4
  import { propagate_targets, type Manifest, type PropagateTarget } from './propagate-targets'
5
5
 
6
- // What one `josh propagate` run carries, decided from the repository it runs in (joshuafolkken/kit#2879).
6
+ // What one `josh propagate` run carries, decided from the repository it runs in.
7
7
  //
8
8
  // The supplier is kit or any toolkit built on it — app-kit, game-kit — and a toolkit's propagation
9
9
  // carries the base packages under it too, at the versions that toolkit itself has installed and was
@@ -77,7 +77,7 @@ function pin_installed(project_root: string, release: Release): Release | undefi
77
77
  }
78
78
 
79
79
  // Why a declared base toolkit would fall out of the plan, naming it — either way `josh adopt` refuses
80
- // one for (joshuafolkken/kit#1540). A base left out is not merely left behind: every consumer that
80
+ // one for. A base left out is not merely left behind: every consumer that
81
81
  // installs it would then read it as a toolkit above this one and be skipped.
82
82
  function incomplete_cause(project_root: string): string | undefined {
83
83
  const misplaced = adopt_toolkits.misplaced_toolkits(project_root)
@@ -7,9 +7,8 @@ import { with_page_size } from '#scripts/version/version-remote'
7
7
  //
8
8
  // A merge is not a publish: kit's auto-tag and publish workflows run after the merge commit lands,
9
9
  // so a consumer told to upgrade the instant the PR merged resolves the previous release. The wait is
10
- // implemented once here because joshuafolkken/kit#864 resolves a cross-repository child on the same
11
- // condition — two implementations would drift, and the looser one would decide
12
- // (joshuafolkken/kit#863).
10
+ // implemented once here because resolving a cross-repository epic child waits on the same
11
+ // condition — two implementations would drift, and the looser one would decide.
13
12
 
14
13
  const VERSIONS_PAGE_SIZE = 100
15
14
  const NAMES_JQ = '[.[] | .name]'
@@ -5,11 +5,11 @@ import type { PropagateTarget } from './propagate-targets'
5
5
  //
6
6
  // One consumer's failure never stops another: the whole point of the command is to leave the run
7
7
  // knowing which consumers took the release and which did not, and a run that aborts on the first
8
- // failure answers that for a prefix of them (joshuafolkken/kit#863).
8
+ // failure answers that for a prefix of them.
9
9
 
10
10
  // The steps, in order, that carry a release into one consumer. `josh` here is the consumer's own
11
11
  // installed CLI, run from the consumer's directory — which is what keeps kit's self-sync guard
12
- // (joshuafolkken/kit#868) out of the way: the sync runs in a consumer project, where it belongs.
12
+ // out of the way: the sync runs in a consumer project, where it belongs.
13
13
  const STEP_PRECHECK = 'working tree check'
14
14
  const STEP_UPGRADE = 'josh vu'
15
15
  const STEP_SYNC = 'josh sync'
@@ -44,8 +44,7 @@ interface StepResult {
44
44
  // file, for instance. The sequence ends here as a skip rather than opening an empty pull request.
45
45
  is_complete?: boolean
46
46
  // What this failure actually left in the consumer, as the failing step measured it. Only the
47
- // steps that can probe set it; for the rest the standing note below is what they always leave
48
- // (joshuafolkken/kit#1417).
47
+ // steps that can probe set it; for the rest the standing note below is what they always leave.
49
48
  leftover?: string
50
49
  }
51
50
 
@@ -89,9 +88,8 @@ function has_leftover_changes(steps: ReadonlyArray<StepResult>): boolean {
89
88
 
90
89
  // What to say the failure left behind. A step that measured it wins; the note above stands in only
91
90
  // where none did, which is every step before the commit — and there it is accurate, since nothing
92
- // has committed yet. Before joshuafolkken/kit#1417 it was appended to *every* failure after the
93
- // upgrade, including one whose commit had already been made, so a push refused by the consumer's
94
- // pre-push hook was reported as changes that were never committed.
91
+ // has committed yet. Appended to *every* failure after the upgrade, it would report a push refused
92
+ // by the consumer's pre-push hook as changes that were never committed.
95
93
  function leftover_of(result: StepResult, steps: ReadonlyArray<StepResult>): string | undefined {
96
94
  if (!has_leftover_changes(steps)) return undefined
97
95
 
@@ -1,7 +1,7 @@
1
1
  import { propagate_run } from './propagate-run'
2
2
  import type { PropagateTarget, TargetState } from './propagate-targets'
3
3
 
4
- // Narrowing a run to the one consumer `--target` names (joshuafolkken/kit#2755).
4
+ // Narrowing a run to the one consumer `--target` names.
5
5
  //
6
6
  // Every other consumer stays in the list as `not_selected`, so the report still accounts for each
7
7
  // repository considered and says why it was left alone. A name that matches nothing — or matches a
@@ -1,6 +1,7 @@
1
1
  import { pr_classification } from '#scripts/ci/pr-classification'
2
2
  import { git_gh_exec } from '#scripts/gh/git-gh-exec'
3
3
  import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
4
+ import { issue_cite } from '#scripts/issue/issue-cite'
4
5
  import { OTHER_CHANGE_LABEL } from '#scripts/issue/issue-labels'
5
6
  import { GATE_COMMAND } from '#scripts/josh/josh-command-types'
6
7
  import { error_text } from '#scripts/lib/error-message'
@@ -18,11 +19,11 @@ import type { PropagateTarget } from './propagate-targets'
18
19
  // Kept out of the command module because two of the steps are not plain spawns: the pre-check is a
19
20
  // decision made from git probes, and the pull-request step needs the issue number the step before it
20
21
  // created. A closure carries that number instead of module-level state, so a run is self-contained
21
- // and the sequencing stays testable (joshuafolkken/kit#863).
22
+ // and the sequencing stays testable.
22
23
 
23
24
  const SUCCESS_EXIT_CODE = 0
24
25
  // The consumer-side gate. `josh gate` is the same command the AI documents require of a person
25
- // (joshuafolkken/kit#914) — running the four checks concurrently and reporting every failure in one
26
+ // — running the four checks concurrently and reporting every failure in one
26
27
  // pass — so the chain is not repeated here. It resolves in the consumer's directory, which by this
27
28
  // point has already been upgraded to the version being propagated, so the command is present.
28
29
  const VERIFY_SCRIPT = `pnpm josh ${GATE_COMMAND}`
@@ -37,12 +38,11 @@ const STEP_COMMANDS: Readonly<Record<string, ReadonlyArray<string>>> = {
37
38
 
38
39
  // kit's own CLI name. The sync is spelled through the *toolkit's* bin rather than hardcoded, because
39
40
  // `@joshuafolkken/app-kit` syncs with `josh-app` and `@joshuafolkken/game-kit` with `josh-game`; a
40
- // run that synced only `josh` would leave the other toolkit's managed files behind
41
- // (joshuafolkken/kit#1085).
41
+ // run that synced only `josh` would leave the other toolkit's managed files behind.
42
42
  const JOSH_BIN = 'josh'
43
43
 
44
44
  // `pnpm <bin>` resolves the target's own installed CLI, never this checkout — which is what keeps
45
- // the sync a consumer-side sync and leaves kit's self-sync guard (joshuafolkken/kit#868) satisfied.
45
+ // the sync a consumer-side sync and leaves kit's self-sync guard satisfied.
46
46
  function sync_command(bin_name: string): ReadonlyArray<string> {
47
47
  return ['pnpm', bin_name, 'sync']
48
48
  }
@@ -67,9 +67,9 @@ const PROPAGATE_ORIGIN =
67
67
  'Opened by `josh propagate` from the supplier repository after the release was published.'
68
68
  const RUN_NOTE =
69
69
  'The upgrade, the managed-file sync and the verification gate have already run here.'
70
- // `josh git` refuses to open a pull request for an issue that declares no release classification
71
- // (joshuafolkken/kit#2666), so the upgrade issue declares one. A dependency upgrade changes no code of
72
- // the consumer's own, which is what `other-change` covers (joshuafolkken/kit#2858).
70
+ // `josh git` refuses to open a pull request for an issue that declares no release classification,
71
+ // so the upgrade issue declares one. A dependency upgrade changes no code of
72
+ // the consumer's own, which is what `other-change` covers.
73
73
  const UPGRADE_CLASSIFICATION = OTHER_CHANGE_LABEL
74
74
  const EMPTY_PLAN_TITLE = 'Upgrade the installed toolkits'
75
75
  const LAST_SEPARATOR = ' and '
@@ -91,8 +91,8 @@ function release_names(releases: ReadonlyArray<Release>): string {
91
91
  }
92
92
 
93
93
  // Each release with its own version, for a plan whose releases disagree on one — a toolkit's
94
- // propagation carries the base packages at the versions that toolkit was verified with
95
- // (joshuafolkken/kit#2879), so one shared "to <version>" would name a version most of them are not.
94
+ // propagation carries the base packages at the versions that toolkit was verified with,
95
+ // so one shared "to <version>" would name a version most of them are not.
96
96
  function versioned_names(releases: ReadonlyArray<Release>): string {
97
97
  const named = releases.map((release) => ({
98
98
  ...release,
@@ -181,9 +181,8 @@ function spawn_step(
181
181
  }
182
182
 
183
183
  // The same, keeping what the command printed. Only the pull-request step uses it: a consumer's
184
- // pre-push hook names the check that stopped it in its own last lines, and until
185
- // joshuafolkken/kit#1417 nothing in the run kept them — so the report had one exit code to attribute
186
- // three sub-steps with, and attributed it to the wrong one.
184
+ // pre-push hook names the check that stopped it in its own last lines, and without them
185
+ // the report has one exit code to attribute three sub-steps with, and can blame the wrong one.
187
186
  //
188
187
  // **This step's output is replayed when it finishes rather than printed as it runs**, and that is
189
188
  // the price of keeping it. A synchronous spawn gives one target per file descriptor, so `['inherit',
@@ -233,10 +232,10 @@ function precheck_step(target: PropagateTarget, step: string): StepResult {
233
232
  // rather than a branchless pull request that cannot be opened at all.
234
233
  //
235
234
  // It posts to REST instead of running `gh issue create`: that command goes through GraphQL, which a
236
- // cloud session is answered 403 for, while the REST endpoint is served normally
237
- // (joshuafolkken/kit#1022). This was the last `gh <noun> <verb>` spawn in kit's own code, and it was
235
+ // cloud session is answered 403 for, while the REST endpoint is served normally.
236
+ // This was the last `gh <noun> <verb>` spawn in kit's own code, and it was
238
237
  // missed by that epic's survey because the survey counted `exec_gh_command` call sites and this one
239
- // spawned gh directly (joshuafolkken/kit#1042).
238
+ // spawned gh directly.
240
239
  //
241
240
  // The request is the one every issue creation builds, and the spawn is the synchronous twin of the
242
241
  // one the asynchronous writers use — so no second write layer exists to disagree with the first.
@@ -246,7 +245,7 @@ function precheck_step(target: PropagateTarget, step: string): StepResult {
246
245
  // gh's own output is the only thing that distinguishes a missing scope from disabled issues from a
247
246
  // repository that does not exist. Reporting `could not open an issue` alone hides all three, so the
248
247
  // whole message is kept — `to_gh_error` puts the stderr summary and the JSON body REST writes to
249
- // stdout on separate lines (joshuafolkken/kit#1029), and both carry the reason.
248
+ // stdout on separate lines, and both carry the reason.
250
249
  //
251
250
  // **It is folded back onto one line here.** The run's report is one line per consumer, and
252
251
  // `failure_reason` appends the "changes left uncommitted" warning to the end of this text — so a
@@ -319,7 +318,7 @@ function issue_step(
319
318
 
320
319
  // Put the consumer back on its default branch. `josh git` leaves it on the feature branch, and the
321
320
  // next run's pre-check would refuse it for that — the consumer would silently stop receiving
322
- // releases (joshuafolkken/kit#863).
321
+ // releases.
323
322
  function return_step(target: PropagateTarget, step: string): StepResult {
324
323
  if (propagate_git.return_to_default_branch(target.path)) return { step, is_ok: true }
325
324
 
@@ -335,7 +334,7 @@ function pull_request_step(
335
334
  ): StepResult {
336
335
  const number = issue_numbers.get(target.repo)
337
336
  if (number === undefined) return { step, is_ok: false, detail: 'no issue number' }
338
- const argument = `${plan_title(plan.releases)} #${number}`
337
+ const argument = `${plan_title(plan.releases)} ${issue_cite.plain(number)}`
339
338
  const outcome = spawn_captured(target, step, ['pnpm', 'josh', 'git', '-y', argument])
340
339
  if (outcome.result.is_ok) return outcome.result
341
340
 
@@ -352,7 +351,7 @@ interface Release {
352
351
 
353
352
  // What one run carries: the releases, and the sentence naming the command that opened the issue.
354
353
  // `josh propagate` always passes exactly one release; `josh adopt` passes every toolkit installed in
355
- // the repository it runs in (joshuafolkken/kit#1085). Only the upgrade and the sync repeat per
354
+ // the repository it runs in. Only the upgrade and the sync repeat per
356
355
  // release — the pre-check, the verification gate, the issue, the pull request and the return to the
357
356
  // default branch happen once, which is why the step order itself is unchanged.
358
357
  interface ReleasePlan {
@@ -1,11 +1,12 @@
1
1
  import { existsSync, readFileSync } from 'node:fs'
2
2
  import path from 'node:path'
3
3
  import type { RepoMap } from '#scripts/discovery/repo-map-logic'
4
+ import { json_value } from '#scripts/lib/json-value'
4
5
  import { z } from 'zod'
5
6
 
6
7
  // Deciding which repositories a published release should be carried into.
7
8
  //
8
- // The candidate set is joshuafolkken/kit#869's discovery map, so the owner restriction is inherited
9
+ // The candidate set is the repository discovery map, so the owner restriction is inherited
9
10
  // rather than restated: propagation writes — `josh vu`, `josh sync`, a commit, a pull request — and
10
11
  // a write aimed at somebody else's repository is worse than a read aimed at one. Nothing here
11
12
  // re-implements discovery.
@@ -13,16 +14,15 @@ import { z } from 'zod'
13
14
  // Which candidates are targets is read from the candidate itself: a repository is downstream when
14
15
  // its manifest declares a dependency on this package. That is a fact about the checkout in front of
15
16
  // us rather than a roster, so a new consumer needs no edit here — and it covers a consumer that is
16
- // not a published package at all, which a list of downstream package names cannot
17
- // (joshuafolkken/kit#863).
17
+ // not a published package at all, which a list of downstream package names cannot.
18
18
 
19
19
  const MANIFEST_NAME = 'package.json'
20
20
  const NODE_MODULES = 'node_modules'
21
21
 
22
22
  // Why a candidate is not going to be processed, or that it is. `not_selected` is the one state set
23
- // after classification: a candidate `--target` left out (joshuafolkken/kit#2755). `carried_above` is
23
+ // after classification: a candidate `--target` left out. `carried_above` is
24
24
  // the other: a consumer that installs a toolkit above the supplier, which that toolkit's own
25
- // propagation delivers instead (joshuafolkken/kit#2879).
25
+ // propagation delivers instead.
26
26
  type TargetState =
27
27
  | 'ready'
28
28
  | 'up_to_date'
@@ -68,11 +68,7 @@ function read_manifest(repository_path: string): Manifest | undefined {
68
68
  if (!existsSync(manifest_path)) return undefined
69
69
 
70
70
  try {
71
- const parsed: unknown = JSON.parse(readFileSync(manifest_path, 'utf8'))
72
-
73
- const result = manifest_schema.safeParse(parsed)
74
-
75
- return result.success ? result.data : undefined
71
+ return json_value.parse_with(readFileSync(manifest_path, 'utf8'), manifest_schema)
76
72
  } catch {
77
73
  return undefined
78
74
  }
@@ -15,7 +15,7 @@ import { propagate_steps, type ReleasePlan } from './propagate-steps'
15
15
  import { propagate_targets, type PropagateTarget } from './propagate-targets'
16
16
 
17
17
  // `josh propagate` — carry the release this repository just published into every consumer checked
18
- // out next to it (joshuafolkken/kit#863).
18
+ // out next to it.
19
19
 
20
20
  const SUCCESS_EXIT_CODE = 0
21
21
  const FAILURE_EXIT_CODE = 1
@@ -32,7 +32,7 @@ const UNTOUCHED_NOTE = 'No consumer was touched.'
32
32
  interface RunOptions {
33
33
  is_dry_run: boolean
34
34
  is_publish_wait_skipped: boolean
35
- // The one consumer to propagate to, when `--target` narrowed the run (joshuafolkken/kit#2755).
35
+ // The one consumer to propagate to, when `--target` narrowed the run.
36
36
  target?: string
37
37
  // The usage message, when the arguments were not accepted. Carried alongside rather than returned
38
38
  // instead, so the caller has one shape to branch on.
@@ -87,11 +87,11 @@ function parse_options(argv: ReadonlyArray<string>): RunOptions {
87
87
  }
88
88
 
89
89
  // Propagation runs from the supplier's own repository, and only there — kit's, or a toolkit's built
90
- // on it (joshuafolkken/kit#2879).
90
+ // on it.
91
91
  //
92
92
  // This is also what decides who propagates when several sessions are running: in the
93
93
  // per-repository concurrency model there is one session per checkout, so the session standing in
94
- // the supplier repository is the one that can run this command (joshuafolkken/kit#861). It is a
94
+ // the supplier repository is the one that can run this command. It is a
95
95
  // convention enforced at the boundary, not a lock — two checkouts of the supplier would both pass,
96
96
  // which is why each consumer is additionally refused unless its working tree is clean.
97
97
  function refuse_outside_source_repository(project_root: string): string | undefined {
@@ -192,7 +192,7 @@ interface RunPlan {
192
192
 
193
193
  // The consumers this run will consider, narrowed by `--target`. Resolved before the publish wait so
194
194
  // a mistyped name fails at once instead of after minutes of polling the registry. A consumer that
195
- // installs a toolkit above the supplier is left to that toolkit's propagation (joshuafolkken/kit#2879).
195
+ // installs a toolkit above the supplier is left to that toolkit's propagation.
196
196
  function resolve_run_targets(
197
197
  releases: ReleasePlan,
198
198
  version: string,
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
2
  import { file_reader } from '#scripts/lib/read-file'
3
3
 
4
- // The scope expansion `prompts/refactoring.md` §4.3 used to describe in prose (joshuafolkken/kit#2180):
4
+ // The scope expansion `prompts/refactoring.md` §4.3 used to describe in prose:
5
5
  // from the seed files, follow imports both ways — the files a seed imports and the files that import a
6
6
  // seed — for up to three stages, stopping as soon as a stage finds nothing new. Walking the import
7
7
  // graph is exactly computable, so it is computed here rather than read and traced by hand.
@@ -1,10 +1,11 @@
1
1
  import path from 'node:path'
2
2
  import { find_local_bin_upwards } from '#scripts/build/local-bin'
3
+ import { json_value } from '#scripts/lib/json-value'
3
4
  import { LINT_TIMEOUT_MS } from '#scripts/lib/timeouts'
4
5
  import { execa } from 'execa'
5
6
  import { z } from 'zod'
6
7
 
7
- // The mechanical half of `prompts/refactoring.md` (joshuafolkken/kit#2255): the refactoring
8
+ // The mechanical half of `prompts/refactoring.md`: the refactoring
8
9
  // priorities ESLint already decides. Rather than read the checklist and grep by hand, the project's
9
10
  // own eslint is asked in JSON and its findings are bucketed into the checklist's items.
10
11
  //
@@ -186,16 +187,9 @@ function eslint_command(root: string, files: ReadonlyArray<string>): ReadonlyArr
186
187
  }
187
188
 
188
189
  // `undefined` means the run did not produce parseable eslint JSON — a failure, kept distinct from a
189
- // valid empty array (a clean scope), so a scan that could not run is never reported as `clear`
190
- // (joshuafolkken/kit#2180).
190
+ // valid empty array (a clean scope), so a scan that could not run is never reported as `clear`.
191
191
  function parse_results(raw: string | undefined = 'null'): Array<LintResult> | undefined {
192
- try {
193
- const parsed = results_schema.safeParse(JSON.parse(raw))
194
-
195
- return parsed.success ? parsed.data : undefined
196
- } catch {
197
- return undefined
198
- }
192
+ return json_value.parse_with(raw, results_schema)
199
193
  }
200
194
 
201
195
  // The project's own eslint over the scope, in JSON. `reject: false` because eslint exits non-zero when