@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
@@ -1,6 +1,7 @@
1
1
  import { git_gh_command } from '#scripts/gh/git-gh-command'
2
2
  import { rest_comment_schema, type RestCommentData } from '#scripts/git/git-schemas'
3
3
  import { read_json_listing } from '#scripts/git/parse-json-array'
4
+ import { issue_cite } from '#scripts/issue/issue-cite'
4
5
  import { epic_parse, type ExternalChild } from './epic-parse'
5
6
 
6
7
  // The comment the epic auto-close announces itself with, and how a run recognizes the one a previous
@@ -9,7 +10,7 @@ import { epic_parse, type ExternalChild } from './epic-parse'
9
10
  // Kept apart from `epic-close.ts` because the two answer different questions — that file decides
10
11
  // *whether* an epic may close, this one decides what the announcement says and whether it is already
11
12
  // there — and because the file it was split from is within twenty lines of the three hundred a file
12
- // may hold (joshuafolkken/kit#1039).
13
+ // may hold.
13
14
 
14
15
  // The epic's children, near and far. Named structurally rather than by importing `EpicIssue`: the
15
16
  // dependency runs one way, from the auto-close to here, and a type import back would put a cycle
@@ -20,31 +21,30 @@ interface EpicChildren {
20
21
  }
21
22
 
22
23
  // The fixed sentence the announcement's prose ends with. It is what a person reads, and it is no
23
- // longer what the retry check matches on (joshuafolkken/kit#1068): people and agents quote the
24
+ // longer what the retry check matches on: people and agents quote the
24
25
  // auto-close output in ordinary issue comments, and matching prose made any such quote answer
25
26
  // "already announced" — the epic then closed with no comment, losing the record of which children it
26
27
  // closed against.
27
28
  const CLOSE_ANNOUNCEMENT = 'Closing this epic automatically.'
28
29
 
29
- // The marker, which GitHub renders as nothing at all. Quoting the sentence above therefore no longer
30
- // suppresses anything: what is quoted is the rendered text, and the marker is not in it.
30
+ // The marker, which GitHub renders as nothing at all. Quoting the sentence above therefore does not
31
+ // suppress anything: what is quoted is the rendered text, and the marker is not in it.
31
32
  //
32
33
  // **It carries the child set the announcement named.** That is what makes an epic which was
33
34
  // reopened, gained a child and completed again announce a *second* time instead of closing silently
34
- // against a stale list. joshuafolkken/kit#1039 rejected matching the whole composed body for a
35
- // neighboring reason — the visible child list varies, so an unchanged epic would have been read as
36
- // "not posted yet" whenever the wording drifted — and the marker keeps that failure out by being
35
+ // against a stale list. Matching the whole composed body instead would read an unchanged epic as
36
+ // "not posted yet" whenever the wording drifted, and the marker keeps that failure out by being
37
37
  // built from the child set alone: the prose can be rephrased without moving it, and the set is
38
38
  // compared as a set, so reordering the epic's task list does not move it either.
39
39
  const MARKER_OPEN = '<!-- josh:epic-auto-close children='
40
40
  const MARKER_CLOSE = ' -->'
41
41
 
42
42
  // Every child, near and far. Listing only the local ones left an all-external epic announcing "All
43
- // child issues are closed ()" (joshuafolkken/kit#864).
43
+ // child issues are closed ()".
44
44
  function child_references(epic: EpicChildren): Array<string> {
45
45
  return [
46
- ...epic.children.map((child) => `#${String(child)}`),
47
- ...epic.external_children.map((child) => `${child.repo}#${String(child.number)}`),
46
+ ...epic.children.map((child) => issue_cite.plain(child)),
47
+ ...epic.external_children.map((child) => issue_cite.plain(child.number, child.repo)),
48
48
  ]
49
49
  }
50
50
 
@@ -91,11 +91,11 @@ function build_close_comment(epic: EpicChildren): string {
91
91
  return `All child issues are closed (${child_references(epic).join(', ')}). ${CLOSE_ANNOUNCEMENT}\n\n${build_marker(epic)}`
92
92
  }
93
93
 
94
- // MIGRATION ONLY (joshuafolkken/kit#1068) — remove together with `is_legacy_announcement`.
94
+ // MIGRATION ONLY — remove together with `is_legacy_announcement`.
95
95
  //
96
96
  // Announcements posted by v1.179.0 through the release before this one carry no marker, so an epic
97
97
  // sitting in the half-succeeded state right now would be read as "not announced" and receive the
98
- // second comment joshuafolkken/kit#1039 removed. This matches those.
98
+ // second comment. This matches those.
99
99
  //
100
100
  // **The wording here is a frozen copy of what was released, not a second spelling of the constants
101
101
  // above.** Deriving it from them would make a future rephrasing of the announcement silently stop
@@ -129,8 +129,7 @@ function is_legacy_announcement(body: string): boolean {
129
129
  //
130
130
  // `unreadable` is deliberately not folded into `absent`, though the caller acts the same way on
131
131
  // both: a listing that could not be read says nothing about what is on the issue, and reporting it
132
- // as "nothing is there" would have the run state a fact it never established — the misread
133
- // joshuafolkken/kit#973 and joshuafolkken/kit#959 were each about. Keeping it apart is what lets
132
+ // as "nothing is there" would have the run state a fact it never established. Keeping it apart is what lets
134
133
  // `epic-close.ts` say out loud that the duplicate check did not run, which is the whole
135
134
  // difference between the two answers there.
136
135
  //
@@ -145,7 +144,7 @@ type CloseCommentState = 'present' | 'absent' | 'unreadable'
145
144
  // announcement carry the raw marker along with everything else: GitHub's "Quote reply" puts every
146
145
  // line behind `> `, which the line comparison rejects, and a code block reproduces the marker line
147
146
  // verbatim — a fenced one caught by the mask, an indented one by the indent check. `fence_mask` is the same walk every other body predicate
148
- // in this codebase reads through, rather than a second one written here (joshuafolkken/kit#890).
147
+ // in this codebase reads through, rather than a second one written here.
149
148
  function has_marker(body: string, children: ReadonlyArray<string>): boolean {
150
149
  const mask = epic_parse.fence_mask(body)
151
150
 
@@ -3,22 +3,21 @@ import { epic_child_schema, epic_issue_schema, type EpicChildData } from '#scrip
3
3
  import { cutoff_cause, cutoff_of, type ScanCutoff } from '#scripts/git/listing-cutoff'
4
4
  import {
5
5
  parse_json_array_or_undefined,
6
- parse_json_object_safe,
6
+ parse_json_object_or_undefined,
7
7
  } from '#scripts/git/parse-json-array'
8
8
  import { EPIC_LABEL } from '#scripts/issue/issue-labels'
9
+ import { session_cite } from '#scripts/issue/session-cite'
9
10
  import { error_text } from '#scripts/lib/error-message'
10
11
  import { epic_close_comment } from './epic-close-comment'
11
12
  import { epic_parse, type ExternalChild } from './epic-parse'
12
13
 
13
14
  // How many open epics the auto-close will look at. `git-gh-issue-list.ts` pages until `limit` rows
14
15
  // have been selected or the backlog runs out, so this is what keeps the ordinary case at exactly one
15
- // request — 100 is `PER_PAGE`. Since joshuafolkken/kit#1067 the paging's own page ceiling bounds
16
- // this listing too, but as a backstop rather than as this number's replacement: it stops the request
17
- // count, not the row count.
16
+ // request — 100 is `PER_PAGE`. The paging's own page ceiling bounds this listing too, but as a
17
+ // backstop rather than as this number's replacement: it stops the request count, not the row count.
18
18
  //
19
19
  // The listing is newest-first and the surplus is cut off the tail, so a repository holding more open
20
- // epics than this loses the oldest. It no longer loses them silently: since joshuafolkken/kit#1067
21
- // both cutoffs are reported, because an epic past the cut is never checked for completion and stays
20
+ // epics than this loses the oldest. It does not lose them silently: both cutoffs are reported, because an epic past the cut is never checked for completion and stays
22
21
  // open with nothing saying why — the same silence this file's `undefined`-not-`[]` handling exists
23
22
  // to remove. The value still sits well above the number of epics ever open at once, so the report is
24
23
  // the exception rather than a line on every merge.
@@ -60,8 +59,7 @@ function to_epic_issue(raw: { number: number; body?: string | undefined }): Epic
60
59
  // `parse_json_array_safe` returns `[]` for both, and the auto-close then decides there is no epic to
61
60
  // close: it stops for a reason that never reaches a log, and the epic stays open with nothing saying
62
61
  // why. The failure leans safe — the other direction, taken by `epic:bundle`, invented a second epic
63
- // (joshuafolkken/kit#950) — but silence is the same defect, so the two are told apart here as well
64
- // (joshuafolkken/kit#959).
62
+ // — but silence is the same defect, so the two are told apart here as well.
65
63
  //
66
64
  // The two ways of failing are folded into one answer deliberately. Which one occurred does not
67
65
  // change what the auto-close may do — in neither case does it know what the open epics are — and
@@ -82,7 +80,7 @@ async function fetch_open_epics(): Promise<Array<EpicIssue> | undefined> {
82
80
  function parse_child(raw_json: string | undefined): EpicChildData | undefined {
83
81
  if (raw_json === undefined) return undefined
84
82
 
85
- return parse_json_object_safe(raw_json, epic_child_schema)
83
+ return parse_json_object_or_undefined(raw_json, epic_child_schema)
86
84
  }
87
85
 
88
86
  function has_blocked_by(child: EpicChildData | undefined): boolean {
@@ -106,8 +104,7 @@ async function inspect_sibling(sibling: number, repo?: string): Promise<SiblingS
106
104
 
107
105
  // A cross-repository child, read by naming its repository in the read's REST path. `is_readable`
108
106
  // is what decides whether the epic may close at all: closing while a child's state is unknown is
109
- // exactly what the old refusal prevented, and reading them is the only thing that changed
110
- // (joshuafolkken/kit#864).
107
+ // exactly what the old refusal prevented, and reading them is the only thing that changed.
111
108
  async function inspect_external(
112
109
  child: ExternalChild,
113
110
  ): Promise<SiblingState & { is_readable: boolean }> {
@@ -128,13 +125,12 @@ async function inspect_siblings(
128
125
  }
129
126
 
130
127
  // `pnpm josh epic --ordered` and `--add` record the declared chain themselves, through the REST
131
- // dependencies endpoint (`epic-relations.ts`, joshuafolkken/kit#1026), so the default route
128
+ // dependencies endpoint (`epic-relations.ts`), so the default route
132
129
  // arrives here with the relations already in place. Three routes still reach a declared order with
133
130
  // none recorded: an epic body written by hand, the manual fallback in `issue-template.md`, and
134
131
  // `apply_relations` failing — it counts the refusals, reports that the body is intact and lets the
135
132
  // batch finish. Each is otherwise symptomless, which is what this warning is for. The epic body's
136
- // declared chain is the trigger: since #713 every split gets an epic, so its existence no longer
137
- // implies an order, and warning on that alone would fire on every unordered batch. Only a total
133
+ // declared chain is the trigger: every split gets an epic, so its existence does not imply an order, and warning on that alone would fire on every unordered batch. Only a total
138
134
  // absence of relations is reported — checking each dependent pair would mean inferring the chain
139
135
  // from task-list order, which need not match.
140
136
  function warn_when_order_unrecorded(epic: EpicIssue, states: ReadonlyArray<SiblingState>): void {
@@ -147,18 +143,18 @@ function warn_when_order_unrecorded(epic: EpicIssue, states: ReadonlyArray<Sibli
147
143
  }
148
144
 
149
145
  console.info(
150
- `ℹ️ Epic #${String(epic.number)} has no blocked-by relation on any child; ` +
146
+ `ℹ️ Epic ${session_cite.issue(epic.number)} has no blocked-by relation on any child; ` +
151
147
  'the batch order was never recorded natively (see the epic creation procedure).',
152
148
  )
153
149
  }
154
150
 
155
151
  // The one thing the two refusals below ask for, written once — a child state that could not be read,
156
- // and a close the API refused (joshuafolkken/kit#1039).
152
+ // and a close the API refused.
157
153
  const CLOSE_MANUALLY = 'close it manually.'
158
154
 
159
155
  // The nesting cascade's safety valve. A closed child epic is itself a completed child, so the same
160
- // completion check is re-run for the epics that list *it*, closing a nested parent in the same pass
161
- // (joshuafolkken/kit#2008). `evaluated` already terminates a cycle or a shared child; this is the
156
+ // completion check is re-run for the epics that list *it*, closing a nested parent in the same pass.
157
+ // `evaluated` already terminates a cycle or a shared child; this is the
162
158
  // backstop for a nesting so deep it is likelier a mistake than a plan. On reaching it the cascade
163
159
  // stops and asks for a manual close, exactly as an unreadable or refused child close does.
164
160
  const MAX_CASCADE_DEPTH = 10
@@ -174,27 +170,26 @@ const CASCADE_DEPTH_NOTE = `⚠️ Epic auto-close cascade reached its ${String
174
170
  // would leave a finished epic open until somebody noticed.
175
171
  //
176
172
  // The direction is chosen on what each mistake costs, and they are not symmetric. Announcing twice
177
- // costs one redundant comment and nothing else, because the epic *closes* — which is what ends the
178
- // loop joshuafolkken/kit#1039 is about, where the comment repeated once per attempt for as long as
179
- // the close kept failing. Refusing costs a manual close on every transient failure.
173
+ // costs one redundant comment and nothing else, because the epic *closes* — which is what ends a loop
174
+ // where the comment would repeat once per attempt for as long as the close kept failing. Refusing costs a manual close on every transient failure.
180
175
  const UNREADABLE_COMMENTS_NOTE =
181
176
  "'s comments could not be read; announcing again rather than leaving it open."
182
177
 
183
178
  // The write, once the announcement has been decided. `comment` is `undefined` when the epic already
184
179
  // carries one — which is what stops a run whose comment landed and whose close was refused from
185
180
  // posting the same comment again on the next attempt, and again for as long as the close keeps
186
- // failing (joshuafolkken/kit#1039).
181
+ // failing.
187
182
  //
188
183
  // The comment-first ordering inside `issue_close` is what produces that half-succeeded state, and it
189
184
  // is left exactly as it is: it is what keeps a `false` meaning "the epic is still open" in every
190
- // branch, which is the answer the second message here is written against (joshuafolkken/kit#1026).
185
+ // branch, which is the answer the second message here is written against.
191
186
  async function close_epic_with(epic_number: string, comment: string | undefined): Promise<boolean> {
192
187
  const is_closed = await git_gh_command.issue_close(epic_number, comment)
193
188
 
194
189
  console.info(
195
190
  is_closed
196
- ? `🏁 Closed epic #${epic_number} — every child issue is complete.`
197
- : `⚠️ Could not close epic #${epic_number}; ${CLOSE_MANUALLY}`,
191
+ ? `🏁 Closed epic ${session_cite.issue(epic_number)} — every child issue is complete.`
192
+ : `⚠️ Could not close epic ${session_cite.issue(epic_number)}; ${CLOSE_MANUALLY}`,
198
193
  )
199
194
 
200
195
  return is_closed
@@ -205,8 +200,9 @@ async function close_epic_with(epic_number: string, comment: string | undefined)
205
200
  async function close_epic(epic: EpicIssue): Promise<boolean> {
206
201
  const epic_number = String(epic.number)
207
202
  const state = await epic_close_comment.read_close_comment_state(epic_number, epic)
203
+ const note = `ℹ️ Epic ${session_cite.issue(epic_number)}${UNREADABLE_COMMENTS_NOTE}`
208
204
 
209
- if (state === 'unreadable') console.info(`ℹ️ Epic #${epic_number}${UNREADABLE_COMMENTS_NOTE}`)
205
+ if (state === 'unreadable') console.info(note)
210
206
 
211
207
  const comment = state === 'present' ? undefined : epic_close_comment.build_close_comment(epic)
212
208
 
@@ -237,7 +233,7 @@ async function close_epic_when_complete(epic: EpicIssue, merged_number: number):
237
233
 
238
234
  if (!external.is_complete) {
239
235
  console.info(
240
- `ℹ️ Epic #${String(epic.number)} has a child in another repository whose state could not be read; ${CLOSE_MANUALLY}`,
236
+ `ℹ️ Epic ${session_cite.issue(epic.number)} has a child in another repository whose state could not be read; ${CLOSE_MANUALLY}`,
241
237
  )
242
238
 
243
239
  return false
@@ -255,14 +251,14 @@ async function close_epic_when_complete(epic: EpicIssue, merged_number: number):
255
251
  // Each epic is isolated: one that cannot be read or closed must not stop the others from being
256
252
  // evaluated, since they are independent batches that merely share this child. `false` — the epic did
257
253
  // not close, whether because a sibling is still open, a read failed or the close was refused — is
258
- // what stops the cascade from walking past it to a parent (joshuafolkken/kit#2008).
254
+ // what stops the cascade from walking past it to a parent.
259
255
  async function close_epic_isolated(epic: EpicIssue, merged_number: number): Promise<boolean> {
260
256
  try {
261
257
  return await close_epic_when_complete(epic, merged_number)
262
258
  } catch (error) {
263
259
  const message = error_text.message_of(error)
264
260
 
265
- console.info(`⚠️ Skipped epic #${String(epic.number)}: ${message}`)
261
+ console.info(`⚠️ Skipped epic ${session_cite.issue(epic.number)}: ${message}`)
266
262
 
267
263
  return false
268
264
  }
@@ -15,9 +15,9 @@ import type { EpicChild } from './epic-graph'
15
15
  // too early. Merging kit's issue does not publish kit — the merge, the auto-tag and the publish run
16
16
  // one after another — so a consumer child told it may start at that moment either fails to install
17
17
  // the version it needs or, worse, installs the previous one and implements against it. That failure
18
- // shows up as "it breaks sometimes", which is the hardest kind to diagnose (joshuafolkken/kit#864).
18
+ // shows up as "it breaks sometimes", which is the hardest kind to diagnose.
19
19
  //
20
- // The publish check itself is joshuafolkken/kit#863's, imported rather than restated: two
20
+ // The publish check itself is imported rather than restated: two
21
21
  // implementations of "has this version appeared" would drift, and the looser one would decide.
22
22
 
23
23
  // The package a repository distributes, by convention: the npm scope is the GitHub owner and the
@@ -78,7 +78,7 @@ const NOT_FOUND_STATUS = 404
78
78
 
79
79
  // What the blocker repository's default branch says about what it ships.
80
80
  //
81
- // **`absent` is not `unreadable`, and joshuafolkken/kit#1129 is the difference.** A repository with no
81
+ // **`absent` is not `unreadable`.** A repository with no
82
82
  // manifest, or one whose manifest says `private`, publishes nothing — so a closed blocker there has
83
83
  // no release anyone could wait for, and waiting means waiting until the run's own eight-hour timeout
84
84
  // with nothing an operator can edit to clear it. A read that merely failed says none of that.
@@ -89,7 +89,7 @@ const NOT_FOUND_STATUS = 404
89
89
  // registry 404 would start a consumer child before its blocker's release existed. The manifest is a
90
90
  // fact about the repository we already have access to, and `private: true` is a positive statement
91
91
  // rather than an inference from an absence.
92
- // **`private` alone does not settle it** (joshuafolkken/kit#1134). A workspace root is private by
92
+ // **`private` alone does not settle it**. A workspace root is private by
93
93
  // convention while the packages under it publish, so reading one as "ships nothing" would resolve a
94
94
  // dependency before its blocker's release existed — the direction this module may not fail in.
95
95
  // `is_workspace` is what keeps that case waiting.
@@ -103,7 +103,7 @@ type ManifestAnswer =
103
103
  // Read from GitHub rather than from a local checkout: a consumer's state is a GitHub fact, and the
104
104
  // wait must work before anyone has cloned the repository.
105
105
  //
106
- // **It moves when `josh release` runs, not when a child merges** (joshuafolkken/kit#1486). A child's
106
+ // **It moves when `josh release` runs, not when a child merges**. A child's
107
107
  // pull request carries no version change at all, so the number here right after one merges is still
108
108
  // the previous release. The target of a wait is therefore the version that follows the release the
109
109
  // change lands in, never the one the merge itself leaves behind.
@@ -122,10 +122,9 @@ type WorkspaceCheck = 'workspace' | 'single' | 'unreadable'
122
122
  // Whether `pnpm-workspace.yaml` actually declares members.
123
123
  //
124
124
  // **The file's existence proves nothing.** `josh sync` distributes it to every consumer regardless of
125
- // layout — it carries `allowBuilds`, `overrides` and the like — so probing for its presence read every
126
- // private first-party repository as a workspace and restored joshuafolkken/kit#1129's eight-hour wait
127
- // for all of them. Measured: 20 of 20 private first-party checkouts have the file and none declares
128
- // `packages:` (joshuafolkken/kit#1134). What makes a repository a workspace is a non-empty `packages`
125
+ // layout — it carries `allowBuilds`, `overrides` and the like — so probing for its presence would read
126
+ // every private first-party repository as a workspace and wait the eight-hour timeout on each. What
127
+ // makes a repository a workspace is a non-empty `packages`
129
128
  // key, so that is what is read.
130
129
  function declares_packages(yaml: string): boolean {
131
130
  try {
@@ -225,7 +224,7 @@ function to_manifest(repo: string, stdout: string): ManifestAnswer {
225
224
  //
226
225
  // The probe is `exec_gh_api_status_sync`, the synchronous twin of `exec_gh_api_status`: every caller
227
226
  // down to `resolve_cross_repo` is synchronous, and turning the classifier, the resolver and
228
- // `epic_classify` async for one probe would cost more than the twin (joshuafolkken/kit#2901). A 404
227
+ // `epic_classify` async for one probe would cost more than the twin. A 404
229
228
  // here is trustworthy in a way a registry 404 is not: the repository's issues are already being read,
230
229
  // so access is established and what is missing is the file.
231
230
  function classify_manifest_failure(repo: string): ManifestAnswer {
@@ -245,8 +244,8 @@ function fetch_manifest(repo: string): ManifestAnswer {
245
244
  }
246
245
 
247
246
  // Read once per pass, for the reason `published_cache` holds the other half: every edge to one
248
- // repository asks the same question, and joshuafolkken/kit#1121 made a pass run once per withheld
249
- // candidate rather than once — so an uncached read is a blocking `gh` call multiplied by both.
247
+ // repository asks the same question, and a pass runs once per withheld candidate rather than
248
+ // once — so an uncached read is a blocking `gh` call multiplied by both.
250
249
  function read_manifest(repo: string): ManifestAnswer {
251
250
  const cached = version_cache.get(repo)
252
251
  if (cached !== undefined) return cached
@@ -267,7 +266,7 @@ function read_default_branch_version(repo: string): string | undefined {
267
266
  // Whether the repository ships no package at all: no manifest on its default branch, or one that
268
267
  // declares itself private. Either way there is no release for a dependency to wait on.
269
268
  //
270
- // **A workspace root is excluded, and the exclusion is deliberately coarse** (joshuafolkken/kit#1134).
269
+ // **A workspace root is excluded, and the exclusion is deliberately coarse**.
271
270
  // Such a root is private by convention while its packages publish, so reading one as shipping nothing
272
271
  // would start a dependent before its blocker's release existed. What is asked is only whether the
273
272
  // repository *is* a workspace — the members are not enumerated and nothing looks for which of them
@@ -284,11 +283,10 @@ function publishes_nothing(repo: string): boolean {
284
283
  // A version that could not be read leaves the dependency waiting rather than resolved: not knowing
285
284
  // what to wait for is not the same as having nothing to wait for.
286
285
  //
287
- // **"Ships nothing" is asked first, and it is a different question** (joshuafolkken/kit#1129, the
288
- // state joshuafolkken/kit#1126 made reachable). Waiting is right only where something could still
289
- // arrive; a closed blocker in a repository that publishes no package has no release for
290
- // `is_published` to ever find, so it waited until the run's own eight-hour timeout with nothing an
291
- // operator could edit to clear it. It is answered from that repository's own manifest and never from
286
+ // **"Ships nothing" is asked first, and it is a different question.** Waiting is right only where
287
+ // something could still arrive; a closed blocker in a repository that publishes no package has no
288
+ // release for `is_published` to ever find, so it would wait until the run's own eight-hour timeout
289
+ // with nothing an operator could edit to clear it. It is answered from that repository's own manifest and never from
292
290
  // the registry, for the reason `ManifestAnswer` records: a registry 404 also means "this token may
293
291
  // not see it", and resolving on one would start a consumer child before its blocker's release
294
292
  // existed.
@@ -323,9 +321,8 @@ function owner_of(repo: string): string {
323
321
  return repo.split('/', 1)[0] ?? ''
324
322
  }
325
323
 
326
- // Whether a repository may be depended on at all. Inherited from joshuafolkken/kit#869's
327
- // restriction rather than restated: a child in a repository this owner does not own is not something
328
- // to wait for, dispatch to, or write into — nor, since joshuafolkken/kit#1014, an issue reference to
324
+ // Whether a repository may be depended on at all: a child in a repository this owner does not own is
325
+ // not something to wait for, dispatch to, or write into — nor an issue reference to
329
326
  // resolve: a body that mentions a third party's issue must not send this command to their tracker.
330
327
  function is_same_owner_repo(repo: string, current_owner: string): boolean {
331
328
  const identity = repo_origin.parse_origin_url(`https://${repo_origin.GITHUB_HOST}/${repo}`)
@@ -5,11 +5,9 @@ import { epic_sections, type BodyLines, type SectionRange } from './epic-section
5
5
  // Placing a decision record inside an epic body's `## Decisions` section.
6
6
  //
7
7
  // `epic-commands` requires an auto-decision to be written in **both** the epic's `## Decisions` and a
8
- // comment on each child it applies to, and until now no command wrote the epic half — so a run had to
9
- // read the body, edit it and `PATCH` it back by hand, which is the one operation `CLAUDE.md` forbids.
10
- // Measured on runs #1333 and #1349, that repair-shaped detour is where the post-merge bookkeeping
11
- // spends its round trips, and the two most recent filings skipped the epic half entirely rather than
12
- // pay for it (joshuafolkken/kit#1350).
8
+ // comment on each child it applies to. Without a command for the epic half, a run would have to read
9
+ // the body, edit it and `PATCH` it back by hand, which is the one operation `CLAUDE.md` forbids — or
10
+ // skip the epic half entirely.
13
11
  //
14
12
  // So the record rides on the body edit `--add` already makes: no extra round trip, and the half that
15
13
  // was being dropped is written by the command instead of by hand.
@@ -27,7 +25,7 @@ const EMPTY_RECORD =
27
25
 
28
26
  // **The offending line is named, never quoted.** The record is a file the caller handed over, and
29
27
  // echoing a line of it into stderr puts arbitrary file content in the console — the leak SonarCloud's
30
- // `tssecurity:S8689` reports for exactly this path on joshuafolkken/kit#1350. A line number is as
28
+ // `tssecurity:S8689` reports for exactly this path. A line number is as
31
29
  // actionable, since the author has the file open, and it carries nothing out of it.
32
30
  function to_declaration_error(line_number: number): string {
33
31
  return `Line ${String(line_number)} of the decision record is nothing but a dependency chain, which \`epic:next\` would read as part of the epic's dependency order; wrap it in backticks, fence it, or reword it.`
@@ -35,8 +33,7 @@ function to_declaration_error(line_number: number): string {
35
33
 
36
34
  // Whether the record can be written at all. The declaration check is the load-bearing one: a bare
37
35
  // `#A -> #B` line anywhere in the body is parsed as a declaration, so a record quoting an order as a
38
- // standalone line would silently add a dependency nobody declared — the failure mode
39
- // joshuafolkken/kit#1253 documents, arriving by a second route.
36
+ // standalone line would silently add a dependency nobody declared.
40
37
  //
41
38
  // **It is judged exactly the way the merged body will be judged**: the predicate is the parser's own,
42
39
  // and the lines are read through the same fence mask, so a record whose chain sits inside a fenced
@@ -91,16 +88,15 @@ function append_decision(body: string, record: string): string {
91
88
  }
92
89
 
93
90
  // The record as it will actually be written, with the relations this insertion replaced appended to
94
- // it (joshuafolkken/kit#1711).
91
+ // it.
95
92
  //
96
- // **A positioned `--add` discards the `blocked-by` relation the child already had, and until now the
97
- // record said nothing about it.** On joshuafolkken/kit#1703 that overwrote a decision whose reasoning
98
- // was written down, twice in four minutes, leaving the body's declaration, the native relations and
99
- // the recorded decision disagreeing with one another. The record is the artifact read months later, so
100
- // it is where what was replaced has to survive — the console line scrolls away.
93
+ // **A positioned `--add` discards the `blocked-by` relation the child already had, so the record says
94
+ // so.** Unsaid, it can overwrite a decision whose reasoning was written down, leaving the body's
95
+ // declaration, the native relations and the recorded decision disagreeing with one another. The
96
+ // record is the artifact read months later, so it is where what was replaced has to survive — the
97
+ // console line scrolls away.
101
98
  //
102
- // **The policy is to report, not to refuse.** Re-pointing a position is what joshuafolkken/kit#1701
103
- // deliberately added, so refusing an invocation that carries no `--decision-file` would close a
99
+ // **The policy is to report, not to refuse.** Re-pointing a position is deliberate, so refusing an invocation that carries no `--decision-file` would close a
104
100
  // working route to force a record; naming what was dropped costs the caller nothing and loses nothing.
105
101
  //
106
102
  // `undefined` stays `undefined`: an insertion that records no decision gains none here, and an
@@ -128,7 +124,7 @@ function format_decision_report(input: { total: number; failures: number }): str
128
124
 
129
125
  // The heading a creation writes its reasoning under. Beside a pattern exactly as `DECISIONS_HEADING`
130
126
  // is, and tied to `epic_body`'s own literal by a test that reads a body the builder produced
131
- // rather than by a string comparison (joshuafolkken/kit#1712).
127
+ // rather than by a string comparison.
132
128
  const RATIONALE_HEADING_PATTERN = /^#{1,6}[ \t]+Split rationale\b/u
133
129
 
134
130
  function read_section(body: string, heading: RegExp): string {
@@ -145,7 +141,7 @@ function read_section(body: string, heading: RegExp): string {
145
141
  // Both, not just the first. `josh epic … --ordered` declares a whole chain and records its reasoning
146
142
  // under `## Split rationale`, writing no `## Decisions` at all — so a reader that looked only at
147
143
  // `## Decisions` would report every correctly-documented ordered epic as unjustified the moment it
148
- // was created (joshuafolkken/kit#1712). It is this module's because the heading patterns are: a
144
+ // was created. It is this module's because the heading patterns are: a
149
145
  // second reader with its own copies is one that comes to disagree with the writers about where a
150
146
  // record goes.
151
147
  function read_recorded_reasons(body: string | undefined): string {
@@ -10,7 +10,7 @@ import { epic_relation_recheck } from './epic-relation-recheck'
10
10
  //
11
11
  // All execution state lives on GitHub and nowhere else — no local state file. A run interrupted
12
12
  // halfway is resumed by asking again, which is the whole reason `epic:next` can be the base of an
13
- // unattended run (joshuafolkken/kit#860).
13
+ // unattended run.
14
14
 
15
15
  const CHILD_LIMIT = 200
16
16
 
@@ -30,17 +30,17 @@ function to_child(parsed: EpicIssue, repo: string): EpicChild {
30
30
  // reads it — and a child elsewhere is read through its own repository, exactly as
31
31
  // `fetch_external_children` does. Every read of a child's fields goes through this, bodies included:
32
32
  // an unqualified read of a cross-repository child returns *this* repository's issue of that number,
33
- // a different issue entirely (joshuafolkken/kit#1012).
33
+ // a different issue entirely.
34
34
  function scope_for(child_repo: string, current_repo: string): string | undefined {
35
35
  return child_repo === current_repo ? undefined : child_repo
36
36
  }
37
37
 
38
38
  // One child's blockers, read from the relations listing rather than from the issue's own summary
39
- // count (joshuafolkken/kit#1113). Addressed through the same `scope_for` every other read of a child
39
+ // count. Addressed through the same `scope_for` every other read of a child
40
40
  // goes through. The recheck only ever reaches children of the epic's own repository, so what the
41
41
  // scope varies with is where the *epic* is: `epic:next owner/other#858` run from here reads them
42
42
  // through `owner/other`, and reading them unqualified would answer from this repository's issues of
43
- // those numbers instead (joshuafolkken/kit#1012).
43
+ // those numbers instead.
44
44
  async function read_child_blockers(
45
45
  child: EpicChild,
46
46
  current_repo: string,
@@ -60,7 +60,7 @@ interface EpicBody {
60
60
  // failure is invisible downstream**: `parse_task_list_issue_numbers(undefined)` answers `[]`, so a
61
61
  // body nobody could read is indistinguishable from an epic that tracks no children — and that one
62
62
  // is dropped from the views as an ordinary, unpopulated epic. A run whose DNS hiccuped on this one
63
- // request therefore reported the backlog empty and ended (joshuafolkken/kit#1690).
63
+ // request therefore reported the backlog empty and ended.
64
64
  body_failure: IssueReadFailure | undefined
65
65
  child_numbers: ReadonlyArray<number>
66
66
  external: ReadonlyArray<ExternalChild>
@@ -86,7 +86,7 @@ interface RecheckScope {
86
86
  current_repo: string
87
87
  }
88
88
 
89
- // joshuafolkken/kit#1113: the second look at the relations, taken here rather than in `epic:next`
89
+ // The second look at the relations, taken here rather than in `epic:next`
90
90
  // and `epic:audit` separately — both read their children through this one snapshot, so correcting it
91
91
  // once corrects both, and neither command needs to know the check exists.
92
92
  // `repo` is the epic's own repository, which is what a bare declared number names — not
@@ -109,7 +109,7 @@ function to_references(issue_numbers: ReadonlyArray<number>, repo: string): Arra
109
109
  }
110
110
 
111
111
  // One child's read: the child when it came back, and whether the failure was one the same request
112
- // could succeed at a moment later (joshuafolkken/kit#1690). A response that arrived and would not
112
+ // could succeed at a moment later. A response that arrived and would not
113
113
  // parse is **not** unreachable — asking again answers the same thing.
114
114
  interface ChildRead {
115
115
  child: EpicChild | undefined
@@ -152,20 +152,18 @@ async function fetch_child(
152
152
  //
153
153
  // Dropping them is not an option in either direction. An epic whose children all failed to read
154
154
  // would otherwise look like an epic with no open children — "complete" — and a single unreadable
155
- // child would vanish from the graph, so whatever it blocks would look unblocked and be run
156
- // (joshuafolkken/kit#860).
155
+ // child would vanish from the graph, so whatever it blocks would look unblocked and be run.
157
156
  //
158
157
  // The unread ones carry their repository, not just their number. An epic tracking
159
- // `- [ ] sveltejs/kit#7` had it refused by the owner restriction and reported as `Could not read #7`,
160
- // which a reader resolves against the repository they are standing in — a different issue
161
- // (joshuafolkken/kit#1016).
158
+ // `- [ ] sveltejs/kit#7` refused by the owner restriction and reported as `Could not read #7` would be
159
+ // resolved by a reader against the repository they are standing in — a different issue.
162
160
  interface FetchedChildren {
163
161
  children: ReadonlyArray<EpicChild>
164
162
  unreadable: ReadonlyArray<IssueReference>
165
163
  skipped: ReadonlyArray<IssueReference>
166
164
  // How many of the unreadable ones failed on the transport. Carried from the reads themselves
167
165
  // rather than probed afterwards: a connection that dropped for a moment fails a read at t=0 and
168
- // answers a probe fired at t=1 that everything is fine (joshuafolkken/kit#1690).
166
+ // answers a probe fired at t=1 that everything is fine.
169
167
  //
170
168
  // **A count rather than a flag, because the question the caller asks is about _every_ failure.**
171
169
  // One child unreachable beside another permanently refused is not a run worth repeating — the
@@ -211,10 +209,9 @@ async function fetch_children(
211
209
  // The children that live in other repositories, read by naming that repository in the read's REST
212
210
  // path (`repos/<owner>/<repo>/issues/<n>`). No local checkout is needed: their state is a GitHub
213
211
  // fact, and requiring a clone to learn it is what kept the auto-close from ever running on such an
214
- // epic (joshuafolkken/kit#864).
212
+ // epic.
215
213
  //
216
- // A repository with a different owner is dropped before it is read, inheriting
217
- // joshuafolkken/kit#869's restriction rather than restating it.
214
+ // A repository with a different owner is dropped before it is read.
218
215
  async function fetch_external_children(
219
216
  external: ReadonlyArray<ExternalChild>,
220
217
  current_owner: string,
@@ -244,21 +241,19 @@ async function fetch_external_children(
244
241
  interface EpicSnapshot {
245
242
  body: string | undefined
246
243
  // The repository the *epic* lives in — what a bare number in its body and in a declared dependency
247
- // names. Distinct from `current_repo` below, which is where the command is running
248
- // (joshuafolkken/kit#1126).
244
+ // names. Distinct from `current_repo` below, which is where the command is running.
249
245
  repo: string
250
246
  // The `owner/repo` the command is running in — the repository against which a reference is written
251
247
  // bare, and every other one written `owner/repo#N`. Deliberately *not* where the epic lives:
252
248
  // `epic:next owner/other#858` reads an epic elsewhere while the person reading the answer is
253
- // standing here, so writing an unread child bare would send them to their own issue of that number
254
- // (joshuafolkken/kit#1016).
249
+ // standing here, so writing an unread child bare would send them to their own issue of that number.
255
250
  current_repo: string
256
251
  children: ReadonlyArray<EpicChild>
257
252
  child_numbers: ReadonlyArray<number>
258
253
  unreadable: ReadonlyArray<IssueReference>
259
254
  skipped: ReadonlyArray<IssueReference>
260
255
  has_external_children: boolean
261
- // Why the epic's own body produced nothing, when it produced nothing (joshuafolkken/kit#1690).
256
+ // Why the epic's own body produced nothing, when it produced nothing.
262
257
  body_failure: IssueReadFailure | undefined
263
258
  // Whether **every** read behind this snapshot that failed — the body and each child — failed on
264
259
  // the transport, and at least one did. What a caller does with it is its own: `epic:next` marks
@@ -266,7 +261,7 @@ interface EpicSnapshot {
266
261
  //
267
262
  // It is `every` rather than `any` so the answer terminates: one child refused for good beside one
268
263
  // unreachable would otherwise be retried for ever, and the run would never reach the verdict that
269
- // says a person is needed (joshuafolkken/kit#1690).
264
+ // says a person is needed.
270
265
  is_unreachable: boolean
271
266
  }
272
267
 
@@ -323,15 +318,14 @@ async function to_snapshot(
323
318
  }
324
319
 
325
320
  // The epic and its children, as one read. `has_external_children` is surfaced rather than silently
326
- // ignored: a cross-repository child needs joshuafolkken/kit#864, and an epic that holds one is not
327
- // fully answered by this command yet.
321
+ // ignored: an epic that holds a cross-repository child is not fully answered by this command alone.
328
322
  //
329
323
  // `repo` is where the *epic* lives and `current_repo` is where the command is running, so the body
330
324
  // and its local rows are read through the same `scope_for` every other read goes through. Read
331
- // unqualified, `epic:next joshuafolkken/app-kit#858` answered from *this* repository's issue 858 and
332
- // then stamped the children it found there as app-kit's — and since joshuafolkken/kit#1016 makes
333
- // `repo` decide how an unread child is written, that mislabelling reached the message too. The
334
- // default keeps a command whose epic is always local reading exactly as before.
325
+ // unqualified, `epic:next joshuafolkken/app-kit#858` would answer from *this* repository's issue 858
326
+ // and stamp the children it found there as app-kit's — and since `repo` decides how an unread child
327
+ // is written, that mislabelling would reach the message too. The default keeps a command whose epic
328
+ // is always local reading its own repository.
335
329
  async function fetch_epic(
336
330
  epic_number: number,
337
331
  repo: string,
@@ -339,9 +333,9 @@ async function fetch_epic(
339
333
  ): Promise<EpicSnapshot> {
340
334
  const scope = scope_for(repo, current_repo)
341
335
  const epic_body = await fetch_epic_body(epic_number, scope)
342
- // joshuafolkken/kit#869's restriction is about who *we* are, so the owner comes from the repository
343
- // the command runs in. Derived from the epic's own repository instead, a qualified reference to
344
- // somebody else's epic would have made their whole organization readable.
336
+ // The owner restriction is about who *we* are, so the owner comes from the repository the command
337
+ // runs in. Derived from the epic's own repository instead, a qualified reference to somebody else's
338
+ // epic would make their whole organization readable.
345
339
  const owner = epic_cross_repo.owner_of(current_repo)
346
340
  const local = await fetch_children(epic_body.child_numbers, repo, scope)
347
341
  const remote = await fetch_external_children(epic_body.external, owner)