@joshuafolkken/kit 1.1240.0 → 1.1373.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +52 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +23 -66
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +43 -11
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
  51. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
  52. package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
  53. package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
  57. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  60. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
  61. package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
  62. package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
  63. package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +195 -181
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +282 -95
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +17 -11
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +30 -5
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +21 -7
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cross-file-recheck.ts +155 -0
  560. package/scripts/lint/cspell-cached.ts +1 -1
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +35 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +6 -7
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +26 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +64 -18
  801. package/scripts/run/run-step.ts +107 -51
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,31 +1,45 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
+ import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
4
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
3
5
  import { cli_flags } from '#scripts/lib/cli-flags'
4
6
  import { observation_ledger_home } from '#scripts/observations/observation-ledger-home'
5
7
  import { review_finding_ledger, type Finding } from './review-finding-ledger'
6
8
  import { review_record, type RecordVerdict } from './review-record'
7
9
 
8
10
  // `josh review:record --issue <N> [<category>:<severity>:<file> ...]` — the one write path for a
9
- // `/code-review` round's findings (joshuafolkken/kit#2325). It appends a `- rf:` line per finding to
11
+ // `/code-review` round's findings. It appends a `- rf:` line per finding to
10
12
  // the issue's own file of the observation ledger, which the run's commit carries like any other
11
13
  // ledger change. **A call with no findings is a zero-finding round, and it still writes one line** — so the
12
14
  // round that found nothing is recorded rather than mistaken for a round nobody reviewed.
13
15
  //
16
+ // **`--comment` records a round that ran after the pull request opened**: the same lines go to the
17
+ // issue as a comment and nothing is appended. A line written to the tree then has no commit of the
18
+ // run's left to ride, so `pnpm josh followup` would push it onto the open pull request and its CI
19
+ // would start over.
20
+ //
14
21
  // `josh review:record --check --issue <N>` is the read half `pnpm josh followup` runs before it
15
- // merges (joshuafolkken/kit#2343): `ok` / `not-required` exit zero, `missing` exits non-zero so the
22
+ // merges: `ok` / `not-required` exit zero, `missing` exits non-zero so the
16
23
  // merge is refused until the round is recorded. It mirrors `josh review:attest --check`.
17
24
 
18
25
  const ARGV_OFFSET = 2
19
26
  const FAILURE_EXIT_CODE = 1
20
- const DATE_END = 10
21
27
  const USAGE =
22
- 'Usage: josh review:record --issue <N> [<category>:<severity>:<file> ...] | josh review:record --check --issue <N>'
28
+ 'Usage: josh review:record --issue <N> [--comment] [<category>:<severity>:<file> ...] | josh review:record --check --issue <N>'
29
+ const FILE_HINT = ' <file>: the cited path, optionally with :line'
23
30
  const CHECK_USAGE = 'Usage: josh review:record --check --issue <N>'
24
31
  const RECORDED_LINE = 'Recorded: the review round for this issue is in the ledger.'
25
32
  const NOT_REQUIRED_LINE =
26
33
  'No review-finding ledger is kept in this checkout, so there is nothing to check.'
27
- const ISSUE_PATTERN = /^[1-9]\d*$/u
28
- const OPTIONS = { issue: { type: 'string' }, check: { type: 'boolean' } } as const
34
+ const COMMENT_HEADING = '### Review round recorded after the pull request opened'
35
+ const COMMENT_NOTE =
36
+ 'Kept here rather than in the observation ledger: a line appended after the commit would be pushed onto the open pull request and restart its CI.'
37
+ const CODE_FENCE = '```'
38
+ const OPTIONS = {
39
+ issue: { type: 'string' },
40
+ check: { type: 'boolean' },
41
+ comment: { type: 'boolean' },
42
+ } as const
29
43
 
30
44
  interface Request {
31
45
  issue: number
@@ -34,6 +48,7 @@ interface Request {
34
48
 
35
49
  interface Parsed {
36
50
  check: boolean
51
+ comment: boolean
37
52
  issue: string | undefined
38
53
  positionals: ReadonlyArray<string>
39
54
  }
@@ -77,6 +92,7 @@ function parse_argv(argv: ReadonlyArray<string>): Parsed | undefined {
77
92
 
78
93
  return {
79
94
  check: parsed.values.check === true,
95
+ comment: parsed.values.comment === true,
80
96
  issue: parsed.values.issue,
81
97
  positionals: parsed.positionals,
82
98
  }
@@ -85,15 +101,26 @@ function parse_argv(argv: ReadonlyArray<string>): Parsed | undefined {
85
101
  function to_request(parsed: Parsed): Request | undefined {
86
102
  const { issue } = parsed
87
103
 
88
- if (issue === undefined || !ISSUE_PATTERN.test(issue)) return undefined
104
+ if (issue === undefined || !issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue)) return undefined
89
105
 
90
106
  const findings = parse_findings(parsed.positionals)
91
107
 
92
108
  return findings === undefined ? undefined : { issue: Number(issue), findings }
93
109
  }
94
110
 
95
- function today(now: Date): string {
96
- return now.toISOString().slice(0, DATE_END)
111
+ // The accepted values are built from the ledger's own vocabulary, so a
112
+ // refused spec names what would have been accepted and a new category appears here unedited.
113
+ function accepted_values(placeholder: string, values: ReadonlyArray<string>): string {
114
+ return ` ${placeholder}: ${values.join(' | ')}`
115
+ }
116
+
117
+ function usage_text(): string {
118
+ return [
119
+ USAGE,
120
+ accepted_values('<category>', review_finding_ledger.CATEGORIES),
121
+ accepted_values('<severity>', review_finding_ledger.SEVERITIES),
122
+ FILE_HINT,
123
+ ].join('\n')
97
124
  }
98
125
 
99
126
  function build_lines(request: Request, date: string): ReadonlyArray<string> {
@@ -115,7 +142,7 @@ function check_line(verdict: RecordVerdict): string {
115
142
  }
116
143
 
117
144
  async function run_check(issue: string | undefined, root: string): Promise<number> {
118
- if (issue === undefined || !ISSUE_PATTERN.test(issue)) {
145
+ if (issue === undefined || !issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue)) {
119
146
  console.error(CHECK_USAGE)
120
147
 
121
148
  return FAILURE_EXIT_CODE
@@ -134,18 +161,41 @@ async function run_check(issue: string | undefined, root: string): Promise<numbe
134
161
  return FAILURE_EXIT_CODE
135
162
  }
136
163
 
137
- // The round lands in its own issue's file (joshuafolkken/kit#2919), so two lanes recording at once
164
+ function comment_body(lines: ReadonlyArray<string>): string {
165
+ return [COMMENT_HEADING, '', COMMENT_NOTE, '', CODE_FENCE, ...lines, CODE_FENCE].join('\n')
166
+ }
167
+
168
+ // **A comment that could not be posted fails the record**: it is the round's only copy, so a
169
+ // swallowed refusal would read as a recorded round that exists nowhere.
170
+ async function post_comment(issue: number, lines: ReadonlyArray<string>): Promise<number> {
171
+ try {
172
+ const url = await git_gh_issue_write.issue_comment(String(issue), comment_body(lines))
173
+
174
+ console.info(`Recorded ${String(lines.length)} review-finding line(s) in ${url.trim()}.`)
175
+
176
+ return 0
177
+ } catch (error) {
178
+ console.error(error instanceof Error ? error.message : String(error))
179
+
180
+ return FAILURE_EXIT_CODE
181
+ }
182
+ }
183
+
184
+ // The round lands in its own issue's file, so two lanes recording at once
138
185
  // write two files, and their pull requests never conflict on the ledger.
139
186
  async function run_record(parsed: Parsed, now: Date, root: string): Promise<number> {
140
187
  const request = to_request(parsed)
141
188
 
142
189
  if (request === undefined) {
143
- console.error(USAGE)
190
+ console.error(usage_text())
144
191
 
145
192
  return FAILURE_EXIT_CODE
146
193
  }
147
194
 
148
- const lines = build_lines(request, today(now))
195
+ const lines = build_lines(request, observation_ledger_home.ledger_date(now))
196
+
197
+ if (parsed.comment) return await post_comment(request.issue, lines)
198
+
149
199
  const ledger_path = observation_ledger_home.issue_path(request.issue, root)
150
200
 
151
201
  await observation_ledger_home.append(ledger_path, lines)
@@ -154,7 +204,7 @@ async function run_record(parsed: Parsed, now: Date, root: string): Promise<numb
154
204
  return 0
155
205
  }
156
206
 
157
- // **The default is the work tree the command runs in, a lane's inside a lane** (joshuafolkken/kit#2919).
207
+ // **The default is the work tree the command runs in, a lane's inside a lane**.
158
208
  // The line rides that tree's own commit or `pnpm josh followup`'s pre-merge ledger commit, and
159
209
  // `--check` reads the same tree, so the two halves can never disagree about where the round is.
160
210
  async function run(
@@ -165,7 +215,7 @@ async function run(
165
215
  const parsed = parse_argv(argv)
166
216
 
167
217
  if (parsed === undefined) {
168
- console.error(USAGE)
218
+ console.error(usage_text())
169
219
 
170
220
  return FAILURE_EXIT_CODE
171
221
  }
@@ -179,7 +229,14 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
179
229
  process.exitCode = await run(argv, new Date())
180
230
  }
181
231
 
182
- const review_record_cli = { build_lines, parse_finding, run }
232
+ const review_record_cli = {
233
+ accepted_values,
234
+ build_lines,
235
+ comment_body,
236
+ parse_finding,
237
+ run,
238
+ usage_text,
239
+ }
183
240
 
184
241
  if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
185
242
 
@@ -1,10 +1,11 @@
1
+ import { session_cite } from '#scripts/issue/session-cite'
1
2
  import { observation_ledger_home } from '#scripts/observations/observation-ledger-home'
2
3
  import { review_finding_ledger } from './review-finding-ledger'
3
4
 
4
- // The gate that refuses a merge until the `/code-review` round was recorded (joshuafolkken/kit#2343).
5
+ // The gate that refuses a merge until the `/code-review` round was recorded.
5
6
  //
6
7
  // **The instruction was prose, and prose failed.** `review:record` is the one write path for a
7
- // round's findings (joshuafolkken/kit#2325), but nothing enforced the call — so across eleven merges
8
+ // round's findings, but nothing enforced the call — so across eleven merges
8
9
  // after the instruction landed, it was never run once, and the recurrence ledger stayed blind. This
9
10
  // module is the mechanical counterpart to `review-attest`'s `--check`, keyed on the issue rather than
10
11
  // on a checkout: a round that left no `- rf:` line for its issue is treated as no review at all.
@@ -29,7 +30,7 @@ interface RecordVerdict {
29
30
  }
30
31
 
31
32
  // The default is the work tree the check runs in — the one `review:record` wrote to, a lane's in a
32
- // lane (joshuafolkken/kit#2919). Every file of the directory is read, so the round is found whichever
33
+ // lane. Every file of the directory is read, so the round is found whichever
33
34
  // file holds it; a directory that is not there answers `undefined`, a ledger this checkout does not
34
35
  // keep, which becomes `not-required`.
35
36
  async function check(
@@ -51,7 +52,7 @@ const REMEDY =
51
52
  'Record the round with `pnpm josh review:record --issue <N> [<category>:<severity>:<file> ...]` — a clean round is a call with no findings, which records one zero-finding line — then reissue the merge.'
52
53
 
53
54
  function refusal_message(issue: number): string {
54
- return [MISSING_REASON, `Issue: #${String(issue)}`, REMEDY].join('\n')
55
+ return [MISSING_REASON, `Issue: ${session_cite.issue(issue)}`, REMEDY].join('\n')
55
56
  }
56
57
 
57
58
  const review_record = {
@@ -6,7 +6,7 @@ import { review_round2 } from './review-round2'
6
6
  import { review_stamps } from './review-stamps'
7
7
  import { review_tree } from './review-tree'
8
8
 
9
- // `josh review:round2` — say whether the second review round is due (joshuafolkken/kit#1433).
9
+ // `josh review:round2` — say whether the second review round is due.
10
10
  //
11
11
  // A command rather than a paragraph in `prompts/review.md`, for the reason `josh review:level` is a
12
12
  // command: a rule an agent applies from memory is a rule an agent can talk
@@ -56,8 +56,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
56
56
  const { verdict, reason } = review_round2.decide({
57
57
  // The commit the tree below is a diff against, so the snapshot can be refused when it was taken
58
58
  // against a different one — and the resolved commit rather than `git_command.change_base`, whose
59
- // fallback is a ref name that moves and would compare equal to itself
60
- // (joshuafolkken/kit#1537).
59
+ // fallback is a ref name that moves and would compare equal to itself.
61
60
  base: await change_base.resolved(),
62
61
  is_round_one_closed: options.is_round_one_closed,
63
62
  snapshot: review_stamps.round_one_stamp.read(),
@@ -2,27 +2,21 @@ import { file_map_stamp, type FileMapStamp } from '#scripts/josh/file-map-stamp'
2
2
  import { path_decision } from '#scripts/josh/path-decision'
3
3
  import { review_level } from './review-level'
4
4
 
5
- // Whether the second review round runs at all (joshuafolkken/kit#1433).
5
+ // Whether the second review round runs at all.
6
6
  //
7
- // **Every previous measure narrowed round 2; this one asks whether it is due.** joshuafolkken/kit#1219
8
- // redefined its question, joshuafolkken/kit#1241 carried that question into the forked agent, and
9
- // `prompts/review.md` → "The narrowing is real in scope and does not show in the wall clock" recorded
10
- // that neither moved the wall clock. Those records answer "narrow round 2"; none of them answers "do
11
- // not run it", because none measured a run that skipped one.
7
+ // **Narrowing round 2 does not show in the wall clock** (`prompts/review.md` → "The narrowing is real
8
+ // in scope and does not show in the wall clock"), so this asks whether it is due at all.
12
9
  //
13
- // **The two arms are the two states in which joshuafolkken/kit#1222's reason does not arise.** That
14
- // issue's conclusion is that round 2 exists because round 1's *fix code* is unreviewed, and that this
15
- // is structural. Arm A applies where there is no fix code — the findings closed without an edit — so
10
+ // **The two arms are the two states in which round 2's reason does not arise.** Round 2 exists
11
+ // because round 1's *fix code* is unreviewed, and that is structural. Arm A applies where there is no fix code — the findings closed without an edit — so
16
12
  // the premise is absent rather than overridden. Arm B applies where the fix code neither executes,
17
13
  // nor instructs, nor ships, which is `review-level.ts`'s inert set: the same three ways a defect in
18
14
  // this repository escapes, read here for the fix delta instead of the whole change.
19
15
  //
20
- // **The wider line the issue proposed — "the fix delta touches no runtime code path" — is not
21
- // adopted**, and the evidence against it is already in this directory. `review-level.ts` records that
22
- // joshuafolkken/kit#963 and #965 were documentation-only diffs in which a `medium` review found ten
23
- // real defects each — dangling pointers and citations naming the wrong file, in artifacts distributed
24
- // to every consumer — that no test covered. A prompt fix and a test fix are exactly where the review
25
- // is the only detector, so exempting them would remove the round in the case it earns its keep.
16
+ // **The wider line — "the fix delta touches no runtime code path" — is not adopted**: as
17
+ // `review-level.ts` records, documentation-only diffs carry real defects no test covers. A prompt
18
+ // fix and a test fix are exactly where the review is the only detector, so exempting them would
19
+ // remove the round in the case it earns its keep.
26
20
 
27
21
  type RoundTwoVerdict = 'required' | 'skip'
28
22
 
@@ -44,7 +38,7 @@ const BASE_MOVED_REASON =
44
38
  'the change base moved since round 1 was recorded, so the two file maps do not cover the same set of paths and their difference is not the fix delta — the round runs rather than reading that difference as one'
45
39
 
46
40
  interface RoundTwoInput {
47
- // **The commit the tree above is a diff against** (joshuafolkken/kit#1537). This decision reads the
41
+ // **The commit the tree above is a diff against**. This decision reads the
48
42
  // same digest comparison the brief's round-2 target does, so it inherits the same failure: taken
49
43
  // against two different bases, the two maps do not cover the same set of paths, and an empty or
50
44
  // inert-looking delta is then no evidence at all about what round 1 fixed. Here that evidence buys
@@ -68,11 +62,9 @@ interface RoundTwoDecision {
68
62
  }
69
63
 
70
64
  // **The snapshot's own timestamp travels with the answer**, the way `review-brief.ts` prints it
71
- // beside a round-2 target. An empty delta used to have two readings — round 1 wrote no fix code, or
72
- // the record was retaken after the fixes by a bare `josh review:brief` — and the digests cannot tell
73
- // them apart, so joshuafolkken/kit#1441 closed the second one at the source: the record is written
74
- // once per run and kept thereafter, which leaves "round 1 wrote no fix code" as the only reading of
75
- // an empty delta. The timestamp stays in the reason because a record can still **outlive** its run —
65
+ // beside a round-2 target. The record is written once per run and kept thereafter, so a bare
66
+ // `josh review:brief` cannot retake it after the fixes, which leaves "round 1 wrote no fix code" as
67
+ // the only reading of an empty delta. The timestamp stays in the reason because a record can still **outlive** its run —
76
68
  // `josh followup` is what clears it — and a delta measured from an earlier run's record is wider
77
69
  // rather than narrower, which a reader can only see from when that record was taken.
78
70
  function empty_reason(taken_at: string): string {
@@ -1,58 +1,12 @@
1
1
  import { PROJECT_ROOT } from '#scripts/init/init-paths'
2
2
  import { file_map_stamp, type FileMapStampAccess } from '#scripts/josh/file-map-stamp'
3
3
 
4
- // The three records `josh review:brief` reads (joshuafolkken/kit#1241, joshuafolkken/kit#1242).
5
- //
6
- // **The gate stamp** is written by `josh gate` when all four checks pass, and answers "were lint, the
7
- // type check, the spell check and the unit tests green on *this exact tree*". Without the tree half
8
- // the brief would assert a result that a later edit had already invalidated, which is the one kind of
9
- // report this repository refuses to make.
10
- //
11
- // **The in-flight marker** exists only while `josh gate` is running, and answers a question the gate
12
- // stamp cannot: the review and the gate now start together, so at the moment the brief is composed
13
- // the checks have usually not finished (joshuafolkken/kit#1242). Without it that state is
14
- // indistinguishable from "no gate was ever run", and the review agent re-runs the unit suite the run
15
- // is already running — the exact cost joshuafolkken/kit#1241 removed. **It asserts nothing about the
16
- // result**, only that a gate was started on this tree and the run joins it before committing.
17
- //
18
- // **The marker names its writer by pid *and* start time** (joshuafolkken/kit#1245). A pid on its own
19
- // is not a process: an interrupted gate leaves its marker behind, and once the operating system
20
- // reissues that pid the liveness probe passes again and the marker resumes asserting a gate that
21
- // ended. The pair closes that, because a reissued pid necessarily started after the record was
22
- // written. **The marker was not made weaker to fix it** — dropping it, or having the brief ignore it,
23
- // would put the re-run joshuafolkken/kit#1242 removed straight back.
24
- //
25
- // **A marker whose gate is gone is left where it is, and that is the decision rather than an
26
- // oversight** (joshuafolkken/kit#1245's second question). Three things make leaving it correct here.
27
- // The record is keyed per checkout, so exactly one file exists and nothing accumulates; the next
28
- // `josh gate` overwrites it, since `write_stamp` unlinks before it creates; and the identity check
29
- // makes a leftover inert for as long as it sits there. Removing it from the reader would buy none of
30
- // that and would cost the one thing that matters: the reader deletes on "not running", which is also
31
- // the answer a platform that cannot report a start time gives for a gate that **is** running — so the
32
- // sweep would delete live markers there, and the next brief of that same run would lose the in-flight
33
- // sentence. `unit-worker-share.ts` sweeps and is not inconsistent with this: its markers are keyed per
34
- // pid, so they accumulate without bound, and that is what a sweep is for.
35
- //
36
- // **The round-1 snapshot** is written by the brief itself, so that `--round 2` can name the fix
37
- // delta by comparison rather than by an agent recalling which files it edited.
38
- //
39
- // Both key on `PROJECT_ROOT` rather than the package directory: a globally installed `josh` has one
40
- // package directory for every project on the machine, so keying on it would let a run in one project
41
- // answer for another (the distinction joshuafolkken/kit#1215 drew for `josh latest:scope`).
42
- //
43
- // **`PROJECT_ROOT` is `process.cwd()`, so the two commands must run from the same directory to share
44
- // a record.** That is deliberate rather than overlooked: run from different directories they simply
45
- // miss each other, the brief finds no record, and it prints `Not verified` — the safe direction. The
46
- // tree *inside* the record cannot be left to `cwd()` the same way, because there a mismatch resolves
47
- // to "every file absent" on both sides and compares equal, so `review-tree.ts` asks git for the
48
- // repository root instead.
49
-
50
- // **The two scoped records** answer "were `josh lint:related` and `josh test:related` green on this
51
- // exact tree" (joshuafolkken/kit#1511). They are separate from the gate stamp because they claim
52
- // something narrower — the changed files rather than the whole project, and two checks rather than
53
- // four — and folding them into one record would let a green from either half stand for the other.
54
- // They are read by `scoped-green.ts`, which is where what they mean is written down; they live here
55
- // because a stamp prefix declared anywhere else is a second place to look for the same kind of file.
4
+ // The records `josh review:brief` reads, keyed on `PROJECT_ROOT` so a global `josh` never answers for
5
+ // another project. Gate stamp: the four checks were green on this exact tree. In-flight marker: a gate
6
+ // is running on this tree (it asserts no result); it names its writer by pid and start time, so a
7
+ // reissued pid cannot revive it, and a stale one is left for the next gate to overwrite. Round-1
8
+ // snapshot: the tree `--round 2` measures the fix delta against.
9
+ // The scoped stamps claim less than the gate stamp (changed files, two checks), so they stay separate.
56
10
  const LINT_RELATED_PREFIX = 'josh-lint-related-stamp-'
57
11
  const TEST_RELATED_PREFIX = 'josh-test-related-stamp-'
58
12
 
@@ -64,9 +18,7 @@ const BRIEFED_PREFIX = 'josh-review-briefed-'
64
18
  const gate_stamp: FileMapStampAccess = file_map_stamp.create(GATE_PREFIX, PROJECT_ROOT)
65
19
  const in_flight_stamp: FileMapStampAccess = file_map_stamp.create(IN_FLIGHT_PREFIX, PROJECT_ROOT)
66
20
  const round_one_stamp: FileMapStampAccess = file_map_stamp.create(ROUND_ONE_PREFIX, PROJECT_ROOT)
67
- // **The tree the latest round-1 brief handed out, retaken on every brief** (joshuafolkken/kit#2945).
68
- // The round-1 snapshot is kept from the first brief of a run, so it is not the tree a later review
69
- // read — a resume narrowed against it would skip a file put back to that older content.
21
+ // Retaken on every brief: the round-1 snapshot is not the tree a later review read.
70
22
  const briefed_stamp: FileMapStampAccess = file_map_stamp.create(BRIEFED_PREFIX, PROJECT_ROOT)
71
23
  const lint_related_stamp: FileMapStampAccess = file_map_stamp.create(
72
24
  LINT_RELATED_PREFIX,
@@ -77,22 +29,8 @@ const test_related_stamp: FileMapStampAccess = file_map_stamp.create(
77
29
  PROJECT_ROOT,
78
30
  )
79
31
 
80
- // **The round-1 snapshot's lifetime is one run, and something has to end it**
81
- // (joshuafolkken/kit#1441). Since the record is written once and never retaken, one left on disk
82
- // would be the record the **next** run's fix delta is measured against — so the run that ends removes
83
- // it, and `josh followup` is where a run ends. That is the answer to "the same run or a new one" the
84
- // retake guard needs, taken from the event itself rather than from a proxy for it.
85
- //
86
- // **Only one of the two directions is safe, which is why the caller is a single place.** A record
87
- // this never reaches — a run that stopped before `followup`, a `--no-merge` invocation, a `halfrun`,
88
- // a review run on its own — is measured from further back, so the next run's delta is wider and the
89
- // answer is `required`. **Removing one out of turn is the unsafe direction**: the next round-1 brief
90
- // finds nothing and writes a fresh record against the already-fixed tree, and arm A then fires on
91
- // unreviewed fix code — the defect joshuafolkken/kit#1441 closed, reintroduced from the other side.
92
- // So this is called from the end of a run that **merged**, and from nowhere else.
93
- //
94
- // Swallowed, and the caller is why: by the time this runs the pull request has already merged, so a
95
- // temp-directory problem must not turn a completed run into a failed one.
32
+ // Called only from the end of a merged run: a leftover widens the next delta (safe), while an early
33
+ // removal lets round 1 re-snapshot an already-fixed tree (unsafe). Swallowed — the PR already merged.
96
34
  function clear_round_one(target?: string): void {
97
35
  try {
98
36
  round_one_stamp.remove(target)
@@ -5,8 +5,7 @@ import { git_command } from '#scripts/git/git-command'
5
5
  import { stamp_file } from '#scripts/josh/stamp-file'
6
6
  import { observation_ledger } from '#scripts/observations/observation-ledger'
7
7
 
8
- // The tree `josh review:brief` records: every path the change touches, and the digest of its content
9
- // (joshuafolkken/kit#1241).
8
+ // The tree `josh review:brief` records: every path the change touches, and the digest of its content.
10
9
  //
11
10
  // The path list is `#scripts/git/changed-paths`', the same reading `josh review:level` decides from
12
11
  // — a second definition of "changed" would let the brief describe a different change from the level
@@ -33,11 +32,11 @@ function digest_of(root: string, relative: string): string {
33
32
  // stored stamp be compared against a fresh reading without a normalization step in between.
34
33
  //
35
34
  // **The observation ledger is left out of the map**, for the reason `hook-gate-reuse.ts` drops it from
36
- // the status it reads: it is no code any check runs (joshuafolkken/kit#1756). Kept in, a review's line
35
+ // the status it reads: it is no code any check runs. Kept in, a review's line
37
36
  // appended after the gate moved the map, so the ledger commit `pnpm josh followup` pushes carried a
38
37
  // tree the record no longer matched — the pre-push hook re-ran the whole unit suite inside the push's
39
38
  // 120-second budget, the timed-out push was retried over the still-running suite, and the commit's
40
- // undo then moved the tree under both (joshuafolkken/kit#2998). Filtered here, every reader of the map
39
+ // undo then moved the tree under both. Filtered here, every reader of the map
41
40
  // — the gate's record, both hooks, the brief and the round-2 fix delta — agrees on it.
42
41
  function tree_of(root: string, paths: ReadonlyArray<string>): Record<string, string> {
43
42
  const sorted = paths
@@ -54,7 +53,7 @@ function tree_of(root: string, paths: ReadonlyArray<string>): Record<string, str
54
53
  // say the gate had verified an arbitrarily edited tree, and `--round 2` would report an empty fix
55
54
  // delta. **A defect that answers "all clear" is the one shape this record cannot take**, which is why
56
55
  // the root is resolved rather than assumed (measured from `scripts/`: 18 of 25 entries `absent`).
57
- // The observation ledger is dropped inside `tree_of`, above (joshuafolkken/kit#3017).
56
+ // The observation ledger is dropped inside `tree_of`, above.
58
57
  async function read_changed_tree(
59
58
  paths?: ReadonlyArray<string>,
60
59
  root?: string,
@@ -4,11 +4,11 @@ import { time_shell } from '#scripts/time-runtime/time-shell'
4
4
  import { shell_segments } from './shell-segments'
5
5
 
6
6
  // The trigger helpers the enumeration in `delivered-rules.ts` is built from, held here so a rule
7
- // that lives in its own module can build its own row without importing the enumeration back
8
- // (joshuafolkken/kit#2119). `is_issue_filing` is the one three rows share — the WIP cap, the per-run
7
+ // that lives in its own module can build its own row without importing the enumeration back.
8
+ // `is_issue_filing` is the one three rows share — the WIP cap, the per-run
9
9
  // filing cap and the fold — so it could not stay a private function of the file that spreads their rows.
10
10
 
11
- // **Only `Bash`, and the omission is deliberate** (joshuafolkken/kit#1390): Claude Code denies one
11
+ // **Only `Bash`, and the omission is deliberate**: Claude Code denies one
12
12
  // call of a turn and runs the rest, so a refused `Edit` would leave its siblings applied and itself
13
13
  // not. Every rule delivered by the enumeration is therefore one whose binding moment is a shell call —
14
14
  // so the tool-name guard belongs here rather than to each row, and a row states only what it looks for
@@ -34,7 +34,7 @@ const ISSUES_ENDPOINT = /repos\/[^\s'"]*\/issues(?=$|["'\s])/u
34
34
  const TITLE_FIELD = /(?:-f|-F|--field|--raw-field)\s*'?title=/u
35
35
 
36
36
  // A filing made by hand rather than through `josh issue:file` — the call the `direct-filing` row
37
- // refuses on every occurrence (joshuafolkken/kit#2808).
37
+ // refuses on every occurrence.
38
38
  function is_direct_filing(command: string): boolean {
39
39
  if (ISSUE_CREATE_COMMAND.test(command)) return true
40
40
 
@@ -3,7 +3,7 @@ import { oracle_tokens } from './decision-oracle-tokens'
3
3
 
4
4
  // The batch oracles — the lane cut, the backlog budget and offer, the epic and post-merge steps, and
5
5
  // `run:step` — kept beside the enumeration rather than inside it because `decision-oracle.ts` reached
6
- // its file-size limit (joshuafolkken/kit#3264). They are one contiguous run of `DECISION_ORACLES`, so
6
+ // its file-size limit. They are one contiguous run of `DECISION_ORACLES`, so
7
7
  // spreading them back in at the same position keeps the printed listing's order unchanged.
8
8
 
9
9
  const {
@@ -24,11 +24,10 @@ const PRE_GATE_CUT_MD = '.claude/skills/workflow-commands/pre-gate-cut.md'
24
24
  const BACKLOGRUN_MD = '.claude/skills/workflow-commands/backlogrun.md'
25
25
 
26
26
  // The command reference in `docs/josh-commands.md` — one section per command, headed by the command
27
- // itself. joshuafolkken/kit#2190 cut `backlogrun.md` back to a manifest of pointers, so a decision it
28
- // used to carry inline (`run:merge`, `epic:next`, `backlog:budget`, `run:liveness`, `auto-ok:next`)
29
- // now has its verdict contract only in this reference. That makes it the single source and the section
30
- // a reader is routed to, in the same `file.md → \`josh <command>\`` form the `epic:reconcile` and
31
- // `lane:list` entries already use. joshuafolkken/kit#2254.
27
+ // itself. `backlogrun.md` is a manifest of pointers, so a decision (`run:merge`, `epic:next`,
28
+ // `backlog:budget`, `run:liveness`, `auto-ok:next`) has its verdict contract only in this reference.
29
+ // That makes it the single source and the section a reader is routed to, in the same
30
+ // `file.md → \`josh <command>\`` form the `epic:reconcile` and `lane:list` entries use.
32
31
  const RUN_MERGE_REFERENCE = 'docs/josh-commands-run.md → `josh run:merge`'
33
32
  const EPIC_NEXT_REFERENCE = 'docs/josh-commands-backlog.md → `josh epic:next`'
34
33
  const BACKLOG_BUDGET_REFERENCE = 'docs/josh-commands-backlog.md → `josh backlog:budget`'
@@ -107,7 +106,7 @@ const BATCH_ORACLES: ReadonlyArray<DecisionOracle> = [
107
106
  {
108
107
  name: 'run:step',
109
108
  decision: 'The run’s next single action, computed from the event stream, carry and issue state',
110
- args: ISSUE_N_ARG,
109
+ args: `[${ISSUE_N_ARG}]`,
111
110
  // The non-command answers: `run:step` prints a runnable command for a phase with one to run, and
112
111
  // one of these verdicts otherwise. A command line is not a vocabulary token, exactly as an issue
113
112
  // number is not one for `backlog:next`.
@@ -1,7 +1,7 @@
1
1
  import { run_stage } from '#scripts/run/run-stage'
2
2
  import type { DecisionOracle } from './decision-oracle'
3
3
 
4
- // The stage-ladder oracle (joshuafolkken/kit#3042), kept beside the enumeration rather than inside it
4
+ // The stage-ladder oracle, kept beside the enumeration rather than inside it
5
5
  // because `decision-oracle.ts` sits at its file-size limit. Where a run on an issue starts — and whether
6
6
  // the command typed has already been reached — is computed by `run:entry` from the issue and the tree's
7
7
  // hold, so the skill's stage table points at the command rather than re-deciding it in prose. The
@@ -1,6 +1,5 @@
1
1
  // Vocabulary tokens and arguments that appear in more than one oracle entry, shared by
2
- // `decision-oracle.ts` and `decision-oracle-batch.ts` so each string has one source
3
- // (joshuafolkken/kit#3264).
2
+ // `decision-oracle.ts` and `decision-oracle-batch.ts` so each string has one source.
4
3
 
5
4
  const oracle_tokens = {
6
5
  REQUIRED: 'required',
@@ -1,5 +1,5 @@
1
1
  // The enumeration of decision oracles — commands that answer a rule question from mechanically
2
- // readable inputs, making prose reasoning unnecessary (joshuafolkken/kit#2117).
2
+ // readable inputs, making prose reasoning unnecessary.
3
3
  //
4
4
  // **Question 0 of the rule-placement criterion**: "Can the rule's answer be computed from
5
5
  // mechanically readable inputs alone?" A yes means the rule is answered by a command on this list,
@@ -131,7 +131,7 @@ const DECISION_ORACLES: ReadonlyArray<DecisionOracle> = [
131
131
  name: 'issue:fold',
132
132
  decision: 'Whether findings filed from one session fold into one issue or stay separate',
133
133
  args: '<title...>',
134
- vocabulary: ['fold', 'separate', 'no-fold-needed'],
134
+ vocabulary: ['fold', 'separate', 'no-fold-needed', 'undetermined'],
135
135
  single_source: SPLIT_ASSESSMENT_QUESTION,
136
136
  },
137
137
  {