@joshuafolkken/kit 1.1240.0 → 1.1370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/.claude/agents/investigator.md +1 -0
  2. package/.claude/settings.json +4 -0
  3. package/.claude/skills/dependency-update/SKILL.md +5 -3
  4. package/.claude/skills/epic-commands/SKILL.md +82 -113
  5. package/.claude/skills/epic-commands/epic-bundle.md +38 -63
  6. package/.claude/skills/epic-commands/execution-waves.md +30 -51
  7. package/.claude/skills/verify-ui/SKILL.md +13 -20
  8. package/.claude/skills/workflow-commands/SKILL.md +10 -10
  9. package/.claude/skills/workflow-commands/background-commands.md +4 -4
  10. package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
  11. package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
  12. package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
  13. package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
  14. package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
  15. package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
  16. package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
  17. package/.claude/skills/workflow-commands/backlogrun.md +50 -61
  18. package/.claude/skills/workflow-commands/chain-rule.md +36 -40
  19. package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
  20. package/.claude/skills/workflow-commands/followup.md +19 -20
  21. package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
  22. package/.claude/skills/workflow-commands/fullrun.md +10 -10
  23. package/.claude/skills/workflow-commands/halfrun.md +9 -8
  24. package/.claude/skills/workflow-commands/into-target.md +12 -18
  25. package/.claude/skills/workflow-commands/issue-comments.md +11 -26
  26. package/.claude/skills/workflow-commands/kickoff.md +26 -16
  27. package/.claude/skills/workflow-commands/latest-gate.md +17 -28
  28. package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
  29. package/.claude/skills/workflow-commands/observation-filing.md +37 -28
  30. package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
  31. package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
  32. package/.claude/skills/workflow-commands/prerequisite.md +23 -15
  33. package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
  34. package/.claude/skills/workflow-commands/prrun.md +3 -3
  35. package/.claude/skills/workflow-commands/retrospective.md +13 -18
  36. package/.claude/skills/workflow-commands/split-assessment.md +6 -4
  37. package/.claude/skills/workflow-commands/target-repository.md +25 -28
  38. package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
  39. package/.gitattributes +2 -1
  40. package/.github/workflows/ci.yml +14 -0
  41. package/.vscode/tasks.json +14 -0
  42. package/CLAUDE.md +10 -61
  43. package/README.md +29 -47
  44. package/SECURITY.md +1 -1
  45. package/dist/CLAUDE.md +10 -61
  46. package/dist/commands/document-section-cli.js +42 -10
  47. package/dist/config-merge/index.js +11 -2
  48. package/dist/hooks/audit-provision.js +2 -2
  49. package/dist/hooks/batch-guard.js +7 -7
  50. package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
  51. package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
  52. package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
  53. package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
  54. package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
  55. package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
  56. package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
  57. package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
  58. package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
  59. package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
  60. package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
  61. package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
  62. package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
  63. package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
  64. package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
  65. package/dist/hooks/codex-hook-adapter.js +26 -21
  66. package/dist/hooks/duplicate-read-guard.js +8 -8
  67. package/dist/hooks/format-edited.js +4 -4
  68. package/dist/hooks/inputs.json +216 -202
  69. package/dist/hooks/investigation-guard.js +8 -8
  70. package/dist/hooks/pretool-guard.js +15 -15
  71. package/dist/hooks/session-lang.js +406 -8
  72. package/dist/hooks/stop-guard.js +122 -187
  73. package/dist/josh.js +281 -94
  74. package/dist/version/index.js +15 -13
  75. package/eslint/base.js +43 -5
  76. package/eslint/rules/english-only-prose.js +3 -3
  77. package/eslint/rules/import.js +12 -0
  78. package/eslint/rules/namespace-object-export.js +2 -2
  79. package/package.json +16 -10
  80. package/pnpm-workspace.yaml +2 -4
  81. package/prompts/coding-standards.md +14 -48
  82. package/prompts/collaboration-workflow/file-edits.md +1 -1
  83. package/prompts/collaboration-workflow/issue-citation.md +1 -1
  84. package/prompts/collaboration-workflow/issue-template.md +3 -10
  85. package/prompts/collaboration-workflow/operating-rules.md +7 -8
  86. package/prompts/collaboration-workflow/output-bounds.md +1 -1
  87. package/prompts/collaboration-workflow/overview.md +1 -1
  88. package/prompts/collaboration-workflow/plan-comment.md +2 -1
  89. package/prompts/collaboration-workflow/principles.md +21 -3
  90. package/prompts/collaboration-workflow/report-format.md +16 -29
  91. package/prompts/collaboration-workflow/residency.md +1 -1
  92. package/prompts/collaboration-workflow/rule-delivery.md +7 -95
  93. package/prompts/collaboration-workflow/shell-body.md +3 -23
  94. package/prompts/collaboration-workflow/turn-batching.md +4 -13
  95. package/prompts/collaboration-workflow/wip-cap.md +5 -11
  96. package/prompts/refactoring.md +1 -1
  97. package/prompts/review-rubric.md +3 -22
  98. package/prompts/review.md +15 -38
  99. package/prompts/testing-guide.md +2 -4
  100. package/scripts/adopt/adopt-logic.ts +5 -5
  101. package/scripts/adopt/adopt-toolkits.ts +4 -5
  102. package/scripts/adopt/adopt.ts +2 -3
  103. package/scripts/agent/agent-argv.ts +7 -7
  104. package/scripts/agent/agent-diagnostics.ts +2 -2
  105. package/scripts/agent/agent-exit-record.ts +1 -1
  106. package/scripts/agent/agent-headless.ts +1 -1
  107. package/scripts/agent/agent-launch-environment.ts +6 -1
  108. package/scripts/agent/agent-role-profile.ts +49 -22
  109. package/scripts/agent/agent-session-role.ts +32 -0
  110. package/scripts/agent/api-outage.ts +1 -1
  111. package/scripts/agent/claude-agent-argv.ts +4 -4
  112. package/scripts/agent/claude-result-event.ts +4 -4
  113. package/scripts/agent/codex-hooks.ts +2 -2
  114. package/scripts/agent/interactive-ask.ts +3 -6
  115. package/scripts/auto-ok/auto-ok-cli.ts +46 -60
  116. package/scripts/backlog/backlog-arrival-added.ts +34 -0
  117. package/scripts/backlog/backlog-arrival.ts +54 -17
  118. package/scripts/backlog/backlog-budget-cli.ts +34 -6
  119. package/scripts/backlog/backlog-budget.ts +17 -24
  120. package/scripts/backlog/backlog-defect-priority.ts +1 -1
  121. package/scripts/backlog/backlog-drive-args.ts +5 -4
  122. package/scripts/backlog/backlog-drive-cli.ts +14 -10
  123. package/scripts/backlog/backlog-drive-epic.ts +85 -0
  124. package/scripts/backlog/backlog-drive-launch.ts +1 -1
  125. package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
  126. package/scripts/backlog/backlog-drive-named.ts +39 -9
  127. package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
  128. package/scripts/backlog/backlog-drive-restore.ts +1 -1
  129. package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
  130. package/scripts/backlog/backlog-drive.ts +43 -28
  131. package/scripts/backlog/backlog-idle.ts +88 -0
  132. package/scripts/backlog/backlog-named.ts +11 -15
  133. package/scripts/backlog/backlog-next.ts +26 -30
  134. package/scripts/backlog/backlog-offer-cli.ts +28 -23
  135. package/scripts/backlog/backlog-offer.ts +7 -7
  136. package/scripts/backlog/backlog-overlap.ts +178 -0
  137. package/scripts/backlog/backlog-plan-cli.ts +14 -90
  138. package/scripts/backlog/backlog-plan-read.ts +111 -0
  139. package/scripts/backlog/backlog-plan.ts +11 -10
  140. package/scripts/backlog/backlog-pool.ts +13 -14
  141. package/scripts/backlog/backlog-rank.ts +11 -11
  142. package/scripts/backlog/backlog-ready.ts +15 -10
  143. package/scripts/backlog/backlog-scope.ts +14 -15
  144. package/scripts/backlog/backlog-stalled-cli.ts +2 -2
  145. package/scripts/backlog/backlog-stalled-detect.ts +4 -4
  146. package/scripts/backlog/backlog-stalled.ts +5 -6
  147. package/scripts/backlog/backlog-waves.ts +4 -4
  148. package/scripts/backlog/backlogrun-args.ts +74 -0
  149. package/scripts/backlog/backlogrun-cli.ts +113 -0
  150. package/scripts/backlog/backlogrun-launch.ts +178 -0
  151. package/scripts/behavior/behavior-assertion.ts +6 -8
  152. package/scripts/behavior/behavior-cli.ts +1 -1
  153. package/scripts/behavior/behavior-rules.ts +3 -3
  154. package/scripts/build/build-claude-md.ts +4 -4
  155. package/scripts/build/build-codex-hooks.ts +2 -2
  156. package/scripts/build/build-commands.ts +1 -1
  157. package/scripts/build/build-hooks.ts +5 -5
  158. package/scripts/build/build.ts +1 -1
  159. package/scripts/build/hook-bundle-stamp.ts +109 -7
  160. package/scripts/build/local-bin.ts +2 -2
  161. package/scripts/cases/cases-cli.ts +1 -1
  162. package/scripts/cases/cases-logic.ts +2 -2
  163. package/scripts/ci/composite-actions.ts +1 -2
  164. package/scripts/ci/pr-classification.ts +2 -2
  165. package/scripts/claude/workflow-destination.ts +1 -1
  166. package/scripts/clone/clone-aggregate.ts +1 -1
  167. package/scripts/clone/clone-fingerprint.ts +1 -1
  168. package/scripts/clone/clone-scan-cli.ts +1 -1
  169. package/scripts/clone/clone-scan.ts +1 -1
  170. package/scripts/config-merge/index.ts +1 -1
  171. package/scripts/config-merge/json-format.ts +1 -3
  172. package/scripts/config-merge/patch-json-array.ts +90 -0
  173. package/scripts/config-merge/patch-json-key.ts +6 -3
  174. package/scripts/config-merge/patch-json-list.ts +1 -1
  175. package/scripts/cost-runtime/codex-usage.ts +1 -1
  176. package/scripts/cost-runtime/context-cut-payback.ts +4 -5
  177. package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
  178. package/scripts/cost-runtime/cost-attribute.ts +3 -3
  179. package/scripts/cost-runtime/cost-blocks.ts +3 -4
  180. package/scripts/cost-runtime/cost-cli.ts +14 -11
  181. package/scripts/cost-runtime/cost-corpus.ts +11 -11
  182. package/scripts/cost-runtime/cost-pricing.ts +4 -4
  183. package/scripts/cost-runtime/cost-tokens.ts +1 -2
  184. package/scripts/cost-runtime/cost-transcript.ts +29 -29
  185. package/scripts/cost-runtime/cost-usage.ts +6 -7
  186. package/scripts/cost-runtime/cost-verdict.ts +10 -11
  187. package/scripts/cost-runtime/own-session.ts +1 -1
  188. package/scripts/cost-runtime/transcript-cwd.ts +2 -2
  189. package/scripts/delegation/delegation-cli.ts +4 -4
  190. package/scripts/delegation/delegation-policy.ts +13 -15
  191. package/scripts/delegation/duplicate-read-guard.ts +9 -10
  192. package/scripts/delegation/fanout-cli.ts +1 -1
  193. package/scripts/delegation/fanout.ts +1 -1
  194. package/scripts/delegation/investigation-guard.ts +18 -22
  195. package/scripts/delegation/investigation-reads.ts +48 -238
  196. package/scripts/discovery/repo-discovery.ts +1 -1
  197. package/scripts/discovery/repo-map-logic.ts +1 -2
  198. package/scripts/discovery/repo-origin.ts +3 -3
  199. package/scripts/discovery/repo-party-cli.ts +2 -2
  200. package/scripts/discovery/repo-party.ts +2 -2
  201. package/scripts/doctor/doctor-consumer.ts +1 -1
  202. package/scripts/doctor/doctor-io.ts +6 -7
  203. package/scripts/doctor/doctor-logic.ts +1 -1
  204. package/scripts/doctor/doctor-ports.ts +1 -1
  205. package/scripts/doctor/doctor.ts +8 -9
  206. package/scripts/document/backlogrun-parent-read-set.ts +5 -6
  207. package/scripts/document/bash-output-cap.ts +5 -7
  208. package/scripts/document/capped-print-part.ts +1 -1
  209. package/scripts/document/capped-print.ts +1 -1
  210. package/scripts/document/document-byte-budget.ts +33 -64
  211. package/scripts/document/document-byte-check.ts +4 -4
  212. package/scripts/document/document-reachability.ts +7 -8
  213. package/scripts/document/document-read-cli.ts +2 -2
  214. package/scripts/document/document-scan.ts +26 -2
  215. package/scripts/document/document-section-cli.ts +6 -8
  216. package/scripts/document/document-section.ts +8 -12
  217. package/scripts/document/edit-files-cli.ts +3 -4
  218. package/scripts/document/entry-read-budget.ts +8 -70
  219. package/scripts/document/entry-read-set.ts +51 -34
  220. package/scripts/document/lane-child-read-set.ts +9 -9
  221. package/scripts/document/read-files-cli.ts +1 -2
  222. package/scripts/document/read-set-cli.ts +16 -19
  223. package/scripts/document/read-set-cost.ts +4 -4
  224. package/scripts/document/read-set-point-of-use.ts +28 -38
  225. package/scripts/document/read-set-pricing.ts +1 -1
  226. package/scripts/document/read-set-trim.ts +3 -3
  227. package/scripts/document/resident-budget.ts +8 -10
  228. package/scripts/epic/epic-add-body.ts +15 -18
  229. package/scripts/epic/epic-add-plan.ts +26 -28
  230. package/scripts/epic/epic-add.ts +32 -25
  231. package/scripts/epic/epic-audit-checks.ts +27 -37
  232. package/scripts/epic/epic-audit-cli.ts +21 -22
  233. package/scripts/epic/epic-audit-orphans.ts +16 -17
  234. package/scripts/epic/epic-audit-rationale.ts +10 -15
  235. package/scripts/epic/epic-audit-report.ts +2 -5
  236. package/scripts/epic/epic-audit.ts +18 -14
  237. package/scripts/epic/epic-body.ts +10 -10
  238. package/scripts/epic/epic-bundle-cli.ts +36 -34
  239. package/scripts/epic/epic-bundle-evidence.ts +5 -5
  240. package/scripts/epic/epic-bundle-gaps.ts +6 -9
  241. package/scripts/epic/epic-bundle-poll.ts +1 -1
  242. package/scripts/epic/epic-bundle-referenced.ts +11 -14
  243. package/scripts/epic/epic-bundle.ts +19 -20
  244. package/scripts/epic/epic-busy.ts +44 -21
  245. package/scripts/epic/epic-candidate-confirm.ts +15 -18
  246. package/scripts/epic/epic-chains.ts +18 -23
  247. package/scripts/epic/epic-classify.ts +11 -12
  248. package/scripts/epic/epic-cli-argv.ts +5 -6
  249. package/scripts/epic/epic-cli-remove.ts +9 -4
  250. package/scripts/epic/epic-cli.ts +38 -26
  251. package/scripts/epic/epic-close-comment.ts +14 -15
  252. package/scripts/epic/epic-close.ts +25 -29
  253. package/scripts/epic/epic-cross-repo.ts +18 -21
  254. package/scripts/epic/epic-decision.ts +14 -18
  255. package/scripts/epic/epic-fetch.ts +25 -31
  256. package/scripts/epic/epic-graph.ts +15 -17
  257. package/scripts/epic/epic-index.ts +14 -16
  258. package/scripts/epic/epic-issue.ts +9 -11
  259. package/scripts/epic/epic-label-age.ts +74 -0
  260. package/scripts/epic/epic-lane-offer.ts +35 -24
  261. package/scripts/epic/epic-nested.ts +1 -1
  262. package/scripts/epic/epic-next-read.ts +8 -8
  263. package/scripts/epic/epic-next-views.ts +12 -12
  264. package/scripts/epic/epic-next.ts +29 -33
  265. package/scripts/epic/epic-outside-blocker.ts +11 -10
  266. package/scripts/epic/epic-parse.ts +22 -24
  267. package/scripts/epic/epic-promote.ts +3 -2
  268. package/scripts/epic/epic-rank.ts +1 -1
  269. package/scripts/epic/epic-read.ts +10 -8
  270. package/scripts/epic/epic-reconcile.ts +8 -6
  271. package/scripts/epic/epic-reference.ts +5 -4
  272. package/scripts/epic/epic-relation-recheck.ts +10 -11
  273. package/scripts/epic/epic-relations.ts +9 -8
  274. package/scripts/epic/epic-remove-plan.ts +4 -5
  275. package/scripts/epic/epic-remove.ts +7 -5
  276. package/scripts/epic/epic-report.ts +18 -20
  277. package/scripts/epic/epic-run.ts +6 -5
  278. package/scripts/epic/epic-sections.ts +2 -2
  279. package/scripts/epic/epic-shape.ts +3 -3
  280. package/scripts/epic/epic-solo-stale.ts +3 -2
  281. package/scripts/epic/epic-solo.ts +8 -8
  282. package/scripts/epic/epic-triage.ts +5 -4
  283. package/scripts/epic/epic-validate.ts +8 -7
  284. package/scripts/epic/epic.ts +5 -5
  285. package/scripts/exports/unused-members-cli.ts +1 -1
  286. package/scripts/followup/followup-issue-number.ts +1 -2
  287. package/scripts/followup/git-followup-cleanup.ts +6 -7
  288. package/scripts/followup/git-followup-finish.ts +11 -13
  289. package/scripts/followup/git-followup-flush.ts +11 -7
  290. package/scripts/followup/git-followup-issue-close.ts +16 -13
  291. package/scripts/followup/git-followup-label.ts +9 -6
  292. package/scripts/followup/git-followup-merged.ts +1 -1
  293. package/scripts/followup/git-followup-pending.ts +7 -9
  294. package/scripts/followup/git-followup-stages.ts +28 -17
  295. package/scripts/followup/git-followup-workflow.ts +19 -21
  296. package/scripts/followup/git-pr-followup-checks.ts +13 -20
  297. package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
  298. package/scripts/followup/git-pr-followup.ts +18 -17
  299. package/scripts/gate/core-admission.ts +2 -2
  300. package/scripts/gate/core-budget.ts +15 -26
  301. package/scripts/gate/gate-ledger.ts +114 -0
  302. package/scripts/gate/gate-log.ts +7 -9
  303. package/scripts/gate/gate-plan.ts +70 -35
  304. package/scripts/gate/gate-report.ts +14 -15
  305. package/scripts/gate/gate-skip.ts +11 -13
  306. package/scripts/gate/gate-steps.ts +5 -1
  307. package/scripts/gate/gate-tree.ts +3 -4
  308. package/scripts/gate/hook-gate-reuse.ts +9 -9
  309. package/scripts/gate/machine-capacity.ts +168 -30
  310. package/scripts/gate/pre-commit-type-check.ts +4 -4
  311. package/scripts/gate/project-checks.ts +12 -4
  312. package/scripts/gate/scoped-green.ts +11 -18
  313. package/scripts/gate/type-check-command.ts +2 -2
  314. package/scripts/gate/type-check-step.ts +4 -4
  315. package/scripts/gate/verification-gate.ts +53 -51
  316. package/scripts/gh/gh-spawn.ts +2 -2
  317. package/scripts/gh/git-ai-review-scan.ts +3 -2
  318. package/scripts/gh/git-gh-api-path.ts +10 -11
  319. package/scripts/gh/git-gh-exec.ts +43 -48
  320. package/scripts/gh/git-gh-failure.ts +6 -9
  321. package/scripts/gh/git-gh-helpers.ts +1 -1
  322. package/scripts/gh/git-gh-issue-list.ts +15 -19
  323. package/scripts/gh/git-gh-issue-read.ts +43 -60
  324. package/scripts/gh/git-gh-issue-rest.ts +14 -15
  325. package/scripts/gh/git-gh-issue-write.ts +52 -40
  326. package/scripts/gh/git-gh-issue.ts +23 -24
  327. package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
  328. package/scripts/gh/git-gh-pr-read.ts +46 -50
  329. package/scripts/gh/git-gh-pr-rest.ts +23 -26
  330. package/scripts/gh/git-gh-pr-review.ts +2 -2
  331. package/scripts/gh/git-gh-pr-rollup.ts +4 -4
  332. package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
  333. package/scripts/gh/git-gh-pr.ts +16 -16
  334. package/scripts/gh/git-gh-reachability.ts +11 -12
  335. package/scripts/gh/git-gh-repo.ts +2 -3
  336. package/scripts/gh/git-gh-rest-state.ts +1 -1
  337. package/scripts/gh/git-pr-ai-review.ts +6 -5
  338. package/scripts/gh/git-pr-checks-eval.ts +28 -30
  339. package/scripts/gh/git-pr-checks-parse.ts +14 -16
  340. package/scripts/gh/git-pr-checks-watch.ts +17 -17
  341. package/scripts/gh/git-pr-checks.ts +20 -23
  342. package/scripts/gh/git-pr-coderabbit.ts +8 -6
  343. package/scripts/gh/git-pr-confirmation.ts +5 -5
  344. package/scripts/gh/git-pr-managed-config.ts +7 -9
  345. package/scripts/gh/git-pr-messages.ts +1 -1
  346. package/scripts/gh/git-pr.ts +15 -16
  347. package/scripts/gh/github-issue-url.ts +8 -9
  348. package/scripts/git/base-tree.ts +66 -0
  349. package/scripts/git/change-base.ts +42 -2
  350. package/scripts/git/changed-file-scope.ts +5 -5
  351. package/scripts/git/changed-paths.ts +1 -2
  352. package/scripts/git/constants.ts +2 -2
  353. package/scripts/git/git-branch.ts +1 -1
  354. package/scripts/git/git-closes-keyword.ts +3 -3
  355. package/scripts/git/git-command.ts +53 -41
  356. package/scripts/git/git-common-directory.ts +3 -3
  357. package/scripts/git/git-diff-reads.ts +14 -15
  358. package/scripts/git/git-error.ts +1 -1
  359. package/scripts/git/git-execa-error.ts +1 -2
  360. package/scripts/git/git-issue.ts +10 -8
  361. package/scripts/git/git-location-environment.ts +3 -4
  362. package/scripts/git/git-ls-remote.ts +6 -8
  363. package/scripts/git/git-pre-push-hook.ts +11 -10
  364. package/scripts/git/git-preflight.ts +5 -5
  365. package/scripts/git/git-push-transport.ts +2 -2
  366. package/scripts/git/git-remote-branch.ts +1 -2
  367. package/scripts/git/git-schemas.ts +16 -23
  368. package/scripts/git/git-spawn-sync.ts +1 -1
  369. package/scripts/git/git-spawn.ts +37 -14
  370. package/scripts/git/git-ssh-keepalive.ts +12 -5
  371. package/scripts/git/git-staging.ts +7 -8
  372. package/scripts/git/git-workflow.ts +1 -1
  373. package/scripts/git/git-worktree.ts +35 -27
  374. package/scripts/git/gone-branch.ts +2 -2
  375. package/scripts/git/listing-cutoff.ts +1 -2
  376. package/scripts/git/lockfile-sync.ts +65 -0
  377. package/scripts/git/main-merge-guard.ts +1 -2
  378. package/scripts/git/main-merge.ts +7 -7
  379. package/scripts/git/main-sync.ts +23 -8
  380. package/scripts/git/parse-json-array.ts +18 -23
  381. package/scripts/git/repository-lock.ts +34 -2
  382. package/scripts/git/stash/git-stash.ts +4 -5
  383. package/scripts/git/stash/stash-orphans.ts +5 -3
  384. package/scripts/git/stash/stash-pop-args.ts +1 -1
  385. package/scripts/git/stash/stash-pop-cli.ts +3 -3
  386. package/scripts/git/stash/stash-sweep-lock.ts +2 -2
  387. package/scripts/hooks/batch-guard.ts +11 -13
  388. package/scripts/hooks/check-commit-message.ts +12 -9
  389. package/scripts/hooks/codex-hook-adapter.ts +16 -10
  390. package/scripts/hooks/edited-cspell.ts +3 -4
  391. package/scripts/hooks/format-edited-cli.ts +1 -1
  392. package/scripts/hooks/format-edited-file.ts +11 -17
  393. package/scripts/hooks/format-rewrite-notice.ts +19 -17
  394. package/scripts/hooks/pre-push-unit.ts +10 -14
  395. package/scripts/hooks/pretool-guard-cli.ts +4 -4
  396. package/scripts/hooks/pretool-guard.ts +93 -18
  397. package/scripts/hooks/reserved-run.ts +2 -2
  398. package/scripts/hooks/step-zero-notice.ts +1 -1
  399. package/scripts/hooks/stop-guard.ts +21 -10
  400. package/scripts/init/basic-path-migration.ts +2 -2
  401. package/scripts/init/claude-kit-only-settings.ts +2 -2
  402. package/scripts/init/claude-plugin-config.ts +2 -2
  403. package/scripts/init/distributed-paths.ts +4 -4
  404. package/scripts/init/hook-command-rewrite.ts +3 -3
  405. package/scripts/init/hook-launch.ts +5 -5
  406. package/scripts/init/init-actions.ts +13 -0
  407. package/scripts/init/init-ai-copy.ts +11 -11
  408. package/scripts/init/init-bootstrap.ts +3 -3
  409. package/scripts/init/init-copy-content.ts +4 -4
  410. package/scripts/init/init-logic-json-merge.ts +7 -9
  411. package/scripts/init/init-logic-migrate.ts +1 -1
  412. package/scripts/init/init-logic-templates.ts +1 -1
  413. package/scripts/init/init-logic-workspace.ts +4 -4
  414. package/scripts/init/init-logic-yaml-merge.ts +2 -2
  415. package/scripts/init/init-logic.ts +19 -22
  416. package/scripts/init/init.ts +7 -7
  417. package/scripts/init/kit-base-preset.ts +1 -1
  418. package/scripts/init/kit-setup-state.ts +1 -1
  419. package/scripts/init/kit-written-paths.ts +1 -2
  420. package/scripts/init/package-manager-pin.ts +1 -1
  421. package/scripts/init/project-profile-cli.ts +1 -1
  422. package/scripts/init/project-profile.ts +3 -3
  423. package/scripts/init/session-language-environment.ts +1 -1
  424. package/scripts/init/start-exec.ts +3 -4
  425. package/scripts/init/start-plan.ts +2 -2
  426. package/scripts/init/start-setup-pr.ts +3 -2
  427. package/scripts/init/start-steps.ts +2 -2
  428. package/scripts/init/tsconfig-preset-migration.ts +1 -1
  429. package/scripts/init/vscode-tasks.ts +62 -0
  430. package/scripts/issue/baseline-measure.ts +2 -2
  431. package/scripts/issue/behavior-change-lint.ts +2 -2
  432. package/scripts/issue/defect-rate-cli.ts +6 -7
  433. package/scripts/issue/defect-rate.ts +37 -27
  434. package/scripts/issue/git-next-issues.ts +9 -8
  435. package/scripts/issue/issue-auto-ok.ts +24 -11
  436. package/scripts/issue/issue-backlinks-cli.ts +5 -5
  437. package/scripts/issue/issue-backlinks.ts +6 -6
  438. package/scripts/issue/issue-cite-cli.ts +20 -18
  439. package/scripts/issue/issue-cite.ts +18 -8
  440. package/scripts/issue/issue-closing-pr.ts +4 -4
  441. package/scripts/issue/issue-comment-cli.ts +6 -4
  442. package/scripts/issue/issue-file-cli.ts +52 -15
  443. package/scripts/issue/issue-file-fold.ts +155 -0
  444. package/scripts/issue/issue-file.ts +9 -6
  445. package/scripts/issue/issue-fold-cli.ts +14 -9
  446. package/scripts/issue/issue-fold.ts +23 -8
  447. package/scripts/issue/issue-labels.ts +34 -38
  448. package/scripts/issue/issue-lint-cli.ts +2 -2
  449. package/scripts/issue/issue-lint.ts +1 -1
  450. package/scripts/issue/issue-merged.ts +10 -4
  451. package/scripts/issue/issue-number-shape.ts +27 -0
  452. package/scripts/issue/issue-rank.ts +1 -1
  453. package/scripts/issue/issue-read-cli.ts +4 -5
  454. package/scripts/issue/issue-read.ts +4 -5
  455. package/scripts/issue/issue-reference.ts +5 -5
  456. package/scripts/issue/issue-release-cli.ts +17 -7
  457. package/scripts/issue/issue-release.ts +3 -3
  458. package/scripts/issue/issue-report-failures.ts +7 -4
  459. package/scripts/issue/issue-scout-cli.ts +11 -11
  460. package/scripts/issue/issue-scout-closed.ts +4 -4
  461. package/scripts/issue/issue-scout.ts +4 -5
  462. package/scripts/issue/issue-state-cli.ts +17 -10
  463. package/scripts/issue/issue-state.ts +12 -13
  464. package/scripts/issue/issue-wip.ts +7 -7
  465. package/scripts/issue/markdown-section.ts +3 -3
  466. package/scripts/issue/measure-rerun-cli.ts +10 -9
  467. package/scripts/issue/reproduction-measure.ts +3 -3
  468. package/scripts/issue/session-cite.ts +56 -0
  469. package/scripts/josh/agent-session-environment.ts +10 -8
  470. package/scripts/josh/cli-body.ts +2 -2
  471. package/scripts/josh/command-suggest.ts +1 -1
  472. package/scripts/josh/file-map-stamp.ts +20 -23
  473. package/scripts/josh/hook-decision.ts +24 -28
  474. package/scripts/josh/josh-command-map.ts +4 -1
  475. package/scripts/josh/josh-command-types.ts +30 -35
  476. package/scripts/josh/josh-commands-ai.ts +6 -6
  477. package/scripts/josh/josh-commands-backlog.ts +15 -3
  478. package/scripts/josh/josh-commands-clone.ts +1 -1
  479. package/scripts/josh/josh-commands-development.ts +25 -4
  480. package/scripts/josh/josh-commands-document.ts +3 -3
  481. package/scripts/josh/josh-commands-guard.ts +3 -3
  482. package/scripts/josh/josh-commands-issue.ts +4 -5
  483. package/scripts/josh/josh-commands-lane.ts +14 -4
  484. package/scripts/josh/josh-commands-lint.ts +1 -1
  485. package/scripts/josh/josh-commands-run.ts +20 -6
  486. package/scripts/josh/josh-commands-split.ts +1 -2
  487. package/scripts/josh/josh-commands-versioning.ts +5 -5
  488. package/scripts/josh/josh-commands-workflow.ts +30 -22
  489. package/scripts/josh/josh-environment-file.ts +1 -1
  490. package/scripts/josh/josh-in-process.ts +3 -3
  491. package/scripts/josh/josh-logic.ts +6 -7
  492. package/scripts/josh/josh-run.ts +3 -3
  493. package/scripts/josh/josh-verdict.ts +9 -12
  494. package/scripts/josh/josh.ts +3 -3
  495. package/scripts/josh/kit-only.ts +2 -2
  496. package/scripts/josh/path-decision.ts +3 -3
  497. package/scripts/josh/platform-temporary.ts +7 -5
  498. package/scripts/josh/process-identity.ts +24 -6
  499. package/scripts/josh/process-owner.ts +4 -4
  500. package/scripts/josh/session-language-cli.ts +53 -11
  501. package/scripts/josh/session-language.ts +1 -1
  502. package/scripts/josh/stamp-file.ts +48 -29
  503. package/scripts/josh/stamp-record.ts +57 -0
  504. package/scripts/lane/lane-await.ts +35 -11
  505. package/scripts/lane/lane-cache.ts +6 -6
  506. package/scripts/lane/lane-capacity.ts +32 -17
  507. package/scripts/lane/lane-child-invocation.ts +17 -15
  508. package/scripts/lane/lane-child-marker.ts +12 -12
  509. package/scripts/lane/lane-cli.ts +12 -13
  510. package/scripts/lane/lane-close.ts +6 -6
  511. package/scripts/lane/lane-dispatch.ts +61 -72
  512. package/scripts/lane/lane-environment.ts +5 -5
  513. package/scripts/lane/lane-guard-policy.ts +7 -21
  514. package/scripts/lane/lane-handoff.ts +2 -2
  515. package/scripts/lane/lane-install.ts +9 -10
  516. package/scripts/lane/lane-launch-cli.ts +13 -8
  517. package/scripts/lane/lane-ledger.ts +73 -11
  518. package/scripts/lane/lane-leftover.ts +2 -2
  519. package/scripts/lane/lane-limit-cli.ts +160 -0
  520. package/scripts/lane/lane-limit-override.ts +74 -0
  521. package/scripts/lane/lane-load.ts +19 -68
  522. package/scripts/lane/lane-measure-cli.ts +15 -25
  523. package/scripts/lane/lane-occupancy.ts +6 -4
  524. package/scripts/lane/lane-open.ts +20 -19
  525. package/scripts/lane/lane-output.ts +4 -3
  526. package/scripts/lane/lane-paths.ts +12 -11
  527. package/scripts/lane/lane-phase.ts +33 -0
  528. package/scripts/lane/lane-reap.ts +2 -2
  529. package/scripts/lane/lane-registry.ts +16 -15
  530. package/scripts/lane/lane-relaunch.ts +9 -9
  531. package/scripts/lane/lane-report.ts +5 -4
  532. package/scripts/lane/lane-resume.ts +2 -2
  533. package/scripts/lane/lane-sampler.ts +55 -0
  534. package/scripts/lane/lane-seed.ts +7 -7
  535. package/scripts/lane/lane-stage-stats.ts +135 -0
  536. package/scripts/lane/lane-start-point.ts +8 -11
  537. package/scripts/lane/lane-stats.ts +60 -15
  538. package/scripts/lane/lane-stray.ts +1 -1
  539. package/scripts/lane/lane-vacant.ts +1 -1
  540. package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
  541. package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
  542. package/scripts/lane/openai-review-broker.ts +2 -4
  543. package/scripts/lib/ancestor-directories.ts +1 -1
  544. package/scripts/lib/bounded-pool.ts +2 -2
  545. package/scripts/lib/buffered-process.ts +4 -6
  546. package/scripts/lib/caddy-logs.sh +0 -0
  547. package/scripts/lib/cli-flags.ts +39 -6
  548. package/scripts/lib/error-message.ts +1 -1
  549. package/scripts/lib/json-value.ts +17 -3
  550. package/scripts/lib/poll.ts +1 -1
  551. package/scripts/lib/status-icons.ts +3 -3
  552. package/scripts/lib/timed-fetch.ts +1 -1
  553. package/scripts/lib/timeouts.ts +1 -1
  554. package/scripts/lines/bytes-command.ts +3 -4
  555. package/scripts/lines/effective-limit.ts +25 -12
  556. package/scripts/lines/line-budget.ts +47 -55
  557. package/scripts/lines/line-targets.ts +6 -2
  558. package/scripts/lines/lines-command.ts +3 -3
  559. package/scripts/lint/cspell-cached.ts +1 -1
  560. package/scripts/lint/cycle-recheck.ts +122 -0
  561. package/scripts/lint/format.ts +1 -2
  562. package/scripts/lint/lint-parallel.ts +34 -19
  563. package/scripts/lint/lint-related-scope.ts +25 -15
  564. package/scripts/lint/lint-related.ts +6 -7
  565. package/scripts/managed-marker/index.ts +1 -1
  566. package/scripts/managed-marker/managed-marker-logic.ts +1 -2
  567. package/scripts/notify/git-notify.ts +9 -7
  568. package/scripts/notify/telegram-notify.ts +53 -37
  569. package/scripts/notify/telegram-test-logic.ts +3 -3
  570. package/scripts/notify/telegram-test.ts +45 -30
  571. package/scripts/observations/observation-ledger-home.ts +14 -8
  572. package/scripts/observations/observation-ledger-line.ts +3 -2
  573. package/scripts/observations/observation-ledger-migrate.ts +3 -4
  574. package/scripts/observations/observation-ledger-prepare.ts +4 -4
  575. package/scripts/observations/observation-ledger.ts +14 -15
  576. package/scripts/observations/observation-record-cli.ts +83 -0
  577. package/scripts/observations/observation-record.ts +91 -0
  578. package/scripts/observations/observations-flush-cli.ts +1 -1
  579. package/scripts/observations/observations-flush-landing.ts +7 -6
  580. package/scripts/observations/observations-flush.ts +26 -27
  581. package/scripts/overrides/overrides-check.ts +18 -8
  582. package/scripts/package/package-scout-cli.ts +1 -1
  583. package/scripts/package/package-scout-format.ts +2 -2
  584. package/scripts/package/package-scout.ts +1 -1
  585. package/scripts/propagate/propagate-git-failure.ts +1 -1
  586. package/scripts/propagate/propagate-git.ts +7 -7
  587. package/scripts/propagate/propagate-plan.ts +2 -2
  588. package/scripts/propagate/propagate-publish.ts +2 -3
  589. package/scripts/propagate/propagate-run.ts +5 -7
  590. package/scripts/propagate/propagate-select.ts +1 -1
  591. package/scripts/propagate/propagate-steps.ts +19 -20
  592. package/scripts/propagate/propagate-targets.ts +6 -10
  593. package/scripts/propagate/propagate.ts +5 -5
  594. package/scripts/refactor/import-graph.ts +1 -1
  595. package/scripts/refactor/refactor-lint.ts +4 -10
  596. package/scripts/refactor/refactor-scan-cli.ts +1 -1
  597. package/scripts/refactor/refactor-scan.ts +2 -2
  598. package/scripts/refactor/refactor-targets.ts +1 -1
  599. package/scripts/release/github-release-cli.ts +25 -3
  600. package/scripts/release/github-release-runs.ts +1 -1
  601. package/scripts/release/release-cli.ts +21 -4
  602. package/scripts/release/release-history.ts +6 -10
  603. package/scripts/release/release-plan.ts +3 -3
  604. package/scripts/release/release-progress.ts +3 -4
  605. package/scripts/release/release-publish.ts +8 -9
  606. package/scripts/release/release-scope-cli.ts +8 -10
  607. package/scripts/release/release-tag.ts +6 -8
  608. package/scripts/release/release-worktree.ts +5 -5
  609. package/scripts/repo/auto-merge-setting-logic.ts +7 -9
  610. package/scripts/repo/auto-merge-setting.ts +1 -1
  611. package/scripts/repo/repo-setting.ts +4 -4
  612. package/scripts/repo/repository-labels.ts +1 -1
  613. package/scripts/repo/required-checks-logic.ts +3 -3
  614. package/scripts/repo/required-checks-report.ts +1 -1
  615. package/scripts/repo/ruleset-check-cli.ts +1 -1
  616. package/scripts/repo/ruleset-check.ts +1 -1
  617. package/scripts/report/report-format-reference.ts +26 -0
  618. package/scripts/report/report-lint-cli.ts +2 -2
  619. package/scripts/report/report-lint.ts +16 -2
  620. package/scripts/review/disposition-cli.ts +2 -2
  621. package/scripts/review/disposition-logic.ts +1 -1
  622. package/scripts/review/live-evidence.ts +9 -6
  623. package/scripts/review/review-attest-cli.ts +1 -2
  624. package/scripts/review/review-attest.ts +3 -3
  625. package/scripts/review/review-brief-cli.ts +19 -20
  626. package/scripts/review/review-brief.ts +29 -32
  627. package/scripts/review/review-checkout.ts +2 -2
  628. package/scripts/review/review-diff-parts.ts +3 -5
  629. package/scripts/review/review-diff-write.ts +1 -1
  630. package/scripts/review/review-finding-ledger.ts +7 -4
  631. package/scripts/review/review-findings-cli.ts +2 -2
  632. package/scripts/review/review-level.ts +4 -7
  633. package/scripts/review/review-record-cli.ts +73 -16
  634. package/scripts/review/review-record.ts +5 -4
  635. package/scripts/review/review-round2-cli.ts +2 -3
  636. package/scripts/review/review-round2.ts +13 -21
  637. package/scripts/review/review-stamps.ts +9 -71
  638. package/scripts/review/review-tree.ts +4 -5
  639. package/scripts/rules/bash-triggers.ts +4 -4
  640. package/scripts/rules/decision-oracle-batch.ts +5 -6
  641. package/scripts/rules/decision-oracle-stage.ts +1 -1
  642. package/scripts/rules/decision-oracle-tokens.ts +1 -2
  643. package/scripts/rules/decision-oracle.ts +2 -2
  644. package/scripts/rules/delivered-rules.ts +61 -406
  645. package/scripts/rules/destructive-command.ts +2 -2
  646. package/scripts/rules/direct-filing.ts +4 -4
  647. package/scripts/rules/direct-pr-create.ts +2 -2
  648. package/scripts/rules/early-heartbeat.ts +15 -19
  649. package/scripts/rules/file-body.ts +5 -6
  650. package/scripts/rules/filing-cap.ts +6 -7
  651. package/scripts/rules/filing-offer.ts +1 -1
  652. package/scripts/rules/firing-point.ts +6 -6
  653. package/scripts/rules/gh-api.ts +2 -2
  654. package/scripts/rules/git-argv.ts +3 -3
  655. package/scripts/rules/git-force.ts +2 -2
  656. package/scripts/rules/hook-context-line.ts +31 -0
  657. package/scripts/rules/implementation-cut-verdict.ts +5 -8
  658. package/scripts/rules/implementation-cut.ts +35 -32
  659. package/scripts/rules/index-guard.ts +2 -2
  660. package/scripts/rules/issue-citation.ts +7 -7
  661. package/scripts/rules/issue-comments.ts +21 -13
  662. package/scripts/rules/josh-git-bare.ts +2 -2
  663. package/scripts/rules/lane-background.ts +14 -16
  664. package/scripts/rules/lane-carry-conflict.ts +41 -5
  665. package/scripts/rules/lane-interactive-ask.ts +6 -9
  666. package/scripts/rules/lane-park.ts +12 -16
  667. package/scripts/rules/lane-split-park.ts +1 -2
  668. package/scripts/rules/lane-switch-main.ts +10 -13
  669. package/scripts/rules/last-prompt.ts +1 -1
  670. package/scripts/rules/oracle-consulted.ts +5 -5
  671. package/scripts/rules/oracle-firing.ts +6 -9
  672. package/scripts/rules/oracle-list-cli.ts +2 -2
  673. package/scripts/rules/permission-guards.ts +2 -2
  674. package/scripts/rules/piped-verification.ts +79 -9
  675. package/scripts/rules/poll-loop.ts +9 -11
  676. package/scripts/rules/pre-gate-cut.ts +33 -30
  677. package/scripts/rules/prior-comment-read.ts +3 -3
  678. package/scripts/rules/protected-files.ts +25 -13
  679. package/scripts/rules/raw-field-body.ts +3 -4
  680. package/scripts/rules/reply-language.ts +1 -1
  681. package/scripts/rules/rule-body-guard.ts +10 -12
  682. package/scripts/rules/rule-guard.ts +1 -1
  683. package/scripts/rules/rule-list.ts +51 -0
  684. package/scripts/rules/rule-registry-rows.ts +282 -0
  685. package/scripts/rules/rule-registry.ts +109 -0
  686. package/scripts/rules/rule-value-cache.ts +2 -2
  687. package/scripts/rules/rule-value-cli.ts +6 -4
  688. package/scripts/rules/rule-value.ts +61 -22
  689. package/scripts/rules/run-tail-rule.ts +11 -15
  690. package/scripts/rules/shell-body-trigger.ts +7 -7
  691. package/scripts/rules/shell-segments.ts +2 -4
  692. package/scripts/rules/stop-rules.ts +54 -41
  693. package/scripts/rules/tail-commands.ts +1 -1
  694. package/scripts/rules/test-declared-commit.ts +2 -2
  695. package/scripts/rules/third-party-write.ts +3 -3
  696. package/scripts/rules/worktree-guard.ts +12 -5
  697. package/scripts/run/add/run-add-cli.ts +165 -0
  698. package/scripts/run/add/run-add.ts +124 -0
  699. package/scripts/run/board/run-board-cli.ts +207 -0
  700. package/scripts/run/board/run-board-closed.ts +95 -0
  701. package/scripts/run/board/run-board-every.ts +60 -0
  702. package/scripts/run/board/run-board-fetch.ts +38 -0
  703. package/scripts/run/board/run-board-fit.ts +219 -0
  704. package/scripts/run/board/run-board-github.ts +162 -0
  705. package/scripts/run/board/run-board-header.ts +275 -0
  706. package/scripts/run/board/run-board-kind.ts +35 -0
  707. package/scripts/run/board/run-board-labels.ts +299 -0
  708. package/scripts/run/board/run-board-layout.ts +222 -0
  709. package/scripts/run/board/run-board-link.ts +31 -0
  710. package/scripts/run/board/run-board-machine.ts +198 -0
  711. package/scripts/run/board/run-board-notes.ts +103 -0
  712. package/scripts/run/board/run-board-phase.ts +136 -0
  713. package/scripts/run/board/run-board-plan.ts +129 -0
  714. package/scripts/run/board/run-board-read.ts +62 -0
  715. package/scripts/run/board/run-board-render-legend.ts +82 -0
  716. package/scripts/run/board/run-board-render-notes.ts +77 -0
  717. package/scripts/run/board/run-board-render-slot.ts +50 -0
  718. package/scripts/run/board/run-board-render.ts +407 -0
  719. package/scripts/run/board/run-board-scope.ts +17 -0
  720. package/scripts/run/board/run-board-screen.ts +43 -0
  721. package/scripts/run/board/run-board-span.ts +66 -0
  722. package/scripts/run/board/run-board-spin.ts +115 -0
  723. package/scripts/run/board/run-board-state.ts +113 -0
  724. package/scripts/run/board/run-board-status.ts +279 -0
  725. package/scripts/run/board/run-board-tick.ts +210 -0
  726. package/scripts/run/board/run-board-track.ts +22 -0
  727. package/scripts/run/board/run-board-usage-read.ts +255 -0
  728. package/scripts/run/board/run-board-usage-rusage.ts +124 -0
  729. package/scripts/run/board/run-board-usage-text.ts +80 -0
  730. package/scripts/run/board/run-board-usage.ts +165 -0
  731. package/scripts/run/carry/run-carry-added.ts +62 -0
  732. package/scripts/run/carry/run-carry-args.ts +25 -22
  733. package/scripts/run/carry/run-carry-change.ts +1 -1
  734. package/scripts/run/carry/run-carry-cli.ts +71 -48
  735. package/scripts/run/carry/run-carry-conversation.ts +6 -7
  736. package/scripts/run/carry/run-carry-ended.ts +85 -0
  737. package/scripts/run/carry/run-carry-reclaim.ts +1 -1
  738. package/scripts/run/carry/run-carry-stash.ts +3 -2
  739. package/scripts/run/carry/run-carry-streak.ts +8 -10
  740. package/scripts/run/carry/run-carry.ts +85 -89
  741. package/scripts/run/cut/run-cut-args.ts +7 -7
  742. package/scripts/run/cut/run-cut-cli.ts +54 -36
  743. package/scripts/run/cut/run-cut-handoff.ts +15 -15
  744. package/scripts/run/cut/run-cut-report.ts +37 -16
  745. package/scripts/run/cut/run-cut.ts +63 -77
  746. package/scripts/run/detached-launch.ts +35 -50
  747. package/scripts/run/entry/run-entry-cli.ts +48 -27
  748. package/scripts/run/entry/run-entry-stop.ts +7 -9
  749. package/scripts/run/entry/run-entry.ts +5 -6
  750. package/scripts/run/event/run-event-cli.ts +5 -6
  751. package/scripts/run/event/run-event-filed.ts +69 -0
  752. package/scripts/run/event/run-event-follow.ts +3 -3
  753. package/scripts/run/event/run-event-plan.ts +38 -0
  754. package/scripts/run/event/run-event-render.ts +9 -4
  755. package/scripts/run/event/run-event-scope.ts +47 -18
  756. package/scripts/run/event/run-event-stream-emit.ts +64 -11
  757. package/scripts/run/event/run-event-stream.ts +171 -46
  758. package/scripts/run/event/run-event-watch.ts +4 -6
  759. package/scripts/run/hold/run-hold-cli.ts +65 -62
  760. package/scripts/run/hold/run-hold.ts +88 -46
  761. package/scripts/run/merge/run-merge-cli.ts +116 -77
  762. package/scripts/run/merge/run-merge-collect.ts +107 -0
  763. package/scripts/run/merge/run-merge-steps.ts +112 -65
  764. package/scripts/run/merge/run-merge-token.ts +30 -0
  765. package/scripts/run/merge/run-merge.ts +31 -22
  766. package/scripts/run/progress/run-progress-args.ts +4 -4
  767. package/scripts/run/progress/run-progress-cli.ts +39 -50
  768. package/scripts/run/progress/run-progress-clock.ts +25 -32
  769. package/scripts/run/progress/run-progress-config.ts +6 -9
  770. package/scripts/run/progress/run-progress-read.ts +9 -10
  771. package/scripts/run/progress/run-progress.ts +48 -53
  772. package/scripts/run/review/run-review-cli.ts +6 -6
  773. package/scripts/run/review/run-review-steps.ts +6 -6
  774. package/scripts/run/review/run-review.ts +9 -11
  775. package/scripts/run/run-cli-fault.ts +29 -0
  776. package/scripts/run/run-ending-cli.ts +3 -3
  777. package/scripts/run/run-ending.ts +10 -14
  778. package/scripts/run/run-halfrun-resume.ts +6 -8
  779. package/scripts/run/run-headless.ts +25 -12
  780. package/scripts/run/run-invocation.ts +17 -22
  781. package/scripts/run/run-label.ts +7 -5
  782. package/scripts/run/run-liveness-cli.ts +19 -6
  783. package/scripts/run/run-liveness.ts +27 -38
  784. package/scripts/run/run-next-cli.ts +5 -9
  785. package/scripts/run/run-next.ts +4 -5
  786. package/scripts/run/run-parent-cut-hook.ts +10 -12
  787. package/scripts/run/run-preflight.ts +25 -29
  788. package/scripts/run/run-prep-cli.ts +17 -13
  789. package/scripts/run/run-prep-locate.ts +4 -5
  790. package/scripts/run/run-prep.ts +7 -10
  791. package/scripts/run/run-prrun-resume.ts +2 -2
  792. package/scripts/run/run-report-cli.ts +4 -4
  793. package/scripts/run/run-report.ts +9 -14
  794. package/scripts/run/run-retrospective.ts +3 -3
  795. package/scripts/run/run-section.ts +42 -0
  796. package/scripts/run/run-stage-read.ts +2 -2
  797. package/scripts/run/run-stage.ts +6 -4
  798. package/scripts/run/run-status-cli.ts +7 -5
  799. package/scripts/run/run-status.ts +6 -7
  800. package/scripts/run/run-step-cli.ts +13 -15
  801. package/scripts/run/run-step.ts +58 -47
  802. package/scripts/run/run-stop-notify.ts +7 -8
  803. package/scripts/run/run-stranded-cli.ts +1 -1
  804. package/scripts/run/run-stranded-detect.ts +4 -4
  805. package/scripts/run/run-stranded.ts +11 -13
  806. package/scripts/run/run-tail-cli.ts +15 -16
  807. package/scripts/run/run-tail.ts +14 -33
  808. package/scripts/run/run-watcher-guard-cli.ts +3 -4
  809. package/scripts/run/run-watcher-guard.ts +11 -12
  810. package/scripts/run/run-watcher-hook.ts +6 -12
  811. package/scripts/run/ship/run-ship-cli.ts +67 -33
  812. package/scripts/run/ship/run-ship-detach.ts +15 -13
  813. package/scripts/run/ship/run-ship-lock.ts +1 -1
  814. package/scripts/run/ship/run-ship-next.ts +7 -8
  815. package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
  816. package/scripts/run/ship/run-ship-preflight.ts +10 -11
  817. package/scripts/run/ship/run-ship-probe.ts +4 -4
  818. package/scripts/run/ship/run-ship-return.ts +1 -1
  819. package/scripts/run/ship/run-ship-review-steps.ts +43 -24
  820. package/scripts/run/ship/run-ship-review.ts +12 -14
  821. package/scripts/run/ship/run-ship-scoped.ts +15 -6
  822. package/scripts/run/ship/run-ship-stage.ts +80 -26
  823. package/scripts/run/ship/run-ship-steps.ts +26 -16
  824. package/scripts/run/ship/run-ship-stop-text.ts +4 -2
  825. package/scripts/run/ship/run-ship-sync.ts +9 -8
  826. package/scripts/run/ship/run-ship.ts +17 -32
  827. package/scripts/run/tidy/run-tidy-cli.ts +9 -5
  828. package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
  829. package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
  830. package/scripts/run/tidy/run-tidy.ts +4 -3
  831. package/scripts/run/wake/run-wake-cli.ts +27 -32
  832. package/scripts/run/wake/run-wake-describe.ts +24 -28
  833. package/scripts/run/wake/run-wake-driver.ts +14 -14
  834. package/scripts/run/wake/run-wake-handoff.ts +6 -6
  835. package/scripts/run/wake/run-wake-loop.ts +9 -9
  836. package/scripts/run/wake/run-wake-restart.ts +4 -5
  837. package/scripts/run/wake/run-wake-session.ts +23 -27
  838. package/scripts/run/wake/run-wake.ts +57 -279
  839. package/scripts/safe-chain/ci-installer-pin.ts +3 -3
  840. package/scripts/safe-chain/pack-hook.ts +2 -2
  841. package/scripts/safe-chain/preinstall-command.ts +2 -2
  842. package/scripts/security/security-audit-logic.ts +1 -1
  843. package/scripts/security/security-audit-provision-logic.ts +1 -1
  844. package/scripts/security/security-audit-provision.ts +2 -2
  845. package/scripts/security/security-audit.ts +5 -5
  846. package/scripts/security/security-updates-logic.ts +2 -3
  847. package/scripts/security/security-updates.ts +2 -4
  848. package/scripts/self-sync-guard/index.ts +1 -1
  849. package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
  850. package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
  851. package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
  852. package/scripts/sonar/sonar-hotspots.ts +1 -1
  853. package/scripts/sonar/sonar-new-code-cli.ts +1 -1
  854. package/scripts/sonar/sonar-new-code.ts +1 -1
  855. package/scripts/sonar/sonar-project.ts +1 -1
  856. package/scripts/split/split-assess-cli.ts +1 -1
  857. package/scripts/split/split-assess.ts +3 -3
  858. package/scripts/sync/directory-copy-guard.ts +2 -3
  859. package/scripts/sync/managed-config-scope-cli.ts +1 -2
  860. package/scripts/sync/managed-config-scope.ts +4 -4
  861. package/scripts/sync/plugin-skill-directories.ts +2 -2
  862. package/scripts/sync/reconcile-templates.ts +17 -8
  863. package/scripts/sync/removed-skill-manifest.ts +2 -3
  864. package/scripts/sync/sync-ai-files.ts +7 -7
  865. package/scripts/sync/sync-configs.ts +30 -3
  866. package/scripts/sync/sync-hook-safety.ts +2 -2
  867. package/scripts/sync/sync.ts +23 -10
  868. package/scripts/sync/synced-paths.ts +2 -1
  869. package/scripts/sync/workflow-pin-logic.ts +1 -1
  870. package/scripts/test/test-declared-changed.ts +4 -4
  871. package/scripts/test/test-declared-logic.ts +2 -3
  872. package/scripts/test/test-declared-match.ts +25 -4
  873. package/scripts/test/test-declared.ts +26 -9
  874. package/scripts/test/test-red-commit.ts +3 -2
  875. package/scripts/test/test-red-logic.ts +7 -14
  876. package/scripts/test/test-red.ts +12 -47
  877. package/scripts/test/test-related-scope.ts +2 -3
  878. package/scripts/test/test-related.ts +3 -3
  879. package/scripts/test/test-type-logic.ts +1 -2
  880. package/scripts/test/test-unit-guard.ts +13 -17
  881. package/scripts/test/unit-worker-share.ts +7 -8
  882. package/scripts/time-runtime/time-agent-bundles.ts +2 -4
  883. package/scripts/time-runtime/time-background.ts +17 -21
  884. package/scripts/time-runtime/time-batch-guard.ts +67 -342
  885. package/scripts/time-runtime/time-bundle-call.ts +26 -28
  886. package/scripts/time-runtime/time-bundles.ts +11 -12
  887. package/scripts/time-runtime/time-call-identity.ts +1 -1
  888. package/scripts/time-runtime/time-command-key.ts +2 -2
  889. package/scripts/time-runtime/time-density-hook.ts +8 -11
  890. package/scripts/time-runtime/time-density.ts +5 -5
  891. package/scripts/time-runtime/time-followup-stage.ts +7 -7
  892. package/scripts/time-runtime/time-format.ts +5 -5
  893. package/scripts/time-runtime/time-hook-transcript.ts +3 -3
  894. package/scripts/time-runtime/time-instant.ts +1 -1
  895. package/scripts/time-runtime/time-markers.ts +15 -19
  896. package/scripts/time-runtime/time-phase-names.ts +3 -3
  897. package/scripts/time-runtime/time-reported-failure.ts +15 -19
  898. package/scripts/time-runtime/time-round-trips.ts +20 -23
  899. package/scripts/time-runtime/time-shell.ts +8 -8
  900. package/scripts/time-runtime/time-single-check.ts +1 -2
  901. package/scripts/time-runtime/time-spans.ts +35 -40
  902. package/scripts/time-runtime/time-tool-call.ts +15 -16
  903. package/scripts/time-runtime/time-transcript-line.ts +53 -34
  904. package/scripts/time-runtime/time-writes.ts +5 -5
  905. package/scripts/ui/ui-routes-cli.ts +1 -2
  906. package/scripts/ui/ui-routes.ts +1 -2
  907. package/scripts/version/bump-version.ts +1 -1
  908. package/scripts/version/fresh-metadata-cache.ts +2 -2
  909. package/scripts/version/latest-corepack.ts +26 -26
  910. package/scripts/version/latest-lane-guard.ts +1 -1
  911. package/scripts/version/latest-scope-cli.ts +2 -2
  912. package/scripts/version/latest-stamp.ts +1 -2
  913. package/scripts/version/latest-update.ts +2 -2
  914. package/scripts/version/npm-registry.ts +2 -2
  915. package/scripts/version/package-manager-version.ts +18 -0
  916. package/scripts/version/publishable-range-check.ts +2 -1
  917. package/scripts/version/publishable-range.ts +1 -1
  918. package/scripts/version/release-age.ts +11 -11
  919. package/scripts/version/release-hold.ts +2 -2
  920. package/scripts/version/safe-chain-version-update.ts +3 -3
  921. package/scripts/version/version-check-logic.ts +2 -3
  922. package/scripts/version/version-check.ts +1 -2
  923. package/scripts/version/version-command-config.ts +2 -2
  924. package/scripts/version/version-commands.ts +3 -3
  925. package/scripts/version/version-remote.ts +4 -4
  926. package/scripts/version/version-targets.ts +2 -2
  927. package/templates/gitignore +7 -0
  928. package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
  929. package/dist/hooks/chunk-RKUAD3I6.js +0 -90
  930. package/dist/hooks/chunk-WPALEIRX.js +0 -18
  931. package/scripts/backlog/backlog-restructure.ts +0 -152
  932. package/scripts/rules/issue-fold-rule.ts +0 -72
  933. package/scripts/rules/wip-cap.ts +0 -63
  934. package/scripts/run/run-issue-number.ts +0 -19
@@ -1,8 +1,11 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
+ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
4
+ import { session_cite } from '#scripts/issue/session-cite'
3
5
  import { josh_command } from '#scripts/josh/josh-run'
4
6
  import { lane_child_marker } from '#scripts/lane/lane-child-marker'
5
7
  import { run_cut_report } from '#scripts/run/cut/run-cut-report'
8
+ import { run_event_plan } from '#scripts/run/event/run-event-plan'
6
9
  import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
7
10
  import { run_halfrun_resume } from '#scripts/run/run-halfrun-resume'
8
11
  import { run_label } from '#scripts/run/run-label'
@@ -10,17 +13,21 @@ import { run_next } from '#scripts/run/run-next'
10
13
  import { run_prep } from '#scripts/run/run-prep'
11
14
  import { run_prep_cli } from '#scripts/run/run-prep-cli'
12
15
  import { run_prrun_resume } from '#scripts/run/run-prrun-resume'
13
- import { run_stage, type StageCommand, type StageDecision } from '#scripts/run/run-stage'
16
+ import {
17
+ run_stage,
18
+ type StageCommand,
19
+ type StageDecision,
20
+ type StageState,
21
+ } from '#scripts/run/run-stage'
14
22
  import { run_stage_read, type StageRead } from '#scripts/run/run-stage-read'
15
23
  import { run_step } from '#scripts/run/run-step'
16
24
  import { run_entry, type EntryParts } from './run-entry'
17
25
  import { run_entry_stop } from './run-entry-stop'
18
26
 
19
- // `josh run:entry <N>` — one call for the fixed entry sequence a lane opens on (joshuafolkken/kit#2372).
20
- // The loop used to spend a round trip on `run:hold`, one on `cost --cut`, one on `run:prep` and one on
21
- // `run:step`, re-billing a lane's full context each time; this runs all four internally and prints one
22
- // composite report, the same way `backlog:offer` folds `backlog:next` → `backlog:budget` and `run:prep`
23
- // folds three reads.
27
+ // `josh run:entry <N>` — one call for the fixed entry sequence a lane opens on. Rather than a round
28
+ // trip each on `run:hold`, `cost --cut`, `run:prep` and `run:step`, re-billing a lane's full context
29
+ // each time, this runs all four internally and prints one composite report, the same way
30
+ // `backlog:offer` folds `backlog:next` → `backlog:budget` and `run:prep` folds three reads.
24
31
  //
25
32
  // **The stops short-circuit.** A `busy` / `unknown` hold and an `over` budget both end the run, so the
26
33
  // composite reports them without reading the issue — the gate `fullrun.md` steps 1 and 3 stop on stays a
@@ -31,7 +38,6 @@ import { run_entry_stop } from './run-entry-stop'
31
38
  const ARGV_OFFSET = 2
32
39
  const SUCCESS_EXIT_CODE = 0
33
40
  const FAILURE_EXIT_CODE = 1
34
- const ISSUE_NUMBER_PATTERN = /^[1-9]\d*$/u
35
41
  const USAGE = 'Usage: josh run:entry <issue-number> [--to kickoff|halfrun|prrun|fullrun]'
36
42
  const TO_FLAG = '--to'
37
43
  // The flag and its command.
@@ -50,7 +56,11 @@ const HALFRUN_RESUME_TOKEN = 'halfrun'
50
56
  function parse_number(argv: ReadonlyArray<string>): string | undefined {
51
57
  const [first] = argv
52
58
 
53
- if (first === undefined || argv.length !== 1 || !ISSUE_NUMBER_PATTERN.test(first)) {
59
+ if (
60
+ first === undefined ||
61
+ argv.length !== 1 ||
62
+ !issue_number_shape.ISSUE_NUMBER_PATTERN.test(first)
63
+ ) {
54
64
  return undefined
55
65
  }
56
66
 
@@ -62,7 +72,7 @@ interface EntryRequest {
62
72
  command: StageCommand
63
73
  }
64
74
 
65
- // `--to <command>` names how far the run goes (joshuafolkken/kit#3042); absent, it is `fullrun`.
75
+ // `--to <command>` names how far the run goes; absent, it is `fullrun`.
66
76
  // Anything else is refused.
67
77
  function parse_command(rest: ReadonlyArray<string>): StageCommand | undefined {
68
78
  if (rest.length === 0) return run_stage.DEFAULT_COMMAND
@@ -87,7 +97,7 @@ function first_line(out: string): string {
87
97
 
88
98
  // `run:hold <N>` prints one token — `hold`, `busy` or `unknown` — and forwards its explanation to
89
99
  // stderr, so the composite branches on the token and the reader still sees why. `--fullrun` marks the
90
- // hold as a run whose implementation cut resumes as `fullrun #N` (joshuafolkken/kit#2760) — a
100
+ // hold as a run whose implementation cut resumes as `fullrun #N` — a
91
101
  // `fullrun`'s, and a `prrun`'s, which runs `fullrun`'s steps; a `halfrun`'s hold is never marked.
92
102
  async function claim_hold(issue_number: string, command: StageCommand): Promise<string> {
93
103
  const mark = command === run_stage.HALFRUN ? [] : ['--fullrun']
@@ -116,7 +126,7 @@ interface Reads {
116
126
  }
117
127
 
118
128
  // The issue reads and the pre-implementation verdict, from the one gather `run:prep` and `run:next`
119
- // already share (joshuafolkken/kit#2188) rather than a second copy — the report is `run:prep`'s
129
+ // already share rather than a second copy — the report is `run:prep`'s
120
130
  // formatter, the verdict is `run:step`'s `pre_verdict` over the same parts.
121
131
  async function gather_reads(issue_number: string): Promise<Reads> {
122
132
  const reads = await run_prep_cli.gather(issue_number)
@@ -127,7 +137,7 @@ async function gather_reads(issue_number: string): Promise<Reads> {
127
137
  }
128
138
 
129
139
  function emit(parts: EntryParts): number {
130
- console.info(run_entry.format_report(parts))
140
+ console.info(session_cite.text(run_entry.format_report(parts)))
131
141
 
132
142
  return run_entry.exit_code(parts)
133
143
  }
@@ -138,7 +148,7 @@ function stop_report(issue_number: string, hold: string, cost: string, report: s
138
148
  return emit({ issue_number, hold, cost, verdict: run_entry.NO_VERDICT, report })
139
149
  }
140
150
 
141
- // A stop this command decided carries its own chores (joshuafolkken/kit#3099): the `confirmation`
151
+ // A stop this command decided carries its own chores: the `confirmation`
142
152
  // Telegram always, and the release where this call claimed the hold — `run_entry_stop` says why.
143
153
  interface StopCall {
144
154
  parts: Pick<EntryParts, 'issue_number' | 'hold' | 'cost' | 'report'>
@@ -160,9 +170,9 @@ interface Resume {
160
170
  code: number
161
171
  }
162
172
 
163
- // **A resume is asked before the hold is claimed** (joshuafolkken/kit#2760). An implementation cut
164
- // outside a lane keeps its hold, so the fresh session's `fullrun #N` would be refused `busy` by its own
165
- // run's hold before it ever reached `run:cut --resume` — the hand-off the cut promised could not land.
173
+ // **A resume is asked before the hold is claimed.** An implementation cut outside a lane keeps its
174
+ // hold, so the fresh session's `fullrun #N` would otherwise be refused `busy` by its own run's hold
175
+ // before it ever reached `run:cut --resume` — the hand-off the cut promised could not land.
166
176
  async function ask_resume(issue_number: string): Promise<Resume> {
167
177
  const asked = await josh_command.josh_run(
168
178
  ['run:cut', '--resume', issue_number],
@@ -175,16 +185,16 @@ async function ask_resume(issue_number: string): Promise<Resume> {
175
185
  // Anything but `fresh` is `run:cut --resume`'s answer to act on (`pre-gate-cut.md`), not a new run: the
176
186
  // token and its exit code are passed through, and nothing is claimed or read.
177
187
  function resume_report(issue_number: string, resume: Resume): number {
178
- console.info(`entry #${issue_number} — resume: ${resume.token}`)
188
+ console.info(`entry ${session_cite.issue(issue_number)} — resume: ${resume.token}`)
179
189
 
180
190
  return resume.code
181
191
  }
182
192
 
183
- // **A `halfrun` stopped before its commit is resumed, not claimed** (joshuafolkken/kit#2796): its hold
193
+ // **A `halfrun` stopped before its commit is resumed, not claimed**: its hold
184
194
  // is kept over the verified diff, so the claim below would answer `busy` against it. The budget is asked
185
195
  // first, as for any run; then the hold is adopted and the run goes to the gate, skipping everything up
186
- // to and including implementation. **A `prrun` stopped before its merge is resumed the same way**
187
- // (joshuafolkken/kit#3023), under the token that says what is left of it.
196
+ // to and including implementation. **A `prrun` stopped before its merge is resumed the same way**,
197
+ // under the token that says what is left of it.
188
198
  async function resume_stopped(
189
199
  { issue_number, command }: EntryRequest,
190
200
  token: string,
@@ -204,7 +214,7 @@ async function resume_stopped(
204
214
  return await stop_run({ parts, command, reason: HOLD_REASON, should_release: false })
205
215
  }
206
216
 
207
- console.info(`entry #${issue_number} — resume: ${token}`)
217
+ console.info(`entry ${session_cite.issue(issue_number)} — resume: ${token}`)
208
218
 
209
219
  return SUCCESS_EXIT_CODE
210
220
  }
@@ -225,15 +235,21 @@ async function resume_any(
225
235
  : await resume_stopped(request, stage.prrun_token, run_prrun_resume)
226
236
  }
227
237
 
228
- // **A command whose stopping point the issue has already reached redoes nothing** (joshuafolkken/kit#3042)
229
- // — the stage line is the whole report. A merged issue is the exception: the ordinary entry already
238
+ // **A command whose stopping point the issue has already reached redoes nothing** — the stage line is
239
+ // the whole report. A merged issue is the exception: the ordinary entry already
230
240
  // answers it (`already-done`, or `keep-work` over a lane's uncommitted work), so it is left to that.
231
241
  function is_settled(decision: StageDecision): boolean {
232
242
  return decision.is_reached && decision.state !== run_stage.MERGED
233
243
  }
234
244
 
245
+ // A planned issue was planned by `kickoff`, whose entry claims nothing, so the claim that starts past
246
+ // the plan writes the `plan` event `run:board` draws 📝 from.
247
+ async function mark_planned(issue_number: string, state: StageState): Promise<void> {
248
+ if (state === run_stage.PLANNED) await run_event_plan.emit_plan(issue_number)
249
+ }
250
+
235
251
  // The tree is held and the budget allows the run, so the issue is marked as running before its reads
236
- // (joshuafolkken/kit#3182) — the label then shows in the `labels:` line the report below carries.
252
+ // — the label then shows in the `labels:` line the report below carries.
237
253
  async function proceed(issue_number: string, hold: string, cost: string): Promise<number> {
238
254
  await run_label.mark(issue_number)
239
255
  const reads = await gather_reads(issue_number)
@@ -241,7 +257,10 @@ async function proceed(issue_number: string, hold: string, cost: string): Promis
241
257
  return emit({ issue_number, hold, cost, verdict: reads.verdict, report: reads.report })
242
258
  }
243
259
 
244
- async function claim_run({ issue_number, command }: EntryRequest): Promise<number> {
260
+ async function claim_run(
261
+ { issue_number, command }: EntryRequest,
262
+ state: StageState,
263
+ ): Promise<number> {
245
264
  const hold = await claim_hold(issue_number, command)
246
265
 
247
266
  if (hold !== run_hold_cli.HOLD_VERDICT) {
@@ -258,6 +277,8 @@ async function claim_run({ issue_number, command }: EntryRequest): Promise<numbe
258
277
  return await stop_run({ parts, command, reason: BUDGET_REASON, should_release: true })
259
278
  }
260
279
 
280
+ await mark_planned(issue_number, state)
281
+
261
282
  return await proceed(issue_number, hold, cost)
262
283
  }
263
284
 
@@ -283,11 +304,11 @@ async function open_run(request: EntryRequest): Promise<number> {
283
304
  const stage = await run_stage_read.read_stage(issue_number)
284
305
  const decision = run_stage.decide(stage.state, command)
285
306
 
286
- console.info(run_stage.format_decision(issue_number, decision))
307
+ console.info(session_cite.text(run_stage.format_decision(issue_number, decision)))
287
308
 
288
309
  if (command === run_stage.KICKOFF || is_settled(decision)) return SUCCESS_EXIT_CODE
289
310
 
290
- return (await resume_any(request, decision, stage)) ?? (await claim_run(request))
311
+ return (await resume_any(request, decision, stage)) ?? (await claim_run(request, decision.state))
291
312
  }
292
313
 
293
314
  async function run(argv: ReadonlyArray<string>): Promise<number> {
@@ -1,15 +1,13 @@
1
+ import { issue_cite } from '#scripts/issue/issue-cite'
1
2
  import { josh_command } from '#scripts/josh/josh-run'
2
3
  import { telegram_notify } from '#scripts/notify/telegram-notify'
3
4
  import { lane_park } from '#scripts/rules/lane-park'
4
5
 
5
- // What `run:entry` does on the way out of a stop it decided itself (joshuafolkken/kit#3099).
6
+ // What `run:entry` does on the way out of a stop it decided itself.
6
7
  //
7
- // **The stop's chores used to be the agent's to remember, and the `Stop` hook was what reminded it.**
8
- // `fullrun.md` step 3 asked the agent, on an `over` budget, to send the `confirmation` Telegram and then
9
- // run `pnpm josh run:release` — two calls after a command had already decided the run was over. Across
10
- // eleven measured sessions the hook sent a reply back five times for exactly those two calls, each one a
11
- // further turn re-reading the whole context. The command that decides the stop knows everything the
12
- // chores need, so it does them, and the hook stays a safety net that a normal run never trips.
8
+ // **The command that decides the stop does its chores** — the `confirmation` Telegram and the hold
9
+ // release — because it knows everything they need, and leaving them to the agent costs further turns
10
+ // re-reading the whole context. The `Stop` hook stays a safety net that a normal run never trips.
13
11
  //
14
12
  // **The release is the claim's own undo, and only where this call made the claim.** A resume over a
15
13
  // stopped `halfrun` / `prrun` stops on the budget before adopting anything, and the hold there is the
@@ -58,7 +56,7 @@ function is_parking_child(): boolean {
58
56
  const DEFAULT_PORTS: StopPorts = { notify: telegram_notify.confirm, release, is_parking_child }
59
57
 
60
58
  function body_of(notice: StopNotice): string {
61
- return `${notice.command} #${notice.issue_number} stopped at entry: ${notice.reason}.\nResume with \`${notice.command} #${notice.issue_number}\`.`
59
+ return `${notice.command} ${issue_cite.plain(notice.issue_number)} stopped at entry: ${notice.reason}.\nResume with \`${notice.command} ${issue_cite.plain(notice.issue_number)}\`.`
62
60
  }
63
61
 
64
62
  // The release runs first, so the resume the Telegram names finds the tree free when a person acts on it.
@@ -77,7 +75,7 @@ async function notify_stop(notice: StopNotice, ports: StopPorts): Promise<void>
77
75
  if (ports.is_parking_child()) return
78
76
 
79
77
  const is_sent = await ports.notify({
80
- issue_title: `${notice.command} #${notice.issue_number} stopped`,
78
+ issue_title: `${notice.command} ${issue_cite.plain(notice.issue_number)} stopped`,
81
79
  body: body_of(notice),
82
80
  recovery: RECOVERY,
83
81
  })
@@ -1,12 +1,11 @@
1
1
  import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
2
2
  import { run_step } from '#scripts/run/run-step'
3
3
 
4
- // `josh run:entry <N>` — the one call a `fullrun` makes to open a run (joshuafolkken/kit#2372). It
5
- // folds the fixed entry sequence a lane spends four separate round trips on — claim the tree
6
- // (`run:hold`), read the session budget (`cost --cut`), gather the issue reads (`run:prep`), and decide
7
- // the pre-implementation step (`run:step`) — into one composite, the same shape `backlog:offer` folded
8
- // the parent loop head on (joshuafolkken/kit#2162). Context cost grows with the square of a lane's
9
- // round trips, so collapsing four into one is where the fold pays the most.
4
+ // `josh run:entry <N>` — the one call a `fullrun` makes to open a run. It folds the fixed entry
5
+ // sequence of four round trips — claim the tree (`run:hold`), read the session budget (`cost --cut`),
6
+ // gather the issue reads (`run:prep`), and decide the pre-implementation step (`run:step`) — into one
7
+ // composite, the same shape `backlog:offer` gives the parent loop head. Context cost grows with the
8
+ // square of a lane's round trips, so collapsing four into one is where the fold pays the most.
10
9
  //
11
10
  // **This module is the pure half**, kept apart from the chaining CLI the way `run-prep.ts` is kept from
12
11
  // `run-prep-cli.ts` and `run-review.ts` from its steps. It shapes the summary line the reader branches
@@ -10,20 +10,19 @@ import { run_event_stream_emit } from './run-event-stream-emit'
10
10
  import { run_event_watch } from './run-event-watch'
11
11
 
12
12
  // `josh run:event` — the command a run's step calls to append to, or read back, the append-only event
13
- // stream (joshuafolkken/kit#2205). The in-process seams (`run:merge`) append directly; the steps with no
13
+ // stream. The in-process seams (`run:merge`) append directly; the steps with no
14
14
  // josh command at the point the event happens — a plan posted, a child launched, a PR opened, a stop —
15
15
  // call `--append` here, so parent and lane child alike write to the one stream. `--from` is the woken
16
16
  // reader's "everything since the position I last read"; `--last` is the degenerate single-event read.
17
17
  //
18
- // **`--follow` is one bounded read that waits** (joshuafolkken/kit#2207). It is `--from` that returns
18
+ // **`--follow` is one bounded read that waits.** It is `--from` that returns
19
19
  // the moment an event is past the given position, and otherwise at the interval. The lines go to
20
20
  // standard output and the position to read from next goes to standard error — the same before and after
21
21
  // a session cut, because the stream is the run's and the position is the caller's.
22
22
  //
23
- // **`--watch` is the ambient surface: the same pass in a loop that never exits** (joshuafolkken/kit#2492),
24
- // each event rendered in the session language (`run-event-render.ts`), for a person to keep open in a
25
- // pane of their own. No conversation relays the stream any more — a session woken per event re-read its
26
- // whole history each time, and outspent every lane of the run doing it.
23
+ // **`--watch` is the ambient surface: the same pass in a loop that never exits**, each event rendered
24
+ // in the session language (`run-event-render.ts`), for a person to keep open in a pane of their own. No
25
+ // conversation relays the stream — a session woken per event would re-read its whole history each time.
27
26
 
28
27
  const ARGV_OFFSET = 2
29
28
  const SUCCESS_EXIT_CODE = 0
@@ -0,0 +1,69 @@
1
+ import { issue_cite } from '#scripts/issue/issue-cite'
2
+ import {
3
+ BREAKING_CHANGE_LABEL,
4
+ BUG_LABEL,
5
+ ENHANCEMENT_LABEL,
6
+ has_label_name,
7
+ } from '#scripts/issue/issue-labels'
8
+
9
+ // The text of a `filed` event: the Issue a run filed, its kind, its title, and the child whose work
10
+ // turned it up. `issue:file` writes it and `run:board` reads it back, both through this module, so the
11
+ // two never spell it differently.
12
+
13
+ // The classification labels a filing's kind is read from, in precedence order: a breaking change is
14
+ // named as one whatever else it is.
15
+ const KINDS = [BREAKING_CHANGE_LABEL, BUG_LABEL, ENHANCEMENT_LABEL] as const
16
+
17
+ type FiledKind = (typeof KINDS)[number]
18
+
19
+ interface Filed {
20
+ // `#<N>` for this repository's Issue, `<owner>/<repo>#<N>` for one filed elsewhere.
21
+ reference: string
22
+ // The filing's classification label; none where it carries none of `KINDS`, and on an event written
23
+ // before the kind was recorded.
24
+ kind: FiledKind | undefined
25
+ title: string
26
+ // The lane child that was working when the Issue was filed, when the filing came from one.
27
+ found_during: string | undefined
28
+ }
29
+
30
+ // The kind slot is always written, `[<label>]` or `[]`, against the reference with no space: an event
31
+ // written before the kind always has the space there, so no title, whatever it opens with, reads as a
32
+ // kind.
33
+ const TEXT_PATTERN = new RegExp(
34
+ String.raw`^(?<reference>\S*#\d+)(?:\[(?<kind>${KINDS.join('|')}|)\])? (?<title>.*?)(?: \(found during #(?<during>\d+)\))?$`,
35
+ 'u',
36
+ )
37
+
38
+ // Through the case-insensitive comparison GitHub applies, so a `--label Bug` filing is still a bug.
39
+ function kind_of(labels: ReadonlyArray<string>): FiledKind | undefined {
40
+ return KINDS.find((kind) => has_label_name(labels, kind))
41
+ }
42
+
43
+ function text_of(filed: Filed): string {
44
+ const kind = `[${filed.kind ?? ''}]`
45
+ const suffix =
46
+ filed.found_during === undefined
47
+ ? ''
48
+ : ` (found during ${issue_cite.plain(filed.found_during)})`
49
+
50
+ return `${filed.reference}${kind} ${filed.title}${suffix}`
51
+ }
52
+
53
+ function parse(text: string): Filed | undefined {
54
+ const groups = TEXT_PATTERN.exec(text)?.groups
55
+
56
+ if (groups === undefined) return undefined
57
+
58
+ return {
59
+ reference: String(groups['reference']),
60
+ kind: KINDS.find((kind) => kind === groups['kind']),
61
+ title: String(groups['title']),
62
+ found_during: groups['during'],
63
+ }
64
+ }
65
+
66
+ const run_event_filed = { kind_of, parse, text_of }
67
+
68
+ export { run_event_filed }
69
+ export type { Filed, FiledKind }
@@ -1,6 +1,6 @@
1
1
  import type { StreamRead } from './run-event-stream'
2
2
 
3
- // The follow read behind `josh run:event --follow` and `--watch` (joshuafolkken/kit#2207). A reader
3
+ // The follow read behind `josh run:event --follow` and `--watch`. A reader
4
4
  // asks the run's event stream for "everything since the position I last read" — and must see **both** a
5
5
  // new event's arrival, promptly, and the interval passing when nothing new has happened, so a person
6
6
  // watching sees progress land at once and still sees the run is alive when it is quiet.
@@ -8,12 +8,12 @@ import type { StreamRead } from './run-event-stream'
8
8
  // **This is one bounded pass, not the loop.** It returns as soon as any event is past the caller's
9
9
  // position (the arrival), or when the interval elapses having found none (the quiet tick); the caller
10
10
  // shows what came back and asks again from the returned position. The loop is `run-event-watch.ts`,
11
- // run in a pane of its own rather than by a session restarting the pass (joshuafolkken/kit#2492).
11
+ // run in a pane of its own rather than by a session restarting the pass.
12
12
  //
13
13
  // **It reads the run's stream, not a session's.** `read` is `run_event_stream.read_from` bound to the
14
14
  // run-keyed target, and the position is the caller's own, so the pass answers the same before and after
15
15
  // a `backlogrun` session cut: a cut changes who executes, never what the stream says or where a reader
16
- // stands in it. That invariant is the point of the whole issue, and it is why this takes ports rather
16
+ // stands in it. That invariant is why this takes ports rather
17
17
  // than resolving a target itself — the test drives it with a stream it controls and a clock it advances.
18
18
  //
19
19
  // **It is a poll, and deliberately not `run:progress`'s loop.** That one reads GitHub observations and
@@ -0,0 +1,38 @@
1
+ import { issue_cite } from '#scripts/issue/issue-cite'
2
+ import { run_event_scope } from './run-event-scope'
3
+ import { run_event_stream, type RunEvent } from './run-event-stream'
4
+ import { run_event_stream_emit } from './run-event-stream-emit'
5
+
6
+ // The `plan` event `run:board` draws 📝 from, written by code rather than by a step a child runs by hand,
7
+ // which children skip — and every `run:planned` issue's entry starts past the plan. Two callers write
8
+ // it: `run:entry` when a planned issue is claimed, and the first implementation edit of a lane child,
9
+ // which is where the Step 0 work summary falls due. **Once per launch of the issue**, so the second
10
+ // of the two adds nothing, while a re-dispatched child — whose launch restarts its `run:board` track —
11
+ // writes its own.
12
+
13
+ const KIND = run_event_stream.EVENT_KIND.PLAN
14
+ const PLAN_VERB = 'planned'
15
+
16
+ function plan_text(issue: string): string {
17
+ return `${PLAN_VERB} ${issue_cite.plain(issue)}`
18
+ }
19
+
20
+ function has_plan(events: ReadonlyArray<RunEvent>, issue: string): boolean {
21
+ return run_event_scope
22
+ .since_own_launch(events, issue)
23
+ .some((event) => event.kind === KIND && run_event_scope.issue_named(event) === issue)
24
+ }
25
+
26
+ /**
27
+ * Append the issue's `plan` event unless its newest launch already carries one. Best-effort
28
+ * like every emit: a failed read is an empty invocation, a failed append is swallowed.
29
+ */
30
+ async function emit_plan(issue: string): Promise<void> {
31
+ if (has_plan(await run_event_stream_emit.invocation_or_all_events(), issue)) return
32
+
33
+ await run_event_stream_emit.emit(KIND, plan_text(issue))
34
+ }
35
+
36
+ const run_event_plan = { emit_plan, plan_text }
37
+
38
+ export { run_event_plan }
@@ -1,9 +1,8 @@
1
1
  import type { EventKind, RunEvent } from './run-event-stream'
2
2
 
3
- // One run event as the line a person reads in the watch pane (joshuafolkken/kit#2492). The ambient tier
4
- // used to be a session relaying `run:event --follow`, and every relay re-read that session's whole
5
- // history; the pane is a script, so the wording a relaying session supplied is supplied here instead —
6
- // one label per event kind, in the session language, beside the local clock time.
3
+ // One run event as the line a person reads in the watch pane. The pane is a script, not a session, so
4
+ // the wording is supplied here — one label per event kind, in the session language, beside the local
5
+ // clock time.
7
6
  //
8
7
  // **The kinds are a fixed enumeration** (`run-event-stream.ts` → `EVENT_KIND`), so a template table is
9
8
  // the whole renderer; a kind the table does not name — a stream written by a newer kit — prints its raw
@@ -40,6 +39,12 @@ const KIND_LABELS: Readonly<Record<EventKind, KindLabel>> = {
40
39
  heartbeat: { ja: '生存確認', en: 'heartbeat' },
41
40
  'ship-launch': { ja: '出荷を開始', en: 'ship launched' },
42
41
  'ship-stop': { ja: '出荷が停止', en: 'ship stopped' },
42
+ idle: { ja: '新着待ち', en: 'idle watch' },
43
+ filed: { ja: '起票', en: 'filed' },
44
+ note: { ja: '意見', en: 'note' },
45
+ 'lane-phase': { ja: 'レーンの段階', en: 'lane phase' },
46
+ add: { ja: '割り込み', en: 'added' },
47
+ 'lane-limit': { ja: 'レーン上限', en: 'lane limit' },
43
48
  }
44
49
 
45
50
  const LABELS_BY_KIND: ReadonlyMap<string, KindLabel> = new Map(Object.entries(KIND_LABELS))
@@ -1,18 +1,16 @@
1
+ import { issue_cite } from '#scripts/issue/issue-cite'
1
2
  import type { CarryRead } from '#scripts/run/carry/run-carry'
2
3
  import { run_event_stream, type RunEvent } from './run-event-stream'
3
4
 
4
- // The one place a stream consumer scopes the event stream to a single invocation (joshuafolkken/kit#2395).
5
- // The stream is the repository's event log, not this run's — it outlives every invocation by design — so a
6
- // consumer handed every event treats a previous invocation's merges, parks and cuts as its own. #2393 built
7
- // the fix (the carry record's `started_at` as the lower bound, filtered by each event's own time) but left
8
- // it private inside `run-report.ts`; every other consumer of the stream carried the same defect. This is that
9
- // mechanism, published once, so `run:report`, the retrospective digest and `run:step` share one time filter
10
- // rather than each writing it again — the second copy `CLAUDE.md` forbids as a clone.
5
+ // The one place a stream consumer scopes the event stream to a single invocation. The stream is the
6
+ // repository's event log, not this run's — it outlives every invocation by design — so a consumer handed
7
+ // every event treats a previous invocation's merges, parks and cuts as its own. The carry record's
8
+ // `started_at` is the lower bound, filtered by each event's own time, published once so `run:report`, the
9
+ // retrospective digest and `run:step` share one time filter rather than each writing it again.
11
10
  //
12
11
  // **It never rounds an undetermined scope back to the whole stream.** A scope that cannot be determined — no
13
12
  // carry record, an unreadable one, or a start time that is not a time — answers `undefined`, and each
14
- // consumer falls to the "could not determine" side rather than showing every invocation's events, which is
15
- // exactly the rounding #2308 and #2393 named.
13
+ // consumer falls to the "could not determine" side rather than showing every invocation's events.
16
14
 
17
15
  const SINCE_SCOPE = 'since'
18
16
  const UNKNOWN_SCOPE = 'unknown'
@@ -71,19 +69,19 @@ function scope_of(read: CarryRead): EventScope {
71
69
 
72
70
  // The newest event within scope, or `undefined` when the scope could not be determined or nothing falls
73
71
  // inside it. The "last line" consumers read this rather than the raw newest event, so a stale event a
74
- // previous invocation left on the stream is never read as this run's position (joshuafolkken/kit#2395).
72
+ // previous invocation left on the stream is never read as this run's position.
75
73
  function last_scoped_event(
76
74
  events: ReadonlyArray<RunEvent>,
77
75
  scope: EventScope,
78
76
  ): RunEvent | undefined {
79
- // Trace events (a `josh ship` stage line, joshuafolkken/kit#2426) are skipped, as `read_last` skips
77
+ // Trace events (a `josh ship` stage line) are skipped, as `read_last` skips
80
78
  // them, so `run:step` reads the run's position rather than an unknown `ship-stage`.
81
79
  return scoped_events(events, scope)?.findLast(
82
80
  (event) => !run_event_stream.TRACE_KINDS.has(event.kind),
83
81
  )
84
82
  }
85
83
 
86
- // The positions a detached `josh ship` supervisor leaves (joshuafolkken/kit#2428). Each names its issue
84
+ // The positions a detached `josh ship` supervisor leaves. Each names its issue
87
85
  // (`#<N> …`), so they are self-scoping where the carry scope is not: the stream is shared by every lane,
88
86
  // and another lane's supervisor must never be read as this run's position.
89
87
  const SHIP_POSITION_KINDS: ReadonlySet<string> = new Set([
@@ -108,20 +106,27 @@ const BATCH_RECORD_KINDS: ReadonlySet<string> = new Set([
108
106
  const ISSUE_REFERENCE = /#(\d+)/u
109
107
 
110
108
  function is_foreign_ship_event(event: RunEvent, issue: string): boolean {
111
- return SHIP_POSITION_KINDS.has(event.kind) && !event.text.startsWith(`#${issue} `)
109
+ return (
110
+ SHIP_POSITION_KINDS.has(event.kind) && !event.text.startsWith(`${issue_cite.plain(issue)} `)
111
+ )
112
112
  }
113
113
 
114
114
  function is_own_ship_event(event: RunEvent, issue: string): boolean {
115
115
  return SHIP_POSITION_KINDS.has(event.kind) && !is_foreign_ship_event(event, issue)
116
116
  }
117
117
 
118
- // **A lane child's position is read only from events that name its own issue** (joshuafolkken/kit#3039).
119
- // The parent and every lane append to one stream under one carry scope, so anything else on it is another
120
- // run's: another lane's merge told a planned child to stop, the parent's stall (which names no issue)
121
- // pointed it at `backlog:next`, and another lane's cut at `run:cut --resume`. The child's own merge and
118
+ // The issue an event's text names, the way every reader here — and `run:board` — keys an event to a child.
119
+ function issue_named(event: RunEvent): string | undefined {
120
+ return ISSUE_REFERENCE.exec(event.text)?.[1]
121
+ }
122
+
123
+ // **A lane child's position is read only from events that name its own issue.** The parent and every
124
+ // lane append to one stream under one carry scope, so anything else on it is another run's: another
125
+ // lane's merge, the parent's stall (which names no issue) or another lane's cut would misdirect the
126
+ // child. The child's own merge and
122
127
  // outage stay, so the parent-only stop in `run-step.ts` still holds; the parent keeps reading everything.
123
128
  function names_issue(event: RunEvent, issue: string): boolean {
124
- return ISSUE_REFERENCE.exec(event.text)?.[1] === issue
129
+ return issue_named(event) === issue
125
130
  }
126
131
 
127
132
  function is_lane_position(event: RunEvent, issue: string): boolean {
@@ -164,12 +169,36 @@ function last_issue_event(
164
169
  return own.findLast((event) => is_own_ship_event(event, issue))
165
170
  }
166
171
 
172
+ // A child's launch and the endings `run:merge` settles it with — the ones `run:board` stops drawing it
173
+ // running on. A park or a split already ran `run:merge`, so a child closed after one owes nothing.
174
+ const LAUNCH_OR_SETTLE_KINDS: ReadonlySet<string> = new Set([
175
+ KIND.CHILD_LAUNCH,
176
+ KIND.MERGE,
177
+ KIND.PARK,
178
+ KIND.SPLIT,
179
+ ])
180
+
181
+ // Whether this invocation's newest launch of the issue has not yet been settled.
182
+ // `run:merge` is the merge event's one writer, so a child that closed without it stays running on
183
+ // `run:board`; `run:step` reads this to point the parent at the merge. An undetermined scope owes nothing.
184
+ function is_merge_owed(events: ReadonlyArray<RunEvent>, scope: EventScope, issue: string): boolean {
185
+ const newest = (scoped_events(events, scope) ?? []).findLast(
186
+ (event) => LAUNCH_OR_SETTLE_KINDS.has(event.kind) && names_issue(event, issue),
187
+ )
188
+
189
+ return newest?.kind === KIND.CHILD_LAUNCH
190
+ }
191
+
167
192
  const run_event_scope = {
168
193
  UNKNOWN_EVENT_SCOPE,
194
+ is_merge_owed,
195
+ issue_named,
169
196
  last_issue_event,
170
197
  last_scoped_event,
198
+ moment_of,
171
199
  scope_of,
172
200
  scoped_events,
201
+ since_own_launch,
173
202
  }
174
203
 
175
204
  export type { EventScope }