@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
@@ -7,41 +7,41 @@ const ENHANCEMENT_LABEL = 'enhancement'
7
7
  const BREAKING_CHANGE_LABEL = 'breaking-change'
8
8
  const IN_PROGRESS_LABEL = 'in-progress'
9
9
  // Applied by `kickoff` once its plan is on the issue, so the next command's `run:entry` reads the issue
10
- // as planned and starts at the implementation rather than planning again (joshuafolkken/kit#3042).
10
+ // as planned and starts at the implementation rather than planning again.
11
11
  // Namespaced like `run:solo`: a bare `planned` is a common roadmap label a person may already apply,
12
12
  // and reading one as kickoff's mark would skip the planning that never happened.
13
13
  const PLANNED_LABEL = 'run:planned'
14
14
  // Parks a child that cannot advance without a person deciding something. `epic:next` is what reads
15
15
  // it: a parked child is why a run reports "nothing left that time will fix" rather than waiting
16
- // forever (joshuafolkken/kit#860).
16
+ // forever.
17
17
  const NEEDS_DECISION_LABEL = 'needs-decision'
18
- // Marks an issue whose defect reaches the verification path, so it runs with nothing beside it
19
- // (joshuafolkken/kit#2776). A run applies it from the verification-path enumeration in `backlogrun-lanes.md`;
18
+ // Marks an issue whose defect reaches the verification path, so it runs with nothing beside it.
19
+ // A run applies it from the verification-path enumeration in `backlogrun-lanes.md`;
20
20
  // `backlog:next` enforces it (`backlog-solo.ts`), so the rule no longer rests on a judgement at
21
21
  // dispatch time.
22
22
  const RUN_SOLO_LABEL = 'run:solo'
23
- // The other half of the same judgement: an issue a run read and found safe to run beside others
24
- // (joshuafolkken/kit#2779). Without it an issue lacking `run:solo` could mean "judged parallel" or
23
+ // The other half of the same judgement: an issue a run read and found safe to run beside others.
24
+ // Without it an issue lacking `run:solo` could mean "judged parallel" or
25
25
  // "never judged", and `backlog:next` withholds the second (`epic-triage.ts`).
26
26
  const RUN_LANE_LABEL = 'run:lane'
27
- // Puts an issue at the head of the backlog's ranking (joshuafolkken/kit#2928). A person or a run may
27
+ // Puts an issue at the head of the backlog's ranking. A person or a run may
28
28
  // apply it — a run only where it can cite a deadline or a stated urgency, or a policy a person wrote
29
29
  // (`backlogrun-steps.md`) — and **only a person removes it**: a run that could clear it could undo
30
30
  // the person's ordering. Read by `issue-rank.ts`, the one place the ranking keys are decided.
31
31
  const PRIORITY_HIGH_LABEL = 'priority:high'
32
- // Opts one issue outside any epic into unattended execution (joshuafolkken/kit#906). **Only a
32
+ // Opts one issue outside any epic into unattended execution. **Only a
33
33
  // person applies it.** `epicrun #<E>` approves the merges inside `#<E>`; this label is the only way
34
34
  // a person extends that approval past the epic's edge, so a label an AI could apply to itself would
35
35
  // let an unattended run widen its own authorization — which is not a guard at all.
36
36
  const AUTO_OK_LABEL = 'auto-ok'
37
37
  // Degrades one issue's run to a `halfrun`-shaped stop: it is implemented and taken through the
38
- // verification gate, and then nothing is committed, pushed, opened as a pull request or merged
39
- // (joshuafolkken/kit#1125). **Only a person applies it** — a mark a run could clear for itself is not
38
+ // verification gate, and then nothing is committed, pushed, opened as a pull request or merged.
39
+ // **Only a person applies it** — a mark a run could clear for itself is not
40
40
  // a mark.
41
41
  //
42
42
  // It is the opposite of `auto-ok` in what it does: one widens unattended execution past an epic's
43
43
  // edge, the other withholds the last step of it. Unlike `auto-ok`, which `issue:file` applies by
44
- // default to work found by opted-in work (joshuafolkken/kit#3213), no run ever applies it. `auto-ok`
44
+ // default to work found by opted-in work, no run ever applies it. `auto-ok`
45
45
  // answers "may this run at all", this one answers "may its result ship without a person looking".
46
46
  //
47
47
  // **Not `needs-decision`, and the difference is what the two sets below encode.** A parked issue is
@@ -51,10 +51,9 @@ const AUTO_OK_LABEL = 'auto-ok'
51
51
  // checkout and must go on holding the repository. Read as parked in either place, the next child
52
52
  // would start on top of that work.
53
53
  const NEEDS_HUMAN_REVIEW_LABEL = 'needs-human-review'
54
- // Marks an issue whose work a run verified is **already merged** (joshuafolkken/kit#1679). Closing
55
- // an Issue is Tier C, so a run that reaches that conclusion may not act on it — and before this
56
- // label there was no exit that was not Tier C: `fullrun #1656` verified the work was already in
57
- // `main` from joshuafolkken/kit#1623 and closed the Issue itself.
54
+ // Marks an issue whose work a run verified is **already merged**. Closing
55
+ // an Issue is Tier C, so a run that reaches that conclusion may not act on it — this label is its
56
+ // exit that is not Tier C.
58
57
  //
59
58
  // **It is not `needs-decision`, and the difference is the whole reason it exists.** A parked issue
60
59
  // waits for an answer nobody has given; this one has its answer already — the work is done, and all
@@ -65,7 +64,7 @@ const NEEDS_HUMAN_REVIEW_LABEL = 'needs-human-review'
65
64
  // takes it off, because taking it off asserts the work is *not* done, which is the same claim in
66
65
  // reverse and is no more a run's to make.
67
66
  const ALREADY_DONE_LABEL = 'already-done'
68
- // Marks the Issue that tracks a repository's next release (joshuafolkken/kit#3360). An Issue whose
67
+ // Marks the Issue that tracks a repository's next release. An Issue whose
69
68
  // change reaches a consumer only once published is linked to it as a `blocked_by` blocker
70
69
  // (`josh issue:release`), so "merged but not yet released" is visible in the backlog. A run applies
71
70
  // it; **`auto-ok` never rides on it** — `issue-auto-ok.ts` refuses the default for it on every path,
@@ -90,20 +89,19 @@ const NOT_DIRECTLY_RUNNABLE_LABELS: ReadonlySet<string> = new Set([
90
89
  ALREADY_DONE_LABEL,
91
90
  ])
92
91
 
93
- // joshuafolkken/kit#1083: filing-route labels, applied at filing time so the backlog's composition —
94
- // a review-cap carry-forward vs a split child vs a Tier A in-implementation filing — is countable
95
- // with `gh api "repos/{owner}/{repo}/issues?labels=<route>"` instead of grepping issue bodies by
96
- // hand, which is how the 2026-08-30 breakdown was produced and why it did not reproduce. Purely
92
+ // Filing-route labels, applied at filing time so the backlog's composition — a review-cap
93
+ // carry-forward vs a split child vs a Tier A in-implementation filing — is countable with
94
+ // `gh api "repos/{owner}/{repo}/issues?labels=<route>"` instead of grepping issue bodies by hand,
95
+ // which does not reproduce. Purely
97
96
  // informational: unlike the three above, a route label says nothing about whether an issue may run,
98
97
  // so none of them joins NOT_DIRECTLY_RUNNABLE_LABELS. The names are duplicated as literals in the
99
98
  // filing procedures (prose cannot import this module); `scripts/rules/filing-route-label.test.ts` keys the
100
99
  // docs to these constants so a filing command that drops the label fails rather than drifting.
101
100
  //
102
- // joshuafolkken/kit#1518 added a fourth: an interrupt is a defect found in *this* repository that
103
- // does not block the run that found it, and which the WIP cap would otherwise push into the
104
- // discretionary exit — the route joshuafolkken/kit#1517 took, surviving only as a comment on another
105
- // issue. It is not `route:tier-a`: that one is a filing the run is blocked by (an upstream defect or
106
- // a prerequisite), and reading the two as one is what lost #1517.
101
+ // `route:interrupt` is a defect found in *this* repository that does not block the run that found
102
+ // it, and which the WIP cap would otherwise push into the discretionary exit, surviving only as a
103
+ // comment on another issue. It is not `route:tier-a`: that one is a filing the run is blocked by (an
104
+ // upstream defect or a prerequisite), and reading the two as one loses the interrupt.
107
105
  const INTERRUPT_ROUTE_LABEL = 'route:interrupt'
108
106
  const REVIEW_CAP_ROUTE_LABEL = 'route:review-cap'
109
107
  const SPLIT_ROUTE_LABEL = 'route:split'
@@ -145,7 +143,7 @@ const FILING_ROUTE_LABELS: ReadonlyArray<{
145
143
  },
146
144
  ]
147
145
 
148
- // joshuafolkken/kit#1729: the depth of an issue's subject, recorded as a label at filing time.
146
+ // The depth of an issue's subject, recorded as a label at filing time.
149
147
  //
150
148
  // **The definition is not here.** `.claude/skills/workflow-commands/observation-filing.md` → "The depth test",
151
149
  // is the single source: depth 0 is what a consumer of this package touches, depth 1 the run
@@ -154,10 +152,9 @@ const FILING_ROUTE_LABELS: ReadonlyArray<{
154
152
  // would be the clone `CLAUDE.md` prohibits, and the descriptions below therefore name the section
155
153
  // rather than paraphrase it.
156
154
  //
157
- // **Why a label at all.** joshuafolkken/kit#1698 set a measurable target — the share of open issues
158
- // at depth 0 — and left nothing that records a depth, so the share could only be obtained by reading
159
- // every open issue's body by hand. Two hand counts a day apart disagreed on the denominator and were
160
- // therefore not comparable, which is the failure a recorded label removes.
155
+ // **Why a label at all.** The share of open issues at depth 0 is a measured target, and without a
156
+ // recorded depth it could only be obtained by reading every open issue's body by hand — hand counts
157
+ // disagree on the denominator and are not comparable, which is the failure a recorded label removes.
161
158
  //
162
159
  // **The depth is read off the subject, so a run applies it.** Unlike `auto-ok` and
163
160
  // `needs-human-review` this is not a person's judgement about authorization; it is the same reading
@@ -169,8 +166,7 @@ const DEPTH_2_LABEL = 'depth:2'
169
166
 
170
167
  // Ordered shallowest first, which is what makes `depth_label_of` deterministic: an issue carrying
171
168
  // more than one depth label counts as the **lowest** depth present, the one closest to the consumer.
172
- // Without a fixed tie-break the same listing measured twice could answer differently, which is the
173
- // whole defect joshuafolkken/kit#1729 was filed for.
169
+ // Without a fixed tie-break the same listing measured twice could answer differently.
174
170
  const DEPTH_LABEL_ORDER: ReadonlyArray<string> = [DEPTH_0_LABEL, DEPTH_1_LABEL, DEPTH_2_LABEL]
175
171
 
176
172
  // The metadata `gh api ... labels` needs, in the shape `FILING_ROUTE_LABELS` above uses and for the
@@ -179,7 +175,7 @@ const DEPTH_LABEL_ORDER: ReadonlyArray<string> = [DEPTH_0_LABEL, DEPTH_1_LABEL,
179
175
  // Green, amber and pale blue, so the consumer-facing depth is the one that stands out in a listing.
180
176
  //
181
177
  // **`josh issue:file` provisions them** through `repository_labels.ensure_labels` before its create
182
- // call (joshuafolkken/kit#3176), so no document carries a creation command to keep in step.
178
+ // call, so no document carries a creation command to keep in step.
183
179
  const DEPTH_LABELS: ReadonlyArray<{
184
180
  name: string
185
181
  color: string
@@ -209,7 +205,7 @@ interface LabelDefinition {
209
205
  }
210
206
 
211
207
  // What `josh start` provisions on a new repository so the first `kickoff` finds every label a run
212
- // applies with its intended color (joshuafolkken/kit#2197). The `epic` and `in-progress` metadata is
208
+ // applies with its intended color. The `epic` and `in-progress` metadata is
213
209
  // the one the workflow documents create them with; the labels only a person applies are left out.
214
210
  const WORKFLOW_LABELS: ReadonlyArray<LabelDefinition> = [
215
211
  {
@@ -243,8 +239,8 @@ const WORKFLOW_LABELS: ReadonlyArray<LabelDefinition> = [
243
239
  ...DEPTH_LABELS,
244
240
  ]
245
241
 
246
- // The pull request release classifications `pr-classification.yml` requires exactly one of
247
- // (joshuafolkken/kit#2797). The check is distributed by `josh sync`, so the labels it asks for are
242
+ // The pull request release classifications `pr-classification.yml` requires exactly one of.
243
+ // The check is distributed by `josh sync`, so the labels it asks for are
248
244
  // provisioned from this same list — a repository that never had them would otherwise fail the check
249
245
  // on every pull request that is not an `enhancement`.
250
246
  const BUGFIX_LABEL = 'bugfix'
@@ -300,7 +296,7 @@ function has_any_label(
300
296
  // A membership test answers whether the label is there; a *removal* has to name it, and
301
297
  // `DELETE …/issues/<N>/labels/<name>` names it in the path. Lowercasing the wanted name and sending
302
298
  // that would be a second comparison — GitHub's, on a spelling we did not read — so the removal reads
303
- // the stored one and sends it back (joshuafolkken/kit#1794).
299
+ // the stored one and sends it back.
304
300
  function label_name_of(labels: ReadonlyArray<string>, wanted: string): string | undefined {
305
301
  const target = wanted.toLowerCase()
306
302
 
@@ -329,7 +325,7 @@ function depth_label_of(labels: ReadonlyArray<LabelReference> | undefined): stri
329
325
  }
330
326
 
331
327
  // Every workflow label this package manages. The label-reference scan
332
- // (`scripts/document/label-reference.test.ts`, joshuafolkken/kit#1923) reads this to check that no
328
+ // (`scripts/document/label-reference.test.ts`) reads this to check that no
333
329
  // document operates on a label name that does not exist here — a stale or mistyped `labels[]=…`
334
330
  // otherwise fails silently at run time. One source, so a label added above joins the scan without a
335
331
  // second edit.
@@ -6,10 +6,10 @@ import { issue_classification } from './issue-classification'
6
6
  import { issue_lint } from './issue-lint'
7
7
 
8
8
  // `josh issue:lint <path>` — read an Issue body from a file and print `ok`, or every template problem
9
- // one per line, exiting non-zero (joshuafolkken/kit#2123). It reads a path rather than stdin so it can
9
+ // one per line, exiting non-zero. It reads a path rather than stdin so it can
10
10
  // lint a body written to a file before the `gh api … issues` call that files it. A body that declares
11
11
  // itself a behavior-change Issue is additionally held to the firing-point, baseline and reproduction
12
- // rules (joshuafolkken/kit#2212, joshuafolkken/kit#2353).
12
+ // rules.
13
13
 
14
14
  const SUCCESS_EXIT_CODE = 0
15
15
  const FAILURE_EXIT_CODE = 1
@@ -2,7 +2,7 @@ import { markdown_section } from './markdown-section'
2
2
 
3
3
  // The Issue body template's four headings (`prompts/collaboration-workflow/issue-template.md`) are a
4
4
  // fixed shape, but unlike an epic — which `josh epic:check` verifies — nothing checks that a filed
5
- // Issue carries them. This reports the ones a body is missing (joshuafolkken/kit#2123). The headings
5
+ // Issue carries them. This reports the ones a body is missing. The headings
6
6
  // are the single source's, and the document test pins that these match it.
7
7
  const REQUIRED_HEADINGS: ReadonlyArray<string> = [
8
8
  '## 背景',
@@ -1,7 +1,7 @@
1
1
  import { git_gh_api_path } from '#scripts/gh/git-gh-api-path'
2
2
  import { git_gh_exec } from '#scripts/gh/git-gh-exec'
3
3
 
4
- // Whether an issue was closed by a merge, read from its REST timeline (joshuafolkken/kit#2701). The
4
+ // Whether an issue was closed by a merge, read from its REST timeline. The
5
5
  // issue's own `state_reason` cannot tell: a pull request's `closes #N` and a person's "Close as
6
6
  // completed" both answer `completed`. What only a merge leaves is a merged pull request referencing
7
7
  // the issue, so the answer is the conjunction — closed now, as completed, and referenced by a merged
@@ -55,7 +55,9 @@ function is_merged_close(rows: ReadonlyArray<TimelineRow>): boolean {
55
55
  return rows.some((row) => row.event === MERGED_REFERENCE)
56
56
  }
57
57
 
58
- async function read_merged(issue: string): Promise<boolean> {
58
+ // `undefined` when the timeline could not be read, so a caller that keeps the answer can tell "not
59
+ // merged" from "ask again".
60
+ async function read_merge_state(issue: string): Promise<boolean | undefined> {
59
61
  try {
60
62
  const raw = await git_gh_exec.exec_gh_api({
61
63
  path: `${git_gh_api_path.issue_api_path(issue)}/timeline?per_page=100`,
@@ -65,11 +67,15 @@ async function read_merged(issue: string): Promise<boolean> {
65
67
 
66
68
  return is_merged_close(parse_rows(raw))
67
69
  } catch {
68
- return false
70
+ return undefined
69
71
  }
70
72
  }
71
73
 
72
- const issue_merged = { is_merged_close, parse_rows, read_merged }
74
+ async function read_merged(issue: string): Promise<boolean> {
75
+ return (await read_merge_state(issue)) ?? false
76
+ }
77
+
78
+ const issue_merged = { is_merged_close, parse_rows, read_merge_state, read_merged }
73
79
 
74
80
  export type { TimelineRow }
75
81
  export { issue_merged }
@@ -0,0 +1,27 @@
1
+ // The shape an issue number may take, and the refusal when it does not — the one declaration every
2
+ // command reads.
3
+ //
4
+ // It sits in its own module because a rule copied into two files is a rule kept correct in one: a
5
+ // copy that read `/^\d+$/u` accepted issue `0` and a leading zero where every other command refused
6
+ // them. A command that interpolates the number into a shell command a caller is told to paste, a
7
+ // GitHub path, a branch or a lane directory refuses before the interpolation rather than leaving the
8
+ // check to whichever entry point remembered.
9
+ //
10
+ // `ISSUE_NUMBER_PATTERN` stays exported beside `is_issue_number`: a taint analyzer credits a literal
11
+ // pattern test in the expression that returns the value as a sanitizer, but not one reached through a
12
+ // call (`run-merge-cli.ts`).
13
+
14
+ const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
15
+ const BAD_ISSUE_MESSAGE = 'Not an issue number: '
16
+
17
+ function is_issue_number(value: string): boolean {
18
+ return ISSUE_NUMBER_PATTERN.test(value)
19
+ }
20
+
21
+ function require_issue_number(issue: string): void {
22
+ if (!is_issue_number(issue)) throw new Error(`${BAD_ISSUE_MESSAGE}${issue}`)
23
+ }
24
+
25
+ const issue_number_shape = { ISSUE_NUMBER_PATTERN, is_issue_number, require_issue_number }
26
+
27
+ export { issue_number_shape }
@@ -6,7 +6,7 @@ import {
6
6
  RUN_SOLO_LABEL,
7
7
  } from './issue-labels'
8
8
 
9
- // The keys that decide which open issue is offered first (joshuafolkken/kit#2928), defined once for
9
+ // The keys that decide which open issue is offered first, defined once for
10
10
  // every ranking that asks: the `🗒 Next issues` display, the `auto-ok` pickup and `backlog:next`.
11
11
  //
12
12
  // In order: `priority:high`, then a defect on the verification path (`bug` with `run:solo`, or
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
3
  import { git_gh_command } from '#scripts/gh/git-gh-command'
4
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
4
5
  import { bounded_pool } from '#scripts/lib/bounded-pool'
5
6
  import { issue_read, type IssueComment, type IssueFields } from './issue-read'
6
7
  import { issue_report_failures, type ReadFailureKind } from './issue-report-failures'
7
8
 
8
- // `josh issue:read <N> [<N> ...]` — the body *and* the comments of every issue named, in one call
9
- // (joshuafolkken/kit#1715).
9
+ // `josh issue:read <N> [<N> ...]` — the body *and* the comments of every issue named, in one call.
10
10
  //
11
11
  // It replaces the two `gh api` reads `.claude/skills/workflow-commands/issue-comments.md` tells an agent
12
12
  // to type per issue. Measured over four recorded `backlogrun` parents, `issue bookkeeping` was the
@@ -28,7 +28,6 @@ import { issue_report_failures, type ReadFailureKind } from './issue-report-fail
28
28
 
29
29
  const FAILURE_EXIT_CODE = 1
30
30
  const ARGV_OFFSET = 2
31
- const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
32
31
  const USAGE = 'Usage: josh issue:read <issue-number> [<issue-number> ...]'
33
32
  const BLOCK_SEPARATOR = '\n\n---\n\n'
34
33
  // The same bound `issue:state` puts on its batch read, for the same reason: every read is a `gh`
@@ -45,7 +44,7 @@ interface IssueContent {
45
44
  type NumberResult = { kind: 'issue'; content: IssueContent } | { kind: ReadFailureKind }
46
45
 
47
46
  // The formatted block for one issue, or the failure kind — what `run:prep` bundles beside the state
48
- // and the dependency-update scope (joshuafolkken/kit#1978). It reuses this file's read and the shared
47
+ // and the dependency-update scope. It reuses this file's read and the shared
49
48
  // `format_issue` rather than reproducing either, so the two `gh` reads and the block shape stay
50
49
  // single-sourced here.
51
50
  type BlockRead = { kind: 'ok'; block: string } | { kind: ReadFailureKind }
@@ -59,7 +58,7 @@ interface IssueReport {
59
58
  // Dropping it answers fewer numbers than were asked for and still exits zero — and nothing in the
60
59
  // output then says a number went unanswered. `#1262` copied out of a table is exactly that token.
61
60
  function parse_numbers(argv: ReadonlyArray<string>): ReadonlyArray<string> | undefined {
62
- const numbers = argv.filter((argument) => ISSUE_NUMBER_PATTERN.test(argument))
61
+ const numbers = argv.filter((argument) => issue_number_shape.is_issue_number(argument))
63
62
 
64
63
  if (numbers.length === 0 || numbers.length !== argv.length) return undefined
65
64
 
@@ -1,9 +1,8 @@
1
- import { parse_json_object_safe, read_json_listing } from '#scripts/git/parse-json-array'
1
+ import { parse_json_object_or_undefined, read_json_listing } from '#scripts/git/parse-json-array'
2
2
  import { z } from 'zod'
3
3
 
4
4
  // The block `josh issue:read` prints for one issue, kept apart from the reading and the printing so
5
- // the shape of the report is decided by one pure function — the seam `issue-state.ts` already has
6
- // (joshuafolkken/kit#1715).
5
+ // the shape of the report is decided by one pure function — the seam `issue-state.ts` already has.
7
6
  //
8
7
  // **It exists because reading one issue costs a parent two turns.** `.claude/skills/workflow-commands/SKILL.md`
9
8
  // `issue-comments.md` requires the body *and* the comments, since a decision recorded after the body was written
@@ -11,7 +10,7 @@ import { z } from 'zod'
11
10
  // `gh api repos/{owner}/{repo}/issues/<N>/comments`. Measured over four recorded `backlogrun`
12
11
  // parents, `issue bookkeeping` was the single largest contributor to the parent's turn count — 110 of
13
12
  // 414 turns, 26.6% — and one-issue-at-a-time `gh api` reads were its dominant shape. A parent's cost
14
- // grows as n²/2 in its own request count (joshuafolkken/kit#1567), so those turns are the
13
+ // grows as n²/2 in its own request count, so those turns are the
15
14
  // distribution this collapses.
16
15
  //
17
16
  // **The comments are never silently absent.** A listing that could not be read prints a line saying
@@ -65,7 +64,7 @@ const UNKNOWN_TIME = '(undated)'
65
64
  // parse.
66
65
  function parse_issue_fields(json: string): IssueFields | undefined {
67
66
  try {
68
- const parsed = parse_json_object_safe(json, issue_fields_schema)
67
+ const parsed = parse_json_object_or_undefined(json, issue_fields_schema)
69
68
 
70
69
  if (parsed === undefined) return undefined
71
70
 
@@ -1,14 +1,14 @@
1
1
  // An issue named from outside any one graph — a task-list row, a citation in prose, a blocker
2
2
  // relation, a child that could not be read. Repository **and** number, because a number alone cannot
3
3
  // identify one: issue numbers are unique per repository, so the same `#40` names two different issues
4
- // depending on who wrote it (joshuafolkken/kit#1014).
4
+ // depending on who wrote it.
5
5
  //
6
6
  // It lives in the git layer because the `blocked-by` relations are read here and carry a repository
7
- // of their own (joshuafolkken/kit#1126); the epic domain builds on this layer, never the other way
8
- // round (joshuafolkken/kit#2904). `epic-reference` re-exports it, so every epic importer is unchanged.
7
+ // of their own; the epic domain builds on this layer, never the other way
8
+ // round. `epic-reference` re-exports it, so every epic importer is unchanged.
9
9
  //
10
- // `state` is present only on a reference read from a `blocked-by` relation whose response carried it
11
- // (joshuafolkken/kit#1943). The classifier needs it for a blocker no named graph tracks, where there is
10
+ // `state` is present only on a reference read from a `blocked-by` relation whose response carried it.
11
+ // The classifier needs it for a blocker no named graph tracks, where there is
12
12
  // no child record to read the state from; every other reference leaves it out.
13
13
  interface IssueReference {
14
14
  repo: string
@@ -5,14 +5,16 @@ import { git_gh_exec } from '#scripts/gh/git-gh-exec'
5
5
  import { git_gh_issue_list, MAX_SCANNED } from '#scripts/gh/git-gh-issue-list'
6
6
  import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
7
7
  import { github_issue_url } from '#scripts/gh/github-issue-url'
8
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
8
9
  import { cli_flags } from '#scripts/lib/cli-flags'
9
10
  import { error_text } from '#scripts/lib/error-message'
10
11
  import { repository_labels } from '#scripts/repo/repository-labels'
11
12
  import { RELEASE_LABEL } from './issue-labels'
12
13
  import { issue_release } from './issue-release'
14
+ import { session_cite } from './session-cite'
13
15
 
14
16
  // `josh issue:release <N>` — link Issue `<N>` to its repository's release Issue as a `blocked_by`
15
- // blocker, filing the release Issue when none is open (joshuafolkken/kit#3360). `josh issue:file
17
+ // blocker, filing the release Issue when none is open. `josh issue:file
16
18
  // --release` calls the same `link` once its Issue exists, so a new and an existing Issue are linked
17
19
  // by one body of code.
18
20
  //
@@ -22,7 +24,6 @@ import { issue_release } from './issue-release'
22
24
  const SUCCESS_EXIT_CODE = 0
23
25
  const FAILURE_EXIT_CODE = 1
24
26
  const ARGV_OFFSET = 2
25
- const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
26
27
  const USAGE = 'Usage: josh issue:release <issue-number>'
27
28
  const NONE = 'none'
28
29
  const UNKNOWN_REPO_MESSAGE =
@@ -90,10 +91,17 @@ async function release_of(target: string): Promise<ReleaseIssue | undefined> {
90
91
  return filed === undefined ? undefined : { issue_number: filed, is_filed: true }
91
92
  }
92
93
 
93
- function linked_line(release: ReleaseIssue, issue_number: number): string {
94
+ function linked_line(release: ReleaseIssue, issue_number: number, target: string): string {
94
95
  const how = release.is_filed ? 'filed' : 'open'
96
+ const release_cite = session_cite.issue(release.issue_number, undefined, target)
95
97
 
96
- return `release: #${String(release.issue_number)} (${how}) is blocked by #${String(issue_number)}`
98
+ return `release: ${release_cite} (${how}) is blocked by ${session_cite.issue(issue_number, undefined, target)}`
99
+ }
100
+
101
+ function unlinked_line(issue_number: number, blocked: string, target: string): string {
102
+ const blocker = session_cite.issue(issue_number, undefined, target)
103
+
104
+ return `✖ ${blocker} could not be recorded as a blocker of ${session_cite.issue(blocked, undefined, target)}`
97
105
  }
98
106
 
99
107
  // Whether Issue `issue_number` of `target` now blocks the release Issue. Every outcome is printed.
@@ -104,8 +112,8 @@ async function link(issue_number: number, target: string): Promise<boolean> {
104
112
  const blocked = String(release.issue_number)
105
113
  const is_linked = await git_gh_issue_write.issue_add_blocked_by(blocked, String(issue_number))
106
114
 
107
- if (is_linked) console.info(linked_line(release, issue_number))
108
- else console.error(`✖ #${String(issue_number)} could not be recorded as a blocker of #${blocked}`)
115
+ if (is_linked) console.info(linked_line(release, issue_number, target))
116
+ else console.error(unlinked_line(issue_number, blocked, target))
109
117
 
110
118
  return is_linked
111
119
  }
@@ -120,7 +128,9 @@ function issue_number_of(argv: ReadonlyArray<string>): number | undefined {
120
128
  const [issue_number, ...rest] = positionals_of(argv)
121
129
  const is_single = rest.length === 0 && issue_number !== undefined
122
130
 
123
- return is_single && ISSUE_NUMBER_PATTERN.test(issue_number) ? Number(issue_number) : undefined
131
+ return is_single && issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue_number)
132
+ ? Number(issue_number)
133
+ : undefined
124
134
  }
125
135
 
126
136
  async function run(argv: ReadonlyArray<string>): Promise<number> {
@@ -1,9 +1,9 @@
1
1
  import { DEPTH_0_LABEL, RELEASE_LABEL } from './issue-labels'
2
2
 
3
- // The decisions behind `josh issue:release` (joshuafolkken/kit#3360), kept apart from the command
3
+ // The decisions behind `josh issue:release`, kept apart from the command
4
4
  // that reads the network so each is a pure answer a test can pin. An Issue whose change reaches a
5
- // consumer only once published used to surface the release only at the end of `followup`'s report;
6
- // it is now linked to the repository's release Issue, which it blocks until it merges.
5
+ // consumer only once published is linked to the repository's release Issue, which it blocks until it
6
+ // merges.
7
7
 
8
8
  interface ListingRow {
9
9
  number: number
@@ -1,6 +1,7 @@
1
1
  import { capped_output } from '#scripts/document/capped-print'
2
+ import { session_cite } from './session-cite'
2
3
 
3
- // The failure report `issue:read` and `issue:state` share (joshuafolkken/kit#3046). Both read a batch
4
+ // The failure report `issue:read` and `issue:state` share. Both read a batch
4
5
  // of numbers, print a block for each one that answered, and name every one that did not; only the
5
6
  // result kind that counts as an answer and what a gap must not be mistaken for differ between them.
6
7
 
@@ -25,7 +26,7 @@ interface FailureTerms<K extends string> {
25
26
  }
26
27
 
27
28
  // Under the Bash output cap, or as part files past it — a batch of long threads is the shape that
28
- // overflowed (joshuafolkken/kit#3143).
29
+ // overflowed.
29
30
  function print_blocks(blocks: ReadonlyArray<string>, separator: string, label: string): void {
30
31
  if (blocks.length === 0) return
31
32
 
@@ -37,10 +38,12 @@ function print_blocks(blocks: ReadonlyArray<string>, separator: string, label: s
37
38
  // caller's next move differs: a gap is retried, an answer is not.
38
39
  function report_failure(kind: ReadFailureKind, issue_number: string, misreading: string): void {
39
40
  if (kind === 'missing') {
40
- console.error(`✖ issue #${issue_number} does not resolve — check the number and the repository`)
41
+ console.error(
42
+ `✖ issue ${session_cite.issue(issue_number)} does not resolve — check the number and the repository`,
43
+ )
41
44
  } else {
42
45
  console.error(
43
- `✖ could not read issue #${issue_number} — a rate limit, expired auth, or a dropped connection. This is not "${misreading}"`,
46
+ `✖ could not read issue ${session_cite.issue(issue_number)} — a rate limit, expired auth, or a dropped connection. This is not "${misreading}"`,
44
47
  )
45
48
  }
46
49
  }
@@ -15,13 +15,14 @@ import {
15
15
  type ScoutIssue,
16
16
  } from './issue-scout'
17
17
  import { issue_scout_closed, type ClosedScan } from './issue-scout-closed'
18
+ import { session_cite } from './session-cite'
18
19
 
19
20
  const { CLOSED_CEILING_LINE, CLOSED_UNREADABLE_LINE, read_recently_closed, warn_about_closed } =
20
21
  issue_scout_closed
21
22
 
22
23
  // `josh issue:scout "<title>" [--body "<summary>"]` — before an issue is filed, answer the two
23
24
  // questions every `new` entry point asks first: has this already been filed, and which epic does it
24
- // belong to (joshuafolkken/kit#1252).
25
+ // belong to.
25
26
  //
26
27
  // Both were assembled by hand every time, differently every time: a measured `fullrun new` spent
27
28
  // 7 minutes 32 seconds — 22% of the run — listing epics, reading their children and searching for
@@ -104,13 +105,13 @@ function draft_of(args: ScoutArguments, repo: string): BacklogIssue {
104
105
  // below decides from prose references, and a title-only draft has none to give it.
105
106
  function format_duplicate(candidate: DuplicateCandidate): string {
106
107
  const score = candidate.is_referenced === true ? 'ref' : candidate.score.toFixed(SCORE_DIGITS)
107
- const epic = candidate.epic === undefined ? '' : ` (epic #${String(candidate.epic)})`
108
+ const epic = candidate.epic === undefined ? '' : ` (epic ${session_cite.issue(candidate.epic)})`
108
109
  // The reader does two different things with the two states, so the row has to say which it is: an
109
110
  // open candidate means somebody is already tracking this, a closed one means it may already be
110
111
  // done — and the second is the exit `issue-comments.md` names, not a second filing.
111
112
  const closed = candidate.is_closed === true ? ' (closed)' : ''
112
113
 
113
- return ` #${String(candidate.number)} ${score} ${candidate.title}${closed}${epic}`
114
+ return ` ${session_cite.issue(candidate.number)} ${score} ${candidate.title}${closed}${epic}`
114
115
  }
115
116
 
116
117
  // Weak matches are not padding for an empty answer: a list nobody trusts is read once and skipped
@@ -147,7 +148,7 @@ const NO_EPIC_LINE = 'Epic: none — file it standalone; nothing open shares a r
147
148
  function format_epic(decision: BundleDecision): Array<string> {
148
149
  const lines = [`Epic: ${epic_bundle_cli.ACTION_LINES[decision.action] ?? ''}`]
149
150
 
150
- if (decision.epic !== undefined) lines.push(` Target epic: #${String(decision.epic)}`)
151
+ if (decision.epic !== undefined) lines.push(` Target epic: ${session_cite.issue(decision.epic)}`)
151
152
 
152
153
  if (decision.candidates.length > 0) {
153
154
  lines.push(` Related: ${epic_bundle_cli.format_numbers(decision.candidates)}`)
@@ -168,9 +169,9 @@ const NO_REFERENCE_LINE =
168
169
  'Epic: not asked — no issue number in the summary. Pass --body "…#<N>…", or take the epic printed beside a duplicate above.'
169
170
 
170
171
  // Every placing verdict above asserts that no epic already tracks the draft's relatives, and a cut
171
- // epic listing cannot support that: `epic:bundle` withholds them for it (joshuafolkken/kit#1697),
172
+ // epic listing cannot support that: `epic:bundle` withholds them for it,
172
173
  // while this command drew the same lines out of `ACTION_LINES` and never passed through the gate that
173
- // does (joshuafolkken/kit#1703). The verdict is `epic:bundle`'s own, reused rather than restated, with
174
+ // does. The verdict is `epic:bundle`'s own, reused rather than restated, with
174
175
  // only the `Epic:` label the rest of this report is read by put in front of it.
175
176
  function format_unconfirmed_epic(decision: BundleDecision): string {
176
177
  const related = epic_bundle_cli.format_numbers(decision.candidates)
@@ -245,7 +246,7 @@ function format_epic_answer(
245
246
  // The closed rows reach the duplicate half only. `decide_bundle` places a draft among issues that
246
247
  // are still being worked on, and a closed one can neither gain a sibling nor be recommended as an
247
248
  // epic — so widening the placement pool with them would answer a different question from the one it
248
- // was asked (joshuafolkken/kit#1679).
249
+ // was asked.
249
250
  function duplicates_of(
250
251
  draft: BacklogIssue,
251
252
  issues: ReadonlyArray<BacklogIssue>,
@@ -292,8 +293,7 @@ function qualify_duplicate_report(report_text: string, is_incomplete: boolean):
292
293
  }
293
294
 
294
295
  // The report a run copies into its reply, with every `#N` in the `Related:` / `Target epic:` /
295
- // duplicate listings linkified so the references it carries are clickable rather than bare
296
- // (joshuafolkken/kit#2329).
296
+ // duplicate listings linkified so the references it carries are clickable rather than bare.
297
297
  function linkified_report(
298
298
  draft: BacklogIssue,
299
299
  widened: Widened,
@@ -315,7 +315,7 @@ function linkified_report(
315
315
  }
316
316
 
317
317
  // The scan's answer in both shapes it is read in: the report a person reads, and the candidate numbers
318
- // `issue:file` holds a filing to (joshuafolkken/kit#2808).
318
+ // `issue:file` holds a filing to.
319
319
  interface ScoutOutcome {
320
320
  report: string
321
321
  candidates: ReadonlyArray<number>
@@ -335,7 +335,7 @@ async function scout(args: ScoutArguments, repo: string): Promise<ScoutOutcome |
335
335
 
336
336
  const draft = draft_of(args, repo)
337
337
  // A reference the open listing cannot show — the parent that merged minutes ago — is read directly,
338
- // the same widening `epic:bundle` does and for the same reason (joshuafolkken/kit#947). The closed
338
+ // the same widening `epic:bundle` does and for the same reason. The closed
339
339
  // listing needs nothing from it, so the two requests go out together.
340
340
  const [widened, closed] = await Promise.all([
341
341
  epic_bundle_cli.widen_with_referenced(draft, backlog),
@@ -6,11 +6,11 @@ import { z } from 'zod'
6
6
  import { EPIC_LABEL, has_any_label } from './issue-labels'
7
7
  import type { ScoutIssue } from './issue-scout'
8
8
 
9
- // The closed half of `issue:scout`'s duplicate scan (joshuafolkken/kit#1679), held apart from the CLI
10
- // so the command that reports the scan and the one that files after it (`issue:file`,
11
- // joshuafolkken/kit#2808) read one listing rather than two.
9
+ // The closed half of `issue:scout`'s duplicate scan, held apart from the CLI
10
+ // so the command that reports the scan and the one that files after it (`issue:file`) read one
11
+ // listing rather than two.
12
12
 
13
- // How far back the closed half of the scan reaches (joshuafolkken/kit#1679). One page: the duplicate
13
+ // How far back the closed half of the scan reaches. One page: the duplicate
14
14
  // this half exists to catch closed hours ago, not months, and the listing is ordered by update so
15
15
  // the newest hundred already covers a run's own day several times over.
16
16
  //