@joshuafolkken/kit 1.1229.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 (939) 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 +24 -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 +27 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +18 -29
  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/.github/workflows/publish.yml +2 -0
  42. package/.vscode/tasks.json +14 -0
  43. package/CLAUDE.md +10 -61
  44. package/README.md +38 -57
  45. package/SECURITY.md +1 -1
  46. package/dist/CLAUDE.md +10 -61
  47. package/dist/commands/document-section-cli.js +42 -10
  48. package/dist/config-merge/index.js +11 -2
  49. package/dist/hooks/audit-provision.js +2 -2
  50. package/dist/hooks/batch-guard.js +7 -7
  51. package/dist/hooks/{chunk-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
  52. package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
  53. package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
  54. package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
  55. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  56. package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
  57. package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
  58. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  59. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  60. package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
  61. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  62. package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
  63. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  64. package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
  65. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  66. package/dist/hooks/codex-hook-adapter.js +26 -21
  67. package/dist/hooks/duplicate-read-guard.js +8 -8
  68. package/dist/hooks/format-edited.js +4 -4
  69. package/dist/hooks/inputs.json +213 -197
  70. package/dist/hooks/investigation-guard.js +8 -8
  71. package/dist/hooks/pretool-guard.js +15 -15
  72. package/dist/hooks/session-lang.js +406 -8
  73. package/dist/hooks/stop-guard.js +122 -201
  74. package/dist/josh.js +540 -137
  75. package/dist/version/index.js +15 -13
  76. package/eslint/base.js +43 -5
  77. package/eslint/rules/english-only-prose.js +3 -3
  78. package/eslint/rules/import.js +12 -0
  79. package/eslint/rules/namespace-object-export.js +2 -2
  80. package/package.json +16 -10
  81. package/pnpm-workspace.yaml +2 -4
  82. package/prompts/coding-standards.md +14 -48
  83. package/prompts/collaboration-workflow/file-edits.md +1 -1
  84. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  85. package/prompts/collaboration-workflow/issue-template.md +4 -10
  86. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  87. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  88. package/prompts/collaboration-workflow/overview.md +1 -1
  89. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  90. package/prompts/collaboration-workflow/principles.md +21 -3
  91. package/prompts/collaboration-workflow/report-format.md +16 -29
  92. package/prompts/collaboration-workflow/residency.md +1 -1
  93. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  94. package/prompts/collaboration-workflow/shell-body.md +3 -23
  95. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  96. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  97. package/prompts/refactoring.md +1 -1
  98. package/prompts/review-rubric.md +3 -22
  99. package/prompts/review.md +15 -38
  100. package/prompts/testing-guide.md +2 -4
  101. package/scripts/adopt/adopt-logic.ts +5 -5
  102. package/scripts/adopt/adopt-toolkits.ts +4 -5
  103. package/scripts/adopt/adopt.ts +2 -3
  104. package/scripts/agent/agent-argv.ts +7 -7
  105. package/scripts/agent/agent-diagnostics.ts +2 -2
  106. package/scripts/agent/agent-exit-record.ts +1 -1
  107. package/scripts/agent/agent-headless.ts +1 -1
  108. package/scripts/agent/agent-launch-environment.ts +6 -1
  109. package/scripts/agent/agent-role-profile.ts +49 -22
  110. package/scripts/agent/agent-session-role.ts +32 -0
  111. package/scripts/agent/api-outage.ts +1 -1
  112. package/scripts/agent/claude-agent-argv.ts +4 -4
  113. package/scripts/agent/claude-result-event.ts +4 -4
  114. package/scripts/agent/codex-hooks.ts +2 -2
  115. package/scripts/agent/interactive-ask.ts +3 -6
  116. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  117. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  118. package/scripts/backlog/backlog-arrival.ts +54 -17
  119. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  120. package/scripts/backlog/backlog-budget.ts +17 -24
  121. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  122. package/scripts/backlog/backlog-drive-args.ts +5 -4
  123. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  124. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  125. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  126. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  127. package/scripts/backlog/backlog-drive-named.ts +39 -9
  128. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  129. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  130. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  131. package/scripts/backlog/backlog-drive.ts +43 -28
  132. package/scripts/backlog/backlog-idle.ts +88 -0
  133. package/scripts/backlog/backlog-named.ts +11 -15
  134. package/scripts/backlog/backlog-next.ts +26 -30
  135. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  136. package/scripts/backlog/backlog-offer.ts +7 -7
  137. package/scripts/backlog/backlog-overlap.ts +178 -0
  138. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  139. package/scripts/backlog/backlog-plan-read.ts +111 -0
  140. package/scripts/backlog/backlog-plan.ts +11 -10
  141. package/scripts/backlog/backlog-pool.ts +13 -14
  142. package/scripts/backlog/backlog-rank.ts +11 -11
  143. package/scripts/backlog/backlog-ready.ts +15 -10
  144. package/scripts/backlog/backlog-scope.ts +14 -15
  145. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  146. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  147. package/scripts/backlog/backlog-stalled.ts +5 -6
  148. package/scripts/backlog/backlog-waves.ts +4 -4
  149. package/scripts/backlog/backlogrun-args.ts +74 -0
  150. package/scripts/backlog/backlogrun-cli.ts +113 -0
  151. package/scripts/backlog/backlogrun-launch.ts +178 -0
  152. package/scripts/behavior/behavior-assertion.ts +6 -8
  153. package/scripts/behavior/behavior-cli.ts +1 -1
  154. package/scripts/behavior/behavior-rules.ts +3 -3
  155. package/scripts/build/build-claude-md.ts +4 -4
  156. package/scripts/build/build-codex-hooks.ts +2 -2
  157. package/scripts/build/build-commands.ts +1 -1
  158. package/scripts/build/build-hooks.ts +5 -5
  159. package/scripts/build/build.ts +1 -1
  160. package/scripts/build/hook-bundle-stamp.ts +109 -7
  161. package/scripts/build/local-bin.ts +2 -2
  162. package/scripts/cases/cases-cli.ts +1 -1
  163. package/scripts/cases/cases-logic.ts +2 -2
  164. package/scripts/ci/composite-actions.ts +1 -2
  165. package/scripts/ci/pr-classification.ts +2 -2
  166. package/scripts/claude/workflow-destination.ts +1 -1
  167. package/scripts/clone/clone-aggregate.ts +1 -1
  168. package/scripts/clone/clone-fingerprint.ts +1 -1
  169. package/scripts/clone/clone-scan-cli.ts +1 -1
  170. package/scripts/clone/clone-scan.ts +1 -1
  171. package/scripts/config-merge/index.ts +1 -1
  172. package/scripts/config-merge/json-format.ts +1 -3
  173. package/scripts/config-merge/patch-json-array.ts +90 -0
  174. package/scripts/config-merge/patch-json-key.ts +6 -3
  175. package/scripts/config-merge/patch-json-list.ts +1 -1
  176. package/scripts/cost-runtime/codex-usage.ts +1 -1
  177. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  178. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  179. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  180. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  181. package/scripts/cost-runtime/cost-cli.ts +14 -11
  182. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  183. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  184. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  185. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  186. package/scripts/cost-runtime/cost-usage.ts +6 -7
  187. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  188. package/scripts/cost-runtime/own-session.ts +1 -1
  189. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  190. package/scripts/delegation/delegation-cli.ts +4 -4
  191. package/scripts/delegation/delegation-policy.ts +13 -15
  192. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  193. package/scripts/delegation/fanout-cli.ts +1 -1
  194. package/scripts/delegation/fanout.ts +1 -1
  195. package/scripts/delegation/investigation-guard.ts +18 -22
  196. package/scripts/delegation/investigation-reads.ts +48 -238
  197. package/scripts/discovery/repo-discovery.ts +1 -1
  198. package/scripts/discovery/repo-map-logic.ts +1 -2
  199. package/scripts/discovery/repo-origin.ts +3 -3
  200. package/scripts/discovery/repo-party-cli.ts +2 -2
  201. package/scripts/discovery/repo-party.ts +2 -2
  202. package/scripts/doctor/doctor-consumer.ts +1 -1
  203. package/scripts/doctor/doctor-io.ts +6 -7
  204. package/scripts/doctor/doctor-logic.ts +1 -1
  205. package/scripts/doctor/doctor-ports.ts +1 -1
  206. package/scripts/doctor/doctor.ts +8 -9
  207. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  208. package/scripts/document/bash-output-cap.ts +5 -7
  209. package/scripts/document/capped-print-part.ts +1 -1
  210. package/scripts/document/capped-print.ts +1 -1
  211. package/scripts/document/document-byte-budget.ts +33 -64
  212. package/scripts/document/document-byte-check.ts +4 -4
  213. package/scripts/document/document-reachability.ts +7 -8
  214. package/scripts/document/document-read-cli.ts +2 -2
  215. package/scripts/document/document-scan.ts +26 -2
  216. package/scripts/document/document-section-cli.ts +6 -8
  217. package/scripts/document/document-section.ts +8 -12
  218. package/scripts/document/edit-files-cli.ts +3 -4
  219. package/scripts/document/entry-read-budget.ts +8 -70
  220. package/scripts/document/entry-read-set.ts +51 -34
  221. package/scripts/document/lane-child-read-set.ts +9 -9
  222. package/scripts/document/read-files-cli.ts +1 -2
  223. package/scripts/document/read-set-cli.ts +16 -19
  224. package/scripts/document/read-set-cost.ts +4 -4
  225. package/scripts/document/read-set-point-of-use.ts +28 -38
  226. package/scripts/document/read-set-pricing.ts +1 -1
  227. package/scripts/document/read-set-trim.ts +3 -3
  228. package/scripts/document/resident-budget.ts +8 -10
  229. package/scripts/epic/epic-add-body.ts +15 -18
  230. package/scripts/epic/epic-add-plan.ts +26 -28
  231. package/scripts/epic/epic-add.ts +32 -25
  232. package/scripts/epic/epic-audit-checks.ts +27 -37
  233. package/scripts/epic/epic-audit-cli.ts +21 -22
  234. package/scripts/epic/epic-audit-orphans.ts +16 -17
  235. package/scripts/epic/epic-audit-rationale.ts +10 -15
  236. package/scripts/epic/epic-audit-report.ts +2 -5
  237. package/scripts/epic/epic-audit.ts +18 -14
  238. package/scripts/epic/epic-body.ts +10 -10
  239. package/scripts/epic/epic-bundle-cli.ts +36 -34
  240. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  241. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  242. package/scripts/epic/epic-bundle-poll.ts +1 -1
  243. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  244. package/scripts/epic/epic-bundle.ts +19 -20
  245. package/scripts/epic/epic-busy.ts +44 -21
  246. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  247. package/scripts/epic/epic-chains.ts +18 -23
  248. package/scripts/epic/epic-classify.ts +11 -12
  249. package/scripts/epic/epic-cli-argv.ts +5 -6
  250. package/scripts/epic/epic-cli-remove.ts +9 -4
  251. package/scripts/epic/epic-cli.ts +38 -26
  252. package/scripts/epic/epic-close-comment.ts +14 -15
  253. package/scripts/epic/epic-close.ts +25 -29
  254. package/scripts/epic/epic-cross-repo.ts +18 -21
  255. package/scripts/epic/epic-decision.ts +14 -18
  256. package/scripts/epic/epic-fetch.ts +25 -31
  257. package/scripts/epic/epic-graph.ts +15 -17
  258. package/scripts/epic/epic-index.ts +14 -16
  259. package/scripts/epic/epic-issue.ts +9 -11
  260. package/scripts/epic/epic-label-age.ts +74 -0
  261. package/scripts/epic/epic-lane-offer.ts +35 -24
  262. package/scripts/epic/epic-nested.ts +1 -1
  263. package/scripts/epic/epic-next-read.ts +8 -8
  264. package/scripts/epic/epic-next-views.ts +12 -12
  265. package/scripts/epic/epic-next.ts +29 -33
  266. package/scripts/epic/epic-outside-blocker.ts +11 -10
  267. package/scripts/epic/epic-parse.ts +22 -24
  268. package/scripts/epic/epic-promote.ts +3 -2
  269. package/scripts/epic/epic-rank.ts +1 -1
  270. package/scripts/epic/epic-read.ts +10 -8
  271. package/scripts/epic/epic-reconcile.ts +8 -6
  272. package/scripts/epic/epic-reference.ts +5 -4
  273. package/scripts/epic/epic-relation-recheck.ts +10 -11
  274. package/scripts/epic/epic-relations.ts +9 -8
  275. package/scripts/epic/epic-remove-plan.ts +4 -5
  276. package/scripts/epic/epic-remove.ts +7 -5
  277. package/scripts/epic/epic-report.ts +18 -20
  278. package/scripts/epic/epic-run.ts +6 -5
  279. package/scripts/epic/epic-sections.ts +2 -2
  280. package/scripts/epic/epic-shape.ts +3 -3
  281. package/scripts/epic/epic-solo-stale.ts +3 -2
  282. package/scripts/epic/epic-solo.ts +8 -8
  283. package/scripts/epic/epic-triage.ts +5 -4
  284. package/scripts/epic/epic-validate.ts +8 -7
  285. package/scripts/epic/epic.ts +5 -5
  286. package/scripts/exports/unused-members-cli.ts +1 -1
  287. package/scripts/followup/followup-issue-number.ts +1 -2
  288. package/scripts/followup/git-followup-cleanup.ts +6 -7
  289. package/scripts/followup/git-followup-finish.ts +11 -13
  290. package/scripts/followup/git-followup-flush.ts +11 -7
  291. package/scripts/followup/git-followup-issue-close.ts +16 -13
  292. package/scripts/followup/git-followup-label.ts +9 -6
  293. package/scripts/followup/git-followup-merged.ts +1 -1
  294. package/scripts/followup/git-followup-pending.ts +7 -9
  295. package/scripts/followup/git-followup-stages.ts +28 -17
  296. package/scripts/followup/git-followup-workflow.ts +19 -21
  297. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  298. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  299. package/scripts/followup/git-pr-followup.ts +18 -17
  300. package/scripts/gate/core-admission.ts +162 -0
  301. package/scripts/gate/core-budget.ts +134 -91
  302. package/scripts/gate/gate-ledger.ts +114 -0
  303. package/scripts/gate/gate-log.ts +7 -9
  304. package/scripts/gate/gate-plan.ts +103 -35
  305. package/scripts/gate/gate-report.ts +39 -21
  306. package/scripts/gate/gate-skip.ts +11 -13
  307. package/scripts/gate/gate-steps.ts +5 -1
  308. package/scripts/gate/gate-tree.ts +3 -4
  309. package/scripts/gate/hook-gate-reuse.ts +9 -9
  310. package/scripts/gate/machine-capacity.ts +313 -0
  311. package/scripts/gate/pre-commit-type-check.ts +4 -4
  312. package/scripts/gate/project-checks.ts +12 -4
  313. package/scripts/gate/scoped-green.ts +11 -18
  314. package/scripts/gate/type-check-command.ts +2 -2
  315. package/scripts/gate/type-check-step.ts +4 -4
  316. package/scripts/gate/verification-gate.ts +60 -53
  317. package/scripts/gh/gh-spawn.ts +2 -2
  318. package/scripts/gh/git-ai-review-scan.ts +3 -2
  319. package/scripts/gh/git-gh-api-path.ts +10 -11
  320. package/scripts/gh/git-gh-exec.ts +43 -48
  321. package/scripts/gh/git-gh-failure.ts +6 -9
  322. package/scripts/gh/git-gh-helpers.ts +1 -1
  323. package/scripts/gh/git-gh-issue-list.ts +15 -19
  324. package/scripts/gh/git-gh-issue-read.ts +43 -60
  325. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  326. package/scripts/gh/git-gh-issue-write.ts +52 -40
  327. package/scripts/gh/git-gh-issue.ts +23 -24
  328. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  329. package/scripts/gh/git-gh-pr-read.ts +46 -50
  330. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  331. package/scripts/gh/git-gh-pr-review.ts +2 -2
  332. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  333. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  334. package/scripts/gh/git-gh-pr.ts +16 -16
  335. package/scripts/gh/git-gh-reachability.ts +11 -12
  336. package/scripts/gh/git-gh-repo.ts +2 -3
  337. package/scripts/gh/git-gh-rest-state.ts +1 -1
  338. package/scripts/gh/git-pr-ai-review.ts +6 -5
  339. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  340. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  341. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  342. package/scripts/gh/git-pr-checks.ts +20 -23
  343. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  344. package/scripts/gh/git-pr-confirmation.ts +5 -5
  345. package/scripts/gh/git-pr-managed-config.ts +7 -9
  346. package/scripts/gh/git-pr-messages.ts +1 -1
  347. package/scripts/gh/git-pr.ts +15 -16
  348. package/scripts/gh/github-issue-url.ts +8 -9
  349. package/scripts/git/base-tree.ts +66 -0
  350. package/scripts/git/change-base.ts +42 -2
  351. package/scripts/git/changed-file-scope.ts +5 -5
  352. package/scripts/git/changed-paths.ts +1 -2
  353. package/scripts/git/constants.ts +2 -2
  354. package/scripts/git/git-branch.ts +1 -1
  355. package/scripts/git/git-closes-keyword.ts +3 -3
  356. package/scripts/git/git-command.ts +53 -41
  357. package/scripts/git/git-common-directory.ts +3 -3
  358. package/scripts/git/git-diff-reads.ts +14 -15
  359. package/scripts/git/git-error.ts +1 -1
  360. package/scripts/git/git-execa-error.ts +1 -2
  361. package/scripts/git/git-issue.ts +10 -8
  362. package/scripts/git/git-location-environment.ts +3 -4
  363. package/scripts/git/git-ls-remote.ts +6 -8
  364. package/scripts/git/git-pre-push-hook.ts +11 -10
  365. package/scripts/git/git-preflight.ts +5 -5
  366. package/scripts/git/git-push-transport.ts +2 -2
  367. package/scripts/git/git-remote-branch.ts +1 -2
  368. package/scripts/git/git-schemas.ts +16 -23
  369. package/scripts/git/git-spawn-sync.ts +1 -1
  370. package/scripts/git/git-spawn.ts +37 -14
  371. package/scripts/git/git-ssh-keepalive.ts +12 -5
  372. package/scripts/git/git-staging.ts +7 -8
  373. package/scripts/git/git-workflow.ts +1 -1
  374. package/scripts/git/git-worktree.ts +35 -27
  375. package/scripts/git/gone-branch.ts +2 -2
  376. package/scripts/git/listing-cutoff.ts +1 -2
  377. package/scripts/git/lockfile-sync.ts +65 -0
  378. package/scripts/git/main-merge-guard.ts +1 -2
  379. package/scripts/git/main-merge.ts +7 -7
  380. package/scripts/git/main-sync.ts +23 -8
  381. package/scripts/git/parse-json-array.ts +18 -23
  382. package/scripts/git/repository-lock.ts +34 -2
  383. package/scripts/git/stash/git-stash.ts +4 -5
  384. package/scripts/git/stash/stash-orphans.ts +5 -3
  385. package/scripts/git/stash/stash-pop-args.ts +1 -1
  386. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  387. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  388. package/scripts/hooks/batch-guard.ts +11 -13
  389. package/scripts/hooks/check-commit-message.ts +12 -9
  390. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  391. package/scripts/hooks/edited-cspell.ts +3 -4
  392. package/scripts/hooks/format-edited-cli.ts +1 -1
  393. package/scripts/hooks/format-edited-file.ts +11 -17
  394. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  395. package/scripts/hooks/pre-push-unit.ts +10 -14
  396. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  397. package/scripts/hooks/pretool-guard.ts +93 -18
  398. package/scripts/hooks/reserved-run.ts +2 -2
  399. package/scripts/hooks/step-zero-notice.ts +1 -1
  400. package/scripts/hooks/stop-guard.ts +21 -10
  401. package/scripts/init/basic-path-migration.ts +2 -2
  402. package/scripts/init/claude-kit-only-settings.ts +2 -2
  403. package/scripts/init/claude-plugin-config.ts +2 -2
  404. package/scripts/init/distributed-paths.ts +4 -4
  405. package/scripts/init/hook-command-rewrite.ts +3 -3
  406. package/scripts/init/hook-launch.ts +5 -5
  407. package/scripts/init/init-actions.ts +13 -0
  408. package/scripts/init/init-ai-copy.ts +11 -11
  409. package/scripts/init/init-bootstrap.ts +3 -3
  410. package/scripts/init/init-copy-content.ts +4 -4
  411. package/scripts/init/init-logic-json-merge.ts +7 -9
  412. package/scripts/init/init-logic-migrate.ts +1 -1
  413. package/scripts/init/init-logic-templates.ts +1 -1
  414. package/scripts/init/init-logic-workspace.ts +4 -4
  415. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  416. package/scripts/init/init-logic.ts +19 -22
  417. package/scripts/init/init.ts +12 -8
  418. package/scripts/init/kit-base-preset.ts +1 -1
  419. package/scripts/init/kit-setup-state.ts +1 -1
  420. package/scripts/init/kit-written-paths.ts +1 -2
  421. package/scripts/init/package-manager-pin.ts +35 -0
  422. package/scripts/init/project-profile-cli.ts +1 -1
  423. package/scripts/init/project-profile.ts +3 -3
  424. package/scripts/init/session-language-environment.ts +1 -1
  425. package/scripts/init/start-exec.ts +3 -4
  426. package/scripts/init/start-plan.ts +2 -2
  427. package/scripts/init/start-setup-pr.ts +3 -2
  428. package/scripts/init/start-steps.ts +2 -2
  429. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  430. package/scripts/init/vscode-tasks.ts +62 -0
  431. package/scripts/issue/baseline-measure.ts +2 -2
  432. package/scripts/issue/behavior-change-lint.ts +2 -2
  433. package/scripts/issue/defect-rate-cli.ts +6 -7
  434. package/scripts/issue/defect-rate.ts +37 -27
  435. package/scripts/issue/git-next-issues.ts +9 -8
  436. package/scripts/issue/issue-auto-ok.ts +49 -11
  437. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  438. package/scripts/issue/issue-backlinks.ts +6 -6
  439. package/scripts/issue/issue-cite-cli.ts +20 -18
  440. package/scripts/issue/issue-cite.ts +18 -8
  441. package/scripts/issue/issue-closing-pr.ts +4 -4
  442. package/scripts/issue/issue-comment-cli.ts +6 -4
  443. package/scripts/issue/issue-file-cli.ts +75 -15
  444. package/scripts/issue/issue-file-fold.ts +155 -0
  445. package/scripts/issue/issue-file.ts +14 -6
  446. package/scripts/issue/issue-fold-cli.ts +14 -9
  447. package/scripts/issue/issue-fold.ts +23 -8
  448. package/scripts/issue/issue-labels.ts +46 -37
  449. package/scripts/issue/issue-lint-cli.ts +2 -2
  450. package/scripts/issue/issue-lint.ts +1 -1
  451. package/scripts/issue/issue-merged.ts +10 -4
  452. package/scripts/issue/issue-number-shape.ts +27 -0
  453. package/scripts/issue/issue-rank.ts +1 -1
  454. package/scripts/issue/issue-read-cli.ts +4 -5
  455. package/scripts/issue/issue-read.ts +4 -5
  456. package/scripts/issue/issue-reference.ts +5 -5
  457. package/scripts/issue/issue-release-cli.ts +165 -0
  458. package/scripts/issue/issue-release.ts +58 -0
  459. package/scripts/issue/issue-report-failures.ts +7 -4
  460. package/scripts/issue/issue-scout-cli.ts +11 -11
  461. package/scripts/issue/issue-scout-closed.ts +4 -4
  462. package/scripts/issue/issue-scout.ts +4 -5
  463. package/scripts/issue/issue-state-cli.ts +17 -10
  464. package/scripts/issue/issue-state.ts +12 -13
  465. package/scripts/issue/issue-wip.ts +7 -7
  466. package/scripts/issue/markdown-section.ts +3 -3
  467. package/scripts/issue/measure-rerun-cli.ts +10 -9
  468. package/scripts/issue/reproduction-measure.ts +3 -3
  469. package/scripts/issue/session-cite.ts +56 -0
  470. package/scripts/josh/agent-session-environment.ts +10 -8
  471. package/scripts/josh/cli-body.ts +2 -2
  472. package/scripts/josh/command-suggest.ts +1 -1
  473. package/scripts/josh/file-map-stamp.ts +20 -23
  474. package/scripts/josh/hook-decision.ts +24 -28
  475. package/scripts/josh/josh-command-map.ts +4 -1
  476. package/scripts/josh/josh-command-types.ts +32 -34
  477. package/scripts/josh/josh-commands-ai.ts +6 -6
  478. package/scripts/josh/josh-commands-backlog.ts +15 -3
  479. package/scripts/josh/josh-commands-clone.ts +1 -1
  480. package/scripts/josh/josh-commands-development.ts +33 -4
  481. package/scripts/josh/josh-commands-document.ts +3 -3
  482. package/scripts/josh/josh-commands-guard.ts +3 -3
  483. package/scripts/josh/josh-commands-issue.ts +11 -5
  484. package/scripts/josh/josh-commands-lane.ts +16 -5
  485. package/scripts/josh/josh-commands-lint.ts +1 -1
  486. package/scripts/josh/josh-commands-maintenance.ts +2 -2
  487. package/scripts/josh/josh-commands-run.ts +20 -6
  488. package/scripts/josh/josh-commands-split.ts +1 -2
  489. package/scripts/josh/josh-commands-versioning.ts +5 -5
  490. package/scripts/josh/josh-commands-workflow.ts +30 -22
  491. package/scripts/josh/josh-environment-file.ts +1 -1
  492. package/scripts/josh/josh-in-process.ts +3 -3
  493. package/scripts/josh/josh-logic.ts +10 -10
  494. package/scripts/josh/josh-run.ts +3 -3
  495. package/scripts/josh/josh-verdict.ts +9 -12
  496. package/scripts/josh/josh.ts +3 -3
  497. package/scripts/josh/kit-only.ts +2 -2
  498. package/scripts/josh/path-decision.ts +3 -3
  499. package/scripts/josh/platform-temporary.ts +7 -5
  500. package/scripts/josh/process-identity.ts +24 -6
  501. package/scripts/josh/process-owner.ts +4 -4
  502. package/scripts/josh/session-language-cli.ts +53 -11
  503. package/scripts/josh/session-language.ts +1 -1
  504. package/scripts/josh/stamp-file.ts +48 -29
  505. package/scripts/josh/stamp-record.ts +57 -0
  506. package/scripts/lane/lane-await.ts +35 -11
  507. package/scripts/lane/lane-cache.ts +6 -6
  508. package/scripts/lane/lane-capacity.ts +32 -17
  509. package/scripts/lane/lane-child-invocation.ts +17 -15
  510. package/scripts/lane/lane-child-marker.ts +12 -12
  511. package/scripts/lane/lane-cli.ts +20 -13
  512. package/scripts/lane/lane-close.ts +6 -6
  513. package/scripts/lane/lane-dispatch.ts +61 -72
  514. package/scripts/lane/lane-environment.ts +5 -5
  515. package/scripts/lane/lane-guard-policy.ts +7 -21
  516. package/scripts/lane/lane-handoff.ts +2 -2
  517. package/scripts/lane/lane-install.ts +9 -10
  518. package/scripts/lane/lane-launch-cli.ts +13 -8
  519. package/scripts/lane/lane-ledger.ts +73 -11
  520. package/scripts/lane/lane-leftover.ts +44 -30
  521. package/scripts/lane/lane-limit-cli.ts +160 -0
  522. package/scripts/lane/lane-limit-override.ts +74 -0
  523. package/scripts/lane/lane-load.ts +19 -68
  524. package/scripts/lane/lane-measure-cli.ts +15 -25
  525. package/scripts/lane/lane-occupancy.ts +6 -4
  526. package/scripts/lane/lane-open.ts +25 -24
  527. package/scripts/lane/lane-output.ts +4 -3
  528. package/scripts/lane/lane-paths.ts +22 -8
  529. package/scripts/lane/lane-phase.ts +33 -0
  530. package/scripts/lane/lane-reap.ts +2 -2
  531. package/scripts/lane/lane-registry.ts +27 -15
  532. package/scripts/lane/lane-relaunch.ts +9 -9
  533. package/scripts/lane/lane-report.ts +5 -4
  534. package/scripts/lane/lane-resume.ts +2 -2
  535. package/scripts/lane/lane-sampler.ts +55 -0
  536. package/scripts/lane/lane-seed.ts +7 -7
  537. package/scripts/lane/lane-stage-stats.ts +135 -0
  538. package/scripts/lane/lane-start-point.ts +8 -11
  539. package/scripts/lane/lane-stats.ts +60 -15
  540. package/scripts/lane/lane-stray.ts +140 -0
  541. package/scripts/lane/lane-vacant.ts +1 -1
  542. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  543. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  544. package/scripts/lane/openai-review-broker.ts +2 -4
  545. package/scripts/lib/ancestor-directories.ts +1 -1
  546. package/scripts/lib/bounded-pool.ts +2 -2
  547. package/scripts/lib/buffered-process.ts +4 -6
  548. package/scripts/lib/caddy-logs.sh +0 -0
  549. package/scripts/lib/cli-flags.ts +39 -6
  550. package/scripts/lib/error-message.ts +1 -1
  551. package/scripts/lib/json-value.ts +17 -3
  552. package/scripts/lib/poll.ts +1 -1
  553. package/scripts/lib/status-icons.ts +3 -3
  554. package/scripts/lib/timed-fetch.ts +1 -1
  555. package/scripts/lib/timeouts.ts +1 -1
  556. package/scripts/lines/bytes-command.ts +3 -4
  557. package/scripts/lines/effective-limit.ts +25 -12
  558. package/scripts/lines/line-budget.ts +47 -55
  559. package/scripts/lines/line-targets.ts +6 -2
  560. package/scripts/lines/lines-command.ts +3 -3
  561. package/scripts/lint/cspell-cached.ts +1 -1
  562. package/scripts/lint/cycle-recheck.ts +122 -0
  563. package/scripts/lint/format.ts +1 -2
  564. package/scripts/lint/lint-parallel.ts +34 -19
  565. package/scripts/lint/lint-related-scope.ts +25 -15
  566. package/scripts/lint/lint-related.ts +6 -7
  567. package/scripts/managed-marker/index.ts +1 -1
  568. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  569. package/scripts/notify/git-notify.ts +9 -7
  570. package/scripts/notify/telegram-notify.ts +53 -37
  571. package/scripts/notify/telegram-test-logic.ts +3 -3
  572. package/scripts/notify/telegram-test.ts +45 -30
  573. package/scripts/observations/observation-ledger-home.ts +14 -8
  574. package/scripts/observations/observation-ledger-line.ts +3 -2
  575. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  576. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  577. package/scripts/observations/observation-ledger.ts +14 -15
  578. package/scripts/observations/observation-record-cli.ts +83 -0
  579. package/scripts/observations/observation-record.ts +91 -0
  580. package/scripts/observations/observations-flush-cli.ts +1 -1
  581. package/scripts/observations/observations-flush-landing.ts +7 -6
  582. package/scripts/observations/observations-flush.ts +26 -27
  583. package/scripts/overrides/overrides-check.ts +18 -8
  584. package/scripts/package/package-scout-cli.ts +1 -1
  585. package/scripts/package/package-scout-format.ts +2 -2
  586. package/scripts/package/package-scout.ts +1 -1
  587. package/scripts/propagate/propagate-git-failure.ts +1 -1
  588. package/scripts/propagate/propagate-git.ts +7 -7
  589. package/scripts/propagate/propagate-plan.ts +2 -2
  590. package/scripts/propagate/propagate-publish.ts +2 -3
  591. package/scripts/propagate/propagate-run.ts +5 -7
  592. package/scripts/propagate/propagate-select.ts +1 -1
  593. package/scripts/propagate/propagate-steps.ts +19 -20
  594. package/scripts/propagate/propagate-targets.ts +6 -10
  595. package/scripts/propagate/propagate.ts +5 -5
  596. package/scripts/refactor/import-graph.ts +1 -1
  597. package/scripts/refactor/refactor-lint.ts +4 -10
  598. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  599. package/scripts/refactor/refactor-scan.ts +2 -2
  600. package/scripts/refactor/refactor-targets.ts +1 -1
  601. package/scripts/release/github-release-cli.ts +25 -3
  602. package/scripts/release/github-release-environment.ts +1 -0
  603. package/scripts/release/github-release-runs.ts +115 -0
  604. package/scripts/release/github-release.ts +13 -67
  605. package/scripts/release/release-cli.ts +21 -4
  606. package/scripts/release/release-history.ts +6 -10
  607. package/scripts/release/release-plan.ts +3 -3
  608. package/scripts/release/release-progress.ts +3 -4
  609. package/scripts/release/release-publish.ts +8 -9
  610. package/scripts/release/release-scope-cli.ts +8 -10
  611. package/scripts/release/release-tag.ts +6 -8
  612. package/scripts/release/release-worktree.ts +5 -5
  613. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  614. package/scripts/repo/auto-merge-setting.ts +1 -1
  615. package/scripts/repo/repo-setting.ts +4 -4
  616. package/scripts/repo/repository-labels.ts +1 -1
  617. package/scripts/repo/required-checks-logic.ts +3 -3
  618. package/scripts/repo/required-checks-report.ts +1 -1
  619. package/scripts/repo/ruleset-check-cli.ts +1 -1
  620. package/scripts/repo/ruleset-check.ts +1 -1
  621. package/scripts/report/report-format-reference.ts +26 -0
  622. package/scripts/report/report-lint-cli.ts +2 -2
  623. package/scripts/report/report-lint.ts +16 -2
  624. package/scripts/review/disposition-cli.ts +2 -2
  625. package/scripts/review/disposition-logic.ts +1 -1
  626. package/scripts/review/live-evidence.ts +9 -6
  627. package/scripts/review/review-attest-cli.ts +1 -2
  628. package/scripts/review/review-attest.ts +3 -3
  629. package/scripts/review/review-brief-cli.ts +19 -20
  630. package/scripts/review/review-brief.ts +29 -32
  631. package/scripts/review/review-checkout.ts +2 -2
  632. package/scripts/review/review-diff-parts.ts +3 -5
  633. package/scripts/review/review-diff-write.ts +1 -1
  634. package/scripts/review/review-finding-ledger.ts +7 -4
  635. package/scripts/review/review-findings-cli.ts +2 -2
  636. package/scripts/review/review-level.ts +4 -7
  637. package/scripts/review/review-record-cli.ts +73 -16
  638. package/scripts/review/review-record.ts +5 -4
  639. package/scripts/review/review-round2-cli.ts +2 -3
  640. package/scripts/review/review-round2.ts +13 -21
  641. package/scripts/review/review-stamps.ts +9 -71
  642. package/scripts/review/review-tree.ts +4 -5
  643. package/scripts/rules/bash-triggers.ts +4 -4
  644. package/scripts/rules/decision-oracle-batch.ts +5 -6
  645. package/scripts/rules/decision-oracle-stage.ts +1 -1
  646. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  647. package/scripts/rules/decision-oracle.ts +2 -2
  648. package/scripts/rules/delivered-rules.ts +61 -406
  649. package/scripts/rules/destructive-command.ts +2 -2
  650. package/scripts/rules/direct-filing.ts +4 -4
  651. package/scripts/rules/direct-pr-create.ts +2 -2
  652. package/scripts/rules/early-heartbeat.ts +15 -19
  653. package/scripts/rules/file-body.ts +5 -6
  654. package/scripts/rules/filing-cap.ts +6 -7
  655. package/scripts/rules/filing-offer.ts +1 -1
  656. package/scripts/rules/firing-point.ts +6 -6
  657. package/scripts/rules/gh-api.ts +2 -2
  658. package/scripts/rules/git-argv.ts +3 -3
  659. package/scripts/rules/git-force.ts +2 -2
  660. package/scripts/rules/hook-context-line.ts +31 -0
  661. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  662. package/scripts/rules/implementation-cut.ts +35 -32
  663. package/scripts/rules/index-guard.ts +2 -2
  664. package/scripts/rules/issue-citation.ts +7 -7
  665. package/scripts/rules/issue-comments.ts +21 -13
  666. package/scripts/rules/josh-git-bare.ts +2 -2
  667. package/scripts/rules/lane-background.ts +14 -16
  668. package/scripts/rules/lane-carry-conflict.ts +41 -5
  669. package/scripts/rules/lane-interactive-ask.ts +6 -9
  670. package/scripts/rules/lane-park.ts +12 -16
  671. package/scripts/rules/lane-split-park.ts +1 -2
  672. package/scripts/rules/lane-switch-main.ts +10 -13
  673. package/scripts/rules/last-prompt.ts +1 -1
  674. package/scripts/rules/oracle-consulted.ts +5 -5
  675. package/scripts/rules/oracle-firing.ts +6 -9
  676. package/scripts/rules/oracle-list-cli.ts +2 -2
  677. package/scripts/rules/permission-guards.ts +2 -2
  678. package/scripts/rules/piped-verification.ts +79 -9
  679. package/scripts/rules/poll-loop.ts +9 -11
  680. package/scripts/rules/pre-gate-cut.ts +33 -30
  681. package/scripts/rules/prior-comment-read.ts +3 -3
  682. package/scripts/rules/protected-files.ts +25 -13
  683. package/scripts/rules/raw-field-body.ts +3 -4
  684. package/scripts/rules/reply-language.ts +1 -1
  685. package/scripts/rules/rule-body-guard.ts +10 -12
  686. package/scripts/rules/rule-guard.ts +1 -1
  687. package/scripts/rules/rule-list.ts +51 -0
  688. package/scripts/rules/rule-registry-rows.ts +282 -0
  689. package/scripts/rules/rule-registry.ts +109 -0
  690. package/scripts/rules/rule-value-cache.ts +2 -2
  691. package/scripts/rules/rule-value-cli.ts +6 -4
  692. package/scripts/rules/rule-value.ts +61 -22
  693. package/scripts/rules/run-tail-rule.ts +11 -15
  694. package/scripts/rules/shell-body-trigger.ts +7 -7
  695. package/scripts/rules/shell-segments.ts +2 -4
  696. package/scripts/rules/stop-rules.ts +54 -41
  697. package/scripts/rules/tail-commands.ts +1 -1
  698. package/scripts/rules/test-declared-commit.ts +2 -2
  699. package/scripts/rules/third-party-write.ts +3 -3
  700. package/scripts/rules/worktree-guard.ts +12 -5
  701. package/scripts/run/add/run-add-cli.ts +165 -0
  702. package/scripts/run/add/run-add.ts +124 -0
  703. package/scripts/run/board/run-board-cli.ts +207 -0
  704. package/scripts/run/board/run-board-closed.ts +95 -0
  705. package/scripts/run/board/run-board-every.ts +60 -0
  706. package/scripts/run/board/run-board-fetch.ts +38 -0
  707. package/scripts/run/board/run-board-fit.ts +219 -0
  708. package/scripts/run/board/run-board-github.ts +162 -0
  709. package/scripts/run/board/run-board-header.ts +275 -0
  710. package/scripts/run/board/run-board-kind.ts +35 -0
  711. package/scripts/run/board/run-board-labels.ts +299 -0
  712. package/scripts/run/board/run-board-layout.ts +222 -0
  713. package/scripts/run/board/run-board-link.ts +31 -0
  714. package/scripts/run/board/run-board-machine.ts +198 -0
  715. package/scripts/run/board/run-board-notes.ts +103 -0
  716. package/scripts/run/board/run-board-phase.ts +136 -0
  717. package/scripts/run/board/run-board-plan.ts +129 -0
  718. package/scripts/run/board/run-board-read.ts +62 -0
  719. package/scripts/run/board/run-board-render-legend.ts +82 -0
  720. package/scripts/run/board/run-board-render-notes.ts +77 -0
  721. package/scripts/run/board/run-board-render-slot.ts +50 -0
  722. package/scripts/run/board/run-board-render.ts +407 -0
  723. package/scripts/run/board/run-board-scope.ts +17 -0
  724. package/scripts/run/board/run-board-screen.ts +43 -0
  725. package/scripts/run/board/run-board-span.ts +66 -0
  726. package/scripts/run/board/run-board-spin.ts +115 -0
  727. package/scripts/run/board/run-board-state.ts +113 -0
  728. package/scripts/run/board/run-board-status.ts +279 -0
  729. package/scripts/run/board/run-board-tick.ts +210 -0
  730. package/scripts/run/board/run-board-track.ts +22 -0
  731. package/scripts/run/board/run-board-usage-read.ts +255 -0
  732. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  733. package/scripts/run/board/run-board-usage-text.ts +80 -0
  734. package/scripts/run/board/run-board-usage.ts +165 -0
  735. package/scripts/run/carry/run-carry-added.ts +62 -0
  736. package/scripts/run/carry/run-carry-args.ts +25 -22
  737. package/scripts/run/carry/run-carry-change.ts +1 -1
  738. package/scripts/run/carry/run-carry-cli.ts +71 -48
  739. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  740. package/scripts/run/carry/run-carry-ended.ts +85 -0
  741. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  742. package/scripts/run/carry/run-carry-stash.ts +3 -2
  743. package/scripts/run/carry/run-carry-streak.ts +8 -10
  744. package/scripts/run/carry/run-carry.ts +85 -89
  745. package/scripts/run/cut/run-cut-args.ts +7 -7
  746. package/scripts/run/cut/run-cut-cli.ts +68 -37
  747. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  748. package/scripts/run/cut/run-cut-report.ts +37 -16
  749. package/scripts/run/cut/run-cut.ts +63 -77
  750. package/scripts/run/detached-launch.ts +35 -50
  751. package/scripts/run/entry/run-entry-cli.ts +48 -27
  752. package/scripts/run/entry/run-entry-stop.ts +7 -9
  753. package/scripts/run/entry/run-entry.ts +5 -6
  754. package/scripts/run/event/run-event-cli.ts +5 -6
  755. package/scripts/run/event/run-event-filed.ts +69 -0
  756. package/scripts/run/event/run-event-follow.ts +3 -3
  757. package/scripts/run/event/run-event-plan.ts +38 -0
  758. package/scripts/run/event/run-event-render.ts +10 -4
  759. package/scripts/run/event/run-event-scope.ts +47 -18
  760. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  761. package/scripts/run/event/run-event-stream.ts +172 -43
  762. package/scripts/run/event/run-event-watch.ts +4 -6
  763. package/scripts/run/hold/run-hold-cli.ts +65 -62
  764. package/scripts/run/hold/run-hold.ts +88 -46
  765. package/scripts/run/merge/run-merge-cli.ts +116 -77
  766. package/scripts/run/merge/run-merge-collect.ts +107 -0
  767. package/scripts/run/merge/run-merge-steps.ts +112 -65
  768. package/scripts/run/merge/run-merge-token.ts +30 -0
  769. package/scripts/run/merge/run-merge.ts +31 -22
  770. package/scripts/run/progress/run-progress-args.ts +4 -4
  771. package/scripts/run/progress/run-progress-cli.ts +39 -50
  772. package/scripts/run/progress/run-progress-clock.ts +25 -32
  773. package/scripts/run/progress/run-progress-config.ts +6 -9
  774. package/scripts/run/progress/run-progress-read.ts +9 -10
  775. package/scripts/run/progress/run-progress.ts +48 -53
  776. package/scripts/run/review/run-review-cli.ts +6 -6
  777. package/scripts/run/review/run-review-steps.ts +6 -6
  778. package/scripts/run/review/run-review.ts +9 -11
  779. package/scripts/run/run-cli-fault.ts +29 -0
  780. package/scripts/run/run-ending-cli.ts +3 -3
  781. package/scripts/run/run-ending.ts +10 -14
  782. package/scripts/run/run-halfrun-resume.ts +6 -8
  783. package/scripts/run/run-headless.ts +25 -12
  784. package/scripts/run/run-invocation.ts +17 -22
  785. package/scripts/run/run-label.ts +7 -5
  786. package/scripts/run/run-liveness-cli.ts +19 -6
  787. package/scripts/run/run-liveness.ts +27 -38
  788. package/scripts/run/run-next-cli.ts +5 -9
  789. package/scripts/run/run-next.ts +4 -5
  790. package/scripts/run/run-parent-cut-hook.ts +10 -12
  791. package/scripts/run/run-preflight.ts +25 -29
  792. package/scripts/run/run-prep-cli.ts +17 -13
  793. package/scripts/run/run-prep-locate.ts +4 -5
  794. package/scripts/run/run-prep.ts +7 -10
  795. package/scripts/run/run-prrun-resume.ts +2 -2
  796. package/scripts/run/run-report-cli.ts +4 -4
  797. package/scripts/run/run-report.ts +9 -14
  798. package/scripts/run/run-retrospective.ts +3 -3
  799. package/scripts/run/run-section.ts +42 -0
  800. package/scripts/run/run-stage-read.ts +2 -2
  801. package/scripts/run/run-stage.ts +6 -4
  802. package/scripts/run/run-status-cli.ts +7 -5
  803. package/scripts/run/run-status.ts +6 -7
  804. package/scripts/run/run-step-cli.ts +13 -15
  805. package/scripts/run/run-step.ts +62 -48
  806. package/scripts/run/run-stop-notify.ts +7 -8
  807. package/scripts/run/run-stranded-cli.ts +1 -1
  808. package/scripts/run/run-stranded-detect.ts +4 -4
  809. package/scripts/run/run-stranded.ts +11 -13
  810. package/scripts/run/run-tail-cli.ts +15 -16
  811. package/scripts/run/run-tail.ts +14 -33
  812. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  813. package/scripts/run/run-watcher-guard.ts +11 -12
  814. package/scripts/run/run-watcher-hook.ts +6 -12
  815. package/scripts/run/ship/run-ship-cli.ts +67 -33
  816. package/scripts/run/ship/run-ship-detach.ts +15 -13
  817. package/scripts/run/ship/run-ship-lock.ts +1 -1
  818. package/scripts/run/ship/run-ship-next.ts +7 -8
  819. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  820. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  821. package/scripts/run/ship/run-ship-probe.ts +4 -4
  822. package/scripts/run/ship/run-ship-return.ts +1 -1
  823. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  824. package/scripts/run/ship/run-ship-review.ts +12 -14
  825. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  826. package/scripts/run/ship/run-ship-stage.ts +80 -26
  827. package/scripts/run/ship/run-ship-steps.ts +26 -16
  828. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  829. package/scripts/run/ship/run-ship-sync.ts +9 -8
  830. package/scripts/run/ship/run-ship.ts +17 -32
  831. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  832. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  833. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  834. package/scripts/run/tidy/run-tidy.ts +4 -3
  835. package/scripts/run/wake/run-wake-cli.ts +27 -33
  836. package/scripts/run/wake/run-wake-describe.ts +76 -29
  837. package/scripts/run/wake/run-wake-driver.ts +14 -14
  838. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  839. package/scripts/run/wake/run-wake-loop.ts +13 -21
  840. package/scripts/run/wake/run-wake-restart.ts +4 -5
  841. package/scripts/run/wake/run-wake-session.ts +23 -27
  842. package/scripts/run/wake/run-wake.ts +57 -328
  843. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  844. package/scripts/safe-chain/pack-hook.ts +2 -2
  845. package/scripts/safe-chain/preinstall-command.ts +2 -2
  846. package/scripts/security/security-audit-logic.ts +1 -1
  847. package/scripts/security/security-audit-provision-logic.ts +1 -1
  848. package/scripts/security/security-audit-provision.ts +2 -2
  849. package/scripts/security/security-audit.ts +5 -5
  850. package/scripts/security/security-updates-logic.ts +2 -3
  851. package/scripts/security/security-updates.ts +2 -4
  852. package/scripts/self-sync-guard/index.ts +1 -1
  853. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  854. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  855. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  856. package/scripts/sonar/sonar-hotspots.ts +1 -1
  857. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  858. package/scripts/sonar/sonar-new-code.ts +1 -1
  859. package/scripts/sonar/sonar-project.ts +1 -1
  860. package/scripts/split/split-assess-cli.ts +1 -1
  861. package/scripts/split/split-assess.ts +3 -3
  862. package/scripts/sync/directory-copy-guard.ts +2 -3
  863. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  864. package/scripts/sync/managed-config-scope.ts +4 -4
  865. package/scripts/sync/plugin-skill-directories.ts +2 -2
  866. package/scripts/sync/reconcile-templates.ts +17 -8
  867. package/scripts/sync/removed-skill-manifest.ts +2 -3
  868. package/scripts/sync/sync-ai-files.ts +7 -7
  869. package/scripts/sync/sync-configs.ts +30 -3
  870. package/scripts/sync/sync-hook-safety.ts +2 -2
  871. package/scripts/sync/sync.ts +23 -10
  872. package/scripts/sync/synced-paths.ts +2 -1
  873. package/scripts/sync/workflow-pin-logic.ts +1 -1
  874. package/scripts/test/test-declared-changed.ts +4 -4
  875. package/scripts/test/test-declared-logic.ts +2 -3
  876. package/scripts/test/test-declared-match.ts +25 -4
  877. package/scripts/test/test-declared.ts +26 -9
  878. package/scripts/test/test-red-commit.ts +3 -2
  879. package/scripts/test/test-red-logic.ts +7 -14
  880. package/scripts/test/test-red.ts +12 -47
  881. package/scripts/test/test-related-scope.ts +2 -3
  882. package/scripts/test/test-related.ts +3 -3
  883. package/scripts/test/test-type-logic.ts +1 -2
  884. package/scripts/test/test-unit-guard.ts +13 -17
  885. package/scripts/test/unit-worker-share.ts +7 -8
  886. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  887. package/scripts/time-runtime/time-background.ts +17 -21
  888. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  889. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  890. package/scripts/time-runtime/time-bundles.ts +11 -12
  891. package/scripts/time-runtime/time-call-identity.ts +1 -1
  892. package/scripts/time-runtime/time-command-key.ts +2 -2
  893. package/scripts/time-runtime/time-density-hook.ts +8 -11
  894. package/scripts/time-runtime/time-density.ts +5 -5
  895. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  896. package/scripts/time-runtime/time-format.ts +5 -5
  897. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  898. package/scripts/time-runtime/time-instant.ts +1 -1
  899. package/scripts/time-runtime/time-markers.ts +15 -19
  900. package/scripts/time-runtime/time-phase-names.ts +3 -3
  901. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  902. package/scripts/time-runtime/time-round-trips.ts +20 -23
  903. package/scripts/time-runtime/time-shell.ts +8 -8
  904. package/scripts/time-runtime/time-single-check.ts +1 -2
  905. package/scripts/time-runtime/time-spans.ts +35 -40
  906. package/scripts/time-runtime/time-tool-call.ts +15 -16
  907. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  908. package/scripts/time-runtime/time-writes.ts +5 -5
  909. package/scripts/ui/ui-routes-cli.ts +1 -2
  910. package/scripts/ui/ui-routes.ts +1 -2
  911. package/scripts/version/bump-version.ts +1 -1
  912. package/scripts/version/fresh-metadata-cache.ts +2 -2
  913. package/scripts/version/latest-corepack.ts +129 -98
  914. package/scripts/version/latest-lane-guard.ts +1 -1
  915. package/scripts/version/latest-scope-cli.ts +2 -2
  916. package/scripts/version/latest-stamp.ts +1 -2
  917. package/scripts/version/latest-update.ts +2 -2
  918. package/scripts/version/npm-registry.ts +2 -2
  919. package/scripts/version/package-manager-version.ts +18 -0
  920. package/scripts/version/publishable-range-check.ts +2 -1
  921. package/scripts/version/publishable-range.ts +1 -1
  922. package/scripts/version/release-age.ts +11 -11
  923. package/scripts/version/release-hold.ts +2 -2
  924. package/scripts/version/safe-chain-version-update.ts +3 -3
  925. package/scripts/version/version-check-logic.ts +2 -3
  926. package/scripts/version/version-check.ts +1 -2
  927. package/scripts/version/version-command-config.ts +2 -2
  928. package/scripts/version/version-commands.ts +3 -3
  929. package/scripts/version/version-remote.ts +4 -4
  930. package/scripts/version/version-targets.ts +2 -2
  931. package/templates/gitignore +7 -0
  932. package/templates/workflows/github-release.yml +4 -0
  933. package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
  934. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  935. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  936. package/scripts/backlog/backlog-restructure.ts +0 -152
  937. package/scripts/rules/issue-fold-rule.ts +0 -72
  938. package/scripts/rules/wip-cap.ts +0 -63
  939. package/scripts/run/run-issue-number.ts +0 -19
@@ -3,7 +3,7 @@
3
3
  // Kept separate from the map that consumes it (`repo-map-logic.ts`) because the shapes a remote can
4
4
  // take are the part with real variety: a single machine's siblings were measured carrying SSH,
5
5
  // an SSH host alias, HTTPS with embedded credentials and a trailing slash, and plain HTTPS — all
6
- // four pointing at the same repository (joshuafolkken/kit#869).
6
+ // four pointing at the same repository.
7
7
 
8
8
  // A repository's identity on GitHub. The `owner` half is what the discovery map filters on, so it is
9
9
  // derived here from the remote and never from a directory name.
@@ -88,7 +88,7 @@ function parse_url_like(url: string): RepoIdentity | undefined {
88
88
 
89
89
  // `owner/repo` for a GitHub remote, or nothing for every other remote. Returning nothing is the
90
90
  // exclusion the owner restriction depends on: a self-hosted or third-party host never reaches the
91
- // owner comparison at all (joshuafolkken/kit#869).
91
+ // owner comparison at all.
92
92
  function parse_origin_url(url: string): RepoIdentity | undefined {
93
93
  const trimmed = url.trim()
94
94
  if (trimmed === '') return undefined
@@ -147,7 +147,7 @@ function section_groups(lines: ReadonlyArray<string>): Array<Array<string>> {
147
147
  }
148
148
 
149
149
  // The `url` of every `[remote "…"]` section, in config order — the candidates `gh` picks its base
150
- // repository from when it expands the `{owner}` placeholder (joshuafolkken/kit#3188).
150
+ // repository from when it expands the `{owner}` placeholder.
151
151
  function parse_remote_urls_from_config(content: string): Array<string> {
152
152
  const lines = content.split('\n').map((line) => line.trim())
153
153
 
@@ -2,8 +2,8 @@
2
2
  import { fileURLToPath } from 'node:url'
3
3
  import { repo_party, type Party } from './repo-party'
4
4
 
5
- // `josh repo:party [<owner/repo>]` — say whether a repository is first-party or third-party
6
- // (joshuafolkken/kit#2122). A command rather than a paragraph, for the reason `josh latest:scope` is
5
+ // `josh repo:party [<owner/repo>]` — say whether a repository is first-party or third-party.
6
+ // A command rather than a paragraph, for the reason `josh latest:scope` is
7
7
  // one: a rule an agent applies from memory is a rule an agent can talk itself out of, and this one is
8
8
  // argued against at exactly the moment a workflow wants to write to another repository.
9
9
  //
@@ -1,7 +1,7 @@
1
1
  import { repo_discovery } from './repo-discovery'
2
2
  import { repo_origin } from './repo-origin'
3
3
 
4
- // **First-party vs third-party, computed rather than judged** (joshuafolkken/kit#2122). `CLAUDE.md`
4
+ // **First-party vs third-party, computed rather than judged**. `CLAUDE.md`
5
5
  // and `upstream-interrupt.md` both declared the test mechanical — owner equality between the target
6
6
  // repository and the session's — yet nothing computed it: three prose spots restated the manual
7
7
  // `gh api … --jq .owner.login`, and whether an owner had actually been read was left to trust. This is
@@ -56,7 +56,7 @@ function remote_owners(repository_path: string): Array<string | undefined> {
56
56
  .map((url) => repo_origin.parse_origin_url(url)?.owner)
57
57
  }
58
58
 
59
- // Every owner `gh` could expand the `{owner}` placeholder to (joshuafolkken/kit#3188). `GH_REPO`
59
+ // Every owner `gh` could expand the `{owner}` placeholder to. `GH_REPO`
60
60
  // (`[HOST/]OWNER/REPO`) overrides the remotes outright; otherwise `gh` picks its base repository among
61
61
  // the GitHub remotes — `upstream` ahead of `origin`, or a `gh repo set-default` choice — so in a fork
62
62
  // checkout it can expand to the upstream owner. Answering the whole candidate set rather than
@@ -7,7 +7,7 @@ import { PROBE_TIMEOUT_MS } from '#scripts/lib/timeouts'
7
7
  import { KIT_PACKAGE_NAME } from '#scripts/version/kit-descriptor'
8
8
  import { z } from 'zod'
9
9
 
10
- // The consumer-setup checks `josh doctor` runs in a repository that installs kit (joshuafolkken/kit#1930).
10
+ // The consumer-setup checks `josh doctor` runs in a repository that installs kit.
11
11
  // Each failure was a way the distribution went silently wrong: the plugin never installed so skills
12
12
  // were missing, `core.hooksPath` set so lefthook installed nothing, the `CLAUDE.md` pointer resolving
13
13
  // to a file that is not there before `pnpm install`, and secretlint not runnable so the pre-commit
@@ -16,8 +16,7 @@ const AUTO_MERGE_WORKFLOW_PATH = '.github/workflows/dependabot-auto-merge.yml'
16
16
  // The command that needs the repository's "Allow auto-merge" setting, and the only thing in the
17
17
  // workflow that does. Matching it rather than the filename is what keeps the report tied to the
18
18
  // prerequisite: a file of that name which never calls `--auto` creates no prerequisite, and a
19
- // consumer's own auto-merge workflow which does creates the same one kit's does
20
- // (joshuafolkken/kit#834).
19
+ // consumer's own auto-merge workflow which does creates the same one kit's does.
21
20
  const AUTO_MERGE_COMMAND = 'gh pr merge --auto'
22
21
  const YAML_COMMENT_PREFIX = '#'
23
22
 
@@ -45,7 +44,7 @@ function resolve_pnpm_global_josh(): string | undefined {
45
44
 
46
45
  // Whether the working directory is provably *outside* a git work tree. Purely local — no network,
47
46
  // and it does not depend on `gh` being installed or authenticated, which is what makes it usable to
48
- // decide whether a repository-scoped check applies at all (joshuafolkken/kit#805).
47
+ // decide whether a repository-scoped check applies at all.
49
48
  //
50
49
  // An empty root from a successful run is not an answer, so it is undetermined rather than inside.
51
50
  function classify_top_level(top_level: string): GitTopLevel {
@@ -67,8 +66,8 @@ function classify_git_failure(exit_code: number | undefined, stderr: string): Gi
67
66
  // directory instead would skip the check in every subdirectory of a consumer repository.
68
67
  //
69
68
  // `outside` and `undetermined` are kept apart deliberately: only proof of absence may skip the
70
- // caller's check, because reporting an unknown as a clean result is the false all-clear
71
- // joshuafolkken/kit#805 exists to remove. See the two classifiers above for what proves what.
69
+ // caller's check, because reporting an unknown as a clean result is a false all-clear. See the two
70
+ // classifiers above for what proves what.
72
71
  function resolve_git_top_level(): GitTopLevel {
73
72
  // The C locale `toplevel` asks under is what keeps the stderr match below from failing on a
74
73
  // translated message and bringing the spurious warning back.
@@ -162,7 +161,7 @@ function has_marked_project_file(
162
161
  }
163
162
 
164
163
  // Whether the project has received kit's `.github/dependabot.yml`. The npm entry's
165
- // `open-pull-requests-limit: 0` is what creates the prerequisite (joshuafolkken/kit#803), so that is
164
+ // `open-pull-requests-limit: 0` is what creates the prerequisite, so that is
166
165
  // what is matched.
167
166
  function has_distributed_dependabot_config(start: string, boundary?: string): boolean {
168
167
  return has_marked_project_file(start, DEPENDABOT_CONFIG_PATH, boundary, (content) =>
@@ -181,7 +180,7 @@ function is_auto_merge_command_line(line: string): boolean {
181
180
  }
182
181
 
183
182
  // Whether the project runs a Dependabot auto-merge workflow. `gh pr merge --auto` is what needs the
184
- // repository's "Allow auto-merge" setting, so that is what is matched (joshuafolkken/kit#834).
183
+ // repository's "Allow auto-merge" setting, so that is what is matched.
185
184
  function has_auto_merge_workflow(start: string, boundary?: string): boolean {
186
185
  return has_marked_project_file(start, AUTO_MERGE_WORKFLOW_PATH, boundary, (content) =>
187
186
  content.split('\n').some((line) => is_auto_merge_command_line(line)),
@@ -79,7 +79,7 @@ function decide_reclaim(
79
79
 
80
80
  // The discovered map, as `josh doctor` prints it. Printing it is what makes a wrong map noticeable:
81
81
  // the map decides which checkouts other commands write to, and a silent one would only be found by
82
- // the write landing in the wrong place (joshuafolkken/kit#869).
82
+ // the write landing in the wrong place.
83
83
  function format_repository_map(map: ReadonlyMap<string, string>): string {
84
84
  if (map.size === 0) return [REPOSITORY_MAP_HEADING, NO_REPOSITORIES_FOUND].join('\n')
85
85
  const rows: Array<string> = []
@@ -4,7 +4,7 @@ import { lane_environment } from '#scripts/lane/lane-environment'
4
4
  import { file_reader } from '#scripts/lib/read-file'
5
5
 
6
6
  // Each discovered repository's port seed and the dev / preview ports it resolves to, plus which
7
- // repositories share a seed (joshuafolkken/kit#1494).
7
+ // repositories share a seed.
8
8
  //
9
9
  // The formula `seed × 10 + lane` makes distinct seeds occupy disjoint bands, but two repositories on
10
10
  // the *same* seed still collide — as do the many that never set one and sit together on seed 0. That
@@ -21,8 +21,7 @@ const NOT_ON_PATH = '(not on PATH)'
21
21
  const SELF_DIR = path.dirname(fileURLToPath(import.meta.url))
22
22
  // Deliberately smaller than the setting query's budget: the two run back to back, so `doctor`'s
23
23
  // worst case is the git probe plus this plus GH_TIMEOUT_MS — 2000 + 3000 + 5000, ten seconds. That
24
- // keeps a command which made no network calls at all before joshuafolkken/kit#805 prompt enough to
25
- // stay usable when the network is unreachable.
24
+ // keeps the command prompt enough to stay usable when the network is unreachable.
26
25
  const REPO_LOOKUP_TIMEOUT_MS = 3000
27
26
 
28
27
  // Where the local applicability gates look for the artifacts that decide whether a report applies.
@@ -108,7 +107,7 @@ function resolve_gate_scope(git: GitTopLevel): GateScope | undefined {
108
107
  }
109
108
 
110
109
  // Which prerequisites this repository actually has, decided locally so the answer does not depend on
111
- // `gh` working. The two are independent: a consumer synced before joshuafolkken/kit#834 has the
110
+ // `gh` working. The two are independent: a consumer synced from an older kit can have the
112
111
  // Dependabot config and no auto-merge workflow, and a repository that only ever added an auto-merge
113
112
  // workflow of its own has the second prerequisite and not the first.
114
113
  function resolve_applicable(scope: GateScope): ApplicableSettings {
@@ -125,7 +124,7 @@ function has_any_applicable(applicable: ApplicableSettings): boolean {
125
124
  }
126
125
 
127
126
  // Everything past the gate reports, including a failed lookup: `could not be read` is informative
128
- // while silence is the false all-clear joshuafolkken/kit#805 exists to remove.
127
+ // while silence would be a false all-clear.
129
128
  function report_applicable_settings(
130
129
  applicable: ApplicableSettings,
131
130
  repo: string | undefined,
@@ -140,7 +139,7 @@ function report_applicable_settings(
140
139
 
141
140
  // Last, and after the local diagnosis: this is the only part of `doctor` that touches the network,
142
141
  // and `doctor` is what a user runs when the install is already broken. Offline or behind a hanging
143
- // proxy the PATH report and `--fix` must still complete (joshuafolkken/kit#805).
142
+ // proxy the PATH report and `--fix` must still complete.
144
143
  //
145
144
  // Applicability is decided by the artifact rather than by the directory. `doctor` diagnoses the
146
145
  // global install and is routinely run from a home directory or from a clone of an unrelated project;
@@ -166,7 +165,7 @@ function report_repository_settings(git: GitTopLevel): void {
166
165
 
167
166
  // The discovery map, printed for whichever repository `doctor` is standing in. Nothing is printed
168
167
  // from outside a repository: discovery is anchored on the current repository's own owner, so without
169
- // one there is no map to be right or wrong about (joshuafolkken/kit#869).
168
+ // one there is no map to be right or wrong about.
170
169
  function report_repository_map(git: GitTopLevel): void {
171
170
  if (git.state !== 'inside') return
172
171
 
@@ -177,7 +176,7 @@ function report_repository_map(git: GitTopLevel): void {
177
176
  }
178
177
 
179
178
  // Each discovered repository's port seed and the ports it resolves to, and any seed shared by more
180
- // than one of them (joshuafolkken/kit#1494). Anchored on the same map as `report_repository_map`, so
179
+ // than one of them. Anchored on the same map as `report_repository_map`, so
181
180
  // it prints from inside a repository and nowhere else.
182
181
  function report_port_seeds(git: GitTopLevel): void {
183
182
  if (git.state !== 'inside') return
@@ -203,7 +202,7 @@ function consumer_root(git: GitTopLevel): string {
203
202
  return git.state === 'inside' ? git.top_level : PROJECT_ROOT
204
203
  }
205
204
 
206
- // The port seed table is opt-in since joshuafolkken/kit#1930: it discovers every sibling repository
205
+ // The port seed table is opt-in: it discovers every sibling repository
207
206
  // and was the slowest, least diagnostic part of the default output. `--ports` brings it back.
208
207
  function run_reports(ctx: DoctorContext, git: GitTopLevel, options: DoctorOptions): void {
209
208
  print_report(ctx)
@@ -220,7 +219,7 @@ function main(): void {
220
219
 
221
220
  // Resolved once and shared: `doctor` is what a user runs when things are already broken, and a
222
221
  // second `git rev-parse` would add a second timeout to a command whose whole contract is to stay
223
- // responsive when git itself is hanging (joshuafolkken/kit#805).
222
+ // responsive when git itself is hanging.
224
223
  const git = doctor_io.resolve_git_top_level()
225
224
 
226
225
  run_reports(ctx, git, options)
@@ -1,4 +1,4 @@
1
- // What a `backlogrun` parent reads, and what that trims from a full read (joshuafolkken/kit#2256).
1
+ // What a `backlogrun` parent reads, and what that trims from a full read.
2
2
  //
3
3
  // **The parent is the scheduler, and it never implements.** It reads `backlog:next`, dispatches each
4
4
  // child in its own delegated `fullrun` unit, opens lanes, runs the progress watcher and the hand-off,
@@ -17,9 +17,8 @@ import { read_set_trim } from './read-set-trim'
17
17
  const BACKLOGRUN = 'backlogrun'
18
18
 
19
19
  // **The `SKILL.md` sections the `backlogrun` parent never uses.** It edits no rule mid-run (§3, read
20
- // only on an editing turn). The implementer-only rules it used to skip — the `into` target, the
21
- // working-tree hold, the Issue's comments — are single rows of §2's table since joshuafolkken/kit#3174,
22
- // so there is no section of them left to trim.
20
+ // only on an editing turn). The implementer-only rules — the `into` target, the working-tree hold,
21
+ // the Issue's comments — are single rows of §2's table, so there is no section of them to trim.
23
22
  const UNUSED_SKILL_SECTIONS: ReadonlyArray<string> = [
24
23
  '3. What stays resident, and what is read from here',
25
24
  ]
@@ -30,9 +29,9 @@ const SKIPPED_POINT_OF_USE: ReadonlySet<string> = new Set<string>()
30
29
 
31
30
  // **The parent runs the end-of-run retrospective** (`retrospective.md`) when `run:step` prints it, but its
32
31
  // manifest names `retrospective.md` only through `backlogrun-steps.md` — one hop further than the
33
- // derivation follows — so the parent's reach names it (joshuafolkken/kit#3078). **It polls a
32
+ // derivation follows — so the parent's reach names it. **It polls a
34
33
  // delegated unit that went silent** through `backlogrun-recovery.md`, named only from
35
- // `backlogrun-child.md`, so the reach names that too (joshuafolkken/kit#3175).
34
+ // `backlogrun-child.md`, so the reach names that too.
36
35
  const REACHED_POINT_OF_USE: ReadonlySet<string> = new Set([
37
36
  'retrospective.md',
38
37
  'backlogrun-recovery.md',
@@ -1,10 +1,8 @@
1
- // The character cap a Bash result is truncated at, read from the settings file rather than restated
2
- // (joshuafolkken/kit#1797). Every entry-read document is larger than it, so a `cat` of one hands back
3
- // a middle-truncated preview and the file is then read a second time — the two wasted requests #1797
4
- // measured. A number copied into code would be a second declaration of the cap and would drift the
5
- // first time the settings changed; the harness's own default stands in only where the file declares
6
- // nothing. Split out of `entry-read-set.ts` in joshuafolkken/kit#2161 to keep that file under its
7
- // line ceiling.
1
+ // The character cap a Bash result is truncated at, read from the settings file rather than restated.
2
+ // Every entry-read document is larger than it, so a `cat` of one hands back
3
+ // a middle-truncated preview and the file is then read a second time. A number copied into code would
4
+ // be a second declaration of the cap and would drift the first time the settings changed; the
5
+ // harness's own default stands in only where the file declares nothing.
8
6
 
9
7
  import path from 'node:path'
10
8
  import { document_section } from './document-section'
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
2
 
3
3
  // Where `capped-print.ts` writes the parts of an over-cap output, and how a path is recognized as one
4
- // of them (joshuafolkken/kit#3332). Both halves live here so the writer and the investigation guard,
4
+ // of them. Both halves live here so the writer and the investigation guard,
5
5
  // which must not count a read of a part as reading the Issue's subject, share one spelling of the
6
6
  // shape — kept free of the writer's own imports, since the guard runs as a hook on every tool call.
7
7
 
@@ -6,7 +6,7 @@ import { bash_output_cap_reader } from './bash-output-cap'
6
6
  import { capped_print_part } from './capped-print-part'
7
7
 
8
8
  // Prints a command's output whole when it fits under the Bash output cap, and as part files when it
9
- // does not (joshuafolkken/kit#3143). Past `BASH_MAX_OUTPUT_LENGTH` Claude Code saves the output and
9
+ // does not. Past `BASH_MAX_OUTPUT_LENGTH` Claude Code saves the output and
10
10
  // hands back a 2 KB preview, and the run spends a turn reading the saved file — 224 overflows and 132
11
11
  // re-reads over one day's sessions, `doc:section` and `issue:read` the two most frequent `josh` sources.
12
12
  //
@@ -1,32 +1,25 @@
1
1
  // The byte ceiling for every agent-read document NO entry reads — the fallback budget, a ratchet.
2
2
  //
3
- // **This is now the secondary budget** (joshuafolkken/kit#2257). The primary one is the entry total
4
- // (`entry-read-budget.ts`): a document a workflow entry reads is held by that entry's total and
5
- // carries no ceiling here, so neither budget holds it twice. What is left for this list is the
6
- // documents no entry reads — the reference documents a human browses, drawn by
7
- // `document-reachability.ts` from `read:set`'s output rather than by a hand-written table.
3
+ // **This is the secondary budget.** The primary one is the entry total (`entry-read-budget.ts`): a
4
+ // document a workflow entry reads is held by that entry's total and carries no ceiling here, so
5
+ // neither budget holds it twice. What is left for this list is the documents no entry reads — the
6
+ // reference documents a human browses, drawn by `document-reachability.ts` from `read:set`'s output
7
+ // rather than by a hand-written table.
8
8
  //
9
- // Agent-read documents (`.claude/skills/**/*.md`, `prompts/**/*.md` and the two `docs/josh-commands*.md` references) have
10
- // been shrunk by reduction epics (joshuafolkken/kit#1929, joshuafolkken/kit#1924) only to swell
11
- // again, because nothing held the reduced size — a PR that adds a few lines at a time goes unseen
12
- // until the next reduction epic. This list is that hold for the unreached ones:
13
- // `document-byte-budget.test.ts` fails `pnpm josh gate` when such a document grows past its recorded
14
- // ceiling, when the list names a file that no longer exists, or when an unreached file has no entry
15
- // here.
9
+ // Agent-read documents (`.claude/skills/**/*.md`, `prompts/**/*.md` and the `docs/josh-commands*.md`
10
+ // references) swell when nothing holds their size — a PR that adds a few lines at a time goes unseen.
11
+ // This list is that hold for the unreached ones: `document-byte-budget.test.ts` fails
12
+ // `pnpm josh gate` when such a document grows past its recorded ceiling, when the list names a file
13
+ // that no longer exists, or when an unreached file has no entry here.
16
14
  //
17
15
  // THE RECORDED CEILING IS BLOCK-QUANTIZED — this is what stops parallel command-adding lanes from
18
- // serializing on this file (joshuafolkken/kit#2231). Each entry's `bytes` is not the document's exact
19
- // size but the smallest multiple of `BLOCK_BYTES` at or above it, and that value IS the ceiling. A
20
- // document that grows within its current block needs no edit here, so most command-adding PRs leave
21
- // this file untouched rather than bumping a shared line; a document that crosses a block boundary
22
- // bumps to the next multiple — the same value from every lane, an identical change git auto-merges,
23
- // not a hand-picked slack unit two branches fight over. Growth is still bounded: the block is the
24
- // whole of a document's headroom, so it cannot swell without a visible, deterministic bump in the
25
- // diff. This replaced the earlier exact-size-plus-512-slack ratchet, whose tight slack forced
26
- // `docs/josh-commands.md` — pinned at its ceiling — to bump on every command addition, the
27
- // serialization point #2231 removed. It also retired the bespoke `JOSH_COMMANDS_CEILING_BYTES` hard
28
- // cap and its per-bump changelog comment: the uniform block ratchet now holds that document like any
29
- // other, so the second cap was a second line to bump for no added hold.
16
+ // serializing on this file. Each entry's `bytes` is not the document's exact size but the smallest
17
+ // multiple of `BLOCK_BYTES` at or above it, and that value IS the ceiling. A document that grows
18
+ // within its current block needs no edit here, so most command-adding PRs leave this file untouched
19
+ // rather than bumping a shared line; a document that crosses a block boundary bumps to the next
20
+ // multiple — the same value from every lane, an identical change git auto-merges, not a hand-picked
21
+ // slack unit two branches fight over. Growth is still bounded: the block is the whole of a document's
22
+ // headroom, so it cannot swell without a visible, deterministic bump in the diff.
30
23
  //
31
24
  // HOW TO RAISE (or LOWER) A CEILING — this file is the only place, on purpose. When the gate reports a
32
25
  // document over its ceiling, copy the exact value the message names (the next block multiple) into
@@ -65,39 +58,25 @@ function block_ceiling(size: number): number {
65
58
  // unreached file, so the definition cannot rot as documents move on or off the execution path.
66
59
  const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
67
60
  { path: '.claude/skills/dependency-update/SKILL.md', bytes: 8192 },
68
- // joshuafolkken/kit#3173 split the waves and the `epic:bundle` detail into lazily read references.
69
- { path: '.claude/skills/epic-commands/SKILL.md', bytes: 20_480 },
70
- { path: '.claude/skills/epic-commands/epic-bundle.md', bytes: 12_288 },
71
- { path: '.claude/skills/epic-commands/execution-waves.md', bytes: 12_288 },
61
+ { path: '.claude/skills/epic-commands/SKILL.md', bytes: 16_384 },
62
+ { path: '.claude/skills/epic-commands/epic-bundle.md', bytes: 8192 },
63
+ { path: '.claude/skills/epic-commands/execution-waves.md', bytes: 8192 },
72
64
  { path: '.claude/skills/verify-ui/SKILL.md', bytes: 8192 },
65
+ { path: '.claude/skills/workflow-commands/backlogrun-handoff-report.md', bytes: 4096 },
73
66
  { path: '.claude/skills/workflow-commands/fullrun-steps.md', bytes: 8192 },
74
67
  { path: '.claude/skills/workflow-commands/into-target.md', bytes: 4096 },
75
68
  { path: '.claude/skills/workflow-commands/issue-comments.md', bytes: 8192 },
76
69
  { path: '.claude/skills/workflow-commands/issue-fold-existing.md', bytes: 4096 },
77
- { path: '.claude/skills/workflow-commands/needs-human-review.md', bytes: 8192 },
70
+ { path: '.claude/skills/workflow-commands/needs-human-review.md', bytes: 4096 },
78
71
  { path: '.claude/skills/workflow-commands/observation-filing.md', bytes: 12_288 },
79
- // joshuafolkken/kit#3176 moved the ledger out of `observation-filing.md`, read only when it appends.
80
72
  { path: '.claude/skills/workflow-commands/observation-ledger.md', bytes: 12_288 },
81
- // `pre-gate-cut.md` left this per-document budget in joshuafolkken/kit#2289: it became a point-of-use
82
- // document, so its bytes are now held by every entry's total read (`entry-read-budget.ts`) and the
83
- // two budgets must not hold it twice — the reachability line moved it from `unreached` to
84
- // `point-of-use`.
85
73
  { path: '.claude/skills/workflow-commands/prerequisite.md', bytes: 8192 },
86
- { path: '.claude/skills/workflow-commands/target-repository.md', bytes: 8192 },
74
+ { path: '.claude/skills/workflow-commands/target-repository.md', bytes: 4096 },
87
75
  { path: '.claude/skills/workflow-commands/working-tree-hold.md', bytes: 8192 },
88
- // joshuafolkken/kit#2998 split the reference: the developer commands stay, the rest moved out.
89
- // joshuafolkken/kit#3175 raised it: the supervisor, provider-table and answer-to-budget prose moved
90
- // here out of `backlogrun-steps.md`, so a run reads it only when it asks about those commands.
91
- // joshuafolkken/kit#3277 moved the run, lane and session commands to `docs/josh-commands-run.md`.
92
- // joshuafolkken/kit#3280 moved the issue, epic, backlog and review commands to
93
- // `docs/josh-commands-backlog.md`.
94
- // joshuafolkken/kit#3278 moved `josh latest` and `josh overrides` — commands a person types — from
95
- // the automation page to `docs/josh-commands.md`, which grew one block and the automation page shrank one.
96
- { path: 'docs/josh-commands-automation.md', bytes: 49_152 },
97
- { path: 'docs/josh-commands-run.md', bytes: 57_344 },
76
+ { path: 'docs/josh-commands-automation.md', bytes: 53_248 },
77
+ { path: 'docs/josh-commands-run.md', bytes: 65_536 },
98
78
  { path: 'docs/josh-commands-backlog.md', bytes: 57_344 },
99
- { path: 'docs/josh-commands.md', bytes: 40_960 },
100
- // joshuafolkken/kit#3279 moved the label sections here out of `docs/josh-commands-backlog.md`.
79
+ { path: 'docs/josh-commands.md', bytes: 45_056 },
101
80
  { path: 'docs/labels-and-run-states.md', bytes: 8192 },
102
81
  { path: 'prompts/coding-standards.md', bytes: 8192 },
103
82
  { path: 'prompts/collaboration-workflow.md', bytes: 8192 },
@@ -105,34 +84,25 @@ const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
105
84
  { path: 'prompts/collaboration-workflow/gh-rest.md', bytes: 8192 },
106
85
  { path: 'prompts/collaboration-workflow/glossary.md', bytes: 4096 },
107
86
  { path: 'prompts/collaboration-workflow/issue-citation.md', bytes: 4096 },
108
- // #3178 left the template and the judgement tables; the epic commands moved to `epic-commands`, the by-hand fallback stayed.
109
- { path: 'prompts/collaboration-workflow/issue-template.md', bytes: 8192 },
87
+ { path: 'prompts/collaboration-workflow/issue-template.md', bytes: 12_288 },
110
88
  { path: 'prompts/collaboration-workflow/operating-rules.md', bytes: 12_288 },
111
- // #3177 moved the rationale to `docs/maintainers/output-bounds-rationale.md`.
112
89
  { path: 'prompts/collaboration-workflow/output-bounds.md', bytes: 4096 },
113
90
  { path: 'prompts/collaboration-workflow/overview.md', bytes: 4096 },
114
- // #3178 replaced the review-chain restatement with a pointer to `chain-rule.md`.
115
91
  { path: 'prompts/collaboration-workflow/plan-comment.md', bytes: 8192 },
116
- { path: 'prompts/collaboration-workflow/principles.md', bytes: 12_288 },
92
+ { path: 'prompts/collaboration-workflow/principles.md', bytes: 16_384 },
117
93
  { path: 'prompts/collaboration-workflow/proposal-request.md', bytes: 4096 },
118
- // #3178 dropped the restatements `report:lint` and `chain-rule.md` already carry.
119
94
  { path: 'prompts/collaboration-workflow/report-format.md', bytes: 16_384 },
120
- // #3177 cut it to the four questions; the history and lists moved to `docs/maintainers/residency-rationale.md`.
121
95
  { path: 'prompts/collaboration-workflow/residency.md', bytes: 8192 },
122
- // #3186 moved the hook wiring and history to `docs/maintainers/rule-delivery-rationale.md`;
123
- // #3179 adds the `index-mutation` / `destructive-command` / `protected-file` entries.
124
- { path: 'prompts/collaboration-workflow/rule-delivery.md', bytes: 20_480 },
96
+ { path: 'prompts/collaboration-workflow/rule-delivery.md', bytes: 4096 },
125
97
  { path: 'prompts/collaboration-workflow/shell-body.md', bytes: 8192 },
126
- // #3177 moved the measurements and rejected mechanisms to `docs/maintainers/turn-batching-rationale.md`.
127
98
  { path: 'prompts/collaboration-workflow/turn-batching.md', bytes: 8192 },
128
99
  { path: 'prompts/collaboration-workflow/upstream-interrupt.md', bytes: 12_288 },
129
100
  { path: 'prompts/collaboration-workflow/wip-cap.md', bytes: 12_288 },
130
101
  { path: 'prompts/refactoring.md', bytes: 8192 },
131
- // #3180 moved the history and the lint-settled proofs to `docs/maintainers/`.
132
102
  { path: 'prompts/review-rubric.md', bytes: 16_384 },
133
103
  { path: 'prompts/review.md', bytes: 16_384 },
134
104
  { path: 'prompts/sonar-hotspot-handling.md', bytes: 8192 },
135
- { path: 'prompts/testing-guide.md', bytes: 20_480 },
105
+ { path: 'prompts/testing-guide.md', bytes: 16_384 },
136
106
  ]
137
107
 
138
108
  // The recorded ceiling for one path, or undefined when it carries no budget entry.
@@ -142,7 +112,7 @@ function recorded_bytes_for(relative_path: string): number | undefined {
142
112
 
143
113
  // The bytes an entry has left before its ceiling — the recorded ceiling minus the document's current
144
114
  // size. Negative when the document is already over. `josh bytes` prints it as the headroom before an
145
- // edit, the same number `josh lines` prints for code lines (joshuafolkken/kit#2176).
115
+ // edit, the same number `josh lines` prints for code lines.
146
116
  function remaining_bytes(recorded_bytes: number, current_bytes: number): number {
147
117
  return recorded_bytes - current_bytes
148
118
  }
@@ -169,9 +139,8 @@ function over_budget_message(
169
139
 
170
140
  // The failure message the staleness test raises. A recorded ceiling more than a block above the
171
141
  // document's actual size is a stale-loose ratchet: the document shrank across a block boundary and
172
- // its record was never lowered, so the ceiling no longer holds the reduction (the drift
173
- // joshuafolkken/kit#2125 swept). It names the file, its recorded ceiling, its actual size, and the
174
- // block multiple to lower the record to.
142
+ // its record was never lowered, so the ceiling no longer holds the reduction. It names the file,
143
+ // its recorded ceiling, its actual size, and the block multiple to lower the record to.
175
144
  function stale_budget_message(
176
145
  relative_path: string,
177
146
  recorded_bytes: number,
@@ -7,7 +7,7 @@ import { entry_read_budget } from './entry-read-budget'
7
7
  // The byte-ceiling check the gate's `document-byte-budget.test.ts` runs, made reachable on the fast
8
8
  // between-edits path — `josh lint:related` calls it over the files it already resolved so a mandated
9
9
  // documentation update that grows a document past its ceiling is caught in seconds rather than after
10
- // the 80–90-second gate (joshuafolkken/kit#2176). The ceiling and its message are
10
+ // the 80–90-second gate. The ceiling and its message are
11
11
  // `document-byte-budget.ts`'s alone: this adds no budget of its own, so the fast path can never hold
12
12
  // a different line from the gate, and widening one can never loosen the other.
13
13
  //
@@ -53,8 +53,8 @@ function over_budget_messages(
53
53
  .filter((message): message is string => message !== undefined)
54
54
  }
55
55
 
56
- // The entry-total counterpart: an entry over its recorded ceiling. This is the primary budget
57
- // (joshuafolkken/kit#2257), so an edit to a covered document — which grows an entry's total, not a
56
+ // The entry-total counterpart: an entry over its recorded ceiling. This is the primary budget,
57
+ // so an edit to a covered document — which grows an entry's total, not a
58
58
  // per-document ceiling — is caught here on the same fast path. Stale ceilings are left to the gate's
59
59
  // `entry-read-budget.test.ts`, exactly as the per-document staleness is: this path blocks growth.
60
60
  function entry_over_budget_message(root: string, entry: string): string | undefined {
@@ -107,7 +107,7 @@ function check_files(root: string, absolute_files: ReadonlyArray<string>): numbe
107
107
  // resolved change. `lint:related`'s own fallback lints a superset of the change, so the byte check
108
108
  // widens to the whole budget rather than an empty file list — otherwise the fallback would report
109
109
  // success on a tree it never read for bytes, and the green record the caller then writes would vouch
110
- // for a byte dimension it never checked (joshuafolkken/kit#2176).
110
+ // for a byte dimension it never checked.
111
111
  function check_all(root: string): number {
112
112
  const absolute_files = document_byte_budget.DOCUMENT_BYTE_BUDGET.map((entry) =>
113
113
  path.join(root, entry.path),
@@ -1,10 +1,9 @@
1
1
  // Where each agent-read document sits on the execution path, derived from `read:set` — never
2
- // hand-listed (joshuafolkken/kit#2257).
2
+ // hand-listed.
3
3
  //
4
- // **The per-document byte ceiling could not tell an entry read from a reference document.** A
4
+ // **The per-document byte ceiling cannot tell an entry read from a reference document.** A
5
5
  // document a run reads on every entry costs it every session; one nothing routes to costs it nothing.
6
- // The per-document ceiling held both to the same rule, so a reference document a human browses was
7
- // budgeted as tightly as the workflow text a run actually reads. This splits the corpus so the
6
+ // This splits the corpus so the
8
7
  // primary budget (`entry-read-budget.ts`) can be the total each entry reads, and the per-document
9
8
  // ceiling falls back to the documents no entry reaches.
10
9
  //
@@ -13,8 +12,8 @@
13
12
  // `CLAUDE.md` every entry loads. A document `read:set` never enumerates is `unreached`, and a
14
13
  // hand-written table of which is which would be the clone `CLAUDE.md` prohibits, drifting the first
15
14
  // time a trigger table row moved. `CLAUDE.md` is resident by construction rather than by the graph,
16
- // because it is loaded on every request whatever the entry — the misclassification joshuafolkken/kit#2257
17
- // singled out (a bare reachability walk drops it to "off-path", which is wrong).
15
+ // because it is loaded on every request whatever the entry (a bare reachability walk would drop it to
16
+ // "off-path", which is wrong).
18
17
  //
19
18
  // **The corpus is passed in, never imported here.** This module sits on the runtime path
20
19
  // (`lint-related` → `document-byte-check` → here), so it may not import `ai-document-fixture` — a test
@@ -26,7 +25,7 @@ import { entry_read_set } from './entry-read-set'
26
25
 
27
26
  // The always-resident rule document. It is not an entry read — every request carries it — so it is
28
27
  // named here rather than derived from a trigger table, and the entry-total budget adds it to every
29
- // entry's total so its growth is held (joshuafolkken/kit#2257).
28
+ // entry's total so its growth is held.
30
29
  const RESIDENT_BASE: ReadonlyArray<string> = ['CLAUDE.md']
31
30
  const WORKFLOW_DIRECTORY = '.claude/skills/workflow-commands'
32
31
 
@@ -104,7 +103,7 @@ function documents_labelled(
104
103
 
105
104
  // The documents an entry reads — resident plus point-of-use. The entry-total budget governs these;
106
105
  // the per-document ceiling falls back to the unreached rest, so neither holds a document the other
107
- // does (joshuafolkken/kit#2257). Both sides come from `read:set`, so no corpus is needed — which is
106
+ // does. Both sides come from `read:set`, so no corpus is needed — which is
108
107
  // what keeps the runtime caller (`document-byte-check`) free of the fixture the corpus lives in.
109
108
  function covered_documents(root: string = process.cwd()): Array<string> {
110
109
  return [...new Set([...resident_documents(root), ...point_of_use_documents()])].toSorted(
@@ -4,10 +4,10 @@ import { bash_output_cap_reader } from './bash-output-cap'
4
4
  import { document_section } from './document-section'
5
5
  import { document_section_cli } from './document-section-cli'
6
6
 
7
- // `josh doc:read <file>` — a Bash-cap-safe read path for a whole document (joshuafolkken/kit#2188).
7
+ // `josh doc:read <file>` — a Bash-cap-safe read path for a whole document.
8
8
  //
9
9
  // **A `cat` of a document larger than the Bash output cap is a truncated preview, then a second read.**
10
- // `read:set` measured one entry paying for the same five files twice this way (joshuafolkken/kit#1797):
10
+ // `read:set` measured one entry paying for the same five files twice this way:
11
11
  // the shell hands back a middle-truncated preview, so the file is read again with the `Read` tool. This
12
12
  // command is the path that avoids it — it never emits an over-cap document through the shell at all.
13
13
  //
@@ -1,5 +1,5 @@
1
1
  // Pulling machine-checkable references out of the distributed documents, so a few structural scans
2
- // can replace the ~140 per-phrase marker suites the documents used to carry (joshuafolkken/kit#1923).
2
+ // can replace the ~140 per-phrase marker suites the documents used to carry.
3
3
  // Every function here is a pure string extractor: it takes document text and returns the references
4
4
  // it names, which is what lets the scans that call it be checked on a synthetic string with a
5
5
  // deliberately broken reference in it.
@@ -18,12 +18,20 @@ const LABEL_PATTERN = /(?:labels\[\]=|\/labels\/|labels -f name=)([a-z][a-z0-9:_
18
18
  // quotes — `` `backlogrun-progress.md` → "The hand-off" ``. The code span is optional and a section
19
19
  // number may sit between the arrow and the heading (`` `SKILL.md` → §1, "…" ``): both forms are in
20
20
  // the documents, as is a name linked to its file (`` [`residency.md`](./residency.md) →「…」 ``), and a
21
- // pattern that skipped them let a broken reference of each form through (joshuafolkken/kit#3076).
21
+ // pattern that skipped them would let a broken reference of each form through.
22
22
  // The backreference pairs the code span's backticks, and the lookbehind keeps a bare name from
23
23
  // starting mid-path — inside a URL or after an unpaired backtick.
24
24
  const SECTION_PATTERN =
25
25
  /(?<![\w./:`-])(?<tick>`?)(?<file>[\w./-]+\.md)\k<tick>\s*→\s*(?:§\w+,\s*)?["「](?<heading>[^"」]+)["」]/gu
26
26
 
27
+ // A reference to a heading of the same document, which names no file: a quoted heading followed by
28
+ // `above` or `below`, or an arrow with no file name before it — `→ "The hand-off"`. A broken one
29
+ // sends the reader after a section that is not there as surely as a cross-document one does.
30
+ // A bare arrow is read only once every `file.md →` form is dropped, so a
31
+ // cross-document reference is never re-read as a reference to the document it sits in.
32
+ const ADJACENT_PATTERN = /["「](?<heading>[^"「」]+)["」]\s+(?:above|below)\b/gu
33
+ const BARE_ARROW_PATTERN = /→\s*(?:§\w+,\s*)?["「](?<heading>[^"「」]+)["」]/gu
34
+
27
35
  // A markdown link's `(target)`, dropped before the section scan so a linked name sits right before its
28
36
  // arrow — the link text already carries the file the reference names.
29
37
  const LINK_TARGET_PATTERN = /\]\([^)\s]*\)/gu
@@ -79,6 +87,20 @@ function section_references(text: string): Array<SectionReference> {
79
87
  .filter((reference) => !is_placeholder_file(reference.file))
80
88
  }
81
89
 
90
+ function headings_matching(text: string, pattern: RegExp): Array<string> {
91
+ return matches(text, pattern).map(({ groups }) => groups?.['heading'] ?? '')
92
+ }
93
+
94
+ function adjacent_references(text: string): Array<string> {
95
+ return headings_matching(text, ADJACENT_PATTERN)
96
+ }
97
+
98
+ function bare_arrow_references(text: string): Array<string> {
99
+ const unfiled = text.replaceAll(LINK_TARGET_PATTERN, '').replaceAll(SECTION_PATTERN, '')
100
+
101
+ return headings_matching(unfiled, BARE_ARROW_PATTERN)
102
+ }
103
+
82
104
  function link_targets(text: string): Array<string> {
83
105
  return matches(text, LINK_PATTERN)
84
106
  .map((match) => match[1] ?? '')
@@ -105,6 +127,8 @@ function reference_forms(title: string): Array<string> {
105
127
  }
106
128
 
107
129
  const document_scan = {
130
+ adjacent_references,
131
+ bare_arrow_references,
108
132
  command_references,
109
133
  label_references,
110
134
  link_targets,