@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
@@ -29,7 +29,7 @@ function scanner_version(binary_or_path: string): string | undefined {
29
29
 
30
30
  // Whether the binary at this name or path parses the whole lockfile, i.e. is at or above the pinned
31
31
  // floor. A version that cannot be read is not the floor met — an unspawnable or version-less binary
32
- // is treated as below it, never as a pass (joshuafolkken/kit#2200).
32
+ // is treated as below it, never as a pass.
33
33
  function meets_floor(binary_or_path: string): boolean {
34
34
  const version = scanner_version(binary_or_path)
35
35
 
@@ -68,9 +68,9 @@ function managed_scanner(project_root: string, platform: string): string | undef
68
68
  }
69
69
 
70
70
  // PATH first, but only when its scanner meets the floor: an older PATH build reads a fraction of the
71
- // lockfile and calls it clean (joshuafolkken/kit#2200), so a provisioned v2.6.0 is preferred over it
72
- // rather than the other way round (the preference of joshuafolkken/kit#1563 held only while every
73
- // build read the whole file). A below-floor PATH binary is the last resort, returned flagged so the
71
+ // lockfile and calls it clean, so a provisioned v2.6.0 is preferred over it
72
+ // rather than the other way round (preferring PATH outright holds only while every
73
+ // build reads the whole file). A below-floor PATH binary is the last resort, returned flagged so the
74
74
  // audit can warn that its clean result proves nothing. `undefined` means no scanner at all.
75
75
  function resolve_scanner(project_root: string, platform: string): ScannerChoice | undefined {
76
76
  const { BINARY_NAME } = security_audit_logic
@@ -92,7 +92,7 @@ function resolve_scanner(project_root: string, platform: string): ScannerChoice
92
92
  // next shell prompt as `11;rgb:0101/0404/0909;1R` after a push ran this audit from the pre-push hook.
93
93
  // A pipe means the scanner sees no terminal and asks nothing; the `inherit` half still prints its report.
94
94
  // The fix belongs here, at the one command that asks, rather than on `git push`: piping the push would
95
- // make its timeout wait on any process a hook left running (joshuafolkken/kit#2801).
95
+ // make its timeout wait on any process a hook left running.
96
96
  const FORWARDED_OUTPUT = ['inherit', 'pipe'] as const
97
97
 
98
98
  function run_scanner(scanner_path: string): number {
@@ -3,12 +3,11 @@ import { repo_setting, type RepoSettingStatus } from '#scripts/repo/repo-setting
3
3
  // GitHub's Dependabot security-updates setting, as reported by
4
4
  // `GET /repos/{owner}/{repo}/automated-security-fixes`.
5
5
  //
6
- // joshuafolkken/kit#803 set `open-pull-requests-limit: 0` on the npm entry of the distributed
6
+ // `open-pull-requests-limit: 0` is set on the npm entry of the distributed
7
7
  // `.github/dependabot.yml`, which makes the security-advisory path the only remaining source of npm
8
8
  // Dependabot PRs. That path depends on this repository-level setting, which is opt-in and off by
9
9
  // default for private repositories — so a consumer that syncs the file without it gets zero npm
10
- // Dependabot PRs, advisories included. The failure is silent: no PR looks exactly like no advisory
11
- // (joshuafolkken/kit#805).
10
+ // Dependabot PRs, advisories included. The failure is silent: no PR looks exactly like no advisory.
12
11
  //
13
12
  // `paused` is this setting's own third state, which is why the shared two-state classifier is only
14
13
  // half the answer here (see classify_security_updates).
@@ -4,8 +4,7 @@ import { security_updates_logic, type SecurityUpdatesStatus } from './security-u
4
4
  const SECURITY_FIXES_PATH = 'automated-security-fixes'
5
5
 
6
6
  // Read the repository's Dependabot security-updates setting. Never throws and never propagates a
7
- // non-zero exit: an unreadable answer is a reported status, not a command failure
8
- // (joshuafolkken/kit#805).
7
+ // non-zero exit: an unreadable answer is a reported status, not a command failure.
9
8
  function read_security_updates(repo: string): SecurityUpdatesStatus {
10
9
  const { exit_code, stdout } = repo_setting.query_repo_api(`repos/${repo}/${SECURITY_FIXES_PATH}`)
11
10
 
@@ -14,8 +13,7 @@ function read_security_updates(repo: string): SecurityUpdatesStatus {
14
13
 
15
14
  // Report the repository's setting as a blank-line-separated block. A repository that cannot be
16
15
  // resolved (no `gh`, not a GitHub remote) reports `unreadable` rather than skipping the check
17
- // silently — the whole point of joshuafolkken/kit#805 is that an absent answer must not look like a
18
- // clean one.
16
+ // silently — an absent answer must not look like a clean one.
19
17
  //
20
18
  // `repo` is always supplied by the caller — deliberately not a default parameter. A default fires
21
19
  // on an explicitly-passed `undefined`, so `josh sync` handing over a failed lookup would silently
@@ -1,5 +1,5 @@
1
1
  // The public surface a downstream distribution package imports to refuse a sync aimed at its own
2
2
  // repository. Exported rather than left internal because app-kit and game-kit run the same kind of
3
- // copy and would otherwise each re-implement the detection (joshuafolkken/kit#868), which is the
3
+ // copy and would otherwise each re-implement the detection, which is the
4
4
  // duplication `managed-marker` was extracted to avoid for the workflow stamp.
5
5
  export { self_sync_guard } from './self-sync-guard-logic'
@@ -6,8 +6,8 @@ import path from 'node:path'
6
6
  // truth is overwritten by the derived template, and the copy transforms fire against a project
7
7
  // where they are wrong (a `prompts/…` reference rewritten to `node_modules/@joshuafolkken/kit/…`
8
8
  // resolves nowhere, a workflow written from `templates/` loses the pins `.github/workflows` owns).
9
- // joshuafolkken/game-kit#447 is the incident; joshuafolkken/kit#868 reproduced the same damage in
10
- // kit — 14 files, including CLAUDE.md, tsconfig.json and both mapped workflows.
9
+ // In kit the same damage reaches 14 files, including CLAUDE.md, tsconfig.json and both mapped
10
+ // workflows.
11
11
  //
12
12
  // The check lives here rather than in each package's sync so the three distributors share one
13
13
  // implementation: a second copy would drift, and a distributor that spelled the signal differently
@@ -3,7 +3,7 @@ import { self_sync_guard } from './self-sync-guard-logic'
3
3
  // The half of the guard that `sync` and `init` share verbatim: print the refusal and leave a
4
4
  // non-zero exit code. It lives beside the detection rather than in either entry point because the
5
5
  // two commands do the same damage in the source repository — `init` a larger share of it, since it
6
- // rewrites `package.json` scripts and devDependencies as well (joshuafolkken/kit#879) — and a copy
6
+ // rewrites `package.json` scripts and devDependencies as well — and a copy
7
7
  // in each `main()` would be the second implementation the shared module exists to prevent.
8
8
  //
9
9
  // Not re-exported from `index.ts`: the published `@joshuafolkken/kit/self-sync-guard` surface stays
@@ -11,7 +11,7 @@ import {
11
11
  import { sonar_project } from './sonar-project'
12
12
 
13
13
  // `josh sonar:hotspots <PR>` — fetch the SonarCloud hotspots on a pull request and print the Step B
14
- // disposition of each (joshuafolkken/kit#2182).
14
+ // disposition of each.
15
15
  //
16
16
  // The decision itself lives in `sonar-hotspots.ts`; this file is the I/O around it: read the project
17
17
  // key from `sonar-project.properties`, fetch the public search API, and answer the upstream-synced
@@ -1,5 +1,5 @@
1
1
  // The Step B disposition for each SonarCloud hotspot on a pull request, computed rather than read by
2
- // eye (joshuafolkken/kit#2182).
2
+ // eye.
3
3
  //
4
4
  // `prompts/sonar-hotspot-handling.md` carried Step A and Step B as prose: the reader built the API
5
5
  // URL by hand and then walked a decision table whose one mechanical branch key — "is this path
@@ -13,7 +13,7 @@ import {
13
13
  import { sonar_project } from './sonar-project'
14
14
 
15
15
  // `josh sonar:new-code <PR>` — fail when a pull request adds any new SonarCloud issue or duplicated
16
- // block (joshuafolkken/kit#3045).
16
+ // block.
17
17
  //
18
18
  // `sonar-qube.yml` runs it after the scan on every pull request, so the `SonarQube` check turns red on
19
19
  // a single finding instead of only when the Quality Gate's ratios tip over. The verdict lives in
@@ -1,5 +1,5 @@
1
1
  // Whether a pull request adds any new SonarCloud finding — computed from the counts rather than from
2
- // the Quality Gate (joshuafolkken/kit#3045).
2
+ // the Quality Gate.
3
3
  //
4
4
  // The built-in `Sonar way` gate judges a ratio and a rating, not a count: a few MINOR code smells keep
5
5
  // the maintainability rating at A, and a copied block in a large pull request stays under the 3%
@@ -6,7 +6,7 @@ import { timed_fetch } from '#scripts/lib/timed-fetch'
6
6
  import type { z } from 'zod'
7
7
 
8
8
  // The SonarCloud project a `josh sonar:*` command reads, shared by every command that calls the
9
- // SonarCloud API (joshuafolkken/kit#3045): the host, the project key `sonar-project.properties`
9
+ // SonarCloud API: the host, the project key `sonar-project.properties`
10
10
  // records — the file `josh init` / `josh sync` generate from the GitHub repository name — and the
11
11
  // `<PR>` positional each command takes.
12
12
 
@@ -5,7 +5,7 @@ import { path_decision } from '#scripts/josh/path-decision'
5
5
  import { split_assess } from './split-assess'
6
6
 
7
7
  // `josh split:assess` — measure a branch's change size, tests excluded, and answer the size question
8
- // of the split assessment (joshuafolkken/kit#2218).
8
+ // of the split assessment.
9
9
  //
10
10
  // A command rather than a paragraph for the reason every decision oracle is one: the "about 10 files /
11
11
  // 400 lines" guide is a number, but the size behind it was estimated by eye, so no data ever
@@ -1,6 +1,6 @@
1
1
  import { test_declared_logic } from '#scripts/test/test-declared-logic'
2
2
 
3
- // The size half of the split assessment, measured rather than estimated (joshuafolkken/kit#2218).
3
+ // The size half of the split assessment, measured rather than estimated.
4
4
  //
5
5
  // `split-assessment.md` → "The question" asks two things, and only the second is mechanical: does the
6
6
  // change **clearly exceed** what one verification gate confirms in one pass, the guide being about 10
@@ -27,8 +27,8 @@ interface SizeMeasurement {
27
27
  verdict: SplitVerdict
28
28
  }
29
29
 
30
- // The guide's single source: `split-assessment.md` states these once and a test pins the two equal
31
- // (joshuafolkken/kit#2996). Strictly greater than: "about 10 changed files" and a change
30
+ // The guide's single source: `split-assessment.md` states these once and a test pins the two equal.
31
+ // Strictly greater than: "about 10 changed files" and a change
32
32
  // that "lands at 11 files is not thereby a split" put the bar above the round number, not at it.
33
33
  const FILE_GUIDE = 10
34
34
  const LINE_GUIDE = 400
@@ -7,7 +7,7 @@ import { file_content } from './file-content'
7
7
  // `josh init` and `josh sync` both copy a distributed directory with `cpSync`, and both have to
8
8
  // answer the same question first: is this copy one that `cpSync` will refuse? The answer lives here
9
9
  // rather than in each command, because the failure modes are the same and a second copy of the list
10
- // would drift (joshuafolkken/kit#853, which made the directory list non-empty for the first time).
10
+ // would drift.
11
11
  //
12
12
  // Every check goes through `lstat`, never `existsSync` or `stat`:
13
13
  // - `stat` follows a symlink, so a link pointing at a directory would read as a directory while
@@ -49,8 +49,7 @@ function directory_copy_blocker(source_path: string, destination_path: string):
49
49
  // `cpSync` copies bytes, so a distributed directory would otherwise carry the package's own
50
50
  // `prompts/…` references into a consumer, where that directory does not exist — the very rewrite
51
51
  // every file copy already runs through `transform_copied_content`. Running it over the copied tree
52
- // puts both copy paths on one transform, which is what lets a skill cite the prompt it extends
53
- // (joshuafolkken/kit#854).
52
+ // puts both copy paths on one transform, which is what lets a skill cite the prompt it extends.
54
53
  //
55
54
  // Markdown only, and deliberately so: the rewrite is a text substitution, the workflow pin and
56
55
  // managed-marker passes inside `transform_copied_content` are gated on a `.github/workflows`
@@ -3,8 +3,7 @@ import { fileURLToPath } from 'node:url'
3
3
  import { path_decision } from '#scripts/josh/path-decision'
4
4
  import { managed_config_scope } from './managed-config-scope'
5
5
 
6
- // `josh sync:scope` — say whether this change touches a file `josh sync` distributes
7
- // (joshuafolkken/kit#1578).
6
+ // `josh sync:scope` — say whether this change touches a file `josh sync` distributes.
8
7
  //
9
8
  // A command rather than a paragraph, for the reason `josh review:level` is one: the confirmation
10
9
  // stop this feeds was written as an instruction to compare the diff against three arrays by eye, and
@@ -13,8 +13,8 @@ const AI_COPY_DIRECTORIES_LIST = 'AI_COPY_DIRECTORIES'
13
13
  // `init-logic.ts`: these destinations are written by `sync.ts` directly and appear on no list there.
14
14
  const SYNCED_PATHS_LIST = 'SYNCED_PATHS'
15
15
 
16
- // The fifth source: the skill directories that ship as the `kit` plugin rather than as a copy
17
- // (joshuafolkken/kit#1879). They are no longer in `AI_COPY_DIRECTORIES`, but a change to one still
16
+ // The fifth source: the skill directories that ship as the `kit` plugin rather than as a copy.
17
+ // They are no longer in `AI_COPY_DIRECTORIES`, but a change to one still
18
18
  // reaches consumers through the package, so the gate keeps flagging it.
19
19
  const PLUGIN_SKILL_DIRECTORIES_LIST = 'PLUGIN_SKILL_DIRECTORIES'
20
20
 
@@ -57,7 +57,7 @@ function matches_plugin_skill(path: string): boolean {
57
57
 
58
58
  // The paths `josh sync` writes outside the three `AI_COPY_*` lists — `playwright.config.ts` and the
59
59
  // rest. Reading only those three made the gate **narrower than the instruction it replaced**, whose
60
- // own worked example was a file none of them holds (joshuafolkken/kit#1578).
60
+ // own worked example was a file none of them holds.
61
61
  function matches_synced_path(path: string): boolean {
62
62
  return synced_paths.get_synced_paths().includes(path)
63
63
  }
@@ -96,7 +96,7 @@ function has_managed_path(paths: ReadonlyArray<string>): boolean {
96
96
 
97
97
  // The path *and* the list that claimed it, because the two answer different questions: which file to
98
98
  // look at, and why it counts as distributed. `AI_COPY_DIRECTORIES` is the one a reader cannot derive
99
- // by eye — the path matched a directory entry it does not textually equal (joshuafolkken/kit#1578).
99
+ // by eye — the path matched a directory entry it does not textually equal.
100
100
  function format_hit(hit: ManagedHit): string {
101
101
  return `${hit.path} (${hit.list})`
102
102
  }
@@ -1,10 +1,10 @@
1
- // The skill directories kit ships as the `kit` Claude Code plugin (joshuafolkken/kit#1879). A
1
+ // The skill directories kit ships as the `kit` Claude Code plugin. A
2
2
  // consumer receives them through the plugin rather than as a copy, so this is the single source two
3
3
  // places read: `skill-migration.ts` removes a consumer's stale copy of one, and
4
4
  // `managed-config-scope.ts` flags a change to one as reaching consumers. It is deliberately separate
5
5
  // from `init-logic.ts`'s `AI_COPY_DIRECTORIES` — which is now empty — because these directories are
6
6
  // distributed but no longer copied. `diag` is deliberately absent: it drives kit's own run
7
- // measurement, so it is excluded from the package and the plugin (joshuafolkken/kit#1997).
7
+ // measurement, so it is excluded from the package and the plugin.
8
8
  const PLUGIN_SKILL_DIRECTORIES: ReadonlyArray<string> = [
9
9
  '.claude/skills/workflow-commands',
10
10
  '.claude/skills/epic-commands',
@@ -12,9 +12,13 @@
12
12
  * is reviewed and reconciled. Only the review is enforced for tripwire pairs.
13
13
  */
14
14
  import { fileURLToPath } from 'node:url'
15
- import { parseArgs } from 'node:util'
15
+ import { cli_flags } from '#scripts/lib/cli-flags'
16
16
  import { template_source_logic } from './template-source-logic'
17
17
 
18
+ const ARGV_OFFSET = 2
19
+ const OPTIONS = { check: { type: 'boolean', default: false } } as const
20
+ const USAGE = cli_flags.usage_line(['--check'], 'reconcile-templates')
21
+
18
22
  function check_drift(): never {
19
23
  const copy_drift = template_source_logic.find_copy_drift()
20
24
  const tripwire_drift = template_source_logic.find_tripwire_drift(
@@ -38,16 +42,21 @@ function reconcile(): never {
38
42
  process.exit(0)
39
43
  }
40
44
 
41
- function main(): void {
42
- const { values } = parseArgs({
43
- options: { check: { type: 'boolean', default: false } },
44
- strict: true,
45
- })
45
+ // A line nobody can read is refused before either path runs: a misspelled `--check` that fell through
46
+ // would regenerate the templates the caller only meant to verify.
47
+ function refuse_usage(): never {
48
+ console.error(USAGE)
49
+ process.exit(1)
50
+ }
51
+
52
+ function main(argv: ReadonlyArray<string>): void {
53
+ const values = cli_flags.values_of(argv, OPTIONS)
46
54
 
55
+ if (values === undefined) refuse_usage()
47
56
  if (values.check) check_drift()
48
57
  reconcile()
49
58
  }
50
59
 
51
- if (process.argv[1] === fileURLToPath(import.meta.url)) main()
60
+ if (process.argv[1] === fileURLToPath(import.meta.url)) main(process.argv.slice(ARGV_OFFSET))
52
61
 
53
- export { check_drift, reconcile }
62
+ export { check_drift, reconcile, main }
@@ -6,9 +6,8 @@ import type { RemovedSkillManifest } from './skill-migration'
6
6
  // of each file's distributed (path-transformed) content, which is consumer-independent, so one hash
7
7
  // matches every consumer's untouched copy while an edited copy no longer matches and is kept.
8
8
  //
9
- // `diag` was dropped from distribution in joshuafolkken/kit#1997 because it drives kit's own run
10
- // measurement, and its source was deleted in joshuafolkken/kit#2015; this removes the copy a consumer
11
- // received before then (joshuafolkken/kit#1990). `removed-skill-manifest.test.ts` recomputes these
9
+ // `diag` is no longer distributed because it drives kit's own run measurement, and its source is
10
+ // gone; this removes the copy a consumer received while it still shipped. `removed-skill-manifest.test.ts` recomputes these
12
11
  // from the repo's own skill source and fails on drift where that source still ships; an entry whose
13
12
  // source has since been deleted has nothing left to recompute against, so its frozen hashes stand as
14
13
  // the permanent distributed record, guarded only by the test's well-formed-sha256 shape check.
@@ -30,7 +30,7 @@ function sync_ai_file(source_path: string, destination_path: string): boolean {
30
30
 
31
31
  // Both copied hook files must run against the consumer's installed bundle. When sync is run from a
32
32
  // newer source than that install, writing either file would leave hooks
33
- // that fail every prompt (joshuafolkken/kit#1930); skip it and print how to update instead.
33
+ // that fail every prompt; skip it and print how to update instead.
34
34
  function should_skip_hook_file(filename: string): boolean {
35
35
  if (filename !== CLAUDE_SETTINGS_FILE && filename !== CODEX_HOOKS_FILE) return false
36
36
  const warning = sync_hook_safety.hook_write_warning(
@@ -60,7 +60,7 @@ function sync_file_mapping(source_path: string, destination_path: string): void
60
60
 
61
61
  // Routed through sync_ai_file rather than cpSync: templates/workflows/ci.yml is a mapped
62
62
  // file, so a byte copy would hand the consumer the template's own action pins. The pins
63
- // have to be resolved from .github/workflows at write time (joshuafolkken/kit#747).
63
+ // have to be resolved from .github/workflows at write time.
64
64
  const did_change = sync_ai_file(source_path, destination_path)
65
65
 
66
66
  console.info(` ✔ ${did_change ? 'synced ' : 'unchanged'} ${path.basename(destination_path)}`)
@@ -121,8 +121,8 @@ function sync_directory(directory_name: string): void {
121
121
  }
122
122
 
123
123
  // A consumer's stale copy of a distributed skill is removed once it still matches the shipment and
124
- // kept with a warning once it does not (joshuafolkken/kit#1879). Plugin skills compare against the
125
- // package source; a retired skill compares against the frozen manifest (joshuafolkken/kit#1990). The
124
+ // kept with a warning once it does not. Plugin skills compare against the
125
+ // package source; a retired skill compares against the frozen manifest. The
126
126
  // note distinguishes the two, and `absent` — the consumer never had the copy — prints nothing.
127
127
  function report_migration_result(result: MigrationResult): void {
128
128
  if (result.action === 'absent') return
@@ -151,7 +151,7 @@ function ensured_claude_md(existing: string | undefined, shape?: ProjectShape):
151
151
  : init_logic.ensure_claude_md_import(existing)
152
152
  }
153
153
 
154
- // CLAUDE.md is not byte-copied (joshuafolkken/kit#1878): a consumer's file is one @import of kit's
154
+ // CLAUDE.md is not byte-copied: a consumer's file is one @import of kit's
155
155
  // published rules plus the project's own additions below it. Ensure the import line is present
156
156
  // without ever disturbing those additions — so this ignores --force, which would otherwise mean
157
157
  // discarding a consumer's content.
@@ -171,7 +171,7 @@ function sync_claude_md(destination_path: string, shape?: ProjectShape): void {
171
171
  }
172
172
 
173
173
  // A basic shape syncs the file set `josh init` writes for that profile; no shape is the full set,
174
- // unfiltered, as sync has always written it (joshuafolkken/kit#2827).
174
+ // unfiltered, as sync has always written it.
175
175
  function sync_ai_copy_all(is_force: boolean, shape?: ProjectShape): void {
176
176
  console.info('AI files:')
177
177
 
@@ -191,7 +191,7 @@ function sync_ai_copy_all(is_force: boolean, shape?: ProjectShape): void {
191
191
 
192
192
  migrate_removed_skills()
193
193
  // Both profiles write the Safe Chain `preinstall`, so both get the hook that keeps it out of a
194
- // published package (joshuafolkken/kit#3110).
194
+ // published package.
195
195
  pack_hook.sync_pack_hook(PROJECT_ROOT, PACKAGE_DIR)
196
196
  }
197
197
 
@@ -1,7 +1,8 @@
1
- import { existsSync, readFileSync, writeFileSync } from 'node:fs'
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'
2
2
  import path from 'node:path'
3
3
  import { init_logic } from '#scripts/init/init-logic'
4
4
  import { PACKAGE_DIR } from '#scripts/init/init-paths'
5
+ import { vscode_tasks } from '#scripts/init/vscode-tasks'
5
6
  import { string_array_schema, vscode_settings_schema } from '#scripts/lib/schemas'
6
7
 
7
8
  type MergeFunction = (existing: string) => string
@@ -30,10 +31,10 @@ function sync_with_merge(
30
31
  }
31
32
 
32
33
  // Removes only the exact settings lines earlier kit releases wrote, which pnpm 12 ignores in
33
- // `.npmrc` (joshuafolkken/kit#3267); every other line, a `_authToken` line included, is left alone.
34
+ // `.npmrc`; every other line, a `_authToken` line included, is left alone.
34
35
  // Sync used to remove the env-var form, which broke every project that had opted its project
35
36
  // .npmrc in via `npmrcAuthFile` — there the line is the live credential, and the opt-in itself
36
- // can live in a deploy platform's dashboard where sync cannot see it (joshuafolkken/kit#759).
37
+ // can live in a deploy platform's dashboard where sync cannot see it.
37
38
  function sync_npmrc(destination_path: string): void {
38
39
  sync_with_merge(destination_path, '.npmrc', init_logic.merge_npmrc)
39
40
  }
@@ -142,6 +143,31 @@ function sync_vscode_settings_json(destination_path: string): void {
142
143
  )
143
144
  }
144
145
 
146
+ // Creates the file when absent, unlike the other `.vscode` syncs: the folder-open board task is the
147
+ // whole point of distributing it, and a consumer
148
+ // without a tasks.json has nothing of its own to protect. An existing file keeps every task whose
149
+ // label kit does not ship.
150
+ function sync_vscode_tasks_json(destination_path: string): void {
151
+ const kit_content = readFileSync(
152
+ path.join(PACKAGE_DIR, '.vscode', vscode_tasks.VSCODE_TASKS_FILENAME),
153
+ 'utf8',
154
+ )
155
+
156
+ if (existsSync(destination_path)) {
157
+ const kit_tasks = vscode_tasks.read_kit_tasks(kit_content)
158
+
159
+ sync_with_merge(destination_path, '.vscode/tasks.json', (existing) =>
160
+ vscode_tasks.merge_tasks(existing, kit_tasks),
161
+ )
162
+
163
+ return
164
+ }
165
+
166
+ mkdirSync(path.dirname(destination_path), { recursive: true })
167
+ writeFileSync(destination_path, kit_content)
168
+ console.info(' ✔ created .vscode/tasks.json')
169
+ }
170
+
145
171
  const sync_configs = {
146
172
  sync_npmrc,
147
173
  sync_gitignore,
@@ -152,6 +178,7 @@ const sync_configs = {
152
178
  sync_secretlint_config,
153
179
  sync_vscode_extensions_json,
154
180
  sync_vscode_settings_json,
181
+ sync_vscode_tasks_json,
155
182
  }
156
183
 
157
184
  export { sync_configs }
@@ -6,11 +6,11 @@ import { KIT_PACKAGE_NAME } from '#scripts/version/kit-descriptor'
6
6
  import semver from 'semver'
7
7
 
8
8
  // `josh sync` writes the consumer's Claude and Codex hook files, whose hooks invoke bundles under
9
- // `node_modules/@joshuafolkken/kit/dist/` (joshuafolkken/kit#1930). When sync is run from a
9
+ // `node_modules/@joshuafolkken/kit/dist/`. When sync is run from a
10
10
  // newer source than the consumer's installed package — an `npx @joshuafolkken/kit sync`, or a global
11
11
  // josh — the settings it writes reference commands (e.g. `pretool:guard`) the older installed bundle
12
12
  // does not have, and every prompt then fails a hook that exits `Unknown command`
13
- // (joshuafolkken/kit#1930's own observation, kit 1.214). This checks the version before writing and
13
+ // (observed on kit 1.214). This checks the version before writing and
14
14
  // asks the consumer to update first rather than leaving broken hooks behind.
15
15
  //
16
16
  // Run through `pnpm josh sync` in the consumer the two versions are equal by construction — the same
@@ -64,7 +64,7 @@ function sync_prettier_config(destination_path: string): void {
64
64
  write_merged_prettier_config(destination_path)
65
65
  }
66
66
 
67
- // A basic project's prettier config written before joshuafolkken/kit#2829 still imports the static
67
+ // A basic project's prettier config written under the static profile name still imports the static
68
68
  // preset path; it is moved onto the basic one with the rule `josh init` applies.
69
69
  function sync_basic_prettier_config(destination_path: string): void {
70
70
  if (!existsSync(destination_path)) return
@@ -137,6 +137,7 @@ function sync_config_files(): void {
137
137
  sync_configs.sync_secretlint_config(path.join(PROJECT_ROOT, '.secretlintrc.json'))
138
138
  sync_configs.sync_vscode_extensions_json(path.join(PROJECT_ROOT, '.vscode/extensions.json'))
139
139
  sync_configs.sync_vscode_settings_json(path.join(PROJECT_ROOT, '.vscode/settings.json'))
140
+ sync_configs.sync_vscode_tasks_json(path.join(PROJECT_ROOT, '.vscode/tasks.json'))
140
141
  }
141
142
 
142
143
  function sync_package_json_with(
@@ -170,6 +171,16 @@ function sync_package_manager_version(destination_path: string): void {
170
171
  )
171
172
  }
172
173
 
174
+ // A manifest an earlier `josh init` wrote rejects a standalone pnpm of another version outright;
175
+ // `"download"` fetches the pin instead.
176
+ function sync_package_manager_on_fail(destination_path: string): void {
177
+ sync_package_json_with(
178
+ destination_path,
179
+ (existing) => package_manager_version.upgrade_development_engines_on_fail(existing),
180
+ ' ✔ synced devEngines.packageManager.onFail',
181
+ )
182
+ }
183
+
173
184
  // The pre-commit secretlint rule resolves secretlint from the consumer project, so a project
174
185
  // that predates the rule needs the devDependencies added here (then `pnpm install`) before the
175
186
  // hook can run. `josh init` covers fresh projects; this covers everyone already initialized.
@@ -182,7 +193,7 @@ function sync_secretlint_development_deps(destination_path: string): void {
182
193
  }
183
194
 
184
195
  // `lefthook install` fails silently when `core.hooksPath` is set, leaving a consumer with no hooks
185
- // and no message (joshuafolkken/kit#1503). `josh init` rewrites the clause it wrote so the failure
196
+ // and no message. `josh init` rewrites the clause it wrote so the failure
186
197
  // is reported; this covers everyone already initialized, who never re-runs `josh init`.
187
198
  function sync_prepare_lefthook_warning(destination_path: string): void {
188
199
  sync_package_json_with(
@@ -192,7 +203,7 @@ function sync_prepare_lefthook_warning(destination_path: string): void {
192
203
  )
193
204
  }
194
205
 
195
- // The `preinstall` earlier kits wrote fetched safe-chain on every install (joshuafolkken/kit#3269);
206
+ // The `preinstall` earlier kits wrote fetched safe-chain on every install;
196
207
  // `josh init` replaces it, and this covers everyone already initialized.
197
208
  function sync_safe_chain_preinstall(destination_path: string): void {
198
209
  sync_package_json_with(
@@ -206,6 +217,7 @@ function sync_safe_chain_preinstall(destination_path: string): void {
206
217
  // group so the next one is added here rather than at the call site.
207
218
  function sync_package_json_migrations(destination_path: string): void {
208
219
  sync_package_manager_version(destination_path)
220
+ sync_package_manager_on_fail(destination_path)
209
221
  sync_secretlint_development_deps(destination_path)
210
222
  sync_prepare_lefthook_warning(destination_path)
211
223
  sync_safe_chain_preinstall(destination_path)
@@ -213,16 +225,16 @@ function sync_package_json_migrations(destination_path: string): void {
213
225
 
214
226
  // Two distributed artifacts each depend on a repository setting kit cannot write, and both reports
215
227
  // are tied to the moment the artifact reaches the consumer. `.github/dependabot.yml` disables npm
216
- // version updates (joshuafolkken/kit#803), so a synced consumer only receives npm Dependabot pull
217
- // requests through the security-advisory path (joshuafolkken/kit#805);
228
+ // version updates, so a synced consumer only receives npm Dependabot pull
229
+ // requests through the security-advisory path;
218
230
  // `.github/workflows/dependabot-auto-merge.yml` runs `gh pr merge --auto`, which fails outright
219
- // unless the repository allows auto-merge (joshuafolkken/kit#834). Neither ever fails the sync: both
231
+ // unless the repository allows auto-merge. Neither ever fails the sync: both
220
232
  // are GitHub-side state, not synced artifacts. Unconditional, unlike `init`, because `sync`
221
233
  // overwrites both files on every run.
222
234
  //
223
235
  // The labels are the same kind of GitHub-side prerequisite, and one kit *can* write: the synced
224
236
  // `pr-classification.yml` requires one of the release classification labels, so the missing ones are
225
- // created here rather than reported (joshuafolkken/kit#2797).
237
+ // created here rather than reported.
226
238
  function report_repository_settings(name_with_owner: string | undefined): void {
227
239
  security_updates.report_security_updates_section(name_with_owner)
228
240
  auto_merge_setting.report_auto_merge_section(name_with_owner)
@@ -242,7 +254,7 @@ function sync_project_artifacts(is_force: boolean): void {
242
254
  sync_sonar_with_template(name_with_owner, is_force)
243
255
  sync_config_files()
244
256
  // After `sync_ai_copy_all`, which may add the `pnpm-workspace.yaml` window `.aikido`'s age is
245
- // derived from (joshuafolkken/kit#2743, #3267).
257
+ // derived from.
246
258
  project_config.sync_project_config(PROJECT_ROOT)
247
259
  sync_package_json_migrations(path.join(PROJECT_ROOT, PACKAGE_JSON))
248
260
  report_repository_settings(name_with_owner)
@@ -250,7 +262,7 @@ function sync_project_artifacts(is_force: boolean): void {
250
262
 
251
263
  // A basic project gets what `josh init` gives that profile and nothing more: its AI file set and the
252
264
  // move of its prettier preset path. The full toolchain's configs, Sonar, package.json migrations and
253
- // repository settings are never written into it (joshuafolkken/kit#2827).
265
+ // repository settings are never written into it.
254
266
  function sync_basic_artifacts(is_force: boolean): void {
255
267
  console.info('profile: basic (package.json josh.profile)\n')
256
268
  sync_ai_files.sync_ai_copy_all(is_force, project_profile.inspect_project(PROJECT_ROOT, 'basic'))
@@ -259,7 +271,7 @@ function sync_basic_artifacts(is_force: boolean): void {
259
271
 
260
272
  // Checked before anything is written, never per file: the damage is the whole run, and a partial
261
273
  // sync that stopped halfway would leave the source repository in a state neither `git checkout` nor
262
- // a re-run describes (joshuafolkken/kit#868).
274
+ // a re-run describes.
263
275
  //
264
276
  // Only a recorded basic profile switches the file set; an unrecorded one stays full, as every
265
277
  // project initialized before the profile was recorded was set up.
@@ -286,6 +298,7 @@ const sync = {
286
298
  sync_playwright_config,
287
299
  sync_deploy_vps,
288
300
  sync_package_manager_version,
301
+ sync_package_manager_on_fail,
289
302
  sync_secretlint_development_deps,
290
303
  sync_prepare_lefthook_warning,
291
304
  sync_safe_chain_preinstall,
@@ -1,7 +1,7 @@
1
1
  import { init_logic } from '#scripts/init/init-logic'
2
2
 
3
3
  // **`josh sync` distributes more than the three `AI_COPY_*` lists**, and a gate that reads only
4
- // those is narrower than the instruction it replaced (joshuafolkken/kit#1578). The prose that
4
+ // those is narrower than the instruction it replaced. The prose that
5
5
  // instruction lived in named `playwright.config.ts` as its own worked example — a file no `AI_COPY_*`
6
6
  // list holds — so a matcher built from those lists alone would have answered "not distributed" for
7
7
  // the very file the rule was written about.
@@ -29,6 +29,7 @@ const SYNCED_CONFIG_PATHS: ReadonlyArray<string> = [
29
29
  '.secretlintrc.json',
30
30
  '.vscode/extensions.json',
31
31
  '.vscode/settings.json',
32
+ '.vscode/tasks.json',
32
33
  ]
33
34
 
34
35
  // **`package.json` is deliberately absent.** `sync` does not overwrite it — it realigns one field,
@@ -147,7 +147,7 @@ function list_workflow_sources(relative_directory: string): Array<WorkflowSource
147
147
  }
148
148
 
149
149
  // The local composite actions are runtime sources too: `.github/actions/setup-pnpm` is the only
150
- // place kit's own workflows still pin pnpm/setup (joshuafolkken/kit#2982).
150
+ // place kit's own workflows still pin pnpm/setup.
151
151
  function list_composite_action_sources(): Array<WorkflowSource> {
152
152
  return composite_actions
153
153
  .list(package_path)
@@ -4,7 +4,7 @@ import { git_spawn_sync } from '#scripts/git/git-spawn-sync'
4
4
  import { test_declared_logic, type Verdict } from './test-declared-logic'
5
5
 
6
6
  // The working-tree change set and the verdict over it, read **synchronously** for the `PreToolUse`
7
- // trigger in `delivered-rules.ts` (joshuafolkken/kit#2118).
7
+ // trigger in `delivered-rules.ts`.
8
8
  //
9
9
  // **Synchronous on purpose, and separate from `git-command.ts` for the same reason `run-cut.ts` keeps
10
10
  // a `carried_cut_sync`.** A guard answers a hook synchronously — an `await` or a network call is out —
@@ -45,7 +45,7 @@ function read_changed_paths_sync(): Array<string> {
45
45
  }
46
46
 
47
47
  // The working-tree read behind `current_verdict`, injectable so the delivery path can be exercised
48
- // without a checkout (joshuafolkken/kit#2169). Held on a `const` object rather than a reassigned
48
+ // without a checkout. Held on a `const` object rather than a reassigned
49
49
  // variable — production leaves `paths` unset and the real reader runs; a test fixes it for the span of
50
50
  // one call through `with_paths`, and it is cleared afterwards.
51
51
  const injected: { paths?: ReadonlyArray<string> } = {}
@@ -64,7 +64,7 @@ function current_verdict(paths: ReadonlyArray<string> = source_paths()): Verdict
64
64
 
65
65
  // Put the injection back to what it was before a `with_paths` span — cleared to the live reader when
66
66
  // nothing was in force, else the outer span's set. Restoring rather than always clearing lets a nested
67
- // span prove the clear happened without reading the live tree (joshuafolkken/kit#2169).
67
+ // span prove the clear happened without reading the live tree.
68
68
  function restore_injection(previous: ReadonlyArray<string> | undefined): void {
69
69
  if (previous === undefined) {
70
70
  delete injected.paths
@@ -75,7 +75,7 @@ function restore_injection(previous: ReadonlyArray<string> | undefined): void {
75
75
  injected.paths = previous
76
76
  }
77
77
 
78
- // The seam the `rule_delivery` call path needs (joshuafolkken/kit#2169). `is_untested_commit` reads the
78
+ // The seam the `rule_delivery` call path needs. `is_untested_commit` reads the
79
79
  // tree at trigger time rather than from an argument, so a unit test driving `rule_delivery` cannot reach
80
80
  // `current_verdict`'s `paths` port from the outside. Running `body` inside `with_paths` fixes the read
81
81
  // to `paths` for its duration and restores it afterwards — the `PreToolUse` production path, which never