@joshuafolkken/kit 1.1240.0 → 1.1373.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +52 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +23 -66
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +43 -11
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
  51. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
  52. package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
  53. package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
  57. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  60. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
  61. package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
  62. package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
  63. package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +195 -181
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +282 -95
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +17 -11
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +30 -5
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +21 -7
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cross-file-recheck.ts +155 -0
  560. package/scripts/lint/cspell-cached.ts +1 -1
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +35 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +6 -7
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +26 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +64 -18
  801. package/scripts/run/run-step.ts +107 -51
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,42 +1,32 @@
1
- // Which documents a workflow entry point names but reads only later — point-of-use, not entry read
2
- // (joshuafolkken/kit#1776, split out of `entry-read-set.ts` in joshuafolkken/kit#2289 to keep that
3
- // file under its line ceiling and to keep the point-of-use classification its own concern from the
4
- // costing that reads it).
1
+ // Which documents a workflow entry point names but reads only later — point-of-use, not entry read.
2
+ // Kept apart from `entry-read-set.ts` so the point-of-use classification is its own concern from the
3
+ // costing that reads it.
5
4
  //
6
- // **Four documents leave the entry read because their first use is a named command, not the entry**
7
- // (joshuafolkken/kit#1797, joshuafolkken/kit#1856, joshuafolkken/kit#1873). `latest-gate.md` is read
5
+ // **Four documents leave the entry read because their first use is a named command, not the entry**.
6
+ // `latest-gate.md` is read
8
7
  // when `pnpm josh latest:scope` answers `required`, `followup.md` in the turn that issues
9
- // `pnpm josh followup`, `chain-rule.md` before the first `pnpm josh gate` launch it governs
10
- // (joshuafolkken/kit#2296 — the section is how that gate starts, overlapped with the review), and
11
- // `background-commands.md` before the first backgroundable command (`pnpm josh gate`). **They are
12
- // not deferred or summarized** — the named operational section is fetched in the same turn; only
13
- // `latest-gate.md` remains whole because its result branches across that document.
14
- // Measured on `fullrun #1783`, `followup.md` rode 55 requests before its first use. **`chain-rule.md`
15
- // is joshuafolkken/kit#1856's addition**: it governs the `/code-review` → `followup` chain, which in
16
- // `fullrun` / `queue` / `epicrun` / `backlogrun` runs *after* the first edit, so its 7,396 tokens
17
- // were resident from the entry for no run that had yet reached a review.
18
- // **`background-commands.md` is joshuafolkken/kit#1873's**: it was `background-commands.md`'s resident body, governing the
19
- // background execution of the gate, the push and the merge tail — all after the first edit — so it
20
- // left `SKILL.md` for the point-of-use list. `SKILL.md` → §1, "Four documents are read at the point
21
- // of use", is the single source.
22
- // **`backlogrun`'s own per-child phase documents are point-of-use too** (joshuafolkken/kit#2010):
8
+ // `pnpm josh followup`, `chain-rule.md` before the first `pnpm josh gate` launch it governs (the
9
+ // section is how that gate starts, overlapped with the review), and `background-commands.md` before
10
+ // the first backgroundable command (`pnpm josh gate`). **They are not deferred or summarized** — the
11
+ // named operational section is fetched in the same turn; only `latest-gate.md` remains whole because
12
+ // its result branches across that document. `chain-rule.md` governs the `/code-review` → `followup`
13
+ // chain and `background-commands.md` the background execution of the gate, the push and the merge
14
+ // tail — all *after* the first edit, so neither is resident from the entry. `SKILL.md` → §1, "Four
15
+ // documents are read at the point of use", is the single source.
16
+ // **`backlogrun`'s own per-child phase documents are point-of-use too**:
23
17
  // `backlogrun.md` was split so the entry read carries only what binds before the first child, and the
24
18
  // four phase documents below are read from it at the step each names — dispatching a child, opening a
25
19
  // lane, the progress watcher and the hand-off, a child that cannot finish — never at the entry. Kept
26
20
  // out of the count here, exactly as the four above are. `SKILL.md` → §1 is the human source.
27
- // **`backlogrun-steps.md` joins them** (joshuafolkken/kit#2190): `backlogrun.md` was cut to a manifest
28
- // and its detailed procedure moved into `backlogrun-steps.md`, read on demand rather than at the
29
- // entry. Counting the manifest's pointers into it would put that prose straight back into the entry
30
- // figure under another name, which is exactly what this reduction removes.
31
- // **`pre-gate-cut.md` joins them** (joshuafolkken/kit#2289): it is the single source of the pre-gate
32
- // cut, a step every implementing run — and every dispatched lane child — reaches after the entry, so
33
- // its read is a point-of-use read the count was silently omitting. Measured on the backlogrun of
34
- // 2026-09-21, the lane children read it 21 times across 13 runs — the largest single document read,
35
- // and the one the point-of-use list had no row for. Only a lane child reaches it (joshuafolkken/kit#3172):
36
- // `fullrun.md` no longer names it, so it is charged to the lane child's role alone.
37
- // **`progress-watcher.md` joins them** (joshuafolkken/kit#3172): the heartbeat every implementing run
38
- // starts once its hold is claimed, split out of `backlogrun-progress.md` so a single-issue run stops
39
- // paying for the batch's hand-off and waiting procedure to read it.
21
+ // **`backlogrun-steps.md` joins them**: `backlogrun.md` is a manifest and its detailed procedure
22
+ // lives in `backlogrun-steps.md`, read on demand rather than at the entry. Counting the manifest's
23
+ // pointers into it would put that prose straight back into the entry figure under another name.
24
+ // **`pre-gate-cut.md` joins them**: it is the single source of the pre-gate cut, a step a dispatched
25
+ // lane child reaches after the entry, so its read is a point-of-use read. Only a lane child reaches
26
+ // it: `fullrun.md` does not name it, so it is charged to the lane child's role alone.
27
+ // **`progress-watcher.md` joins them**: the heartbeat every implementing run starts once its hold is
28
+ // claimed, kept apart from `backlogrun-progress.md` so a single-issue run does not pay for the
29
+ // batch's hand-off and waiting procedure to read it.
40
30
  const POINT_OF_USE_FILES: ReadonlySet<string> = new Set([
41
31
  'latest-gate.md',
42
32
  'followup.md',
@@ -50,16 +40,16 @@ const POINT_OF_USE_FILES: ReadonlySet<string> = new Set([
50
40
  'backlogrun-park.md',
51
41
  'backlogrun-steps.md',
52
42
  // Read only when a delegated unit goes silent or a lane's pull request conflicts with `main` — a
53
- // failure path, so a run in which nothing fails never reads it (joshuafolkken/kit#3175).
43
+ // failure path, so a run in which nothing fails never reads it.
54
44
  'backlogrun-recovery.md',
55
45
  // Read only when `run:step` prints `pnpm josh retrospective` at a run's stop position — the very
56
- // end of a run, never the entry (joshuafolkken/kit#2328). Kept out of every entry's read for the
46
+ // end of a run, never the entry. Kept out of every entry's read for the
57
47
  // same reason the phase documents above are: no run that never drains its backlog reaches it.
58
48
  'retrospective.md',
59
49
  ])
60
50
 
61
51
  // **A file an entry names but reads only later — point-of-use for that entry, an entry read for
62
- // another** (joshuafolkken/kit#2161). The global set above cannot express this, because a file
52
+ // another**. The global set above cannot express this, because a file
63
53
  // dropped there leaves *every* entry's read. The four ordinary entries read the decision documents
64
54
  // only when delegation or filing arises; the lane child omits their SKILL.md sections. `backlogrun`'s
65
55
  // parent additionally reads `fullrun.md` and `split-assessment.md` inside a dispatched child, while
@@ -83,8 +73,8 @@ function is_point_of_use(entry: string, file: string): boolean {
83
73
  return (POINT_OF_USE_BY_ENTRY.get(entry) ?? NO_PER_ENTRY_FILES).has(file)
84
74
  }
85
75
 
86
- // **Only the global files the entry reaches, plus the ones this entry names in its own row**
87
- // (joshuafolkken/kit#3078). `cited` is every document the entry's path names; a global file outside it
76
+ // **Only the global files the entry reaches, plus the ones this entry names in its own row**.
77
+ // `cited` is every document the entry's path names; a global file outside it
88
78
  // is one this entry never opens — a `kickoff` never issues `followup` — so charging it made every
89
79
  // entry's total the same figure and the per-entry ratchet measured nothing.
90
80
  function point_of_use_files(entry: string, cited: ReadonlySet<string>): Array<string> {
@@ -1,4 +1,4 @@
1
- // What a document read at a workflow entry costs, in dollars, for one run (joshuafolkken/kit#2289).
1
+ // What a document read at a workflow entry costs, in dollars, for one run.
2
2
  //
3
3
  // **The dollars are not "tokens x one rate".** A token read at the entry is not paid once — it rides
4
4
  // every later request of the run as cached context, so its cost is the per-token cache-read rate
@@ -1,4 +1,4 @@
1
- // Trimming a base entry's read set by role (joshuafolkken/kit#2256).
1
+ // Trimming a base entry's read set by role.
2
2
  //
3
3
  // **A dispatched lane child (the worker) and a `backlogrun` parent (the scheduler) both read a trimmed
4
4
  // version of a base entry.** The worker trims `fullrun` (`lane-child-read-set.ts`); the parent trims
@@ -9,8 +9,8 @@
9
9
  // skipped point-of-use set.
10
10
  //
11
11
  // **Deriving off the base entry's own figures keeps each honest** — a row that moves in the base set
12
- // moves here with it — and leaves the whole of `entry-read-set.ts` untouched (joshuafolkken/kit#2021
13
- // decided this against reshaping `SKILL.md` itself, which every entry point would have paid for).
12
+ // moves here with it — and leaves the whole of `entry-read-set.ts` and `SKILL.md` untouched, which
13
+ // every entry point would otherwise pay for.
14
14
 
15
15
  import { document_section } from './document-section'
16
16
  import { entry_read_set, type Cost, type FileCost, type ReadSetCost } from './entry-read-set'
@@ -2,25 +2,23 @@ import { document_reachability } from './document-reachability'
2
2
 
3
3
  // The byte budget of the always-resident document — `CLAUDE.md`, loaded on every request. It is held
4
4
  // here rather than in `document-byte-budget.ts` because a resident document is covered by every entry
5
- // total and must not carry a per-document block entry as well (joshuafolkken/kit#2257); it is held here
6
- // rather than inside `workflow-skills.test.ts` so `josh bytes CLAUDE.md` counts against the same number
7
- // the suite enforces (joshuafolkken/kit#3171). Loosening any of the three constants is Tier C —
5
+ // total and must not carry a per-document block entry as well; it is held here rather than inside
6
+ // `workflow-skills.test.ts` so `josh bytes CLAUDE.md` counts against the same number the suite
7
+ // enforces. Loosening any of the three constants is Tier C —
8
8
  // `prompts/collaboration-workflow/residency.md`.
9
9
 
10
- // The documents sat at ~83 KB each before the joshuafolkken/kit#854 split, crept back to ~56 KB, and
11
- // were cut below 30 KB by joshuafolkken/kit#1924. joshuafolkken/kit#3171 cut `CLAUDE.md` to ~14 KB —
12
- // triggers and pointers only — and lowered this ceiling with it, so the document cannot creep back. It
13
- // is a guard against re-inlining, not a budget to tune prose against.
14
- const RESIDENT_CEILING_BYTES = 18_000
10
+ // The ceiling keeps `CLAUDE.md` to triggers and pointers, so the document cannot creep back. It is a
11
+ // guard against re-inlining, not a budget to tune prose against.
12
+ const RESIDENT_CEILING_BYTES = 12_216
15
13
 
16
- // joshuafolkken/kit#951: the ceiling alone stops the wrong thing. Reached, it does not block the
14
+ // The ceiling alone stops the wrong thing. Reached, it does not block the
17
15
  // next rule — it makes that rule pay for itself by deleting a neighboring sentence, and the
18
16
  // sentence chosen is whichever one no marker pinned rather than whichever one matters least. A
19
17
  // required margin turns "at the limit" into a failure while there is still room to write the fix,
20
18
  // which is the only point at which moving a procedure into a skill is still a choice.
21
19
  const RESIDENT_HEADROOM_BYTES = 2000
22
20
 
23
- // joshuafolkken/kit#1275: a floor under the room left once the procedures are out, so a wholesale
21
+ // A floor under the room left once the procedures are out, so a wholesale
24
22
  // re-inlining fails by name instead of silently returning the document to a few bytes of headroom.
25
23
  const RE_INLINE_GUARD_HEADROOM_BYTES = 1000
26
24
 
@@ -15,14 +15,14 @@ import { epic_sections, type BodyLines, type SectionRange } from './epic-section
15
15
  // declaration `epic:next` parses, and the native `blocked-by` relations — and editing the body by
16
16
  // hand is what leaves them disagreeing, which stops an unattended run outright. So the rewritten
17
17
  // body is parsed back before it is returned, and a round trip that does not reproduce the intended
18
- // links is reported instead of written (joshuafolkken/kit#890).
18
+ // links is reported instead of written.
19
19
 
20
20
  interface RewriteInput {
21
21
  body: string
22
22
  // The children being placed, in the order the caller named them: the additions and the children
23
23
  // the epic already tracks, together in one list. **A position places both kinds the same way** —
24
24
  // the task-list row and the declaration are one statement, so an addition whose row was appended
25
- // while the chain named a position left the two disagreeing (joshuafolkken/kit#1704). Which of
25
+ // while the chain named a position left the two disagreeing. Which of
26
26
  // them already has a row is read off the body rather than passed in, since the two are placed
27
27
  // identically and only the removal of an existing row differs.
28
28
  placed: ReadonlyArray<number>
@@ -33,11 +33,10 @@ interface RewriteInput {
33
33
  // The decision record to append to the epic's `## Decisions` section, or `undefined` for an
34
34
  // insertion that records none. It is folded in **before** the declaration work below, so the stray
35
35
  // declaration and round-trip guards see the record too: a record carrying a bare `#A -> #B` line
36
- // would otherwise be written and then read back by `epic:next` as part of the order
37
- // (joshuafolkken/kit#1350).
36
+ // would otherwise be written and then read back by `epic:next` as part of the order.
38
37
  decision?: string | undefined
39
38
  // Whether an empty `chains_after` means "write that there is no order" rather than "leave the
40
- // declaration alone" (joshuafolkken/kit#1712).
39
+ // declaration alone".
41
40
  //
42
41
  // The two callers mean opposite things by it. An insertion given no position computes no chains
43
42
  // because none were ever declared, so the body is left exactly as it stood. A removal that took out
@@ -92,13 +91,12 @@ function is_placed_row(line: string, placed: ReadonlySet<number>): boolean {
92
91
  }
93
92
 
94
93
  // The rows of the placed children, put beside the row the position names. **The list order is part
95
- // of what a position declares**: `epic:next` presents an epic's children in task-list order
96
- // (joshuafolkken/kit#1583), so rewriting only the declaration would leave the two disagreeing
97
- // (joshuafolkken/kit#1701).
94
+ // of what a position declares**: `epic:next` presents an epic's children in task-list order,
95
+ // so rewriting only the declaration would leave the two disagreeing.
98
96
  //
99
97
  // **Both kinds of placement go through here.** A child the epic already tracks has its row lifted
100
98
  // out first; an addition has none to lift, so the same insertion serves both and they land in the
101
- // order the caller named rather than in the order they were classified (joshuafolkken/kit#1704).
99
+ // order the caller named rather than in the order they were classified.
102
100
  //
103
101
  // The target's row is located after the removal rather than before it, so the index needs no
104
102
  // adjusting for the rows that came out above it. Both lookups go through `find_indices`, which skips
@@ -119,8 +117,7 @@ function insert_task_rows(
119
117
  }
120
118
 
121
119
  // The task list with the placed children in it: at the position where one was named, appended where
122
- // none was. An insertion that named no position appends, which is every insertion made before
123
- // joshuafolkken/kit#1701 and every unordered one since.
120
+ // none was. An insertion that named no position appends.
124
121
  function to_placed_lines(input: RewriteInput): Array<string> {
125
122
  const lines = to_body_lines(input.body)
126
123
  const { position } = input
@@ -174,8 +171,8 @@ function replace_declaration(
174
171
 
175
172
  // The declaration a line names, **re-rendered from the issue numbers it parsed to rather than echoed
176
173
  // back**. The message has to name what it found, or the answer "move this line" is unactionable — and
177
- // the body it comes from is not this process's: it is fetched from GitHub, and since
178
- // joshuafolkken/kit#1350 it also carries a record file the caller supplied. Echoing a line of either
174
+ // the body it comes from is not this process's: it is fetched from GitHub, and it also carries a
175
+ // record file the caller supplied. Echoing a line of either
179
176
  // into stderr puts content this code never read in the console, which is what SonarCloud's
180
177
  // `tssecurity:S8689` reports for this path. Rendering from the parsed numbers keeps the useful half —
181
178
  // the chain, exactly as the parser read it — while what reaches the console is built from integers.
@@ -207,7 +204,7 @@ type BodyOutcome = { body: string } | { error: string }
207
204
  // The task rows and the decision record, in that order. **The record goes in before the declaration
208
205
  // work**: it is the one part of the new body that a caller wrote by hand, so the stray-declaration and
209
206
  // round-trip guards below have to see it — a record appended afterwards would be written unchecked and
210
- // read back by `epic:next` as part of the order (joshuafolkken/kit#1350).
207
+ // read back by `epic:next` as part of the order.
211
208
  function to_written_lines(input: RewriteInput): Array<string> {
212
209
  const with_rows = to_placed_lines(input)
213
210
  const { decision } = input
@@ -230,7 +227,7 @@ function is_declaration_unchanged(
230
227
 
231
228
  // The declaration work, once the task rows and any record are in.
232
229
  //
233
- // **An unchanged declaration is left as text rather than re-rendered** (joshuafolkken/kit#1253). The
230
+ // **An unchanged declaration is left as text rather than re-rendered**. The
234
231
  // rewrite moves every chain line to the first one's index, so re-rendering a declaration nothing
235
232
  // changed detaches the rationale lines a chain is documented by and files them under whichever chain
236
233
  // ends up above them — a rewrite of somebody else's prose in exchange for a body that would have been
@@ -260,7 +257,7 @@ function to_declared_body(
260
257
  // The declaration to write. An empty computed order means "nothing was ever declared" to an
261
258
  // insertion and "the last link was just deleted" to a removal, and only the second has anything to
262
259
  // say — the unordered sentence, since an emptied section carries no machine-readable declaration at
263
- // all (joshuafolkken/kit#1712).
260
+ // all.
264
261
  function to_rendered_declaration(input: RewriteInput): Array<string> {
265
262
  const rendered = epic_chains.render_chains(input.chains_after)
266
263
  if (rendered.length > 0) return rendered
@@ -312,11 +309,11 @@ function to_placement_start(position: InsertPosition, target: number, count: num
312
309
  // Whether the rewritten task list puts the placed rows where the position asked. The link round trip
313
310
  // above says nothing about it — a body whose rows never moved declares exactly the same order and
314
311
  // passes every other check here, while `epic:next` goes on presenting the order it was told to
315
- // replace (joshuafolkken/kit#1701).
312
+ // replace.
316
313
  //
317
314
  // **It covers an addition's row as well as a moved one**, since a position now places both: the row
318
315
  // an addition gains is the half of the statement the declaration cannot verify for itself, and it
319
- // was the half left unchecked (joshuafolkken/kit#1704).
316
+ // was the half left unchecked.
320
317
  function has_intended_rows(body: string, input: RewriteInput): boolean {
321
318
  const { position, placed } = input
322
319
  if (position === undefined || placed.length === 0) return true
@@ -11,7 +11,7 @@ import { epic_shape } from './epic-shape'
11
11
  // Kept apart from the GitHub calls so the whole decision — which rows to add, which declaration to
12
12
  // write, which relations to record and which to drop — is asserted without a network. That
13
13
  // separation is the point: the command's value is that it refuses rather than half-applies, and a
14
- // refusal path only reachable through `gh` is a refusal path nobody tests (joshuafolkken/kit#890).
14
+ // refusal path only reachable through `gh` is a refusal path nobody tests.
15
15
 
16
16
  interface PlanInput {
17
17
  epic_number: number
@@ -20,18 +20,18 @@ interface PlanInput {
20
20
  children: ReadonlyArray<number>
21
21
  position?: InsertPosition | undefined
22
22
  // `--order-before` / `--order-after`: move the task-list row to `position` and write nothing else —
23
- // no declaration, no `blocked-by` (joshuafolkken/kit#1738). The position is carried in the field
23
+ // no declaration, no `blocked-by`. The position is carried in the field
24
24
  // above rather than in one of its own, because where the row goes is the same question either way;
25
25
  // what this flag decides is whether a dependency is recorded behind it.
26
26
  is_order_only?: boolean | undefined
27
27
  // The epic's current children with their native relations, as `epic:next` reads them.
28
28
  recorded: ReadonlyArray<EpicChild>
29
- // The epic's own repository — what a declared bare number names. Needed since
30
- // joshuafolkken/kit#1126 made a recorded relation carry the repository it lives in.
29
+ // The epic's own repository — what a declared bare number names. Needed because a recorded
30
+ // relation carries the repository it lives in.
31
31
  repo: string
32
32
  // The decision record `--decision-file` supplied, or `undefined` for an insertion that records
33
33
  // none. It reaches the body rewrite rather than being posted separately, so the epic half of the
34
- // record rides on the body edit the insertion already makes (joshuafolkken/kit#1350).
34
+ // record rides on the body edit the insertion already makes.
35
35
  decision?: string | undefined
36
36
  }
37
37
 
@@ -40,20 +40,20 @@ interface AddPlan {
40
40
  additions: ReadonlyArray<number>
41
41
  // The children the epic already tracked, moved to the position the caller named. Kept apart from
42
42
  // `additions` because the two write different things: an addition gains a task-list row, while a
43
- // relocation only moves the row it already had (joshuafolkken/kit#1701).
43
+ // relocation only moves the row it already had.
44
44
  relocations: ReadonlyArray<number>
45
45
  added: ReadonlyArray<DependencyLink>
46
46
  removed: ReadonlyArray<DependencyLink>
47
47
  // Every link the declaration dropped, whether or not GitHub had recorded it natively — which is what
48
- // separates it from `removed` above (joshuafolkken/kit#1711). `removed` is a work list for `gh` and
48
+ // separates it from `removed` above. `removed` is a work list for `gh` and
49
49
  // is therefore filtered down to relations that exist to be removed; this is the *report*, and a
50
50
  // declared-but-unrecorded order the caller re-pointed is exactly as much a replacement as a recorded
51
51
  // one. Reporting from `removed` let those vanish without a word.
52
52
  replaced: ReadonlyArray<DependencyLink>
53
53
  // The placed children an order-only move puts on the wrong side of an order the declaration already
54
- // states — ahead of an issue declared to block them, or behind one they are declared to block
55
- // (joshuafolkken/kit#1738). **The wrong side is judged against the whole resulting row order, not
56
- // against the move target alone** (joshuafolkken/kit#1753): a relocation can seat a row on the wrong
54
+ // states — ahead of an issue declared to block them, or behind one they are declared to block.
55
+ // **The wrong side is judged against the whole resulting row order, not
56
+ // against the move target alone**: a relocation can seat a row on the wrong
57
57
  // side of a *third* child the target never named, and a check that only compared the target missed
58
58
  // it. `epic:next` filters by `blocked_by` **before** it applies task-list
59
59
  // order, so such a row cannot take effect until the declaration itself changes, and a run that only
@@ -92,12 +92,12 @@ function declared_numbers(chains: ReadonlyArray<ReadonlyArray<number>>): Array<n
92
92
  return [...new Set(chains.flat())]
93
93
  }
94
94
 
95
- // The children the epic already tracks, given a position: what used to be filtered out as "nothing to
96
- // do" is a reorder the moment `--before` / `--after` says where they go. Without a position there is
97
- // still nothing to do, so the refusal below stands for that case (joshuafolkken/kit#1701).
95
+ // The children the epic already tracks, given a position: what would be "nothing to do" without one
96
+ // is a reorder the moment `--before` / `--after` says where they go. Without a position there is
97
+ // still nothing to do, so the refusal below stands for that case.
98
98
  //
99
99
  // **The task list decides, not the declaration.** An issue a chain names while no row tracks it is
100
- // what joshuafolkken/kit#890's cycle came out of, and a move that re-rendered its missing row would
100
+ // what a declaration cycle comes out of, and a move that re-rendered its missing row would
101
101
  // repair a body somebody has to reconcile by hand — so it stays outside a move and keeps the refusal
102
102
  // it already had.
103
103
  function to_relocations(input: PlanInput, tracked: ReadonlyArray<number>): Array<number> {
@@ -108,8 +108,7 @@ function to_relocations(input: PlanInput, tracked: ReadonlyArray<number>): Array
108
108
 
109
109
  // The issues to place, in the order the caller gave them. Additions and relocations enter one chain
110
110
  // segment together, so which comes first is the caller's word rather than which bucket it fell into
111
- // — and the task list is written from this same list, which is what keeps the two agreeing
112
- // (joshuafolkken/kit#1704).
111
+ // — and the task list is written from this same list, which is what keeps the two agreeing.
113
112
  function to_placed(
114
113
  children: ReadonlyArray<number>,
115
114
  additions: ReadonlyArray<number>,
@@ -183,7 +182,7 @@ interface PlanContext {
183
182
  additions: ReadonlyArray<number>
184
183
  relocations: ReadonlyArray<number>
185
184
  // The two above as one list, in the order the caller named them — what both the chain segment and
186
- // the task list are written from (joshuafolkken/kit#1704).
185
+ // the task list are written from.
187
186
  placed: ReadonlyArray<number>
188
187
  chains_before: ReadonlyArray<ReadonlyArray<number>>
189
188
  chains_after: ReadonlyArray<ReadonlyArray<number>>
@@ -203,13 +202,13 @@ function to_rewrite_input(context: PlanContext, decision: string | undefined): R
203
202
  // checks rather than a function that both checks and composes.
204
203
  //
205
204
  // **The replacements are folded into the decision record before the body is rewritten**, because the
206
- // epic's `## Decisions` half rides on that same edit (joshuafolkken/kit#1350) — composing it afterwards
205
+ // epic's `## Decisions` half rides on that same edit — composing it afterwards
207
206
  // would put the line on the child comments and leave the epic without it. The caller-supplied record
208
207
  // has already been validated by `find_decision_error`; what is appended here is generated, not read
209
208
  // from a file.
210
209
  // An ordinary insertion records every link the declaration names that GitHub does not, which repairs a
211
- // declared-but-unrecorded order in passing. **An order-only move records nothing at all**
212
- // (joshuafolkken/kit#1738): `--order-*` exists so a row can move with no dependency appearing behind
210
+ // declared-but-unrecorded order in passing. **An order-only move records nothing at all**:
211
+ // `--order-*` exists so a row can move with no dependency appearing behind
213
212
  // it, and a repair made under it would put back exactly the `blocked-by` the caller asked not to have.
214
213
  // The declaration is unchanged either way, so the repair is still there for the next insertion to make.
215
214
  function to_added_links(
@@ -239,8 +238,7 @@ function does_declare_order(
239
238
  // Whether the resulting row order puts `child` on the wrong side of any issue the declaration orders
240
239
  // it against — ahead of one declared to block it, or behind one it is declared to block. The move
241
240
  // target is not privileged: a relocation can seat a row on the wrong side of a *third* child the
242
- // target never named, so the whole resulting order is cross-checked rather than the target alone
243
- // (joshuafolkken/kit#1753).
241
+ // target never named, so the whole resulting order is cross-checked rather than the target alone.
244
242
  function does_row_contradict_order(
245
243
  chains: ReadonlyArray<ReadonlyArray<number>>,
246
244
  rows: ReadonlyArray<number>,
@@ -299,15 +297,15 @@ function to_plan(context: PlanContext): PlanOutcome {
299
297
 
300
298
  // A decision record that cannot be written is refused here rather than dropped: `--decision-file` was
301
299
  // given because the record has to exist, so writing the insertion without it would report success for
302
- // half the job (joshuafolkken/kit#1350). `undefined` is "none was asked for", which is not a refusal.
300
+ // half the job. `undefined` is "none was asked for", which is not a refusal.
303
301
  function find_decision_error(decision: string | undefined): string | undefined {
304
302
  return decision === undefined ? undefined : epic_decision.find_decision_error(decision)
305
303
  }
306
304
 
307
305
  // Asked of the declaration as it stands, because a relocation's removal can collapse the very
308
- // ambiguity this refuses (joshuafolkken/kit#1701).
306
+ // ambiguity this refuses.
309
307
  //
310
- // **An order-only move is not asked at all** (joshuafolkken/kit#1738). The ambiguity is about where a
308
+ // **An order-only move is not asked at all**. The ambiguity is about where a
311
309
  // *dependency* would attach — `--before <hub>` cannot say which of the chains running through the hub
312
310
  // the new link joins — and `--order-*` attaches no link, so the question has no subject. Asking it
313
311
  // anyway would refuse a row move on the strength of a declaration the move never touches.
@@ -361,9 +359,9 @@ function find_input_error(
361
359
 
362
360
  // The declaration the body will carry. A relocation is a removal followed by the ordinary insertion,
363
361
  // so `--before` re-points the chain it lands in and the vacated chain closes around it — both by
364
- // construction rather than by a second code path (joshuafolkken/kit#1701).
362
+ // construction rather than by a second code path.
365
363
  //
366
- // **An order-only move takes neither step** (joshuafolkken/kit#1738): the declaration it started with
364
+ // **An order-only move takes neither step**: the declaration it started with
367
365
  // is the declaration it ends with, which is `keep_declaration` — the same passthrough `--add` with no
368
366
  // position already uses. Because the chains come back identical, `diff_links` finds nothing replaced
369
367
  // and the body rewrite leaves the `## Dependencies` section byte-identical, so "writes no dependency"
@@ -393,7 +391,7 @@ function build_plan(input: PlanInput): PlanOutcome {
393
391
  const additions = to_additions(input, tracked, declared_numbers(chains_before))
394
392
  const relocations = to_relocations(input, tracked)
395
393
  // `tracked` reaches the chain builder so it can tell a child with no order yet from a number that is
396
- // not a child at all; `find_movement_error` has already refused the second (joshuafolkken/kit#949).
394
+ // not a child at all; `find_movement_error` has already refused the second.
397
395
  // What the builder does with a relocation, and what an order-only move does instead, is on
398
396
  // `to_chains_after` above.
399
397
  const placed = to_placed(input.children, additions, relocations)
@@ -1,5 +1,6 @@
1
1
  import { backlog_ready } from '#scripts/backlog/backlog-ready'
2
2
  import { git_gh_command } from '#scripts/gh/git-gh-command'
3
+ import { session_cite } from '#scripts/issue/session-cite'
3
4
  import { epic_add_plan, type AddPlan } from './epic-add-plan'
4
5
  import type { InsertPosition } from './epic-chains'
5
6
  import { epic_decision } from './epic-decision'
@@ -15,7 +16,7 @@ import { epic_relations } from './epic-relations'
15
16
  // `josh epic --add <E> <N...> [--before <M> | --after <M> | --order-before <M> | --order-after <M>]
16
17
  // [--decision-file <path|->]` — insert children into an existing epic.
17
18
  //
18
- // **`--order-*` moves the row and writes nothing else** (joshuafolkken/kit#1738). `epic:next` offers
19
+ // **`--order-*` moves the row and writes nothing else**. `epic:next` offers
19
20
  // children in task-list order, so putting one first meant `--before`, which records a `blocked-by`:
20
21
  // "no dependency, but run this one first" had no spelling, and an order written that way stops every
21
22
  // child behind the one that stalls.
@@ -23,10 +24,9 @@ import { epic_relations } from './epic-relations'
23
24
  // Adding a child by editing the body is what the procedure told an agent to do, and it is what stops
24
25
  // an unattended run: the body then declares an order the native `blocked-by` relations do not record,
25
26
  // `epic:next` reports `declaration_mismatch`, and the verdict is `error`. This command writes the
26
- // task-list row, the declaration and the relations from one input, so the three cannot disagree
27
- // (joshuafolkken/kit#890).
27
+ // task-list row, the declaration and the relations from one input, so the three cannot disagree.
28
28
  //
29
- // **`--decision-file` folds the fourth and fifth writes in** (joshuafolkken/kit#1350). An auto-decided
29
+ // **`--decision-file` folds the fourth and fifth writes in**. An auto-decided
30
30
  // placement has to be recorded in the epic's `## Decisions` and on each child, and no command wrote the
31
31
  // epic half — so a run read the body, edited it and `PATCH`ed it back, which is the hand edit
32
32
  // `CLAUDE.md` forbids. The epic half now rides on the body edit this command already makes, so it costs
@@ -37,7 +37,7 @@ const SUCCESS_EXIT_CODE = 0
37
37
 
38
38
  // A completed epic takes no new children: adding one silently produces a closed epic with unfinished
39
39
  // children, whose backlog opt-in no longer fires, so the child never surfaces and the addition is
40
- // lost (joshuafolkken/kit#2337). The refusal is only fired on a *confirmed* closed state — an
40
+ // lost. The refusal is only fired on a *confirmed* closed state — an
41
41
  // unreadable state field leaves the addition to proceed, since blocking on a lookup that never
42
42
  // answered would be the worse failure.
43
43
  function is_closed_epic(state: string | undefined): boolean {
@@ -45,7 +45,7 @@ function is_closed_epic(state: string | undefined): boolean {
45
45
  }
46
46
 
47
47
  function closed_epic_error(epic_number: number): string {
48
- return `Epic #${String(epic_number)} is closed — a completed epic takes no new children. Reopen it if it is not actually done, or run \`pnpm josh epic:bundle <child>\` to place the child in an open epic instead.`
48
+ return `Epic ${session_cite.issue(epic_number)} is closed — a completed epic takes no new children. Reopen it if it is not actually done, or run \`pnpm josh epic:bundle <child>\` to place the child in an open epic instead.`
49
49
  }
50
50
 
51
51
  interface AddChildrenInput {
@@ -53,12 +53,11 @@ interface AddChildrenInput {
53
53
  children: ReadonlyArray<number>
54
54
  position?: InsertPosition | undefined
55
55
  // `--order-before` / `--order-after`: place the row at `position` and write nothing else — no
56
- // declaration, no `blocked-by` (joshuafolkken/kit#1738).
56
+ // declaration, no `blocked-by`.
57
57
  is_order_only?: boolean | undefined
58
- // The decision record to write, from `--decision-file`. It goes to two places, and both used to be
59
- // separate calls a run made afterwards: the epic's `## Decisions` section — folded into the body
60
- // edit below, so it costs no round trip — and a comment on each child added
61
- // (joshuafolkken/kit#1350).
58
+ // The decision record to write, from `--decision-file`. It goes to two places, neither of them a
59
+ // separate call a run makes afterwards: the epic's `## Decisions` section — folded into the body
60
+ // edit below, so it costs no round trip — and a comment on each child added.
62
61
  decision?: string | undefined
63
62
  }
64
63
 
@@ -96,20 +95,22 @@ async function apply_plan(plan: AddPlan): Promise<void> {
96
95
  // The two things one insertion can do, reported separately because they are different edits: an
97
96
  // addition gains a task-list row, a relocation moves the row it already had. Either list can be empty
98
97
  // — `--before` / `--after` on children the epic already tracks adds nothing at all
99
- // (joshuafolkken/kit#1701) — so neither line is printed unconditionally.
98
+ // — so neither line is printed unconditionally.
100
99
  // A row moved onto the wrong side of an order the declaration already states. `epic:next` filters by
101
100
  // `blocked_by` before it applies task-list order, so the move cannot change when that child is offered
102
101
  // until the declaration itself changes — and the placement line above, read alone, says the opposite.
103
- // It is a warning rather than a refusal for the reason `contradicted` gives (joshuafolkken/kit#1738).
102
+ // It is a warning rather than a refusal for the reason `contradicted` gives.
104
103
  function report_contradiction(plan: AddPlan): void {
105
104
  if (plan.contradicted.length === 0) return
106
105
 
107
106
  console.info(
108
- `⚠️ ${format_issue_references(plan.contradicted)} is still held by a declared order, so \`epic:next\` will not offer it any earlier until that order is changed — \`--remove\` deletes one.`,
107
+ session_cite.text(
108
+ `⚠️ ${format_issue_references(plan.contradicted)} is still held by a declared order, so \`epic:next\` will not offer it any earlier until that order is changed — \`--remove\` deletes one.`,
109
+ ),
109
110
  )
110
111
  }
111
112
 
112
- // **An order-only move reports the place, because nothing else will** (joshuafolkken/kit#1738). An
113
+ // **An order-only move reports the place, because nothing else will**. An
113
114
  // ordinary insertion is followed by the replaced-relation line and the relation report, which between
114
115
  // them say where the child landed; `--order-*` writes neither, so without this line the console says a
115
116
  // row moved and never says where to. The position is read from the input rather than the plan: the
@@ -122,7 +123,9 @@ function report_order(input: AddChildrenInput, plan: AddPlan): void {
122
123
  const target = to_issue_reference(position.target)
123
124
 
124
125
  console.info(
125
- `📋 Placed ${placed} ${position.kind} ${target} in epic #${String(input.epic_number)} — order only, no dependency written.`,
126
+ session_cite.text(
127
+ `📋 Placed ${placed} ${position.kind} ${target} in epic ${session_cite.issue(input.epic_number)} — order only, no dependency written.`,
128
+ ),
126
129
  )
127
130
  report_contradiction(plan)
128
131
  }
@@ -134,19 +137,23 @@ function report_placements(input: AddChildrenInput, plan: AddPlan): void {
134
137
  return
135
138
  }
136
139
 
137
- const epic = `epic #${String(input.epic_number)}`
140
+ const epic = `epic ${session_cite.issue(input.epic_number)}`
138
141
 
139
142
  if (plan.additions.length > 0) {
140
- console.info(`📋 Added ${format_issue_references(plan.additions)} to ${epic}.`)
143
+ console.info(
144
+ session_cite.text(`📋 Added ${format_issue_references(plan.additions)} to ${epic}.`),
145
+ )
141
146
  }
142
147
 
143
148
  if (plan.relocations.length > 0) {
144
- console.info(`📋 Moved ${format_issue_references(plan.relocations)} within ${epic}.`)
149
+ console.info(
150
+ session_cite.text(`📋 Moved ${format_issue_references(plan.relocations)} within ${epic}.`),
151
+ )
145
152
  }
146
153
  }
147
154
 
148
- // **What the insertion discarded, printed from `plan.replaced` rather than `plan.removed`**
149
- // (joshuafolkken/kit#1711). The two differ by the filter `removed` carries for `gh`'s sake: a link the
155
+ // **What the insertion discarded, printed from `plan.replaced` rather than `plan.removed`**.
156
+ // The two differ by the filter `removed` carries for `gh`'s sake: a link the
150
157
  // body declared but nobody ever recorded natively is dropped from the declaration all the same, and
151
158
  // reporting from the work list let exactly those go by without a word. A positioned `--add` is the
152
159
  // only invocation that can replace anything, so an addition that re-points nothing prints nothing.
@@ -176,7 +183,7 @@ async function comment_decision(children: ReadonlyArray<number>, decision: strin
176
183
 
177
184
  // The record posted to the children is `plan.decision`, not the caller's file: the plan is what folded
178
185
  // the replaced relations into it, and reading the raw input here would leave the epic's `## Decisions`
179
- // carrying a line the child comments do not (joshuafolkken/kit#1711).
186
+ // carrying a line the child comments do not.
180
187
  // A child new to the epic, not a reordering — the only insertion that can put runnable work in the pool.
181
188
  function has_new_child(input: AddChildrenInput, plan: AddPlan): boolean {
182
189
  return input.is_order_only !== true && plan.additions.length > 0
@@ -188,7 +195,7 @@ async function write_plan(input: AddChildrenInput, plan: AddPlan): Promise<void>
188
195
  await apply_plan(plan)
189
196
 
190
197
  // A relocation is a placement decision as much as an addition is, so the record reaches the child
191
- // that was moved too (joshuafolkken/kit#1701).
198
+ // that was moved too.
192
199
  if (plan.decision !== undefined) {
193
200
  await comment_decision([...plan.additions, ...plan.relocations], plan.decision)
194
201
  }
@@ -196,8 +203,8 @@ async function write_plan(input: AddChildrenInput, plan: AddPlan): Promise<void>
196
203
  if (has_new_child(input, plan)) await backlog_ready.print_offer_hint()
197
204
  }
198
205
 
199
- // The epic ready to receive children, or the reason it cannot be added to: unreadable, or closed
200
- // (joshuafolkken/kit#2337). Both reasons come back as a bare string the one caller prefixes `✖` onto,
206
+ // The epic ready to receive children, or the reason it cannot be added to: unreadable, or closed.
207
+ // Both reasons come back as a bare string the one caller prefixes `✖` onto,
201
208
  // so the two refusals read identically on stderr.
202
209
  async function read_open_epic(epic_number: number): Promise<EpicReading | { error: string }> {
203
210
  const epic = await epic_read.read_epic(epic_number)