@joshuafolkken/kit 1.1240.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +29 -47
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +42 -10
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
  51. package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
  52. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
  53. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
  57. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
  60. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  61. package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
  62. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  63. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +216 -202
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +281 -94
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +16 -10
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +26 -2
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +20 -6
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cspell-cached.ts +1 -1
  560. package/scripts/lint/cycle-recheck.ts +122 -0
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +34 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +5 -6
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +25 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +13 -15
  801. package/scripts/run/run-step.ts +58 -47
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -2,13 +2,12 @@ import type { FileMapStamp } from '#scripts/josh/file-map-stamp'
2
2
  import { review_brief } from '#scripts/review/review-brief'
3
3
  import { review_stamps } from '#scripts/review/review-stamps'
4
4
 
5
- // Whether `josh gate` already has the answer it is about to spend 47–50 seconds computing again
6
- // (joshuafolkken/kit#1328).
5
+ // Whether `josh gate` already has the answer it is about to spend 47–50 seconds computing again.
7
6
  //
8
- // The record has existed since joshuafolkken/kit#1241: `record_green_gate` writes the digest of every
9
- // changed file the four checks were green on, and `josh review:brief` reads it back to print
10
- // `Already verified`. The gate itself never read it, so a second run over an unedited tree started
11
- // four processes to reach a conclusion already on disk. **This is reuse of a result, not a check
7
+ // `record_green_gate` writes the digest of every changed file the four checks were green on, and
8
+ // `josh review:brief` reads it back to print `Already verified`. The gate reads it too, so a second
9
+ // run over an unedited tree does not start four processes to reach a conclusion already on disk.
10
+ // **This is reuse of a result, not a check
12
11
  // dropped**: the bytes the skip answers for are the bytes the record was written from, compared one
13
12
  // by one.
14
13
  //
@@ -17,8 +16,7 @@ import { review_stamps } from '#scripts/review/review-stamps'
17
16
  // differently from the brief printed beside it would be two commands disagreeing about the same tree.
18
17
  //
19
18
  // **A file map does not describe a tree on its own, because it is a diff.** It lists what differs
20
- // from the commit the branch was cut from — its merge base with the default branch since
21
- // joshuafolkken/kit#1527 — so everything the record says stays true while that base moves underneath
19
+ // from the commit the branch was cut from — its merge base with the default branch — so everything the record says stays true while that base moves underneath
22
20
  // it. Two shapes of that, one obvious and one not:
23
21
  //
24
22
  // - Straight after `git switch main && git pull` the map is **empty**, and an empty map compares
@@ -29,8 +27,8 @@ import { review_stamps } from '#scripts/review/review-stamps'
29
27
  // every other file has been replaced by code no check has read. The rebase moves `HEAD`, so it
30
28
  // moves the merge base with it, and the base check still catches this.
31
29
  //
32
- // **What no longer refuses a reuse is another lane merging into the shared default branch**
33
- // (joshuafolkken/kit#1527). In a linked work tree the default branch's ref is shared, but the merge
30
+ // **What no longer refuses a reuse is another lane merging into the shared default branch**.
31
+ // In a linked work tree the default branch's ref is shared, but the merge
34
32
  // base is a commit: an advance this branch is an ancestor of does not move it, and nothing this
35
33
  // checkout's four checks read has changed — so refusing there would have discarded a record that
36
34
  // still describes the tree exactly.
@@ -40,7 +38,7 @@ import { review_stamps } from '#scripts/review/review-stamps'
40
38
  // worth the argument: a tree with no changed file is not where a run spends its gate time.
41
39
  //
42
40
  // Two refusals need no code here. A gate that went red writes no record at all, so the re-verification
43
- // after a fix finds nothing to reuse; and joshuafolkken/kit#1261's join before the commit follows a
41
+ // after a fix finds nothing to reuse; and the join before the commit follows a
44
42
  // `josh bump`, which edits `package.json` into the map.
45
43
  //
46
44
  // **What is reused is a silent green run.** `record_green_gate` withholds the record from a run that
@@ -61,7 +59,7 @@ const FORCE_FLAG = '--force'
61
59
  // A `base` that could not be read is `undefined`, and an older record carries none: both compare
62
60
  // unequal to anything, so the gate runs its checks. No base means no reuse, never reuse without one.
63
61
  //
64
- // **A refusal carries its reason** (joshuafolkken/kit#3307): a pre-push hook that fell back to the
62
+ // **A refusal carries its reason**: a pre-push hook that fell back to the
65
63
  // whole unit suite said nothing about why, so a merge base moved by ship's main sync and a lock file
66
64
  // rewritten by the hook's own install each cost minutes before anyone could tell them apart.
67
65
  type GateReuse = { stamp: FileMapStamp } | { miss: string }
@@ -103,7 +101,7 @@ function reusable_green_gate(
103
101
  // goes on to a commit on the strength of it. So the line says what passed, on which tree and when,
104
102
  // and names the flag or the variable that runs the checks anyway.
105
103
  //
106
- // **One sentence, every reader of the record** (joshuafolkken/kit#1381). The gate says it, the
104
+ // **One sentence, every reader of the record**. The gate says it, the
107
105
  // pre-push hook says it and the pre-commit hook says it, and three copies of a claim this load-bearing
108
106
  // would not have stayed the same sentence — the clone `CLAUDE.md` prohibits. What differs between them
109
107
  // is four fragments and nothing else, so those are the parameters and the shape is not.
@@ -13,6 +13,10 @@ function unit_worker_args(check: GateCheck, plan: GatePlan): ReadonlyArray<strin
13
13
  return [`${UNIT_WORKER_FLAG}=${String(plan.unit_worker_cap)}`]
14
14
  }
15
15
 
16
+ function check_args(check: GateCheck, plan: GatePlan): ReadonlyArray<string> {
17
+ return [...(check.args ?? []), ...unit_worker_args(check, plan)]
18
+ }
19
+
16
20
  // Resolve the type checker per project and run every static check from its package root.
17
21
  async function build_gate_step(
18
22
  check: GateCheck,
@@ -26,7 +30,7 @@ async function build_gate_step(
26
30
  if (check.label !== TYPE_CHECK_LABEL) {
27
31
  return {
28
32
  label: check.label,
29
- command_args: [JOSH, check.target, ...unit_worker_args(check, plan)],
33
+ command_args: [JOSH, check.target, ...check_args(check, plan)],
30
34
  cwd,
31
35
  }
32
36
  }
@@ -2,12 +2,11 @@ import { change_base } from '#scripts/git/change-base'
2
2
  import { review_tree } from '#scripts/review/review-tree'
3
3
 
4
4
  // The two readings a green-gate record is written from and compared against: the digest of every
5
- // changed file, and the commit that map is a diff against (joshuafolkken/kit#1241,
6
- // joshuafolkken/kit#1328).
5
+ // changed file, and the commit that map is a diff against.
7
6
  //
8
7
  // They live here rather than inside `verification-gate.ts` because there are now two readers — the
9
8
  // gate, which reuses a green record instead of re-running its four checks, and the pre-push hook,
10
- // which reuses the same record instead of re-running the unit suite (joshuafolkken/kit#1334). A
9
+ // which reuses the same record instead of re-running the unit suite. A
11
10
  // second copy of the pair would be the clone `CLAUDE.md` prohibits, and it would not have stayed
12
11
  // identical: what these functions really encode is which failure direction is safe, and a copy is
13
12
  // where that decision gets made twice.
@@ -30,7 +29,7 @@ async function read_changed_files(): Promise<Record<string, string>> {
30
29
  }
31
30
  }
32
31
 
33
- // The resolver lives in `git/change-base.ts` since joshuafolkken/kit#1537, because the review brief
32
+ // The resolver lives in `git/change-base.ts`, because the review brief
34
33
  // needs exactly this reading and a second copy of it is the clone `CLAUDE.md` prohibits.
35
34
  async function read_base(): Promise<string | undefined> {
36
35
  return await change_base.resolved()
@@ -4,13 +4,13 @@ import { gate_skip, type GateReuse } from './gate-skip'
4
4
  import type { GateTree } from './gate-tree'
5
5
 
6
6
  // What the two git hooks share when they decline to re-run a check `pnpm josh gate` already passed on
7
- // this tree (joshuafolkken/kit#1381).
7
+ // this tree.
8
8
  //
9
- // The pre-push hook got this behavior first (joshuafolkken/kit#1334) and the pre-commit type check is
9
+ // The pre-push hook got this behavior first and the pre-commit type check is
10
10
  // the second reader of the same record. Everything that is the same in both lives here rather than in
11
11
  // each of them: the escape hatch, the pre-filter in front of the record, and the one `git status`
12
12
  // reading both narrow themselves from. **The record comparison itself is not here either** — it is
13
- // `gate_skip.reusable_green_gate`, joshuafolkken/kit#1328's, so a hook cannot answer "is this tree
13
+ // `gate_skip.reusable_green_gate`, so a hook cannot answer "is this tree
14
14
  // still the recorded one" differently from the gate printing its answer beside it.
15
15
  //
16
16
  // **Every condition added here only ever narrows.** The gate's own three — the file map matches, the
@@ -19,7 +19,7 @@ import type { GateTree } from './gate-tree'
19
19
  // git operation is about to carry. Where the two can differ, the hook runs the check. Any reading that
20
20
  // could not be taken fails the same way: "we could not tell" must never resolve to "no need to check".
21
21
 
22
- // The `josh` targets that decline a check on the strength of this record (joshuafolkken/kit#1786).
22
+ // The `josh` targets that decline a check on the strength of this record.
23
23
  //
24
24
  // **It is declared beside the mechanism rather than beside the reader.** `josh layers` reports which
25
25
  // checks run in more than one layer, and two of the rows it prints are not the repetition they look
@@ -51,13 +51,13 @@ function is_force_requested(force_environment: string): boolean {
51
51
  // `undefined` rather than an empty list when the reading failed, so a caller cannot mistake "git said
52
52
  // nothing" for "git could not be asked". Every predicate below treats the two differently.
53
53
  //
54
- // **The observation ledger is dropped from the reading, and it is the one line that may be**
55
- // (joshuafolkken/kit#1756). Lines are appended throughout a run — a review's record lands after its
54
+ // **The observation ledger is dropped from the reading, and it is the one line that may be**.
55
+ // Lines are appended throughout a run — a review's record lands after its
56
56
  // gate — and every condition below reads a non-empty status as "this operation carries a tree no
57
57
  // check has read". Left in, one ledger line would send every commit and every push in the primary
58
58
  // checkout back to the full gate, which is the reuse this module exists to grant. **Dropping it is
59
59
  // sound because the ledger is no code any check runs**: `pnpm josh git` stages it with the run's
60
- // commit only after its grammar has been parsed (joshuafolkken/kit#2763), and the rest of its content
60
+ // commit only after its grammar has been parsed, and the rest of its content
61
61
  // is checked by the CI of the pull request that carries it.
62
62
  async function read_status_lines(): Promise<ReadonlyArray<string> | undefined> {
63
63
  try {
@@ -93,7 +93,7 @@ interface HookReuse {
93
93
  // The hook-specific narrowing: whether what this git operation carries is the tree the record
94
94
  // describes. `is_worktree_clean` for a push, `is_index_matching_worktree` for a commit.
95
95
  is_tree_carried: boolean
96
- // The reason a refusal on that narrowing reports, in the hook's own words (joshuafolkken/kit#3307).
96
+ // The reason a refusal on that narrowing reports, in the hook's own words.
97
97
  carry_miss: string
98
98
  extra_arguments: ReadonlyArray<string>
99
99
  force_env: string
@@ -105,7 +105,7 @@ interface HookReuse {
105
105
 
106
106
  // The stamp rather than a boolean, for the same reason `gate_skip.gate_reuse` hands one back: the
107
107
  // caller prints `taken_at`, and a record that does not describe this tree has no timestamp worth
108
- // printing. A refusal carries its reason instead (joshuafolkken/kit#3307).
108
+ // printing. A refusal carries its reason instead.
109
109
  //
110
110
  // **Any argument at all refuses the reuse**, not only the force flag. A caller who narrowed the run
111
111
  // asked for that run rather than for a recorded result about a whole tree, and a hook's own line passes
@@ -1,8 +1,9 @@
1
1
  import { readFile } from 'node:fs/promises'
2
2
  import { availableParallelism, cpus, totalmem } from 'node:os'
3
+ import { PROBE_TIMEOUT_MS } from '#scripts/lib/timeouts'
3
4
  import { execa } from 'execa'
4
5
 
5
- // What the machine has free right now, read for the core budget's admission (joshuafolkken/kit#3371).
6
+ // What the machine has free right now, read for the core budget's admission.
6
7
  //
7
8
  // **The budget used to be the core count, and that count is not what is free.** The ledger in
8
9
  // `core-budget.ts` admits against `availableParallelism()`, so the load it never sees — Claude sessions,
@@ -10,8 +11,8 @@ import { execa } from 'execa'
10
11
  // spent. On 2026-10-07, three lanes on the 11-core / 18 GB machine reached a load average of 16.8 with
11
12
  // 31% of the CPU in the kernel, compressing and swapping 4.4 GB of memory the ledger never counted.
12
13
  //
13
- // **This is a closed loop, not the open-loop formula joshuafolkken/kit#1637 rejected.** That proposal
14
- // derived a share from the core count up front; this reads what is busy and free at the moment of
14
+ // **This is a closed loop, not an open-loop formula.** An open loop would derive a share from the
15
+ // core count up front; this reads what is busy and free at the moment of
15
16
  // admission and subtracts only the part the ledger does not already account for.
16
17
  //
17
18
  // **The busy cores are the CPU-time difference over a short window, not the load average.** The load
@@ -21,6 +22,11 @@ import { execa } from 'execa'
21
22
  // **A reading that fails answers undefined, and undefined is the old behavior.** A CI runner or a
22
23
  // container — where the host's CPU times are not this process's quota — budgets by the core count and
23
24
  // admits without looking at memory, exactly as before.
25
+ //
26
+ // **`run:board` draws its machine gauges from the same reading**, so what the
27
+ // board shows a person is what the gate admits against. The board takes a sample with no window and
28
+ // draws the difference from its previous one. `lane:sample` records the memory half of it, so the
29
+ // lane-limit measurement sets the same figures beside the lane count.
24
30
 
25
31
  // The window the busy cores are measured over: long enough that one scheduler tick does not dominate it,
26
32
  // short enough that a solo admission is not visibly delayed.
@@ -35,18 +41,40 @@ const BYTES_PER_MB = 1_048_576
35
41
  const KB_PER_MB = 1024
36
42
  const PERCENT = 100
37
43
  const MEMINFO_PATH = '/proc/meminfo'
44
+ const VMSTAT_PATH = '/proc/vmstat'
38
45
  const LINUX_AVAILABLE = /^MemAvailable:\s+(?<kb>\d+) kB/mu
39
- // The kernel's own memory-pressure figure: the percentage of memory still available, compressible and
40
- // purgeable pages included — what `os.freemem()` leaves out on macOS, where it reads near zero on a
41
- // machine with gigabytes to spare.
42
- const PRESSURE_ARGUMENTS = ['-n', 'kern.memorystatus_level']
43
- const PRESSURE_LEVEL = /^\s*(?<level>\d+)\s*$/u
46
+ const LINUX_SWAP_IN = /^pswpin (?<pages>\d+)$/mu
47
+ const LINUX_SWAP_OUT = /^pswpout (?<pages>\d+)$/mu
48
+ const PAGE_SIZE_ARGUMENTS = ['PAGESIZE']
49
+ // The whole memory reading in one `sysctl`, cheap enough for `run:board` to take
50
+ // every second. `kern.memorystatus_level` is the kernel's own memory-pressure figure: the percentage of
51
+ // memory still available, compressible and purgeable pages included — what `os.freemem()` leaves out on
52
+ // macOS, where it reads near zero on a machine with gigabytes to spare. The swapper counters are the
53
+ // pages swapped in and out since boot, `vm_stat`'s `Swapins` / `Swapouts`. The names stay in the output
54
+ // (no `-n`), so a name an older macOS lacks drops only its own line.
55
+ const LEVEL_NAME = 'kern.memorystatus_level'
56
+ const SWAP_IN_NAME = 'vm.compressor.swapper.swapins_total'
57
+ const SWAP_OUT_NAME = 'vm.compressor.swapper.swapouts_total'
58
+ const PAGE_SIZE_NAME = 'hw.pagesize'
59
+ // The kernel's memory-pressure verdict — 1 normal, 2 warning, 4 critical — the one Activity Monitor
60
+ // colors its "memory pressure" graph by.
61
+ const PRESSURE_NAME = 'kern.memorystatus_vm_pressure_level'
62
+ const SYSCTL_ARGUMENTS = [LEVEL_NAME, SWAP_IN_NAME, SWAP_OUT_NAME, PAGE_SIZE_NAME, PRESSURE_NAME]
63
+ const SYSCTL_LINE = /^(?<name>[\w.]+): (?<value>\d+)$/gmu
44
64
 
45
65
  interface MachineReading {
46
66
  busy_cores: number | undefined
47
67
  available_mb: number | undefined
48
68
  }
49
69
 
70
+ // The memory half of a reading. `swapped_mb` is a counter — every page swapped in or out since boot —
71
+ // so a rate is the difference between two readings. `pressure_level` is read on macOS only.
72
+ interface MemoryReading {
73
+ available_mb: number | undefined
74
+ swapped_mb: number | undefined
75
+ pressure_level: number | undefined
76
+ }
77
+
50
78
  // What the ledger's admitted reservations declare — the part of the machine's load already accounted for.
51
79
  interface LedgerLoad {
52
80
  cores: number
@@ -63,6 +91,13 @@ interface CpuTimes {
63
91
  total: number
64
92
  }
65
93
 
94
+ // One moment of the machine for `run:board`: CPU times and the memory reading, no window waited out.
95
+ interface MachineSample {
96
+ cpu: CpuTimes
97
+ memory: MemoryReading
98
+ total_mb: number
99
+ }
100
+
66
101
  function cpu_times(): CpuTimes {
67
102
  let busy = 0
68
103
  let idle = 0
@@ -75,21 +110,65 @@ function cpu_times(): CpuTimes {
75
110
  return { busy, total: busy + idle }
76
111
  }
77
112
 
78
- function busy_cores_between(before: CpuTimes, after: CpuTimes, cores: number): number | undefined {
113
+ // The busy share of the CPU between two readings, from 0 to 1.
114
+ function busy_share_between(before: CpuTimes, after: CpuTimes): number | undefined {
79
115
  const total = after.total - before.total
80
116
 
81
117
  if (total <= 0) return undefined
82
118
 
83
- return ((after.busy - before.busy) / total) * cores
119
+ return (after.busy - before.busy) / total
120
+ }
121
+
122
+ function busy_cores_between(before: CpuTimes, after: CpuTimes, cores: number): number | undefined {
123
+ const share = busy_share_between(before, after)
124
+
125
+ return share === undefined ? undefined : share * cores
126
+ }
127
+
128
+ function sysctl_values(output: string): Map<string, number> {
129
+ const values = [...output.matchAll(SYSCTL_LINE)].map(
130
+ (match) => [match.groups?.['name'] ?? '', Number(match.groups?.['value'])] as const,
131
+ )
132
+
133
+ return new Map(values)
134
+ }
135
+
136
+ // The pages swapped in and out since boot; either count unread leaves the sum unread.
137
+ function swapped_pages(
138
+ pages_in: number | undefined,
139
+ pages_out: number | undefined,
140
+ ): number | undefined {
141
+ return pages_in === undefined || pages_out === undefined ? undefined : pages_in + pages_out
142
+ }
143
+
144
+ function swapped_mb(pages: number | undefined, page_bytes: number | undefined): number | undefined {
145
+ if (pages === undefined || page_bytes === undefined) return undefined
146
+
147
+ return (pages * page_bytes) / BYTES_PER_MB
84
148
  }
85
149
 
86
- // `kern.memorystatus_level` → `58`: the share of physical memory still available, as a percentage.
87
- function parse_darwin_pressure(output: string, total_bytes: number): number | undefined {
88
- const level = PRESSURE_LEVEL.exec(output)?.groups?.['level']
150
+ // What was swapped between two readings of the counter. A counter that went back — a reboot between
151
+ // them — is read as nothing swapped.
152
+ function swapped_between(from: number | undefined, to: number | undefined): number | undefined {
153
+ if (from === undefined || to === undefined) return undefined
154
+
155
+ return Math.max(0, to - from)
156
+ }
89
157
 
90
- if (level === undefined) return undefined
158
+ // `kern.memorystatus_level: 58` → 58% of physical memory still available, beside the swapped pages.
159
+ function parse_darwin_memory(output: string, total_bytes: number): MemoryReading {
160
+ const values = sysctl_values(output)
161
+ const level = values.get(LEVEL_NAME)
91
162
 
92
- return (Number(level) / PERCENT) * (total_bytes / BYTES_PER_MB)
163
+ return {
164
+ available_mb:
165
+ level === undefined ? undefined : (level / PERCENT) * (total_bytes / BYTES_PER_MB),
166
+ swapped_mb: swapped_mb(
167
+ swapped_pages(values.get(SWAP_IN_NAME), values.get(SWAP_OUT_NAME)),
168
+ values.get(PAGE_SIZE_NAME),
169
+ ),
170
+ pressure_level: values.get(PRESSURE_NAME),
171
+ }
93
172
  }
94
173
 
95
174
  function parse_linux_available(meminfo: string): number | undefined {
@@ -98,24 +177,73 @@ function parse_linux_available(meminfo: string): number | undefined {
98
177
  return kb === undefined ? undefined : Number(kb) / KB_PER_MB
99
178
  }
100
179
 
101
- async function read_available_mb(
102
- platform: NodeJS.Platform = process.platform,
103
- ): Promise<number | undefined> {
104
- try {
105
- if (platform === 'darwin') {
106
- const { stdout } = await execa('sysctl', PRESSURE_ARGUMENTS)
180
+ function pages_of(pattern: RegExp, vmstat: string): number | undefined {
181
+ const pages = pattern.exec(vmstat)?.groups?.['pages']
107
182
 
108
- return parse_darwin_pressure(stdout, totalmem())
109
- }
183
+ return pages === undefined ? undefined : Number(pages)
184
+ }
185
+
186
+ // `pswpin` and `pswpout` in `/proc/vmstat` are the pages swapped in and out since boot.
187
+ function parse_linux_swapped(vmstat: string, page_bytes: number): number | undefined {
188
+ const pages = swapped_pages(pages_of(LINUX_SWAP_IN, vmstat), pages_of(LINUX_SWAP_OUT, vmstat))
189
+
190
+ return swapped_mb(pages, page_bytes)
191
+ }
110
192
 
111
- return platform === 'linux'
112
- ? parse_linux_available(await readFile(MEMINFO_PATH, 'utf8'))
113
- : undefined
193
+ async function settled<T>(read: () => Promise<T>): Promise<T | undefined> {
194
+ try {
195
+ return await read()
114
196
  } catch {
115
197
  return undefined
116
198
  }
117
199
  }
118
200
 
201
+ // A name `sysctl` does not know fails the command but still prints the others, so the exit is not read.
202
+ async function read_darwin_memory(): Promise<MemoryReading> {
203
+ const { stdout } = await execa('sysctl', SYSCTL_ARGUMENTS, {
204
+ reject: false,
205
+ timeout: PROBE_TIMEOUT_MS,
206
+ })
207
+
208
+ return parse_darwin_memory(stdout, totalmem())
209
+ }
210
+
211
+ async function read_page_size(): Promise<string> {
212
+ const { stdout } = await execa('getconf', PAGE_SIZE_ARGUMENTS, { timeout: PROBE_TIMEOUT_MS })
213
+
214
+ return stdout
215
+ }
216
+
217
+ async function read_linux_memory(): Promise<MemoryReading> {
218
+ const [meminfo, vmstat, page_size] = await Promise.all([
219
+ settled(async () => await readFile(MEMINFO_PATH, 'utf8')),
220
+ settled(async () => await readFile(VMSTAT_PATH, 'utf8')),
221
+ settled(read_page_size),
222
+ ])
223
+ const page_bytes = page_size === undefined ? undefined : Number(page_size)
224
+
225
+ return {
226
+ available_mb: meminfo === undefined ? undefined : parse_linux_available(meminfo),
227
+ swapped_mb:
228
+ vmstat === undefined || page_bytes === undefined
229
+ ? undefined
230
+ : parse_linux_swapped(vmstat, page_bytes),
231
+ pressure_level: undefined,
232
+ }
233
+ }
234
+
235
+ const UNREAD_MEMORY: MemoryReading = {
236
+ available_mb: undefined,
237
+ swapped_mb: undefined,
238
+ pressure_level: undefined,
239
+ }
240
+
241
+ async function read_memory(): Promise<MemoryReading> {
242
+ if (process.platform === 'darwin') return (await settled(read_darwin_memory)) ?? UNREAD_MEMORY
243
+
244
+ return process.platform === 'linux' ? await read_linux_memory() : UNREAD_MEMORY
245
+ }
246
+
119
247
  // A CPU quota narrower than the host makes the host-wide CPU times the wrong machine, so the busy cores
120
248
  // are read only where the quota and the host agree.
121
249
  function is_unquoted(): boolean {
@@ -132,12 +260,16 @@ async function read_machine(
132
260
  sleep: (ms: number) => Promise<void> = default_sleep,
133
261
  ): Promise<MachineReading> {
134
262
  const before = cpu_times()
135
- const [available_mb] = await Promise.all([read_available_mb(), sleep(SAMPLE_WINDOW_MS)])
263
+ const [memory] = await Promise.all([read_memory(), sleep(SAMPLE_WINDOW_MS)])
136
264
  const busy_cores = is_unquoted()
137
265
  ? busy_cores_between(before, cpu_times(), cpus().length)
138
266
  : undefined
139
267
 
140
- return { busy_cores, available_mb }
268
+ return { busy_cores, available_mb: memory.available_mb }
269
+ }
270
+
271
+ async function read_sample(): Promise<MachineSample> {
272
+ return { cpu: cpu_times(), memory: await read_memory(), total_mb: totalmem() / BYTES_PER_MB }
141
273
  }
142
274
 
143
275
  // The busy cores the ledger does not account for, beyond the baseline the weights were measured beside,
@@ -165,11 +297,17 @@ function machine_budget(cores: number, reading: MachineReading, ledger: LedgerLo
165
297
  const machine_capacity = {
166
298
  BASELINE_CORES,
167
299
  busy_cores_between,
300
+ busy_share_between,
301
+ external_cores,
168
302
  machine_budget,
169
- parse_darwin_pressure,
303
+ parse_darwin_memory,
170
304
  parse_linux_available,
305
+ parse_linux_swapped,
171
306
  read_machine,
307
+ read_memory,
308
+ read_sample,
309
+ swapped_between,
172
310
  }
173
311
 
174
- export type { LedgerLoad, MachineBudget, MachineReading }
312
+ export type { CpuTimes, LedgerLoad, MachineBudget, MachineReading, MachineSample, MemoryReading }
175
313
  export { machine_capacity }
@@ -9,7 +9,7 @@ import { hook_gate_reuse } from './hook-gate-reuse'
9
9
  import { DEFAULT_TYPE_CHECK_ARGS, type_check_step } from './type-check-step'
10
10
 
11
11
  // The pre-commit hook's type check, which no longer re-runs a project-wide `tsc --noEmit` that a green
12
- // gate already covers (joshuafolkken/kit#1381).
12
+ // gate already covers.
13
13
  //
14
14
  // Measured on this repository: `pnpm exec tsc --noEmit` over the whole project takes 3.8–4.4s warm, and
15
15
  // `pnpm josh git -y` pays it on every commit — a `fullrun` commits twice — seconds after `pnpm josh
@@ -22,8 +22,8 @@ import { DEFAULT_TYPE_CHECK_ARGS, type_check_step } from './type-check-step'
22
22
  // recorded wide one. So they are untouched, and so are `prevent-main-commit` and `secretlint`, which
23
23
  // the gate does not run at all and which are therefore duplicates of nothing.
24
24
  //
25
- // **The decision is joshuafolkken/kit#1328's, imported rather than restated** — `hook_gate_reuse`
26
- // carries what this shares with the pre-push hook (joshuafolkken/kit#1334) and defers the record
25
+ // **The decision is the gate's, imported rather than restated** — `hook_gate_reuse`
26
+ // carries what this shares with the pre-push hook and defers the record
27
27
  // comparison itself to `gate_skip.reusable_green_gate`. A hook answering "is this still the recorded
28
28
  // tree" differently from the gate beside it would be two commands disagreeing about one tree.
29
29
  //
@@ -54,7 +54,7 @@ interface CommitTree extends GateTree {
54
54
  }
55
55
 
56
56
  // **The record says the gate's four checks were green; it does not say *which* type check ran.**
57
- // `type-check-step.ts` resolves that per project (joshuafolkken/kit#934): a project carrying a
57
+ // `type-check-step.ts` resolves that per project: a project carrying a
58
58
  // `josh-app` / `josh-game` shim has the toolkit's `check:ci` as its gate step, and this hook's step is
59
59
  // `tsc --noEmit`. Reusing across that difference would skip `tsc --noEmit` on the strength of a
60
60
  // different check — a `.ts` file inside the root `tsconfig.json` but outside the one `svelte-check` is
@@ -1,6 +1,7 @@
1
1
  import { existsSync, globSync, readFileSync } from 'node:fs'
2
2
  import path from 'node:path'
3
3
  import { find_local_bin_upwards } from '#scripts/build/local-bin'
4
+ import { doctor_consumer } from '#scripts/doctor/doctor-consumer'
4
5
  import { project_profile } from '#scripts/init/project-profile'
5
6
  import { ancestor_directories } from '#scripts/lib/ancestor-directories'
6
7
  import { json_value } from '#scripts/lib/json-value'
@@ -51,6 +52,12 @@ function project_root(directory: string): string {
51
52
  )
52
53
  }
53
54
 
55
+ // The kit repository itself rather than a consumer of it — the gate's and the detached ship's one
56
+ // answer to whether kit-only checks run.
57
+ function is_kit_repository(directory: string): boolean {
58
+ return !doctor_consumer.is_kit_consumer(project_root(directory))
59
+ }
60
+
54
61
  function is_ignored(entry: string): boolean {
55
62
  return entry.split(/[/\\]/u).some((part) => IGNORED_DIRS.has(part))
56
63
  }
@@ -106,7 +113,7 @@ function is_declared(directory: string, package_name: string): boolean {
106
113
  }
107
114
 
108
115
  // A tool the manifest lists but `node_modules` lacks is a project that has not run `pnpm install`
109
- // yet — typically right after `josh init` added it (joshuafolkken/kit#2709). Skipping it would pass a
116
+ // yet — typically right after `josh init` added it. Skipping it would pass a
110
117
  // check the configuration asks for without running it, so only an undeclared tool is skipped; a
111
118
  // declared one is run and fails until it is installed.
112
119
  function missing_tool_reason(
@@ -124,7 +131,7 @@ function skip_notice(check: string, reason: string): string {
124
131
  }
125
132
 
126
133
  // Shared by `josh check` and the gate's type-check step, so neither reaches `tsc` on a basic
127
- // project that has nothing to type-check (joshuafolkken/kit#2709).
134
+ // project that has nothing to type-check.
128
135
  function type_check_skip_reason(directory: string): string | undefined {
129
136
  if (!is_basic(directory)) return undefined
130
137
  if (!has_files(directory, TYPE_FILES)) return 'no TypeScript files were found'
@@ -135,7 +142,7 @@ function type_check_skip_reason(directory: string): string | undefined {
135
142
 
136
143
  // Shared by `josh lint`, `josh lint:related` and `josh format`, so a basic project without Web
137
144
  // files — a Python or Rust project, which `josh init` gives no Prettier — is skipped for the same
138
- // reason by all three (joshuafolkken/kit#2606, joshuafolkken/kit#2709).
145
+ // reason by all three.
139
146
  function prettier_skip_reason(directory: string): string | undefined {
140
147
  if (!is_basic(directory)) return undefined
141
148
  if (!has_files(directory, WEB_FILES)) return 'no HTML, CSS or JavaScript files were found'
@@ -144,7 +151,7 @@ function prettier_skip_reason(directory: string): string | undefined {
144
151
  }
145
152
 
146
153
  // Shared by `josh lint`, `josh lint:related` and `josh format`, so a basic project without ESLint
147
- // is skipped for the same reason by all three (joshuafolkken/kit#2693, joshuafolkken/kit#2709).
154
+ // is skipped for the same reason by all three.
148
155
  function eslint_skip_reason(directory: string): string | undefined {
149
156
  if (!is_basic(directory)) return undefined
150
157
  if (!has_files(directory, SCRIPT_FILES)) return 'no JavaScript or TypeScript files were found'
@@ -163,6 +170,7 @@ const project_checks = {
163
170
  has_config,
164
171
  has_files,
165
172
  is_basic,
173
+ is_kit_repository,
166
174
  prettier_skip_reason,
167
175
  project_root,
168
176
  skip_notice,
@@ -6,22 +6,16 @@ import { test_unit_guard } from '#scripts/test/test-unit-guard'
6
6
  import { gate_tree, type GateTree } from './gate-tree'
7
7
 
8
8
  // Whether the two scoped checks have been green on *this exact tree* by the time the review is
9
- // briefed (joshuafolkken/kit#1511).
9
+ // briefed.
10
10
  //
11
- // **The commands were already shipped; what was missing was when they run.** joshuafolkken/kit#1298
12
- // and joshuafolkken/kit#1257 gave the run `lint:related` and `test:related`, and
13
- // joshuafolkken/kit#1383 and joshuafolkken/kit#1246 stopped it re-running the whole gate per edit.
14
- // None of them says the pair has to have answered before the review starts, and `fullrun #1503` is
15
- // what that costs: the gate and round 1 were started on a tree neither check had ever read, three
16
- // findings then arrived on three separate round trips with fourteen edits between them, and the
17
- // rework ran 282 seconds — 31% of a 905-second run. The same run proves the cheap half: the one call
18
- // that ran both checks together took 13.8 seconds and produced two of the three findings at once.
11
+ // **It fixes when `lint:related` and `test:related` run.** A gate and a review round started on a
12
+ // tree neither check has read return their findings one round trip at a time; one call running both
13
+ // checks first returns most of them at once.
19
14
  //
20
15
  // **It fixes when the checks run, never whether they run, and never what they check.** Nothing here
21
16
  // skips a check, narrows one, or reinterprets its output — a green record buys ordering and nothing
22
- // else, and `josh gate` still runs its four checks exactly as before. That is the boundary
23
- // joshuafolkken/kit#1420 sits on the far side of: that issue asked to *reuse* a scoped check's result
24
- // instead of re-running it and was closed as not needed, and this record does not revive it.
17
+ // else, and `josh gate` still runs its four checks exactly as before. It never *reuses* a scoped
18
+ // check's result in place of re-running it.
25
19
  //
26
20
  // **The judgement is the gate's own, not a second one.** "There is a record and nothing it covers has
27
21
  // moved" is `review_brief.matching_stamp` plus the base equality `gate_skip.reusable_green_gate`
@@ -29,8 +23,8 @@ import { gate_tree, type GateTree } from './gate-tree'
29
23
  // definition of "this tree is unchanged" is the clone `CLAUDE.md` prohibits, and it is exactly where
30
24
  // two commands would start disagreeing about one working tree.
31
25
  //
32
- // **It refuses `josh review:brief`, and now the local `josh gate` too, but never CI's**
33
- // (joshuafolkken/kit#2296). The brief was the first refusal point because it is where `review:attest`
26
+ // **It refuses `josh review:brief`, and now the local `josh gate` too, but never CI's**.
27
+ // The brief was the first refusal point because it is where `review:attest`
34
28
  // mints the nonce a round is counted against, so no countable review round bypasses it. But the gate
35
29
  // itself runs *before* the brief, and a run that reached it on a tree the scoped pair had never read
36
30
  // paid for the gap anyway — so `verification-gate.ts` reads this same record one step earlier and
@@ -69,7 +63,7 @@ interface ScopedSources {
69
63
  is_unit_skipped?: boolean
70
64
  }
71
65
 
72
- // **`test:related` is required only where it can ever answer** (joshuafolkken/kit#3136). In a project
66
+ // **`test:related` is required only where it can ever answer**. In a project
73
67
  // whose unit guard skips — vitest absent, or a basic project with no test file — `test:related` runs
74
68
  // nothing and so writes no record, and requiring one refused the gate forever with no way through.
75
69
  // The guard's own decision is asked rather than re-derived, so the writer and this reader agree; a
@@ -142,7 +136,7 @@ function missing_checks(
142
136
  }
143
137
 
144
138
  // The same answer as `missing_checks`, as the `josh` script names a caller runs rather than the
145
- // command lines a refusal prints — so the ship supervisor (joshuafolkken/kit#2500) meets the
139
+ // command lines a refusal prints — so the ship supervisor meets the
146
140
  // precondition itself by running exactly what the refusal would have asked for.
147
141
  function missing_scripts(
148
142
  tree: Record<string, string>,
@@ -230,8 +224,7 @@ interface GreenRecord {
230
224
  // Where the record lands, defaulted by the stamp itself. It exists for the same reason
231
225
  // `record_green` and `gate_skip.reusable_green_gate` take one: without it this function can only
232
226
  // write the real per-checkout record, so a suite exercising it would vouch for the surrounding
233
- // run's own tree — the second-writer trap joshuafolkken/kit#1437 and joshuafolkken/kit#1441
234
- // closed for the gate and round-1 records.
227
+ // run's own tree — the second-writer trap the gate and round-1 records close the same way.
235
228
  target?: string
236
229
  }
237
230
 
@@ -6,8 +6,8 @@ import { project_checks } from './project-checks'
6
6
 
7
7
  // `josh check` — the project-wide TypeScript check. It used to be a bare `tsc --noEmit` shell entry,
8
8
  // so on a basic project with nothing to type-check it failed with `Command "tsc" not found` while
9
- // the gate, which asks `type_check_skip_reason` first, skipped the same step
10
- // (joshuafolkken/kit#2709). Both now read that one decision.
9
+ // the gate, which asks `type_check_skip_reason` first, skipped the same step.
10
+ // Both now read that one decision.
11
11
 
12
12
  const ARGV_OFFSET = 2
13
13
  const FAIL_EXIT_CODE = 1