@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
@@ -11,8 +11,7 @@ import { release_tag } from './release-tag'
11
11
  import { release_worktree } from './release-worktree'
12
12
 
13
13
  // The write half of `pnpm josh release`: the branch, the commit, the pull request, the merge, the
14
- // wait for the tag (joshuafolkken/kit#1169) and the watch on what the tag publishes
15
- // (`release-progress.ts`, joshuafolkken/kit#3193).
14
+ // wait for the tag and the watch on what the tag publishes (`release-progress.ts`).
16
15
  //
17
16
  // **The merge goes through the same gate every other pull request does.** `wait_for_pr_success` is
18
17
  // the merge gate `pnpm josh followup` waits on, and it is called here rather than reimplemented —
@@ -57,7 +56,7 @@ function existing_branch_message(branch_name: string): string {
57
56
  return `\`${branch_name}\` already exists — a previous release attempt got as far as opening it. Finish or delete that pull request and branch, then run \`pnpm josh release\` again.`
58
57
  }
59
58
 
60
- // **A remote that cannot be asked is refused, not read as "no branch there"** (joshuafolkken/kit#1641).
59
+ // **A remote that cannot be asked is refused, not read as "no branch there"**.
61
60
  // `pnpm josh release` pushes, opens a pull request, merges it and waits for a tag, so it cannot
62
61
  // finish without the remote in any case: refusing here is the failure the run was going to have
63
62
  // anyway, moved in front of the version write and the commit — which is the whole point of this
@@ -72,9 +71,9 @@ function unreachable_remote_message(branch_name: string): string {
72
71
  // it and reach `push`, which then fails with git's non-fast-forward message: the raw error this
73
72
  // guard exists to replace, and now after two writes rather than before them.
74
73
  //
75
- // **`git branch --list --remotes` could not answer it, which is why origin is asked directly.** Its
76
- // short names carry the remote — `origin/x`, never `x` — so the unprefixed pattern this used to pass
77
- // matched nothing and the remote arm reported "absent" for every branch that has ever existed. The
74
+ // **`git branch --list --remotes` cannot answer it, which is why origin is asked directly.** Its
75
+ // short names carry the remote — `origin/x`, never `x` — so an unprefixed pattern matches nothing and
76
+ // reports "absent" for every branch that has ever existed. The
78
77
  // remote-tracking refs it reads are stale anyway, since nothing in this workflow prunes them, so
79
78
  // `git_remote_branch.ask` puts the question to origin itself.
80
79
  async function is_release_branch_taken(branch_name: string): Promise<boolean> {
@@ -93,7 +92,7 @@ async function refuse_existing_branch(branch_name: string): Promise<void> {
93
92
  throw new Error(existing_branch_message(branch_name))
94
93
  }
95
94
 
96
- // **The leftovers go before the guard asks** (joshuafolkken/kit#3058). A run cut off before its
95
+ // **The leftovers go before the guard asks**. A run cut off before its
97
96
  // `finally`, or a `worktree add` that failed after creating its branch, leaves a local
98
97
  // `release/v<version>` that the guard would otherwise refuse as a release already opened.
99
98
  async function clear_the_way(branch_name: string): Promise<void> {
@@ -101,7 +100,7 @@ async function clear_the_way(branch_name: string): Promise<void> {
101
100
  await refuse_existing_branch(branch_name)
102
101
  }
103
102
 
104
- // **No `checkout -b` and no branch guard here** (joshuafolkken/kit#2411). The work tree is already
103
+ // **No `checkout -b` and no branch guard here**. The work tree is already
105
104
  // sitting on the release branch — `release_worktree.create` cut it that way — and the guard ran
106
105
  // before that creation, because `worktree_add` makes the branch local and `branch_exists` would then
107
106
  // report every release as already taken. This runs after `process.chdir` into the work tree, so the
@@ -167,7 +166,7 @@ function release_running_message(target: string): string {
167
166
  return `Another \`pnpm josh release\` is running in this repository (lock \`${target}\`); wait for it to finish, then run it again.`
168
167
  }
169
168
 
170
- // **One release at a time per repository, held for the whole run** (joshuafolkken/kit#3058).
169
+ // **One release at a time per repository, held for the whole run**.
171
170
  // `clear_leftover` removes an unpushed, commit-less release branch, which is also what a live run
172
171
  // looks like while it installs dependencies — so it may only run once no other release is alive. The
173
172
  // lock answers that: a run cut off before its `finally` leaves a record whose owner is gone, which
@@ -4,12 +4,11 @@ import { git_followup_pending } from '#scripts/followup/git-followup-pending'
4
4
  import { path_decision } from '#scripts/josh/path-decision'
5
5
  import { release_plan } from './release-plan'
6
6
 
7
- // **Whether a release is owed is a command's answer, not a judgement** (joshuafolkken/kit#1582).
7
+ // **Whether a release is owed is a command's answer, not a judgement**.
8
8
  //
9
- // joshuafolkken/kit#1169 took the version off the branch and put it behind one command a person
10
- // types, and nothing ever said *when* to type it. Nothing fails when nobody does — CI green, every
11
- // pull request merged, every Issue closed — so 53 merges reached main unreleased and no consumer of
12
- // this package saw one of them.
9
+ // A release is one command a person types, and nothing fails when nobody types it — CI green, every
10
+ // pull request merged, every Issue closed — so merges can pile up on main that no consumer of this
11
+ // package ever sees.
13
12
  //
14
13
  // **`pnpm josh release --dry-run` cannot be the check.** It refuses off the default branch and on a
15
14
  // dirty working tree, and it counts against `HEAD`; every position a run asks the question from is
@@ -37,8 +36,8 @@ const FAILURE_EXIT_CODE = 1
37
36
  const NOTHING_PENDING_REASON = 'main has taken no merge since the version last changed'
38
37
  const RELEASE_HINT = 'run `pnpm josh release` on the default branch of the primary checkout'
39
38
  // **Not `skip`.** An unreadable version, a fetch that could not run or a base the search cannot
40
- // resolve is not "nothing is waiting to ship", and reporting it as one is how a release goes
41
- // missing quietly a second time.
39
+ // resolve is not "nothing is waiting to ship", and reporting it as one lets a release go missing
40
+ // quietly.
42
41
  const UNKNOWN_REASON = 'the unreleased-merge count could not be read — report unknown, never skip'
43
42
 
44
43
  type ReleaseScope = typeof REQUIRED_SCOPE | typeof SKIPPED_SCOPE | typeof UNKNOWN_SCOPE
@@ -48,9 +47,8 @@ interface Decision {
48
47
  reason: string
49
48
  }
50
49
 
51
- // **The threshold is one, and the position carries the rest.** A release per invocation is the
52
- // cadence joshuafolkken/kit#1582 asks for — its own complaint is that accumulating makes a single
53
- // version larger and its contents harder to trace afterwards — so anything above zero is owed. What
50
+ // **The threshold is one, and the position carries the rest.** A release per invocation keeps each
51
+ // version small and its contents traceable, so anything above zero is owed. What
54
52
  // keeps this from firing per child of a batch is where the question is asked, which belongs to the
55
53
  // procedure rather than to this command.
56
54
  function decide(pending: number | undefined): Decision {
@@ -6,12 +6,11 @@ import { poll, type PollOptions } from '#scripts/lib/poll'
6
6
  //
7
7
  // Merging is what starts the distribution chain: `ci.yml`'s `notify-auto-tag` dispatches, `auto-tag.yml`
8
8
  // creates `v<version>`, and `publish.yml` / `production.yml` run off that tag. Every link after the
9
- // merge can fail silently, and one of them is known to (joshuafolkken/kit#1481: a later push to main
10
- // cancels the release commit's CI run, so nothing dispatches and nothing is tagged). An automatic
11
- // release would have been picked up by the next cycle; a release a person types has no next cycle, so
12
- // the person walks away believing something shipped when nothing did.
9
+ // merge can fail silently — a later push to main cancels the release commit's CI run, so nothing
10
+ // dispatches and nothing is tagged. A release a person types has no next cycle to pick it up, so the
11
+ // person would walk away believing something shipped when nothing did.
13
12
  //
14
- // So this waits for the tag and **reports its absence as a failure** (joshuafolkken/kit#1169 → §3).
13
+ // So this waits for the tag and **reports its absence as a failure**.
15
14
 
16
15
  const HTTP_OK = 200
17
16
  const TAG_POLL_INTERVAL_MS = 15_000
@@ -50,8 +49,7 @@ async function tag_exists(version: string): Promise<boolean> {
50
49
  }
51
50
 
52
51
  // The poll budget for one watched stage, read from that stage's environment variable. Every stage
53
- // `josh release` waits on — the tag, npm and the GitHub Release — is tuned the same way
54
- // (joshuafolkken/kit#3193).
52
+ // `josh release` waits on — the tag, npm and the GitHub Release — is tuned the same way.
55
53
  function poll_options_for(
56
54
  timeout_environment: string,
57
55
  sleeper?: (duration_ms: number) => Promise<void>,
@@ -79,7 +77,7 @@ async function wait_for_tag(
79
77
 
80
78
  // **The failure text says what did not happen rather than what went wrong**, because the command
81
79
  // cannot know which link broke — only that the tag it was waiting for is not there, and that nothing
82
- // downstream of the tag can have run. **The tag is not the release** (joshuafolkken/kit#3193): npm and
80
+ // downstream of the tag can have run. **The tag is not the release**: npm and
83
81
  // the GitHub Release follow it, so the success line names only the tag.
84
82
  function format_result(version: string, is_tagged: boolean): string {
85
83
  if (is_tagged) return `🏷 Tag ${tag_name(version)} created`
@@ -6,7 +6,7 @@ import { lane_install } from '#scripts/lane/lane-install'
6
6
  import { lane_leftover } from '#scripts/lane/lane-leftover'
7
7
  import { lane_paths } from '#scripts/lane/lane-paths'
8
8
 
9
- // The dedicated linked work tree `pnpm josh release` runs inside (joshuafolkken/kit#2411). The whole
9
+ // The dedicated linked work tree `pnpm josh release` runs inside. The whole
10
10
  // point is that the release never touches the root checkout: it is cut fresh from
11
11
  // `origin/<default>` as the `release/v<version>` branch, the version bump / commit / push all happen
12
12
  // there, and it is removed whichever way the run ends. That lets a release run beside a `backlogrun`
@@ -35,8 +35,8 @@ async function remove(directory: string, branch_name: string): Promise<void> {
35
35
  await git_worktree.branch_delete(branch_name)
36
36
  }
37
37
 
38
- // **The dependency install is not optional, and disabling the hook is not the way around it**
39
- // (joshuafolkken/kit#2411). The release commit goes through lefthook's pre-commit, which runs
38
+ // **The dependency install is not optional, and disabling the hook is not the way around it**.
39
+ // The release commit goes through lefthook's pre-commit, which runs
40
40
  // `pnpm exec` / `pnpm josh`, and a sibling work tree has no `node_modules` above it — so the tree
41
41
  // needs its own, installed the same way a lane's is. A failed install cleans up the tree it created
42
42
  // rather than leaving debris, then reports what git printed.
@@ -54,7 +54,7 @@ async function install_or_clean(directory: string, branch_name: string): Promise
54
54
  // add --no-track -b release/v<version> <dir> origin/<default>`, which `worktree_add` already spells
55
55
  // when it is given a start point.
56
56
  //
57
- // **A failed add takes back the branch it made** (joshuafolkken/kit#3058). `git worktree add -b`
57
+ // **A failed add takes back the branch it made**. `git worktree add -b`
58
58
  // creates the branch before it looks at the path, so an add refused for a path that already exists
59
59
  // still leaves `release/v<version>` behind — and the next run's branch guard then refuses that name
60
60
  // as a release already opened. The guard ran before this call and found no such branch, so one
@@ -80,7 +80,7 @@ async function create(branch_name: string): Promise<string> {
80
80
  return directory
81
81
  }
82
82
 
83
- // **A run that never reached its `finally` leaves its tree and branch behind** (joshuafolkken/kit#3058)
83
+ // **A run that never reached its `finally` leaves its tree and branch behind**
84
84
  // — a Ctrl-C, a closed terminal — and every later release then fails on them until a person removes
85
85
  // both by hand. They are cleared here only when clearing loses nothing: a release branch origin does
86
86
  // not have and that carries no commit beyond `origin/<default>`. Uncommitted edits in the tree are
@@ -3,13 +3,11 @@ import { repo_setting, type RepoSettingStatus } from './repo-setting'
3
3
  // GitHub's repository-level "Allow auto-merge" setting, as reported by the `allow_auto_merge` field
4
4
  // of `GET /repos/{owner}/{repo}`.
5
5
  //
6
- // joshuafolkken/kit#834 added `.github/workflows/dependabot-auto-merge.yml` to the distributed
7
- // files, so a synced consumer now runs `gh pr merge --auto` on every github-actions patch and minor
8
- // bump. That command needs this setting: without it the step fails with `Auto-merge is not allowed
9
- // for this repository`, and the pull request sits green and unmerged — which is the exact state
10
- // joshuafolkken/app-kit#184 was found in, and the same defect kit itself hit in
11
- // joshuafolkken/kit#802. The setting is off by default, so distributing the workflow without
12
- // reporting it would hand every consumer a workflow that never merges anything.
6
+ // `.github/workflows/dependabot-auto-merge.yml` is a distributed file, so a synced consumer runs
7
+ // `gh pr merge --auto` on every github-actions patch and minor bump. That command needs this
8
+ // setting: without it the step fails with `Auto-merge is not allowed for this repository`, and the
9
+ // pull request sits green and unmerged. The setting is off by default, so distributing the workflow
10
+ // without reporting it would hand every consumer a workflow that never merges anything.
13
11
  type AutoMergeStatus = RepoSettingStatus
14
12
 
15
13
  const SETTING_LABEL = 'Repository auto-merge'
@@ -19,8 +17,8 @@ const WORKFLOW_PATH = '.github/workflows/dependabot-auto-merge.yml'
19
17
 
20
18
  // The remediation for `disabled`, addressed at the repository the report actually resolved. kit
21
19
  // prints it and never runs it: changing a repository setting is outward-facing, needs admin scope,
22
- // and is the maintainer's call — the same line joshuafolkken/kit#805 drew for
23
- // `automated-security-fixes`, which is why `josh doctor --fix` does not enable this either.
20
+ // and is the maintainer's call — the same line drawn for `automated-security-fixes`, which is why
21
+ // `josh doctor --fix` does not enable this either.
24
22
  function enable_command(repo: string | undefined): string {
25
23
  return `gh api -X PATCH repos/${repo_setting.command_target(repo)} -f ${ALLOW_AUTO_MERGE_FIELD}=true`
26
24
  }
@@ -2,7 +2,7 @@ import { auto_merge_setting_logic, type AutoMergeStatus } from './auto-merge-set
2
2
  import { repo_setting } from './repo-setting'
3
3
 
4
4
  // Read the repository's "Allow auto-merge" setting. Never throws and never propagates a non-zero
5
- // exit: an unreadable answer is a reported status, not a command failure (joshuafolkken/kit#834).
5
+ // exit: an unreadable answer is a reported status, not a command failure.
6
6
  //
7
7
  // The whole repository object is requested rather than a `--jq` projection, because a projection
8
8
  // cannot distinguish a field that is `false` from a field the response never carried — and that
@@ -3,16 +3,16 @@ import { PROJECT_ROOT } from '#scripts/init/init-paths'
3
3
 
4
4
  // The shared half of every "report a GitHub repository setting kit cannot write" check.
5
5
  //
6
- // Two such checks exist — `automated-security-fixes` (joshuafolkken/kit#805) and `allow_auto_merge`
7
- // (joshuafolkken/kit#834) — and they agree on everything that is not wording: the same bounded
6
+ // Two such checks exist — `automated-security-fixes` and `allow_auto_merge`
7
+ // — and they agree on everything that is not wording: the same bounded
8
8
  // `gh api` call, the same rule that an answer which cannot be read is never reported as a negative
9
9
  // answer, and the same blank-line-separated report block. That agreement is the contract, so it
10
10
  // lives here once rather than being re-derived per setting.
11
11
  type RepoSettingStatus = 'enabled' | 'disabled' | 'unreadable'
12
12
 
13
13
  // Bounded, unlike the repository lookup: these calls only decide what a report *says*, never what
14
- // gets written, so a timeout degrades to `could not be read` and costs nothing. `josh doctor` made
15
- // no network calls at all before joshuafolkken/kit#805, and this keeps it prompt.
14
+ // gets written, so a timeout degrades to `could not be read` and costs nothing, and keeps
15
+ // `josh doctor` prompt.
16
16
  const GH_TIMEOUT_MS = 5000
17
17
 
18
18
  // A literal `<owner>/<repo>` would be unusable when pasted into a shell, where `<` redirects — but
@@ -2,7 +2,7 @@ import { git_gh_exec } from '#scripts/gh/git-gh-exec'
2
2
  import { REPOSITORY_LABELS, type LabelDefinition } from '#scripts/issue/issue-labels'
3
3
 
4
4
  // Creates the labels kit's workflow and the distributed `pr-classification.yml` rely on, and only
5
- // those the repository is missing (joshuafolkken/kit#2797). The one place labels are created: `josh
5
+ // those the repository is missing. The one place labels are created: `josh
6
6
  // start` provisions a new repository through it and `josh sync` brings every existing one up to date.
7
7
  //
8
8
  // Labels already present are left as they are, so a repository that recolored one keeps its choice
@@ -3,11 +3,11 @@ import { z } from 'zod'
3
3
 
4
4
  // The status checks kit's distributed workflows report, keyed by the workflow that reports them —
5
5
  // the single source `josh ruleset:check` and `josh doctor` compare a repository's required status
6
- // checks against (joshuafolkken/kit#3012). Each name is the job's `name:`, the string a ruleset's
6
+ // checks against. Each name is the job's `name:`, the string a ruleset's
7
7
  // required check is matched by; `required-checks-logic.test.ts` reads it back off the workflows.
8
8
  //
9
- // `E2E` belongs here even though `josh followup` deliberately does not wait on it
10
- // (joshuafolkken/kit#991): a ruleset counts a skipped job as passing, and the job is skipped when the
9
+ // `E2E` belongs here even though `josh followup` deliberately does not wait on it:
10
+ // a ruleset counts a skipped job as passing, and the job is skipped when the
11
11
  // project has no E2E suite, so requiring it never blocks a merge — it only refuses a red one.
12
12
  interface WorkflowChecks {
13
13
  workflow: string
@@ -2,7 +2,7 @@ import { repo_setting } from './repo-setting'
2
2
  import type { RequiredSource } from './required-checks-logic'
3
3
 
4
4
  // What one read of a repository's required status checks found, against what kit's distributed
5
- // workflows report (joshuafolkken/kit#3012).
5
+ // workflows report.
6
6
  interface RequiredChecksReport {
7
7
  repo: string | undefined
8
8
  branch: string | undefined
@@ -7,7 +7,7 @@ import { required_checks_report, type RequiredChecksReport } from './required-ch
7
7
  import { ruleset_check } from './ruleset-check'
8
8
 
9
9
  // `josh ruleset:check [--apply]` — say whether the default branch requires every status check kit's
10
- // distributed workflows report, and with `--apply` add the missing ones (joshuafolkken/kit#3012).
10
+ // distributed workflows report, and with `--apply` add the missing ones.
11
11
  // Changing a repository setting is outward-facing, so the write happens only on the flag a person
12
12
  // typed; `josh sync` and `josh doctor` never pass it. Exits non-zero while anything is left to do.
13
13
 
@@ -8,7 +8,7 @@ import { required_checks_logic, type ApiRead, type RequiredSource } from './requ
8
8
  import { required_checks_report, type RequiredChecksReport } from './required-checks-report'
9
9
 
10
10
  // Read a repository's required status checks on its default branch and compare them with the checks
11
- // kit's distributed workflows report (joshuafolkken/kit#3012). Every read degrades to `unreadable`
11
+ // kit's distributed workflows report. Every read degrades to `unreadable`
12
12
  // rather than throwing; the one write, `apply_missing`, runs only on `josh ruleset:check --apply`.
13
13
 
14
14
  function read_api(api_path: string): string | undefined {
@@ -0,0 +1,26 @@
1
+ // Where a fixed-shape failure points its reader. `report:lint`, `test:declared
2
+ // --match` and the live-evidence check each said what was missing but not where the shape is written,
3
+ // so the reader grepped for it. **The document and its headings are named once, here**, and every
4
+ // failure builds its pointer from them — a renamed heading then fails this module's test rather than
5
+ // sending the reader to a section that no longer exists.
6
+
7
+ const REPORT_FORMAT_PATH = 'prompts/collaboration-workflow/report-format.md'
8
+ const SUMMARY_RULES_HEADING = '作業前サマリはいつ・どう出すか'
9
+ const SUMMARY_TEMPLATE_HEADING = '作業前サマリ(セッション向け・`JOSH_SESSION_LANG` の言語)'
10
+ const COMPLETION_REPORT_HEADING = '完了報告(セッション向け)'
11
+
12
+ // The heading goes in single quotes in the runnable form: the template heading carries backticks,
13
+ // which a double-quoted shell argument would run as a command substitution.
14
+ function pointer(heading: string): string {
15
+ return `${REPORT_FORMAT_PATH} → "${heading}" (read it: pnpm josh doc:section ${REPORT_FORMAT_PATH} '${heading}')`
16
+ }
17
+
18
+ const report_format_reference = {
19
+ COMPLETION_REPORT_HEADING,
20
+ pointer,
21
+ REPORT_FORMAT_PATH,
22
+ SUMMARY_RULES_HEADING,
23
+ SUMMARY_TEMPLATE_HEADING,
24
+ }
25
+
26
+ export { report_format_reference }
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url'
4
4
  import { report_lint } from './report-lint'
5
5
 
6
6
  // `josh report:lint` — read a two-layer work summary candidate from stdin and print `ok`, or the
7
- // mechanical violations one per line, exiting non-zero so it works as a gate (joshuafolkken/kit#2123).
7
+ // mechanical violations one per line, exiting non-zero so it works as a gate.
8
8
 
9
9
  const SUCCESS_EXIT_CODE = 0
10
10
  const FAILURE_EXIT_CODE = 1
@@ -27,7 +27,7 @@ function run(summary: string): number {
27
27
  return SUCCESS_EXIT_CODE
28
28
  }
29
29
 
30
- console.error(violations.join('\n'))
30
+ console.error(report_lint.with_reference(violations).join('\n'))
31
31
 
32
32
  return FAILURE_EXIT_CODE
33
33
  }
@@ -1,10 +1,14 @@
1
+ import { report_format_reference } from './report-format-reference'
2
+
1
3
  // The mechanical half of the two-layer work summary (`CLAUDE.md` Step 0, single-sourced in
2
4
  // `prompts/collaboration-workflow/report-format.md`) is a fixed shape, yet only an advisory echo in
3
5
  // the `UserPromptSubmit` hook ever mentions it and nothing reads the summary an agent actually
4
6
  // wrote. This checks the half a machine can: the labels are present, the overview lines stay inside
5
7
  // their length, nothing wraps the summary in a code fence, and no file path or CLI flag leaks into
6
8
  // the overview. The judgement half — whether the subject is concrete — is deliberately left out,
7
- // because a machine cannot answer it (joshuafolkken/kit#2123).
9
+ // because a machine cannot answer it.
10
+
11
+ const TEMPLATE_HEADING = report_format_reference.SUMMARY_TEMPLATE_HEADING
8
12
 
9
13
  // The session-facing labels are Japanese because that is the form the summary is written in
10
14
  // (`JOSH_SESSION_LANG` defaults to `ja`); `report-format.md`'s template is the single source and the
@@ -33,7 +37,7 @@ const CLI_FLAG_PATTERN = /(?:^|\s)--[a-z]/u
33
37
  const BOLD_MARKER = '**'
34
38
  const LEADING_LABEL_PUNCTUATION = /^[\s::]+/u
35
39
 
36
- // The case-based test declaration (joshuafolkken/kit#2246): the changes section carries a first tier
40
+ // The case-based test declaration: the changes section carries a first tier
37
41
  // of fixed-vocabulary cases — each non-applicable one crossed out with a reason — and a second tier
38
42
  // of at-least-three "if it breaks" conditions. This checks the mechanical half: the two tier markers
39
43
  // are present, an N/A cross-out carries a reason, and the second tier holds enough conditions (or the
@@ -235,8 +239,18 @@ function lint_report(summary: string): ReadonlyArray<string> {
235
239
  ]
236
240
  }
237
241
 
242
+ // The violations followed by one line naming where the summary's shape is written
243
+ // — the violations say what is wrong, the pointer where the right shape is.
244
+ // A clean summary stays empty, so `ok` is still the only output of a pass.
245
+ function with_reference(violations: ReadonlyArray<string>): ReadonlyArray<string> {
246
+ if (violations.length === 0) return violations
247
+
248
+ return [...violations, `→ the template: ${report_format_reference.pointer(TEMPLATE_HEADING)}`]
249
+ }
250
+
238
251
  const report_lint = {
239
252
  lint_report,
253
+ with_reference,
240
254
  REQUIRED_LABELS,
241
255
  MAX_OVERVIEW_CHARS,
242
256
  CASE_LABEL,
@@ -2,8 +2,8 @@
2
2
  import { fileURLToPath } from 'node:url'
3
3
  import { disposition } from './disposition-logic'
4
4
 
5
- // `josh disposition <path...>` — the machine half of the three-way review disposition
6
- // (joshuafolkken/kit#2181). It prints `runtime` when any named path reaches a runtime path — a
5
+ // `josh disposition <path...>` — the machine half of the three-way review disposition.
6
+ // It prints `runtime` when any named path reaches a runtime path — a
7
7
  // runtime code path, a distributed artifact a consumer reads, or the verification guarding either —
8
8
  // and `non-runtime` when every path is inert. `prompts/review.md` → "Three-way disposition after the
9
9
  // cap" leaves the run one judgement after this: whether the finding is a confirmed defect.
@@ -1,7 +1,7 @@
1
1
  import { review_level } from './review-level'
2
2
 
3
3
  // Whether a review finding reaches a runtime path — the half of the three-way disposition a machine
4
- // can answer (joshuafolkken/kit#2181). `prompts/review.md` → "Three-way disposition after the cap"
4
+ // can answer. `prompts/review.md` → "Three-way disposition after the cap"
5
5
  // routes a non-High finding to branch 2 (file it) only when it is a **confirmed defect that reaches a
6
6
  // runtime code path**. "Reaches" is read exactly as the review-level rubric reads it — a runtime code
7
7
  // path, a distributed artifact a consumer reads, or the verification guarding either — which is the
@@ -1,11 +1,11 @@
1
1
  import { git_gh_command } from '#scripts/gh/git-gh-command'
2
2
  import { git_command } from '#scripts/git/git-command'
3
3
  import { reproduction_measure } from '#scripts/issue/reproduction-measure'
4
+ import { report_format_reference } from '#scripts/report/report-format-reference'
4
5
  import { test_declared_logic, type Verdict } from '#scripts/test/test-declared-logic'
5
6
 
6
- // joshuafolkken/kit#2446. "Done" meant lint, types and unit tests were green and the review found
7
- // nothing — proof the code is right in isolation, never that the feature works where it runs. The
8
- // recent defects (#2402, #2419, #2393) all came through that gap. **This is the seam where it closes**:
7
+ // Lint, types and unit tests green and a review that found nothing prove the code is right in
8
+ // isolation, never that the feature works where it runs. **This is the seam where that gap closes**:
9
9
  // a runtime change merges only once its pull request carries the acceptance criteria run for real —
10
10
  // the command and the output it actually printed, in the evidence section `EVIDENCE_HEADING` names.
11
11
  //
@@ -15,6 +15,9 @@ import { test_declared_logic, type Verdict } from '#scripts/test/test-declared-l
15
15
  // reproduction-section parser, so a prose "confirmed it works" is refused here exactly as it is there.
16
16
 
17
17
  const EVIDENCE_HEADING = '## 実機証跡'
18
+ // The shape the section needs and where it is written down, so a refusal
19
+ // names the format instead of leaving the reader to search for it.
20
+ const EVIDENCE_FORMAT = `under ${EVIDENCE_HEADING}, a backticked command followed by a fenced block holding the output it actually printed (prose such as "confirmed" is not accepted) — format: ${report_format_reference.pointer(report_format_reference.COMPLETION_REPORT_HEADING)}`
18
21
 
19
22
  function verdict_for(paths: ReadonlyArray<string>, body: string | undefined = ''): Verdict {
20
23
  if (test_declared_logic.runtime_files(paths).length === 0) return 'exempt'
@@ -49,12 +52,12 @@ async function check(branch_name: string): Promise<Verdict> {
49
52
  function refusal_message(): string {
50
53
  return [
51
54
  `Merge refused: this pull request changes runtime code but its body has no ${EVIDENCE_HEADING} section.`,
52
- 'Run the acceptance criteria for real, then add the section: a backticked command followed by a',
53
- 'fenced block holding the output it actually printed (prose such as "confirmed" is not accepted).',
55
+ 'Run the acceptance criteria for real, then add the section:',
56
+ EVIDENCE_FORMAT,
54
57
  'Update the body with `gh api -X PATCH repos/{owner}/{repo}/pulls/<N> -F body=@<path>`, then re-run.',
55
58
  ].join('\n')
56
59
  }
57
60
 
58
- const live_evidence = { EVIDENCE_HEADING, check, refusal_message, verdict_for }
61
+ const live_evidence = { EVIDENCE_FORMAT, EVIDENCE_HEADING, check, refusal_message, verdict_for }
59
62
 
60
63
  export { live_evidence }
@@ -3,8 +3,7 @@ import { fileURLToPath } from 'node:url'
3
3
  import { review_attest, type AttestVerdict } from './review-attest'
4
4
  import { review_checkout } from './review-checkout'
5
5
 
6
- // `josh review:attest` — the two halves of the checkout contract `josh review:brief` opens
7
- // (joshuafolkken/kit#1522).
6
+ // `josh review:attest` — the two halves of the checkout contract `josh review:brief` opens.
8
7
  //
9
8
  // **`josh review:attest <nonce>` is run by the review**, from the checkout it actually read. It
10
9
  // compares that checkout against the one the brief described and exits non-zero when they differ, so
@@ -6,7 +6,7 @@ import { stamp_file } from '#scripts/josh/stamp-file'
6
6
  import { json_value } from '#scripts/lib/json-value'
7
7
  import { review_checkout, type ReviewCheckout } from './review-checkout'
8
8
 
9
- // The record that says which checkout a `/code-review` actually read (joshuafolkken/kit#1522).
9
+ // The record that says which checkout a `/code-review` actually read.
10
10
  //
11
11
  // **The root cause is not ours to fix.** `/code-review` is forked by the harness and inherits the
12
12
  // session's working directory; nothing in this repository decides that. What *is* ours is the
@@ -242,7 +242,7 @@ function is_written_since(source: string, taken_at: string): boolean {
242
242
  }
243
243
  }
244
244
 
245
- // **Whether the last briefed review of this branch finished** (joshuafolkken/kit#2945). A ship resumed
245
+ // **Whether the last briefed review of this branch finished**. A ship resumed
246
246
  // after a stop re-issues round 1, and without this answer it briefed the whole change again — the
247
247
  // files the finished review had just read, re-read at full cost. It is asked before `record_target`
248
248
  // mints the next nonce, since that call drops the record it reads. The branch must match: the pointer
@@ -265,7 +265,7 @@ function is_reviewed_on(checkout: ReviewCheckout, findings_path: string, root?:
265
265
  }
266
266
 
267
267
  // Whether a record written at `written_at` belongs to the brief the pointer names rather than an earlier
268
- // one (joshuafolkken/kit#2945): that brief writes it right after minting the pointer. ISO timestamps
268
+ // one: that brief writes it right after minting the pointer. ISO timestamps
269
269
  // order as strings.
270
270
  function is_briefed_since(written_at: string, root?: string): boolean {
271
271
  const pointer = read_pointer(root)