@joshuafolkken/kit 1.1240.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +29 -47
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +42 -10
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
  51. package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
  52. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
  53. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
  57. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
  60. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  61. package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
  62. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  63. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +216 -202
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +281 -94
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +16 -10
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +26 -2
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +20 -6
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cspell-cached.ts +1 -1
  560. package/scripts/lint/cycle-recheck.ts +122 -0
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +34 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +5 -6
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +25 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +13 -15
  801. package/scripts/run/run-step.ts +58 -47
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -16,18 +16,18 @@ import {
16
16
  type RollupCheck,
17
17
  } from './git-pr-checks-parse'
18
18
 
19
- // The bounded look at a pull request's checks that `gh pr checks <branch> --watch` used to give.
19
+ // The bounded look at a pull request's checks that `gh pr checks <branch> --watch` gives.
20
20
  //
21
21
  // **`--watch` is a streaming call and REST has no counterpart** — it holds the connection open and
22
- // redraws a table as each check settles, which no sequence of `gh api` requests reproduces
23
- // (joshuafolkken/kit#1022). What it is *used* for does have one: `git-pr-followup.ts` discards its
22
+ // redraws a table as each check settles, which no sequence of `gh api` requests reproduces.
23
+ // What it is *used* for does have one: `git-pr-followup.ts` discards its
24
24
  // result entirely, so the answer its one caller needs is "did the checks settle within two minutes",
25
25
  // which the poll loop in `git-pr-checks.ts` already computes. No new loop is written here; this is
26
- // that loop with a two-minute budget (joshuafolkken/kit#1028).
26
+ // that loop with a two-minute budget.
27
27
  //
28
- // **`git-pr.ts` was the second caller until joshuafolkken/kit#1232.** It read only `timed_out`, and
29
- // `followup` restarted the same wait the moment it returned — so the watch there was the same answer
30
- // waited for twice, and `pnpm josh git` now returns as soon as the pull request is open.
28
+ // **`git-pr.ts` does not call this.** It would read only `timed_out`, and `followup` restarts the
29
+ // same wait the moment it returns — the same answer waited for twice — so `pnpm josh git` returns as
30
+ // soon as the pull request is open.
31
31
  //
32
32
  // **What is lost is the live table.** `gh` printed each check's name and state as it changed; the
33
33
  // poll prints `Checking PR status… (n/N)` instead. The trade is accepted because the display was
@@ -49,12 +49,12 @@ interface WatchResult {
49
49
 
50
50
  // **The watch asks a weaker question than the merge gate, and that difference is load-bearing.**
51
51
  // `evaluate_pr_state` answers `success` only for a pull request that is *mergeable*: `CLEAN` merge
52
- // state, every required check green, no change request standing. `gh pr checks --watch` knew nothing
53
- // about any of that — it waited for the checks and exited non-zero if one failed. Handing the watch
52
+ // state, every required check green, no change request standing. `gh pr checks --watch` knows
53
+ // nothing about any of that — it waits for the checks and exits non-zero if one fails. Handing the watch
54
54
  // the merge gate's verdict would break it on a repository that requires an approving review, where
55
55
  // `mergeable_state` is `blocked`: the watch could never succeed, so it would report "CI still
56
56
  // running" over a green build, and a standing change request would end it non-zero on something the
57
- // old watch ignored outright.
57
+ // `--watch` ignores outright.
58
58
  //
59
59
  // **An empty rollup is `pending`, not `failure`** — deliberately, and it is the one place the watch
60
60
  // answers differently on the first poll than at the end. `followup` starts this right after the
@@ -62,12 +62,12 @@ interface WatchResult {
62
62
  // there would end the run red on a perfectly healthy one. Whether the branch really has no checks is
63
63
  // asked once, after the budget runs out — see `pr_checks_watch`.
64
64
 
65
- // Temporary (kit#753): CodeRabbit blocks nothing end to end, so a look-ahead that waits on it waits
65
+ // Temporary: CodeRabbit blocks nothing end to end, so a look-ahead that waits on it waits
66
66
  // for something no verdict downstream reads. Its commit status posts `Review queued` within seconds
67
- // of the pull request opening and stays pending for the whole review — thirteen minutes on PR #1211
68
- // — so counting it as pending spent the entire two-minute budget on **every** run and then ended in
69
- // the timeout note, before the merge gate applied kit#753's exemption and merged anyway
70
- // (joshuafolkken/kit#1217). The name comes from `is_coderabbit_check`, the one predicate the merge
67
+ // of the pull request opening and stays pending for the whole review, often well past the budget —
68
+ // so counting it as pending would spend the entire two-minute budget on **every** run and end in the
69
+ // timeout note, before the merge gate merges anyway under the CodeRabbit non-blocking exemption.
70
+ // The name comes from `is_coderabbit_check`, the one predicate the merge
71
71
  // gate's exemption is also written in terms of, so the two cannot drift apart.
72
72
  //
73
73
  // **Only the *pending* reading is dropped.** A CodeRabbit check that has already failed still makes
@@ -114,7 +114,7 @@ function describe_checks_failure(snapshot: PrStateSnapshot): string {
114
114
 
115
115
  // **The watch never reads `review_decision`**, so the poll must not spend a request fetching it. It
116
116
  // is the same difference `evaluate_checks_settled` is written for, said to the fetcher instead of to
117
- // the verdict: three requests a poll rather than four (joshuafolkken/kit#1043).
117
+ // the verdict: three requests a poll rather than four.
118
118
  function should_never_read_review_decision(): boolean {
119
119
  return false
120
120
  }
@@ -141,7 +141,7 @@ async function watch_until_settled(branch_name: string): Promise<void> {
141
141
 
142
142
  // `gh pr checks` exited non-zero for a branch with no checks at all just as it did for a failed one,
143
143
  // and `git-pr-followup.ts` relies on that to fail rather than spend its whole 32-minute budget on a
144
- // required check that is *missing* rather than pending (joshuafolkken/kit#999). Asking after the
144
+ // required check that is *missing* rather than pending. Asking after the
145
145
  // budget rather than on every poll is what keeps a pull request whose checks have not registered yet
146
146
  // from failing on the first read: two minutes is the grace, and an empty rollup at the end of them
147
147
  // is the answer `gh` gave immediately.
@@ -24,9 +24,9 @@ const CHECK_WAIT_INTERVAL_MS = 10_000
24
24
  // needs (2), so 27 minutes is the longest run that workflow permits, and five minutes of
25
25
  // runner-queue headroom goes on top. A unit test walks the `needs` graph of the distributed
26
26
  // workflows and fails if any declared budget outgrows this value; a job that declares no cap is a
27
- // gap the number cannot promise to cover rather than a reason to inflate it. Waiting longer costs nothing on a fast project: polling returns as
28
- // soon as the checks settle, and a failed check throws immediately rather than waiting out the
29
- // budget. See joshuafolkken/kit#851.
27
+ // gap the number cannot promise to cover rather than a reason to inflate it. Waiting longer costs
28
+ // nothing on a fast project: polling returns as soon as the checks settle, and a failed check throws
29
+ // immediately rather than waiting out the budget.
30
30
  const DEFAULT_TIMEOUT_SECONDS = 1920
31
31
 
32
32
  // The poll loop sleeps between attempts and not after the last one, so spanning a budget takes one
@@ -51,14 +51,13 @@ const DEFAULT_STABLE_READS = 2
51
51
  // One authoritative gate poll is enough once `pr_checks_watch` has already seen every check finish:
52
52
  // the watch is the first confirmation, so the poll that follows need only agree once. The two reads
53
53
  // exist for the pending→settled window a bare poll opens on, and the watch has itself already spanned
54
- // that window — so waiting a second interval after it merely re-proves what the watch established
55
- // (joshuafolkken/kit#2029).
54
+ // that window — so waiting a second interval after it merely re-proves what the watch established.
56
55
  const WATCH_CONFIRMED_STABLE_READS = 1
57
56
 
58
57
  // **A read that failed is not a verdict.** The loop reads every ten seconds, so a dropped connection,
59
58
  // a rate limit or one request over its budget is the kind of failure the *next* poll answers — and
60
- // ending a 32-minute wait on one of them costs the whole run again. Before joshuafolkken/kit#1077
61
- // every one of them rejected straight out of the loop, because the fetch had no `catch` at all.
59
+ // ending a 32-minute wait on one of them costs the whole run again, so the fetch catches them rather
60
+ // than rejecting straight out of the loop.
62
61
  //
63
62
  // **The cap is what keeps "ask again" from becoming "wait out the budget in silence".** Three
64
63
  // consecutive failures and the wait ends carrying the failure that caused it, so an endpoint that has
@@ -68,12 +67,12 @@ const WATCH_CONFIRMED_STABLE_READS = 1
68
67
  //
69
68
  // **The loop's own budget is unchanged**, so nothing here can extend a wait: a fetch that never
70
69
  // succeeds still runs out of attempts. And a failed read never counts as a passing one — it resets
71
- // the stable-read window, the same direction joshuafolkken/kit#925 / #950 / #973 / #1048 take.
70
+ // the stable-read window, so an unread state is never taken as a settled answer.
72
71
  const MAX_CONSECUTIVE_READ_FAILURES = 3
73
72
 
74
73
  // The wait's own timeout, named so a caller can tell it apart from a failing check. The bounded
75
74
  // watch in `git-pr-checks-watch.ts` answers `timed_out` for one and rethrows the other, and matching
76
- // on prose is the only distinction the loop offers (joshuafolkken/kit#1028).
75
+ // on prose is the only distinction the loop offers.
77
76
  const PR_CHECKS_TIMEOUT_MESSAGE = 'Timed out while waiting for PR checks to complete.'
78
77
 
79
78
  function is_pr_checks_timeout(error: unknown): boolean {
@@ -82,11 +81,10 @@ function is_pr_checks_timeout(error: unknown): boolean {
82
81
 
83
82
  // Whether this poll has to read the review listing, asked of the snapshot *without* one. It is a
84
83
  // question about the current poll rather than a cache key: answering `false` skips one request now
85
- // and nothing is carried into the next poll (joshuafolkken/kit#1043).
84
+ // and nothing is carried into the next poll.
86
85
  type ReviewDecisionPredicate = (snapshot: PrStateSnapshot) => boolean
87
86
 
88
- // The conservative answer, and the one every evaluator that does not say gets: read it every poll,
89
- // which is what all of them did before the predicate existed.
87
+ // The conservative answer, and the one every evaluator that does not say gets: read it every poll.
90
88
  function should_always_read_review_decision(): boolean {
91
89
  return true
92
90
  }
@@ -98,12 +96,12 @@ type PrStateFetcher = (
98
96
 
99
97
  // What the loop asks of each snapshot, and what it says when the answer is `failure`.
100
98
  //
101
- // The loop used to hard-code the merge gate's own verdict, which is the strictest question anyone
102
- // asks of a pull request: mergeable *and* every required check green *and* no change request
103
- // standing. `gh pr checks --watch` asked a much weaker one — have the checks finished? — and the
104
- // conversion in joshuafolkken/kit#1028 gave the watch the strict verdict by accident: on a repository
105
- // whose `mergeable_state` is `blocked`, the watch could never succeed, and a standing change request
106
- // made it *throw* out of `pnpm josh git`. Naming the question is what keeps the two apart.
99
+ // The merge gate's own verdict is the strictest question anyone asks of a pull request: mergeable
100
+ // *and* every required check green *and* no change request standing. `gh pr checks --watch` asks a
101
+ // much weaker one — have the checks finished? Hard-coding the strict verdict in the loop would hand
102
+ // it to the watch too: on a repository whose `mergeable_state` is `blocked`, the watch could never
103
+ // succeed, and a standing change request would make it *throw*. Naming the question is what keeps
104
+ // the two apart.
107
105
  //
108
106
  // **`should_read_review_decision` is part of the same question.** An evaluator that never reads
109
107
  // `review_decision` must not make the fetcher pay for it, and one that does must get a value read in
@@ -190,7 +188,7 @@ interface PollAttemptResult {
190
188
 
191
189
  // The two things one poll can come back with, kept apart so that only the *read* is retried. The
192
190
  // throw `classify_poll_result` raises on a `failure` verdict is an answer — the checks are red — and
193
- // retrying it would undo the fast fail joshuafolkken/kit#990 added.
191
+ // retrying it would undo the fast fail on a red check.
194
192
  type SnapshotRead =
195
193
  { kind: 'read'; snapshot: PrStateSnapshot } | { kind: 'unreadable'; cause: unknown }
196
194
 
@@ -289,14 +287,13 @@ async function wait_for_pr_success(options: WaitForPrSuccessOptions): Promise<Pr
289
287
  }
290
288
 
291
289
  // The snapshot module rather than `git-gh-command`, which is deliberate: `git-gh-command` also
292
- // exposes the watch, and the watch now polls through this file (joshuafolkken/kit#1028). Naming the
290
+ // exposes the watch, and the watch now polls through this file. Naming the
293
291
  // one read it actually needs keeps that from closing into an import cycle.
294
292
  //
295
293
  // **Three requests, and a fourth only where it can change the answer.** The pull request detail and
296
294
  // the two commit listings are read every poll because `mergeable_state` and the rollup both move
297
295
  // while CI runs; the review listing is read when the predicate says this poll's verdict turns on it.
298
- // A `followup` that waits out its whole 32-minute budget went from about 800 requests to about 600
299
- // (joshuafolkken/kit#1043).
296
+ // A `followup` that waits out its whole 32-minute budget went from about 800 requests to about 600.
300
297
  async function default_fetch_pr_state(
301
298
  branch_name: string,
302
299
  should_read_review_decision: ReviewDecisionPredicate = should_always_read_review_decision,
@@ -327,7 +324,7 @@ async function wait_for_pr_success_default(
327
324
  })
328
325
  }
329
326
 
330
- // Where a pull request GitHub merges on its own stands (joshuafolkken/kit#2497). `failed` is what
327
+ // Where a pull request GitHub merges on its own stands. `failed` is what
331
328
  // auto-merge never fires under — a red required check, a conflict, a requested change — so a wait on
332
329
  // it ends now rather than at the budget; a red check outside the required list is not among them
333
330
  // (`is_auto_merge_blocked`). A read that failed answers `waiting`, so a poll asks again.
@@ -20,7 +20,7 @@ interface PullComment {
20
20
  }
21
21
 
22
22
  // `undefined` when the listing could not be read, which is not the same as a pull request with no
23
- // line comments (joshuafolkken/kit#973).
23
+ // line comments.
24
24
  function parse_pull_comments(raw_json: string | undefined): Array<PullComment> | undefined {
25
25
  if (raw_json === undefined) return undefined
26
26
 
@@ -58,13 +58,14 @@ function log_unresolved_coderabbit(urls: ReadonlyArray<string>): void {
58
58
  }
59
59
  }
60
60
 
61
- // Temporary (kit#753): unresolved CodeRabbit line comments no longer block the merge. They are
61
+ // Temporary: unresolved CodeRabbit line comments do not block the merge. They are
62
62
  // logged, returned as audit notes for the completion notification, and — when an ignore reason is
63
- // supplied — still documented on the PR. Revert together with kit#752.
63
+ // supplied — still documented on the PR. Revert together with the rest of the temporary CodeRabbit
64
+ // non-blocking policy.
64
65
  // Unreadable is reported, never blocked — the opposite of the AI review gate's handling of the same
65
- // gap, and for the reason kit#753 gave: CodeRabbit does not block the merge at all right now, so an
66
+ // gap, and for the policy's own reason: CodeRabbit does not block the merge at all right now, so an
66
67
  // unreadable CodeRabbit listing cannot either. What it must not do is pass as "nothing unresolved",
67
- // which is what the reader's old `'[]'` made of it (joshuafolkken/kit#973).
68
+ // which is what reading it as `'[]'` would make of it.
68
69
  const UNREADABLE_CR_NOTE =
69
70
  'CodeRabbit line comments could not be read; unresolved findings were not checked (kit#753).'
70
71
 
@@ -87,7 +88,8 @@ async function report_unreadable_cr(input: {
87
88
  }
88
89
 
89
90
  // Documented on the pull request when a reason was given, logged when it was not. Either way the
90
- // finding is recorded rather than dropped — kit#753 removed the block, not the audit trail.
91
+ // finding is recorded rather than dropped — the non-blocking policy removes the block, not the
92
+ // audit trail.
91
93
  async function record_unresolved_cr(input: {
92
94
  branch_name: string
93
95
  ignore_reason: string | undefined
@@ -1,7 +1,7 @@
1
1
  import { telegram_notify, type TelegramSendInput } from '#scripts/notify/telegram-notify'
2
2
 
3
- // What to type when the confirmation notification itself could not be delivered
4
- // (joshuafolkken/kit#1564). The `--body-file` spelling rather than `--body`, because the body names
3
+ // What to type when the confirmation notification itself could not be delivered.
4
+ // The `--body-file` spelling rather than `--body`, because the body names
5
5
  // commands and a backtick inside shell double quotes is evaluated before the command runs.
6
6
  const CONFIRMATION_RECOVERY =
7
7
  'send it by hand — `pnpm josh notify --task-type confirmation --issue-url <url> ' +
@@ -28,7 +28,7 @@ function build_confirmation_input(input: {
28
28
  }
29
29
  }
30
30
 
31
- // **The tolerant send** (joshuafolkken/kit#1564). What stops the run is the blocker this
31
+ // **The tolerant send**. What stops the run is the blocker this
32
32
  // notification is *about*, and it is raised by the caller — so a failed send must not replace that
33
33
  // diagnosis with a Telegram error. It is reported and the caller's own stop still happens.
34
34
  //
@@ -47,8 +47,8 @@ function has_ignore_reason(reason: string | undefined): reason is string {
47
47
  return reason !== undefined && reason.trim().length > 0
48
48
  }
49
49
 
50
- // Shared by every `followup` gate that can stop the run — the AI review scan and, since
51
- // joshuafolkken/kit#1578, the managed config-file gate. They ask the same two questions (was a reason
50
+ // Shared by every `followup` gate that can stop the run — the AI review scan and the managed
51
+ // config-file gate. They ask the same two questions (was a reason
52
52
  // given, and how is the confirmation sent), and a second copy of either answer is what lets the two
53
53
  // gates drift apart.
54
54
  const git_pr_confirmation = {
@@ -27,18 +27,16 @@ function build_report(hits: ReadonlyArray<ManagedHit>): Array<string> {
27
27
  return [REPORT_HEADING, REPORT_PATHS_HEADING, managed_config_scope.format_hits(hits)]
28
28
  }
29
29
 
30
- // **This reports; it does not stop the merge** (joshuafolkken/kit#1592). joshuafolkken/kit#1578 made
31
- // it a confirmation gate that exited non-zero ahead of the CI wait, and in kit the condition it tests
32
- // is nearly always true: kit is the distribution source, so every change to `CLAUDE.md`, to
33
- // `prompts/`, to `.claude/skills/` or to the distributed part of `docs/` is by definition a change to
34
- // a distributed path. Measured on `epicrun #1413`, **two of three children stopped here** — and in
35
- // both the distributed file was what the Issue's own acceptance criteria had ordered changed. The
36
- // gate was not catching an unintended edit; it was stopping the work.
30
+ // **This reports; it does not stop the merge**. In kit the condition it tests is nearly always
31
+ // true: kit is the distribution source, so every change to `CLAUDE.md`, to `prompts/`, to
32
+ // `.claude/skills/` or to the distributed part of `docs/` is by definition a change to a distributed
33
+ // path, usually one the Issue's own acceptance criteria ordered changed. A gate that exits non-zero
34
+ // here would not catch an unintended edit; it would stop the work.
37
35
  //
38
36
  // **There is deliberately no branch on which repository this is.** The alternative — stop in a
39
37
  // consumer, where editing a distributed file really is the mistake `CLAUDE.md` → "Route
40
- // distributed-doc / config changes upstream to kit" names, and stay quiet in kit — was weighed and
41
- // rejected on joshuafolkken/kit#1592: it needs a distribution-source test this package does not have,
38
+ // distributed-doc / config changes upstream to kit" names, and stay quiet in kit — is rejected: it
39
+ // needs a distribution-source test this package does not have,
42
40
  // no case is recorded of the gate saving a consumer's work, and the report below reaches a consumer's
43
41
  // reader just as well. `managed_config_scope` matches both ends of every mapping and distinguishes no
44
42
  // repository, and that property is kept rather than worked around.
@@ -1,5 +1,5 @@
1
1
  // What `pnpm josh git` prints once the pull request is open. It no longer claims anything about the
2
- // checks: this command returns before they have run (joshuafolkken/kit#1232), and the old
2
+ // checks: this command returns before they have run, and the old
3
3
  // "All checks passed successfully." was printed on the strength of a watch whose verdict decided
4
4
  // nothing. Naming `pnpm josh followup` here is the whole replacement — it is what waits, and what
5
5
  // merges.
@@ -1,14 +1,17 @@
1
1
  import { pr_classification, type ReleaseClassification } from '#scripts/ci/pr-classification'
2
2
  import type { IssueInfo } from '#scripts/git/git-issue'
3
3
  import { pr_info_schema } from '#scripts/git/git-schemas'
4
+ import { issue_cite } from '#scripts/issue/issue-cite'
5
+ import { session_cite } from '#scripts/issue/session-cite'
4
6
  import { animation_helpers, type AnimationOptions } from '#scripts/lib/animation-helpers'
7
+ import { json_value } from '#scripts/lib/json-value'
5
8
  import { git_gh_command } from './git-gh-command'
6
9
  import { git_pr_error } from './git-pr-error'
7
10
  import { git_pr_messages } from './git-pr-messages'
8
11
 
9
12
  // **Answers the new pull request's URL, and `undefined` when one already existed.** `pr_create`
10
13
  // filters its REST response to `.html_url`, so the address is in hand the moment the call returns —
11
- // which matters now that nothing waits before reporting it (joshuafolkken/kit#1232). `pr_get_url`
14
+ // which matters now that nothing waits before reporting it. `pr_get_url`
12
15
  // resolves the branch through the `?head=…` listing, and that listing is eventually consistent: read
13
16
  // in the same instant the pull request was created it can answer nothing, and `pr_get_url` folds
14
17
  // "not there yet" and "the read failed" into the same `undefined`. The five-second sleep used to
@@ -49,8 +52,8 @@ async function display_pr_url_if_available(branch_name: string): Promise<void> {
49
52
  }
50
53
  }
51
54
 
52
- // **This command stops at "the pull request is open"; it does not wait for the checks**
53
- // (joshuafolkken/kit#1232). It used to sleep five seconds and then watch the rollup on a two-minute
55
+ // **This command stops at "the pull request is open"; it does not wait for the checks**.
56
+ // It used to sleep five seconds and then watch the rollup on a two-minute
54
57
  // budget — measured at 119.8 seconds of one 1555-second run, 7.7% of it — and the answer decided
55
58
  // nothing: only `timed_out` was read, and only to pick which message to print. What actually blocks
56
59
  // a merge is `pnpm josh followup`, whose `wait_for_pr_success` asks a stricter question (CLEAN merge
@@ -89,17 +92,11 @@ async function create_and_report(
89
92
  }
90
93
 
91
94
  function parse_pr_state(pr_info_json: string): string | undefined {
92
- try {
93
- const result = pr_info_schema.safeParse(JSON.parse(pr_info_json))
94
-
95
- return result.success ? result.data.state : undefined
96
- } catch {
97
- return undefined
98
- }
95
+ return json_value.parse_with(pr_info_json, pr_info_schema)?.state
99
96
  }
100
97
 
101
98
  // A read that failed throws rather than answering `undefined`: "no state" is read as "not merged",
102
- // which would write onto a pull request that already merged (joshuafolkken/kit#3263).
99
+ // which would write onto a pull request that already merged.
103
100
  async function get_pr_state(branch_name: string): Promise<string | undefined> {
104
101
  const pr_info_json = await git_gh_command.pr_view(branch_name)
105
102
 
@@ -113,7 +110,7 @@ function is_pr_state_merged(pr_state: string | undefined): boolean {
113
110
  }
114
111
 
115
112
  // A body the caller supplied is written onto the pull request that is already open, rather than
116
- // dropped with the create that did not happen (joshuafolkken/kit#2446): a rerun carrying the
113
+ // dropped with the create that did not happen: a rerun carrying the
117
114
  // live-execution evidence is how a merge `followup` refused for lacking it is recovered.
118
115
  async function report_existing_pr(
119
116
  body: string,
@@ -164,11 +161,11 @@ async function create(
164
161
  }
165
162
 
166
163
  function build_title(issue_info: IssueInfo): string {
167
- return `${issue_info.title} #${issue_info.number}`
164
+ return `${issue_info.title} ${issue_cite.plain(issue_info.number)}`
168
165
  }
169
166
 
170
167
  function build_body(issue_info: IssueInfo, extra_body?: string): string {
171
- const closes = `closes #${issue_info.number}`
168
+ const closes = `closes ${issue_cite.plain(issue_info.number)}`
172
169
 
173
170
  if (extra_body === undefined) return closes
174
171
 
@@ -199,7 +196,7 @@ async function create_for_issue(
199
196
  }
200
197
 
201
198
  // The label the pull request is opened with — also asked by `git-preflight.ts` before the commit, so
202
- // a missing classification is reported beside the other unmet preconditions (joshuafolkken/kit#2817).
199
+ // a missing classification is reported beside the other unmet preconditions.
203
200
  async function release_classification(
204
201
  issue_number: string,
205
202
  branch_name: string,
@@ -211,7 +208,9 @@ async function release_classification(
211
208
  const issue_json = await git_gh_command.issue_view_json(issue_number, 'labels,body')
212
209
 
213
210
  if (issue_json === undefined) {
214
- throw new Error(`Could not read issue #${issue_number} for release classification`)
211
+ throw new Error(
212
+ `Could not read issue ${session_cite.issue(issue_number)} for release classification`,
213
+ )
215
214
  }
216
215
 
217
216
  return pr_classification.select_issue_classification(issue_json)
@@ -1,10 +1,9 @@
1
1
  // Reading a GitHub issue or pull-request URL as an identity: which repository it is in, and which
2
2
  // number. `josh notify` resolves the repository a notification is *about* this way, because the
3
3
  // working directory answers a different question — which repository the session happens to be
4
- // running in. A notification filed about another repository used to carry that repository's URL
5
- // under this repository's name (joshuafolkken/kit#903), and the same mismatch survived for a
6
- // notification carrying only a pull-request URL until joshuafolkken/kit#994 added the second form
7
- // here rather than beside it.
4
+ // running in; reading it instead would file a notification about another repository under this
5
+ // repository's name. Both the issue and the pull-request form live here, so a notification carrying
6
+ // only a pull-request URL resolves the same way.
8
7
  //
9
8
  // Two other modules read a URL for something narrower and keep their own patterns. `epic-parse`
10
9
  // scans an epic body for task-list rows, so its regex is anchored to the row marker and runs
@@ -21,9 +20,9 @@ const REPOSITORY_SOURCE = `^${GITHUB_URL_PREFIX_SOURCE}([^/]+)/([^/]+)`
21
20
  // caller's fallback is the working directory, which is a visibly wrong answer rather than a
22
21
  // plausible one. A trailing `#anchor` or `?query` still parses, since neither is a word character.
23
22
  const ISSUE_URL_PATTERN = new RegExp(String.raw`${REPOSITORY_SOURCE}/issues/(\d+)\b`, 'u')
24
- // The same shape for a pull request. `git-pr-followup` used to carry its own copy of this, anchored
25
- // to the end of the string; reading `.../pull/12/files` now yields the repository it names instead
26
- // of nothing, which is the better answer for every caller (joshuafolkken/kit#994).
23
+ // The same shape for a pull request, not anchored to the end of the string: reading
24
+ // `.../pull/12/files` yields the repository it names instead of nothing, which is the better answer
25
+ // for every caller.
27
26
  const PULL_URL_PATTERN = new RegExp(String.raw`${REPOSITORY_SOURCE}/pull/(\d+)\b`, 'u')
28
27
 
29
28
  // What both forms answer: which repository the URL names.
@@ -40,7 +39,7 @@ interface RepoIdentity {
40
39
  // The two forms carry their number under different names on purpose. A pull target is then not
41
40
  // assignable where an issue target is expected, so handing a PR number to a reader that asks the
42
41
  // issue endpoint is a compile error rather than a notification carrying an unrelated issue's title
43
- // — the joshuafolkken/kit#903 mismatch class, which this module exists to close.
42
+ // — the mismatch class this module exists to close.
44
43
  interface IssueUrlTarget extends RepoIdentity {
45
44
  issue_number: string
46
45
  }
@@ -91,7 +90,7 @@ function parse(issue_url: string | undefined): IssueUrlTarget | undefined {
91
90
 
92
91
  // A pull-request URL names the same repository an issue URL does. `josh notify` reads it when it was
93
92
  // given no `--issue-url`, so a completion notification carrying only a PR link stops being filed
94
- // under the working directory's repository (joshuafolkken/kit#994).
93
+ // under the working directory's repository.
95
94
  function parse_pull(pull_url: string | undefined): PullUrlTarget | undefined {
96
95
  const parsed = parse_with(PULL_URL_PATTERN, pull_url)
97
96
  if (parsed === undefined) return undefined
@@ -0,0 +1,66 @@
1
+ import { mkdtemp, rm, symlink } from 'node:fs/promises'
2
+ import { tmpdir } from 'node:os'
3
+ import path from 'node:path'
4
+ import { git_worktree } from './git-worktree'
5
+
6
+ // A throwaway tree at one commit, for a command that has to run something on a tree other than the
7
+ // caller's — `josh test:red` runs the new tests on the merge-base, `josh metrics` measures it.
8
+ //
9
+ // **It is a detached worktree, never the caller's checkout**: the caller's tree and index are neither
10
+ // read back nor written. The worktree borrows this checkout's `node_modules` through a symlink rather
11
+ // than installing its own: what is asked about is the source at that commit, and an install would add
12
+ // seconds and a network dependency to every run.
13
+
14
+ const TREE_NAME = 'tree'
15
+ const NODE_MODULES = 'node_modules'
16
+
17
+ interface BaseTree {
18
+ // The temp directory holding the tree — a file written here sits beside the tree, never in it.
19
+ parent: string
20
+ tree: string
21
+ }
22
+
23
+ async function prepare(tree: string, commit: string): Promise<void> {
24
+ await git_worktree.worktree_add_detached(tree, commit)
25
+ await symlink(path.resolve(NODE_MODULES), path.join(tree, NODE_MODULES), 'dir')
26
+ }
27
+
28
+ // Best effort: a removal that fails leaves a registration `worktree prune` drops once the directory is
29
+ // gone, so the cleanup never replaces the caller's answer with its own error.
30
+ async function remove(base_tree: BaseTree): Promise<void> {
31
+ try {
32
+ await git_worktree.worktree_remove(base_tree.tree)
33
+ } catch {
34
+ // The directory is deleted below and the prune drops the stale registration.
35
+ }
36
+
37
+ await rm(base_tree.parent, { force: true, recursive: true })
38
+
39
+ try {
40
+ await git_worktree.worktree_prune()
41
+ } catch {
42
+ // A failed prune leaves a stale registration the next prune drops; the answer stands.
43
+ }
44
+ }
45
+
46
+ async function with_tree<T>(
47
+ prefix: string,
48
+ commit: string,
49
+ use: (base_tree: BaseTree) => Promise<T>,
50
+ ): Promise<T> {
51
+ const parent = await mkdtemp(path.join(tmpdir(), prefix))
52
+ const base_tree = { parent, tree: path.join(parent, TREE_NAME) }
53
+
54
+ try {
55
+ await prepare(base_tree.tree, commit)
56
+
57
+ return await use(base_tree)
58
+ } finally {
59
+ await remove(base_tree)
60
+ }
61
+ }
62
+
63
+ const base_tree = { NODE_MODULES, with_tree }
64
+
65
+ export type { BaseTree }
66
+ export { base_tree }
@@ -1,6 +1,7 @@
1
1
  import { git_command } from './git-command'
2
+ import { git_spawn } from './git-spawn'
2
3
 
3
- // **The change base as a commit, or nothing — never a ref name** (joshuafolkken/kit#1537).
4
+ // **The change base as a commit, or nothing — never a ref name**.
4
5
  //
5
6
  // `git_command.change_base` degrades to the default-branch *name* when `merge-base` cannot answer,
6
7
  // and a name moves. Any reader that stores one reading and compares it against a later one — the
@@ -21,6 +22,45 @@ async function resolved(): Promise<string | undefined> {
21
22
  }
22
23
  }
23
24
 
24
- const change_base = { resolved }
25
+ const MERGE_BASE_COMMAND = 'merge-base'
26
+ const MERGE_HEAD = 'MERGE_HEAD'
27
+ const LINE_BREAK = '\n'
28
+
29
+ // Where the side a merge in progress brings in left the default branch — `undefined` where no merge
30
+ // is in progress, which is every ordinary run.
31
+ async function incoming_base(): Promise<string | undefined> {
32
+ try {
33
+ const reference = await git_command.default_branch_reference()
34
+
35
+ return await git_spawn.read([MERGE_BASE_COMMAND, reference, MERGE_HEAD])
36
+ } catch {
37
+ return undefined
38
+ }
39
+ }
40
+
41
+ // `--independent` drops every commit another one listed reaches, so of two commits on the default
42
+ // branch's history it keeps the later.
43
+ async function later_of(base: string, incoming: string): Promise<string> {
44
+ const kept = await git_spawn.read([MERGE_BASE_COMMAND, '--independent', base, incoming])
45
+ const [later = base] = kept.split(LINE_BREAK)
46
+
47
+ return later
48
+ }
49
+
50
+ // **The base of the tree, not of `HEAD`, while a merge is in progress.** A merge of the default
51
+ // branch that stopped on a conflict has already put the default branch's files in the work tree, but
52
+ // `HEAD` is still the commit before it — so `resolved` answers the old merge-base and everything the
53
+ // default branch brought in reads as this branch's own change. The commit the merge is about to make
54
+ // has both parents, and its merge-base is the later of theirs; that is the commit a reader measuring
55
+ // the *tree* has to hold it to, and the one `resolved` answers by itself once the merge is committed.
56
+ async function resolved_through_merge(): Promise<string | undefined> {
57
+ const [base, incoming] = await Promise.all([resolved(), incoming_base()])
58
+
59
+ if (base === undefined || incoming === undefined) return base
60
+
61
+ return await later_of(base, incoming)
62
+ }
63
+
64
+ const change_base = { resolved, resolved_through_merge }
25
65
 
26
66
  export { change_base }
@@ -5,11 +5,11 @@ import { git_command } from './git-command'
5
5
  // The narrowing every scoped re-check shares: which files a check was narrowed by, or why it could
6
6
  // not be narrowed at all.
7
7
  //
8
- // joshuafolkken/kit#1257 gave the unit suite this shape and joshuafolkken/kit#1298 gave lint the
9
- // same one. The two differ only in which extensions they can read and in the words they print;
10
- // everything else — where the changed files come from, dropping what the tree no longer holds,
11
- // telling an unreadable change list apart from one that narrowed to nothing, and listing what was
12
- // narrowed by — was identical, so it lives here once rather than in each command.
8
+ // The unit suite and lint share this shape. The two differ only in which extensions they can read
9
+ // and in the words they print; everything else — where the changed files come from, dropping what
10
+ // the tree no longer holds, telling an unreadable change list apart from one that narrowed to
11
+ // nothing, and listing what was narrowed by — is identical, so it lives here once rather than in
12
+ // each command.
13
13
  //
14
14
  // **A narrowed run is added in front of the whole check, never in place of it.** Both fallbacks
15
15
  // therefore end at the whole check, and each says which of the two it was: the one thing this must
@@ -3,8 +3,7 @@ import { git_command } from './git-command'
3
3
  // The set of changed paths a mechanical, path-driven decision is made from.
4
4
  //
5
5
  // `josh review:level` asks this same question of the same tree (which level to review at), and a
6
- // second copy would let a caller disagree about what "changed" means. joshuafolkken/kit#907: sharing
7
- // this reading is the moment it stopped being one command's private helper.
6
+ // second copy would let a caller disagree about what "changed" means.
8
7
 
9
8
  function to_paths(raw: string): Array<string> {
10
9
  return raw
@@ -7,12 +7,12 @@ const SEPARATOR_LINE = '──────────────────
7
7
  const GIT_COMMAND_UNIX = '/usr/bin/git'
8
8
  // git's machine-readable output, asked for by the readers that parse rather than display. It lives
9
9
  // here rather than beside either of them because `status` and `worktree_list` now sit in different
10
- // modules (joshuafolkken/kit#1640) and a copy in each is a second answer to one question.
10
+ // modules and a copy in each is a second answer to one question.
11
11
  const PORCELAIN_FLAG = '--porcelain'
12
12
  // The untracked-files mode every porcelain status reading passes (`git-command.ts` carries why it is
13
13
  // passed and why it is `all`), shared so another module's own reading cannot drift from it.
14
14
  const UNTRACKED_FILES_FLAG = '--untracked-files=all'
15
- // The git binary a spawn runs in place of the platform's own (joshuafolkken/kit#3234). The spawn path
15
+ // The git binary a spawn runs in place of the platform's own. The spawn path
16
16
  // is absolute, so a `git` placed in front on `PATH` never stands in for it: the unit suite's network
17
17
  // guard shimmed `git` that way, and `josh ship`'s tests fetched and merged the default branch into the
18
18
  // checkout they ran in without the guard ever seeing the call. The guard names its shim here instead.
@@ -135,7 +135,7 @@ const git_branch = {
135
135
  check_and_create_branch,
136
136
  is_mismatch,
137
137
  // Exported so a lane's branch name can be checked against the real matcher rather than against a
138
- // second copy of the pattern (joshuafolkken/kit#1497). A copy is what let `lane/<N>` ship: nothing
138
+ // second copy of the pattern. A copy is what let `lane/<N>` ship: nothing
139
139
  // asserted that the name `lane:open` writes is one this function accepts.
140
140
  has_same_issue_prefix,
141
141
  issue_from_branch,