@joshuafolkken/kit 1.1240.0 → 1.1373.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +52 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +23 -66
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +43 -11
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
  51. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
  52. package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
  53. package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
  57. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  60. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
  61. package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
  62. package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
  63. package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +195 -181
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +282 -95
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +17 -11
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +30 -5
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +21 -7
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cross-file-recheck.ts +155 -0
  560. package/scripts/lint/cspell-cached.ts +1 -1
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +35 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +6 -7
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +26 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +64 -18
  801. package/scripts/run/run-step.ts +107 -51
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -4,6 +4,7 @@ import path from 'node:path'
4
4
  import { fileURLToPath } from 'node:url'
5
5
  import { resolve_local_bin, resolve_package_bin } from '#scripts/build/local-bin'
6
6
  import { ESLINT_EDIT_CACHE_FLAGS } from '#scripts/josh/josh-command-types'
7
+ import { json_value } from '#scripts/lib/json-value'
7
8
  import { HOOK_PROCESS_TIMEOUT_MS } from '#scripts/lib/timeouts'
8
9
  import { time_density_hook } from '#scripts/time-runtime/time-density-hook'
9
10
  import { execa } from 'execa'
@@ -61,7 +62,7 @@ const PRETTIER_ARGUMENTS: ReadonlyArray<string> = ['--write', '--ignore-unknown'
61
62
  // nothing to say about it, and a non-zero exit here would be reported as a failed hook.
62
63
  //
63
64
  // The cache flags are not here to make the hook faster — they are here to stop it destroying the
64
- // gate's cache (joshuafolkken/kit#1332). ESLint started *without* `--cache` deletes the file at
65
+ // gate's cache. ESLint started *without* `--cache` deletes the file at
65
66
  // `--cache-location`, so this hook wiped `.eslintcache` on every edit and the gate's lint ran cold
66
67
  // every time. Passing them points that deletion, and the hook's own reads and writes, at a location
67
68
  // of its own — its own rather than the gate's because the two run concurrently, and each eslint run
@@ -81,7 +82,7 @@ const ESLINT_ARGUMENTS: ReadonlyArray<string> = [
81
82
  // hope — behind a socket and forwards the same arguments to it, which is why the fixed output is
82
83
  // identical rather than merely similar. The config entry file is re-read per request; the modules it
83
84
  // imports are not, which `plan_daemon_restart` below is the answer to. The daemon exits after 15
84
- // minutes of inactivity (joshuafolkken/kit#1259).
85
+ // minutes of inactivity.
85
86
  const ESLINT_DAEMON = 'eslint_d'
86
87
  const DAEMON_RESTART = 'restart'
87
88
  // The two shapes a flat config is built from here and in every consumer of this kit: the root
@@ -90,8 +91,7 @@ const ESLINT_CONFIG_DIR = 'eslint'
90
91
  const ESLINT_CONFIG_ENTRY = /^eslint\.config\.[cm]?[jt]s$/u
91
92
 
92
93
  // The problems eslint could not auto-fix are handed to the model verbatim from eslint's own stdout —
93
- // its default formatter already prints the file, the `line:col`, and the rule name the issue asks
94
- // for (joshuafolkken/kit#2275). A header names what the block is, since additionalContext arrives
94
+ // its default formatter already prints the file, the `line:col`, and the rule name. A header names what the block is, since additionalContext arrives
95
95
  // with no framing of its own.
96
96
  const DIAGNOSTIC_HEADER =
97
97
  'The edit hook could not auto-fix these lint problems; address them now rather than at the gate:'
@@ -129,7 +129,7 @@ interface BinRoutes {
129
129
  // on a half-written file. The stdout the spawn captured is what separates the two: eslint prints the
130
130
  // problems it is exiting non-zero about, while a daemon that could not start prints its reason to
131
131
  // stderr and leaves stdout empty. It is kept whole rather than reduced to a boolean because the
132
- // problems eslint could not fix are reported to the model from it (joshuafolkken/kit#2275).
132
+ // problems eslint could not fix are reported to the model from it.
133
133
  interface CommandOutcome {
134
134
  exit_code: number
135
135
  stdout: string
@@ -138,13 +138,7 @@ interface CommandOutcome {
138
138
  type CommandRunner = (command: FormatCommand, project_root: string) => Promise<CommandOutcome>
139
139
 
140
140
  function parse_edited_path(raw_payload: string): string | undefined {
141
- try {
142
- const result = hook_payload_schema.safeParse(JSON.parse(raw_payload))
143
-
144
- return result.success ? result.data.tool_input?.file_path : undefined
145
- } catch {
146
- return undefined
147
- }
141
+ return json_value.parse_with(raw_payload, hook_payload_schema)?.tool_input?.file_path
148
142
  }
149
143
 
150
144
  // Read against the path relative to the project root, never the absolute one: a checkout that lives
@@ -352,7 +346,7 @@ function format_diagnostics(unfixed: string | undefined): string | undefined {
352
346
  }
353
347
 
354
348
  // The fixes eslint could apply are applied silently, as before; what it could not fix is returned so
355
- // the model sees it on this edit rather than at the gate (joshuafolkken/kit#2275). A `PostToolUse`
349
+ // the model sees it on this edit rather than at the gate. A `PostToolUse`
356
350
  // hook still reports no failure — the edit already landed, and returning the problems is not the same
357
351
  // as failing the write.
358
352
  // Runs the planned commands in order, returning the last unfixed eslint output. Empty until eslint
@@ -410,7 +404,7 @@ async function format_edited_payload(
410
404
  const HOOK_EVENT_NAME = 'PostToolUse'
411
405
 
412
406
  // The live round-trip density line, riding this hook rather than one of its own
413
- // (joshuafolkken/kit#1329) — a `PostToolUse` matcher covering every tool would add a process start to
407
+ // — a `PostToolUse` matcher covering every tool would add a process start to
414
408
  // all ~250 calls of a run.
415
409
  //
416
410
  // **A `PostToolUse` hook's plain stdout never reaches the model**; only `additionalContext` inside
@@ -458,9 +452,9 @@ function report_no_payload(): void {
458
452
  // their processes have run; the density line is joined to them into the single envelope the harness
459
453
  // can parse, rather than written first on its own. The rewrite notice is read from the file itself —
460
454
  // its content before the formatters ran against its content after — so it too is known only once they
461
- // have (joshuafolkken/kit#2314). The rewrite, lint and spell blocks are composed together first, then
462
- // joined to the density line — one envelope, since a `PostToolUse` hook's stdout carries only one
463
- // (joshuafolkken/kit#2296). A hook killed at its 15s timeout is the one case this loses the density
455
+ // have. The rewrite, lint and spell blocks are composed together first, then
456
+ // joined to the density line — one envelope, since a `PostToolUse` hook's stdout carries only one.
457
+ // A hook killed at its 15s timeout is the one case this loses the density
464
458
  // line to — a run already gone pathologically wrong, per HOOK_PROCESS_TIMEOUT_MS.
465
459
  async function run_hook(payload: string): Promise<void> {
466
460
  const notice = time_density_hook.density_notice(payload)
@@ -1,23 +1,24 @@
1
1
  import { file_reader } from '#scripts/lib/read-file'
2
2
 
3
- // The rewrite half of the edit hook (joshuafolkken/kit#2314). The format hook runs prettier and
3
+ // The rewrite half of the edit hook. The format hook runs prettier and
4
4
  // `eslint --fix` in place after every edit, so a file the model just wrote can be rewritten out from
5
5
  // under the image the model holds — and the next `Edit` against that stale image misses, then pays for
6
- // a full re-read that rides every later request. joshuafolkken/kit#2275 built the `additionalContext`
7
- // path this rides and joshuafolkken/kit#2296 put cspell on it; this returns the fact that the file
6
+ // a full re-read that rides every later request. Riding the same `additionalContext` path as the lint
7
+ // and cspell halves, this returns the fact that the file
8
8
  // changed and the region that changed, so the model reissues against current text without re-reading
9
9
  // the whole file. Nothing is added when formatting left the file untouched.
10
10
 
11
- // additionalContext rides back on the edit, so the changed region is cut to this bound rather than
12
- // let a large reformat balloon the run's context — the notice is a cheaper hint than the full re-read
13
- // it replaces, and stays cheaper only while it is bounded.
14
- const MAX_REWRITE_CHARS = 1200
15
- const REWRITE_TRUNCATION_NOTICE = '\n…(rewrite preview truncated)'
11
+ // additionalContext rides back on the edit, so the whole notice is cut to this bound rather than let
12
+ // a large reformat balloon the run's context — the notice is a cheaper hint than the full re-read it
13
+ // replaces, and stays cheaper only while it is bounded. The line range leads, so a cut preview still
14
+ // says where to re-read.
15
+ const MAX_REWRITE_CHARS = 600
16
+ const REWRITE_TRUNCATION_NOTICE = '\n…(truncated)'
16
17
  // The header names what the block is, since additionalContext arrives with no framing of its own, and
17
18
  // says the one thing the model has to act on: its copy is stale, so re-read before the next edit.
18
19
  const REWRITE_HEADER =
19
- 'The format hook rewrote this file after your edit, so your in-memory copy is now stale — re-read it before the next Edit or the match will miss.'
20
- const REWRITE_RANGE_PREFIX = 'Changed around lines '
20
+ 'The format hook rewrote this file, so your copy is stale; re-read these lines before the next Edit.'
21
+ const REWRITE_RANGE_PREFIX = 'Lines '
21
22
  const LINE_SEPARATOR = '\n'
22
23
  const FIRST_LINE = 1
23
24
 
@@ -64,21 +65,22 @@ function changed_range(before: string, after: string): ChangedRange {
64
65
  }
65
66
  }
66
67
 
67
- function cap_body(body: string): string {
68
- if (body.length <= MAX_REWRITE_CHARS) return body
68
+ // `budget` is what the header and the range left of the bound; the marker is paid out of it.
69
+ function cap_body(body: string, budget: number): string {
70
+ if (body.length <= budget) return body
69
71
 
70
- return `${body.slice(0, MAX_REWRITE_CHARS)}${REWRITE_TRUNCATION_NOTICE}`
72
+ return `${body.slice(0, Math.max(0, budget - REWRITE_TRUNCATION_NOTICE.length))}${REWRITE_TRUNCATION_NOTICE}`
71
73
  }
72
74
 
73
- // The block the model reads: the header, the line range, then the region's new text cut to the bound.
74
- // `undefined` when formatting changed nothing, so the ordinary edit adds nothing to additionalContext.
75
+ // The block the model reads: the header, the line range, then the region's new text — the whole cut
76
+ // to the bound. `undefined` when formatting changed nothing, so the ordinary edit adds nothing.
75
77
  function build(before: string, after: string): string | undefined {
76
78
  if (before === after) return undefined
77
79
 
78
80
  const range = changed_range(before, after)
79
- const location = `${REWRITE_RANGE_PREFIX}${String(range.start_line)}-${String(range.end_line)}:`
81
+ const head = `${REWRITE_HEADER}\n${REWRITE_RANGE_PREFIX}${String(range.start_line)}-${String(range.end_line)}:\n`
80
82
 
81
- return `${REWRITE_HEADER}\n${location}\n${cap_body(range.body)}`
83
+ return `${head}${cap_body(range.body, MAX_REWRITE_CHARS - head.length)}`
82
84
  }
83
85
 
84
86
  // The file content around a format run, read for the before/after comparison. A path the hook was
@@ -5,22 +5,18 @@ import { gate_tree, type GateTree } from '#scripts/gate/gate-tree'
5
5
  import { hook_gate_reuse } from '#scripts/gate/hook-gate-reuse'
6
6
  import { test_unit_guard } from '#scripts/test/test-unit-guard'
7
7
 
8
- // The pre-push hook's unit run, which no longer re-runs a suite a green gate already covers
9
- // (joshuafolkken/kit#1334).
8
+ // The pre-push hook's unit run, which does not re-run a suite a green gate already covers: the gate
9
+ // writes its record down, and re-running `vitest run` on a tree it just printed green is the bulk of
10
+ // what `pnpm josh git -y` would otherwise spend.
10
11
  //
11
- // Measured on joshuafolkken/kit#1326: `pnpm josh git -y` took 40 seconds, 15.9 of them the pre-push
12
- // `vitest run` — started 40 seconds after `pnpm josh gate` had printed all four checks green on that
13
- // same tree, with nothing edited in between. The gate had written the record down and the hook was
14
- // the one reader that never looked at it.
15
- //
16
- // **The decision is joshuafolkken/kit#1328's, imported rather than restated.** "There is a green
12
+ // **The decision is the gate's, imported rather than restated.** "There is a green
17
13
  // record and nothing it covers has moved" is one question, and a hook answering it differently from
18
14
  // the gate beside it would be two commands disagreeing about the same tree — the clone `CLAUDE.md`
19
15
  // prohibits. So `gate_skip.reusable_green_gate` decides all three of its conditions here too: the
20
16
  // file map matches, the **base commit** the map is a diff against matches, and the map is non-empty.
21
17
  //
22
- // **What this hook shares with the pre-commit type check is `hook-gate-reuse.ts`**
23
- // (joshuafolkken/kit#1381): the escape hatch, the pre-filter in front of the record and the one
18
+ // **What this hook shares with the pre-commit type check is `hook-gate-reuse.ts`**:
19
+ // the escape hatch, the pre-filter in front of the record and the one
24
20
  // `git status` reading both narrow themselves from. Only the narrowing itself is written here, because
25
21
  // only it is about a push.
26
22
  //
@@ -41,7 +37,7 @@ const FORCE_ENV = 'JOSH_PRE_PUSH_FORCE'
41
37
  // `gate-tree.ts` rather than read a second way here — plus the one this hook adds.
42
38
  interface PushTree extends GateTree {
43
39
  is_clean: boolean
44
- // What a dirty tree reports as the reason the record was not reused (joshuafolkken/kit#3307) — the
40
+ // What a dirty tree reports as the reason the record was not reused — the
45
41
  // paths name a lock file a hook's own `pnpm install` rewrote, the case that went unexplained.
46
42
  carry_miss: string
47
43
  }
@@ -104,7 +100,7 @@ function push_reuse(
104
100
  // **The sentence claims the result, never merely the omission.** "unit tests skipped" reads as "not
105
101
  // verified", which is the one thing this line must not be mistaken for while the push it precedes
106
102
  // goes on to the remote. So it says what passed, on which tree, when, and how to run it anyway — in
107
- // the one sentence every reader of the record shares (joshuafolkken/kit#1381).
103
+ // the one sentence every reader of the record shares.
108
104
  function format_skip(taken_at: string): string {
109
105
  return gate_skip.format_reuse_notice({
110
106
  subject: 'the unit tests',
@@ -118,9 +114,9 @@ function format_skip(taken_at: string): string {
118
114
  // The suite is run through the guard `josh test:unit` uses rather than a bare `vitest run`, so a
119
115
  // project with no vitest prints a skip notice instead of failing the push — the behavior the hook's
120
116
  // other commands already have. **A project that has vitest and no test file at all fails the push
121
- // instead** (joshuafolkken/kit#1224): the guard treats that half as a broken state rather than a
117
+ // instead**: the guard treats that half as a broken state rather than a
122
118
  // young project, and the hook returns what the guard returns.
123
- // **A fall back to the whole suite says why, in one line** (joshuafolkken/kit#3307): under a crowded
119
+ // **A fall back to the whole suite says why, in one line**: under a crowded
124
120
  // machine the suite costs minutes, and a silent miss left a moved merge base, a dirty tree and a
125
121
  // mismatched record indistinguishable from one another.
126
122
  function format_miss(reason: string): string {
@@ -2,10 +2,10 @@
2
2
  import { text } from 'node:stream/consumers'
3
3
  import { fileURLToPath } from 'node:url'
4
4
  import { hook_decision } from '#scripts/josh/hook-decision'
5
- import { pretool_guard, pretool_outcome_async } from './pretool-guard'
5
+ import { pretool_guard } from './pretool-guard'
6
6
 
7
- // The `PreToolUse` hook's entry, kept apart from the composition in `pretool-guard.ts`
8
- // (joshuafolkken/kit#2922). The hook bundles are built with `splitting: true`, which moves a module
7
+ // The `PreToolUse` hook's entry, kept apart from the composition in `pretool-guard.ts`.
8
+ // The hook bundles are built with `splitting: true`, which moves a module
9
9
  // imported by two entries into a shared chunk — and `codex-hook-adapter.ts` imports `pretool-guard.ts`.
10
10
  // Its self-invoke went into that chunk, whose `import.meta.url` never equals the launched
11
11
  // `dist/hooks/pretool-guard.js`, so the bundled hook ran no guard at all and every refusal failed open.
@@ -16,6 +16,6 @@ if (process.argv[1] === fileURLToPath(import.meta.url)) {
16
16
  const raw_payload = await text(process.stdin)
17
17
 
18
18
  hook_decision.load_environment_file()
19
- pretool_guard.emit(raw_payload, await pretool_outcome_async(raw_payload))
19
+ await pretool_guard.respond(raw_payload)
20
20
  }
21
21
  }
@@ -1,15 +1,18 @@
1
1
  import { duplicate_read_outcome } from '#scripts/delegation/duplicate-read-guard'
2
2
  import { investigation_refusal } from '#scripts/delegation/investigation-guard'
3
3
  import { hook_decision, type GuardOutcome } from '#scripts/josh/hook-decision'
4
+ import { lane_phase } from '#scripts/lane/lane-phase'
5
+ import { json_value } from '#scripts/lib/json-value'
4
6
  import { delivered_rules } from '#scripts/rules/delivered-rules'
5
7
  import { lane_background } from '#scripts/rules/lane-background'
8
+ import { piped_verification } from '#scripts/rules/piped-verification'
6
9
  import { run_parent_cut_hook } from '#scripts/run/run-parent-cut-hook'
7
10
  import { run_watcher_hook } from '#scripts/run/run-watcher-hook'
8
11
  import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
9
12
  import { batch_outcome } from './batch-guard'
10
13
  import { step_zero_notice } from './step-zero-notice'
11
14
 
12
- // One PreToolUse process for the three guards that used to be three (joshuafolkken/kit#1930). A Bash
15
+ // One PreToolUse process for the three guards that used to be three. A Bash
13
16
  // call used to spawn `batch:guard`, `investigation:guard` and `rule:guard` separately — three pnpm
14
17
  // launches on top of the tool call — while consumers paid that thrice on every guarded call. The
15
18
  // three share one shell (`hook-decision.ts`): the same payload schema, the same deny envelope, the
@@ -19,10 +22,10 @@ import { step_zero_notice } from './step-zero-notice'
19
22
  // **The verdict is identical to running the three in turn**, and that is the whole point. Each guard
20
23
  // self-gates on the tool name inside its own `is_candidate` / trigger, so running all three on the
21
24
  // union matcher (`Bash|Edit|Read|Write|AskUserQuestion`) refuses exactly what the three separate
22
- // entries did — `AskUserQuestion` is matched for the rule guard's lane-child interactive-ask row
23
- // (joshuafolkken/kit#2201), and the batching and investigation guards self-gate away from it. A
25
+ // entries did — `AskUserQuestion` is matched for the rule guard's lane-child interactive-ask row,
26
+ // and the batching and investigation guards self-gate away from it. A
24
27
  // refusal from any guard wins first; only when none refuses is the batch guard's non-blocking notice
25
- // (the whole-file-write notice, joshuafolkken/kit#1848) emitted. Each guard still honours its own
28
+ // (the whole-file-write notice) emitted. Each guard still honours its own
26
29
  // switch (`JOSH_BATCH_GUARD` / `JOSH_INVESTIGATION_GUARD` / `JOSH_RULE_GUARD`) internally, so this
27
30
  // process needs no switch of its own.
28
31
 
@@ -44,7 +47,7 @@ function is_clear(outcome: GuardOutcome): boolean {
44
47
  }
45
48
 
46
49
  // The duplicate-read guard is `notice`-mode in a lane child, so it is the second guard that can raise a
47
- // non-refusal notice (joshuafolkken/kit#2298). Its notice is surfaced only where nothing else spoke —
50
+ // non-refusal notice. Its notice is surfaced only where nothing else spoke —
48
51
  // a refusal from any guard, or the batch guard's own notice, wins first.
49
52
  function with_duplicate_notice(combined: GuardOutcome, notice: string | undefined): GuardOutcome {
50
53
  if (notice === undefined || !is_clear(combined)) return combined
@@ -52,7 +55,7 @@ function with_duplicate_notice(combined: GuardOutcome, notice: string | undefine
52
55
  return { reason: undefined, notice, fault: undefined }
53
56
  }
54
57
 
55
- // The Step 0 reminder is the last word (joshuafolkken/kit#2994): asked only where every guard stayed
58
+ // The Step 0 reminder is the last word: asked only where every guard stayed
56
59
  // clear, so a refusal or another notice never spends its once-per-session stamp unseen.
57
60
  function with_step_zero_notice(outcome: GuardOutcome, raw_payload: string): GuardOutcome {
58
61
  if (!is_clear(outcome)) return outcome
@@ -81,15 +84,22 @@ function pretool_outcome(raw_payload: string): GuardOutcome {
81
84
  return with_step_zero_notice(guard_outcome(raw_payload), raw_payload)
82
85
  }
83
86
 
87
+ // The Step 0 notice fires once, on the first runtime-file edit: the moment a lane child's plan turns
88
+ // into code, which `run:board` draws as its `implement` phase. Both the Claude
89
+ // path and the Codex adapter call this on their final outcome, so neither runtime skips the phase.
90
+ async function mark_phase(outcome: GuardOutcome): Promise<void> {
91
+ if (outcome.notice === step_zero_notice.NOTICE) await lane_phase.mark_implement()
92
+ }
93
+
84
94
  // The watcher guard is the one composed rule that cannot answer synchronously — it reads the lane
85
- // registry and the watcher's life record off disk (joshuafolkken/kit#2353). So it is asked after the
95
+ // registry and the watcher's life record off disk. So it is asked after the
86
96
  // synchronous guards and only where they stayed clear: a refusal from any of them wins first, exactly
87
97
  // as `combine_outcomes` orders them, and the watcher's refusal fills a clear verdict rather than
88
98
  // overriding one. It fires once per run itself (`run-watcher-hook.ts`), so a stale watcher refuses the
89
99
  // first call but not the `pnpm josh run:progress --wait` that fixes it.
90
100
  //
91
- // **The parent hand-off guard is the second asynchronous rule, asked after the watcher's**
92
- // (joshuafolkken/kit#2947). It reads the carry record to tell the `backlogrun` parent apart, so it sits
101
+ // **The parent hand-off guard is the second asynchronous rule, asked after the watcher's**.
102
+ // It reads the carry record to tell the `backlogrun` parent apart, so it sits
93
103
  // beside the watcher rather than among the synchronous rows; a stale watcher is the cheaper fix and is
94
104
  // surfaced first.
95
105
  async function async_reason(raw_payload: string): Promise<string | undefined> {
@@ -107,7 +117,11 @@ async function pretool_outcome_async(raw_payload: string): Promise<GuardOutcome>
107
117
 
108
118
  if (reason !== undefined) return { reason, notice: undefined, fault: undefined }
109
119
 
110
- return with_step_zero_notice(base, raw_payload)
120
+ const outcome = with_step_zero_notice(base, raw_payload)
121
+
122
+ await mark_phase(outcome)
123
+
124
+ return outcome
111
125
  }
112
126
 
113
127
  function guarded_call(raw_payload: string): GuardedCall | undefined {
@@ -122,8 +136,13 @@ function guarded_call(raw_payload: string): GuardedCall | undefined {
122
136
  }
123
137
  }
124
138
 
125
- // The envelope that replaces the outcome's own when a lane child backgrounded `josh ship` alone
126
- // (joshuafolkken/kit#3154): the call is run in the foreground instead of being refused. A refusal from
139
+ // A rewrite's note first, so the transcript's context line opens with it; the outcome's notice after.
140
+ function rewrite_context(note: string, outcome: GuardOutcome): string {
141
+ return [note, outcome.notice ?? outcome.fault].filter(Boolean).join('\n\n')
142
+ }
143
+
144
+ // The envelope that replaces the outcome's own when a lane child backgrounded `josh ship` alone:
145
+ // the call is run in the foreground instead of being refused. A refusal from
127
146
  // any guard still wins, and a notice the outcome carried rides along in the same context.
128
147
  function foreground_rewrite(
129
148
  outcome: GuardOutcome,
@@ -138,19 +157,75 @@ function foreground_rewrite(
138
157
 
139
158
  if (input === undefined) return undefined
140
159
 
141
- const context = [lane_background.FOREGROUND_NOTE, outcome.notice ?? outcome.fault]
160
+ return hook_decision.rewrite_envelope(
161
+ input,
162
+ rewrite_context(lane_background.FOREGROUND_NOTE, outcome),
163
+ )
164
+ }
165
+
166
+ interface PipefailRewrite {
167
+ payload: string
168
+ input: Record<string, unknown>
169
+ }
170
+
171
+ // A piped josh check the hook runs under `set -o pipefail` instead of refusing it:
172
+ // the rewritten input, and the payload that carries it. The rewrite is the
173
+ // rule guard's delivery, so the rule guard's switch turns it off too.
174
+ function pipefail_rewrite(raw_payload: string): PipefailRewrite | undefined {
175
+ if (!delivered_rules.is_enabled()) return undefined
176
+
177
+ const call = guarded_call(raw_payload)
178
+ const input = call === undefined ? undefined : piped_verification.pipefail_input(call)
179
+ const payload = json_value.parse_or_undefined(raw_payload)
180
+
181
+ if (input === undefined || !json_value.is_record(payload)) return undefined
182
+
183
+ return { payload: JSON.stringify({ ...payload, tool_input: input }), input }
184
+ }
185
+
186
+ function pipefail_envelope(
187
+ outcome: GuardOutcome,
188
+ input: Record<string, unknown> | undefined,
189
+ ): string | undefined {
190
+ if (input === undefined || outcome.reason !== undefined) return undefined
142
191
 
143
- return hook_decision.rewrite_envelope(input, context.filter(Boolean).join('\n\n'))
192
+ return hook_decision.rewrite_envelope(
193
+ input,
194
+ rewrite_context(piped_verification.PIPEFAIL_NOTE, outcome),
195
+ )
144
196
  }
145
197
 
146
- // The hook's one write: the foreground rewrite where it applies, the outcome's own envelope otherwise.
147
- function emit(raw_payload: string, outcome: GuardOutcome): void {
148
- const rewrite = foreground_rewrite(outcome, raw_payload)
198
+ // The hook's one write: a rewrite where one applies, the outcome's own envelope otherwise.
199
+ function emit(
200
+ raw_payload: string,
201
+ outcome: GuardOutcome,
202
+ pipefail_input?: Record<string, unknown>,
203
+ ): void {
204
+ const rewrite =
205
+ pipefail_envelope(outcome, pipefail_input) ?? foreground_rewrite(outcome, raw_payload)
149
206
 
150
207
  if (rewrite === undefined) hook_decision.emit_outcome(outcome)
151
208
  else process.stdout.write(`${rewrite}\n`)
152
209
  }
153
210
 
154
- const pretool_guard = { combine_outcomes, emit, foreground_rewrite, pretool_outcome }
211
+ // **The guards judge the call that will run.** A rewritable piped check reaches every guard already
212
+ // prefixed, so the piped-verification row stays quiet on it while any other guard's refusal still wins
213
+ // over the rewrite. The Codex adapter cannot rewrite a call, so it goes on judging the call as typed.
214
+ async function respond(raw_payload: string): Promise<void> {
215
+ const pipefail = pipefail_rewrite(raw_payload)
216
+ const judged = pipefail?.payload ?? raw_payload
217
+
218
+ emit(judged, await pretool_outcome_async(judged), pipefail?.input)
219
+ }
220
+
221
+ const pretool_guard = {
222
+ combine_outcomes,
223
+ emit,
224
+ foreground_rewrite,
225
+ mark_phase,
226
+ pipefail_rewrite,
227
+ pretool_outcome,
228
+ respond,
229
+ }
155
230
 
156
231
  export { pretool_guard, pretool_outcome, pretool_outcome_async }
@@ -4,7 +4,7 @@ import { core_budget } from '#scripts/gate/core-budget'
4
4
  import { unit_worker_share } from '#scripts/test/unit-worker-share'
5
5
  import { execa } from 'execa'
6
6
 
7
- // Runs a command while holding a place in the machine-wide core budget (joshuafolkken/kit#2351).
7
+ // Runs a command while holding a place in the machine-wide core budget.
8
8
  //
9
9
  // **The pre-push hook's `pnpm install` and `pnpm josh audit` are heavy and were outside the ledger.**
10
10
  // The gate's checks reserve their cores, but a lefthook `pre-push` fires `pnpm install` on every push
@@ -70,7 +70,7 @@ async function run_reserved(argv: ReadonlyArray<string>): Promise<number> {
70
70
  }
71
71
 
72
72
  // **A command already inside a gate's unit suite takes no place, for the reason a nested gate does
73
- // not** (joshuafolkken/kit#2351): this repository's own gate tests exercise the wrapper, and a place
73
+ // not**: this repository's own gate tests exercise the wrapper, and a place
74
74
  // claimed there would wait on cores the outer gate is holding. In its real use — the pre-push hook —
75
75
  // nothing has set the marker, so the reservation is taken.
76
76
  if (unit_worker_share.is_nested_run()) return await run_command(parsed.command)
@@ -4,7 +4,7 @@ import { json_value } from '#scripts/lib/json-value'
4
4
  import { test_declared_logic } from '#scripts/test/test-declared-logic'
5
5
 
6
6
  // The Code Change Rules Step 0 reminder, delivered at the moment implementation code is about to be
7
- // written rather than on every prompt (joshuafolkken/kit#2994). As a `UserPromptSubmit` echo it was
7
+ // written rather than on every prompt. As a `UserPromptSubmit` echo it was
8
8
  // injected into every turn — a question that writes nothing included — and re-read as accumulated
9
9
  // context on each turn after it. The trigger the rule names is "before writing any implementation
10
10
  // code", so the hook that delivers it is the one that sees that write: the first `Edit` / `Write` of a
@@ -23,7 +23,7 @@ import { run_stranded_detect } from '#scripts/run/run-stranded-detect'
23
23
  import { time_density_hook } from '#scripts/time-runtime/time-density-hook'
24
24
  import { time_hook_transcript } from '#scripts/time-runtime/time-hook-transcript'
25
25
 
26
- // The `Stop` hook entry: one process that delivers the three stop-time rules (joshuafolkken/kit#2121).
26
+ // The `Stop` hook entry: one process that delivers the three stop-time rules.
27
27
  // It is the stop-time counterpart of `pretool-guard.ts` — a second entry on the same `hook_decision`
28
28
  // foundation, not a second copy of it.
29
29
  //
@@ -33,8 +33,8 @@ import { time_hook_transcript } from '#scripts/time-runtime/time-hook-transcript
33
33
  // resolving (send the notify, release the hold) and `stop_hook_active` is the backstop, so failing
34
34
  // open here costs at most a missed nudge, never a stuck run.
35
35
 
36
- // The hold record for this working tree is still in place, and whether it is a `prrun` stop's
37
- // (joshuafolkken/kit#3023). `unreadable` reads as absent: the safe direction for a stop guard is not to
36
+ // The hold record for this working tree is still in place, and whether it is a `prrun` stop's.
37
+ // `unreadable` reads as absent: the safe direction for a stop guard is not to
38
38
  // block, and an unreadable record is not proof a run is holding.
39
39
  async function hold_facts(): Promise<Pick<StopContext, 'hold_present' | 'prrun_stopped'>> {
40
40
  const directory = await run_hold.worktree_directory()
@@ -65,6 +65,19 @@ function session_lang(): string {
65
65
  return session_language.resolve_session_lang().lang
66
66
  }
67
67
 
68
+ // Which session this is — a headless parent, a lane child, a kit-launched agent, the `backlogrun`
69
+ // parent — the facts that say whether a person is there to answer.
70
+ async function session_role_facts(): Promise<
71
+ Pick<StopContext, 'backlog_parent' | 'headless_agent' | 'headless_waiting' | 'lane_child'>
72
+ > {
73
+ return {
74
+ headless_waiting: await run_headless.must_keep_waiting(),
75
+ lane_child: lane_child_marker.is_child_of(process.cwd()),
76
+ headless_agent: agent_headless.is_headless(),
77
+ backlog_parent: await run_headless.is_backlog_parent(),
78
+ }
79
+ }
80
+
68
81
  async function build_context(
69
82
  transcript_path: string,
70
83
  payload_tail: { stop_hook_active: boolean; message: string },
@@ -81,14 +94,12 @@ async function build_context(
81
94
  cut_pending: run_cut.carried_cut_sync() !== undefined,
82
95
  filed: was_filed(tail),
83
96
  session_owner: repo_party.current_owner(),
84
- headless_waiting: await run_headless.must_keep_waiting(),
97
+ ...(await session_role_facts()),
85
98
  headless_refusals: stop_rules.count_headless_refusals(tail),
86
- lane_child: lane_child_marker.is_child_of(process.cwd()),
87
99
  background_pending: lane_background.pending_background_ids(tail).length > 0,
88
100
  agent_pending: lane_background.pending_agent_ids(tail).length > 0,
89
101
  handed_off: lane_handoff.is_handed_off(process.cwd()),
90
102
  session_lang: session_lang(),
91
- headless_agent: agent_headless.is_headless(),
92
103
  }
93
104
  }
94
105
 
@@ -117,7 +128,7 @@ async function outcome_of(raw_payload: string): Promise<StopOutcome> {
117
128
  // a carried run: the strand judge reads this very record and returns on anything but `carried`, and a
118
129
  // stall needs a backlog driver, which begins one before its plan. A spent (`expired`) or `unreadable`
119
130
  // record a crashed run left behind is no run either, so it does not re-arm the stall's backlog probe
120
- // on every stop (joshuafolkken/kit#2995).
131
+ // on every stop.
121
132
  // A failed git read — outside a repository, `git rev-parse` exits non-zero — reads as no run, since this
122
133
  // gate sits ahead of the checks' own swallowing and must not throw into the stop decision either.
123
134
  async function has_run_record(): Promise<boolean> {
@@ -133,8 +144,8 @@ async function has_run_record(): Promise<boolean> {
133
144
  }
134
145
 
135
146
  // The stall check rides the Stop hook because the stop *is* the loop boundary: a run alive but not
136
- // advancing ends turns without dispatching (joshuafolkken/kit#2359). The strand check rides the same
137
- // boundary and is the step before the stall (joshuafolkken/kit#2375): it fires when the driver is gone
147
+ // advancing ends turns without dispatching. The strand check rides the same
148
+ // boundary and is the step before the stall: it fires when the driver is gone
138
149
  // — the budget handed off, the owner dead, no supervisor watching. Both only report and swallow their
139
150
  // own failures, so neither can change the stop decision. An ordinary stop with no run record skips
140
151
  // both, so it pays one directory read rather than their reads and a stale stream's backlog probe.
@@ -146,7 +157,7 @@ async function run_report_checks(): Promise<void> {
146
157
  }
147
158
 
148
159
  // Nothing reaches stdout on an ordinary stop, so what the harness parses stays empty unless the stop
149
- // is being held — all three rules block, so a bare `#N` is reported the same way (joshuafolkken/kit#2247).
160
+ // is being held — all three rules block, so a bare `#N` is reported the same way.
150
161
  async function write_stop_decision(raw_payload: string): Promise<void> {
151
162
  hook_decision.load_environment_file()
152
163
  await run_report_checks()
@@ -1,5 +1,5 @@
1
- // The two references `josh init` writes into a basic project, under the paths they had before
2
- // joshuafolkken/kit#2829 renamed the static profile. kit still ships both old paths so an earlier
1
+ // The two references `josh init` writes into a basic project, under the paths they had while the
2
+ // basic profile was named static. kit still ships both old paths so an earlier
3
3
  // project keeps working; re-running `josh init` moves the project onto the new ones, which is what
4
4
  // lets the old paths be retired once projects have moved.
5
5
  const RENAMED_REFERENCES: ReadonlyArray<readonly [RegExp, string]> = [
@@ -2,8 +2,8 @@ import { patch_json_key } from '#scripts/config-merge/patch-json-key'
2
2
  import { claude_plugin_config } from './claude-plugin-config'
3
3
 
4
4
  // Keys kit's own `.claude/settings.json` sets for its sessions but never ships. `enableArtifact:
5
- // false` keeps the Artifact tool's ~12k tokens out of every call of a kit run
6
- // (joshuafolkken/kit#3140), but Claude Code lets any layer that sets it to `false` win, so a
5
+ // false` keeps the Artifact tool's ~12k tokens out of every call of a kit run,
6
+ // but Claude Code lets any layer that sets it to `false` win, so a
7
7
  // consumer given it could not turn the tool back on from `.claude/settings.local.json`.
8
8
  const KIT_ONLY_SETTING_KEYS: ReadonlyArray<string> = ['enableArtifact']
9
9
 
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
2
  import { init_logic_json_merge } from './init-logic-json-merge'
3
3
 
4
- // The Claude Code plugin that ships kit's distributed skills (joshuafolkken/kit#1879). A consumer no
4
+ // The Claude Code plugin that ships kit's distributed skills. A consumer no
5
5
  // longer receives the five skill directories as a byte copy under its own `.claude/skills/`; it
6
6
  // receives this marketplace and plugin declaration in its `.claude/settings.json`, and the skills
7
7
  // load from the package as `kit:<name>`.
@@ -16,7 +16,7 @@ const CLAUDE_SETTINGS_DESTINATION = path.join('.claude', 'settings.json')
16
16
  // `enabledPlugins` declares the plugin; `extraKnownMarketplaces` says where to find it. Nothing needs
17
17
  // installing: in a trusted workspace Claude Code registers the marketplace from this declaration and
18
18
  // loads the skills — an interactive session from its first session, a headless one (`claude -p`) from
19
- // its second (joshuafolkken/kit#2990).
19
+ // its second.
20
20
  const PLUGIN_SETTINGS: Record<string, unknown> = {
21
21
  extraKnownMarketplaces: {
22
22
  [MARKETPLACE_NAME]: { source: { source: 'directory', path: MARKETPLACE_PATH } },
@@ -1,5 +1,5 @@
1
1
  // The path transform that makes kit's distributed AI documents resolve in a consumer, and the
2
- // one-line CLAUDE.md import that replaces the old byte-copy (joshuafolkken/kit#1878). Applied at
2
+ // one-line CLAUDE.md import that replaces the old byte-copy. Applied at
3
3
  // publish time to CLAUDE.md (scripts/build/build-claude-md.ts) and at copy time to the pointer files kit
4
4
  // still ships whole (AGENTS.md / GEMINI.md / .cursorrules, via init-copy-content.ts).
5
5
 
@@ -28,7 +28,7 @@ const CLAUDE_MD_BOOTSTRAP =
28
28
  // A span containing `*` is excluded: it is a **glob**, not a reference to a file a consumer can
29
29
  // open. A distributed document that writes a directory set as `prompts/**` means "anything beneath
30
30
  // it", and rewriting that to `node_modules/@joshuafolkken/kit/prompts/**` would print a path that can
31
- // never appear in a consumer's diff and is not what the set matches (joshuafolkken/kit#907).
31
+ // never appear in a consumer's diff and is not what the set matches.
32
32
  function transform_prompt_paths(content: string): string {
33
33
  return content.replaceAll(
34
34
  /`prompts\/([^`*]+)`/gu,
@@ -97,8 +97,8 @@ function ensure_claude_md_import(existing: string | undefined): string {
97
97
  return `${CLAUDE_MD_BOOTSTRAP}\n\n${CLAUDE_MD_IMPORT_LINE}\n\n${updated}`
98
98
  }
99
99
 
100
- // The lines `ensure_claude_md_import` writes. A basic project imports other rules, so a sync from
101
- // before joshuafolkken/kit#2827, or a switch from full, leaves these behind for it to remove.
100
+ // The lines `ensure_claude_md_import` writes. A basic project imports other rules, so an older sync,
101
+ // or a switch from full, leaves these behind for it to remove.
102
102
  const FULL_CLAUDE_MD_LINES = new Set([
103
103
  CLAUDE_MD_BOOTSTRAP,
104
104
  OLD_CLAUDE_MD_BOOTSTRAP,
@@ -2,9 +2,9 @@ import { claude_plugin_config } from './claude-plugin-config'
2
2
  import { hook_launch } from './hook-launch'
3
3
 
4
4
  // The consumer's `.claude/settings.json` runs its hooks off the published package directly, not
5
- // through `pnpm josh` (joshuafolkken/kit#1930, joshuafolkken/kit#2023). Two paths inside a hook
6
- // command are rebased onto the installed package: the hook launcher `scripts/hooks/run-hook.sh`
7
- // (joshuafolkken/kit#3184), which picks the bundle or the dispatcher from where it is installed, and a
5
+ // through `pnpm josh`. Two paths inside a hook
6
+ // command are rebased onto the installed package: the hook launcher `scripts/hooks/run-hook.sh`,
7
+ // which picks the bundle or the dispatcher from where it is installed, and a
8
8
  // plain `pnpm josh <command>`, which becomes the `dist/josh.js` dispatcher — the published package
9
9
  // always ships `dist`, and a `pnpm` launch would only add the wrapper this exists to remove.
10
10
  //