@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
@@ -4,18 +4,19 @@ import { CONTEXT_CUT_THRESHOLD } from '#scripts/cost-runtime/context-cut-thresho
4
4
  import { git_command } from '#scripts/git/git-command'
5
5
  import { git_common_directory } from '#scripts/git/git-common-directory'
6
6
  import { stamp_file } from '#scripts/josh/stamp-file'
7
+ import { stamp_record, type StampRecordSpec } from '#scripts/josh/stamp-record'
7
8
  import { lane_child_invocation } from '#scripts/lane/lane-child-invocation'
9
+ import { json_value } from '#scripts/lib/json-value'
8
10
  import { run_hold, type RunHold } from '#scripts/run/hold/run-hold'
9
11
  import { z } from 'zod'
10
12
  import { run_cut_handoff, type Handoff } from './run-cut-handoff'
11
13
 
12
- // joshuafolkken/kit#1839: a lane child is a detached `fullrun #<N>` process, and the thinking it
13
- // accumulates while implementing rides on every later API call in the same session — measured at 176K
14
- // of 204K output on joshuafolkken/kit#1837. This record lets that child **end its process before the
15
- // gate** and have a fresh one resume from the gate onward, so the accumulated thinking is dropped
16
- // rather than carried. The conversation is not persisted: joshuafolkken/kit#1567 found a compaction
17
- // does not reduce billing, so the fresh session reads the plan and the recorded decisions back off
18
- // GitHub and finds the implementation still sitting in the lane's own working tree.
14
+ // A lane child is a detached `fullrun #<N>` process, and the thinking it accumulates while
15
+ // implementing rides on every later API call in the same session. This record lets that child **end
16
+ // its process before the gate** and have a fresh one resume from the gate onward, so the accumulated
17
+ // thinking is dropped rather than carried. The conversation is not persisted — a compaction does not
18
+ // reduce billing — so the fresh session reads the plan and the recorded decisions back off GitHub and
19
+ // finds the implementation still sitting in the lane's own working tree.
19
20
  //
20
21
  // **The unit is the working tree, exactly as `run-hold.ts` keys itself** — one branch and one
21
22
  // uncommitted diff, a single lane — so the key is the work tree's own git directory (index 0), reused
@@ -28,7 +29,7 @@ import { run_cut_handoff, type Handoff } from './run-cut-handoff'
28
29
  // recover on its own — which issue, which branch, and that a declared cut (not a crash) put it here —
29
30
  // and the resume *verifies* the tree against it rather than restoring it.
30
31
  //
31
- // **No owner is recorded, and that is deliberate** (joshuafolkken/kit#1839 review). A cut relaunches
32
+ // **No owner is recorded, and that is deliberate.** A cut relaunches
32
33
  // exactly one fresh process — `begin_cut`'s exclusive create refuses a second cut — so there is no
33
34
  // live owner a resume must be blocked against, and recording the cutting session's pid would only
34
35
  // stall the resume against a process that is on its way out. **Resume uniqueness rests on the
@@ -37,17 +38,15 @@ import { run_cut_handoff, type Handoff } from './run-cut-handoff'
37
38
  // adopter.
38
39
 
39
40
  const CUT_PREFIX = 'josh-run-cut-'
40
- // **The two phase names are `agent-role-profile.ts`'s** (joshuafolkken/kit#2382): a lane child resumes
41
- // into a phase, and that module resolves the effort the resumed child runs at from the same name. Reading
42
- // them from there rather than restating the literals here is what keeps the phase a cut records and the
43
- // phase the effort table is keyed on from drifting. `PRE_GATE_PHASE` is the boundary before the gate;
44
- // `IMPLEMENTATION_PHASE` (joshuafolkken/kit#1933) drops the thinking accumulated *during* implementation
45
- // and resumes back into implementation (`resumes_into_implementation`); only the pre-gate cut resumes
46
- // into the gate. The setup-phase cut (joshuafolkken/kit#2346) was retired by joshuafolkken/kit#2489.
41
+ // **The two phase names are `agent-role-profile.ts`'s**: a lane child resumes into a phase, and that
42
+ // module resolves the effort the resumed child runs at from the same name. Reading them from there
43
+ // rather than restating the literals here is what keeps the phase a cut records and the phase the
44
+ // effort table is keyed on from drifting. `PRE_GATE_PHASE` is the boundary before the gate;
45
+ // `IMPLEMENTATION_PHASE` drops the thinking accumulated *during* implementation and resumes back into
46
+ // implementation (`resumes_into_implementation`); only the pre-gate cut resumes into the gate.
47
47
  const { PRE_GATE_PHASE, IMPLEMENTATION_PHASE } = agent_role_profile
48
- // **The measurement is the parent hand-off's, never a second one** (joshuafolkken/kit#1933). The lane
49
- // child decides whether to take this cut with `pnpm josh cost --cut`
50
- // — the same per-request billed-input measurement (`cost_verdict.per_request_cost`) the parent's
48
+ // **The measurement is the parent hand-off's, never a second one.** The lane child decides whether
49
+ // to take this cut with `pnpm josh cost --cut` — the same per-request billed-input measurement (`cost_verdict.per_request_cost`) the parent's
51
50
  // `pnpm josh cost --cut` hand-off uses (`backlogrun-progress.md` → "The hand-off"). The shared
52
51
  // threshold prevents the scheduler and worker boundaries from drifting apart.
53
52
  const IMPLEMENTATION_CONTEXT_THRESHOLD = CONTEXT_CUT_THRESHOLD
@@ -61,12 +60,11 @@ const CUT_MAX_AGE_HOURS = backlog_budget.WHOLE_RUN_BUDGET_HOURS
61
60
  const END_COMMAND = 'pnpm josh run:cut --end'
62
61
  const READ_COMMAND = 'pnpm josh run:cut --json'
63
62
 
64
- // The mechanical bound on the hand-off record's serialized size (joshuafolkken/kit#2346,
65
- // joshuafolkken/kit#2354). The cut is only worth its resume while the record a fresh process reads back
66
- // stays small — a record that grew to carry the conversation would defeat the whole point,
67
- // re-establishing at the resume the context the cut dropped. The scalar fields are each tiny (an issue
68
- // number, a branch name, a phase, an ISO timestamp, a flag); the `handoff` (joshuafolkken/kit#2354)
69
- // carries the user's instruction and a curated list of what is done, left and untouched — the
63
+ // The mechanical bound on the hand-off record's serialized size. The cut is only worth its resume
64
+ // while the record a fresh process reads back stays small — a record that grew to carry the
65
+ // conversation would defeat the whole point, re-establishing at the resume the context the cut
66
+ // dropped. The scalar fields are each tiny (an issue number, a branch name, a phase, an ISO timestamp,
67
+ // a flag); the `handoff` carries the user's instruction and a curated list of what is done, left and untouched — the
70
68
  // irreducible intent, not the conversation, so it stays a few short lines. The cap is set to hold that
71
69
  // and refuse a field that ever grew unbounded at the write rather than carrying it. `begin_cut`
72
70
  // enforces it.
@@ -75,7 +73,7 @@ const MAX_HANDOFF_BYTES = 8192
75
73
  interface RunCut {
76
74
  // The identity of the run this cut belongs to — `fullrun #<N>`, built through
77
75
  // `lane_child_invocation.child_invocation` so it is single-sourced with the dispatch that first launched the
78
- // child. **It is the resume-matching key, not the relaunch prompt** (joshuafolkken/kit#2022): the
76
+ // child. **It is the resume-matching key, not the relaunch prompt**: the
79
77
  // relaunch gives the fresh process `lane_child_invocation.resume_invocation` instead, while
80
78
  // `is_declared_cut` / `is_adopted_cut` still compare this field against `invocation_for(issue)` to
81
79
  // confirm the record belongs to the resuming issue.
@@ -84,20 +82,18 @@ interface RunCut {
84
82
  // The branch the implementation sits on. The resume refuses to continue on any other branch, so a
85
83
  // fresh process that started in the wrong tree is caught rather than gating someone else's work.
86
84
  branch: string
87
- // Where in the run the cut happened. One boundary exists today (`pre-gate`); the field is here so a
88
- // second one can be told apart rather than guessed.
85
+ // Where in the run the cut happened — `PRE_GATE_PHASE` or `IMPLEMENTATION_PHASE`.
89
86
  phase: string
90
87
  cut_at: string
91
88
  // Set by the cut, and spent by the adoption. A crash never sets it, which is what makes a declared
92
89
  // cut the only state that resumes, and spending it is what makes a resume unique.
93
90
  is_handed_off?: boolean | undefined
94
- // The instruction and work state the run was told to carry across the cut (joshuafolkken/kit#2354).
95
- // Optional so a record written by the six scalar fields alone still parses — the backward-compatible
96
- // legacy shape — while a resume into implementation refuses to continue without it (`classify_resume`
91
+ // The instruction and work state the run was told to carry across the cut. Optional so a pre-gate
92
+ // record of the scalar fields alone parses, while a resume into implementation refuses to continue without it (`classify_resume`
97
93
  // → `incomplete`), so a session is never silently continued lacking the instruction it needs.
98
94
  handoff?: Handoff | undefined
99
95
  // Set when `run:merge` found this cut still unadopted after every process of the lane had gone and
100
- // relaunched its successor itself (joshuafolkken/kit#2484). The fallback fires once per cut: a
96
+ // relaunched its successor itself. The fallback fires once per cut: a
101
97
  // successor that dies again before adopting is not relaunched a second time, so a lane that keeps
102
98
  // failing its resume is parked rather than relaunched forever.
103
99
  is_merge_relaunched?: boolean | undefined
@@ -108,20 +104,20 @@ interface CutState {
108
104
  branch: string
109
105
  is_dirty: boolean
110
106
  is_held: boolean
111
- // The issue a `fullrun` hold names, absent when the tree is not held by one (joshuafolkken/kit#2760).
107
+ // The issue a `fullrun` hold names, absent when the tree is not held by one.
112
108
  held_issue?: string | undefined
113
109
  }
114
110
 
115
111
  // The fields a cut is written from, bundled so `begin_cut` stays within the parameter limit. `phase`
116
112
  // is which boundary the cut was taken at — `PRE_GATE_PHASE` or `IMPLEMENTATION_PHASE` — and it is what
117
113
  // the resume reads to decide whether the fresh process continues to the gate or back into
118
- // implementation (joshuafolkken/kit#1933).
114
+ // implementation.
119
115
  interface CutSpec {
120
116
  issue: string
121
117
  branch: string
122
118
  phase: string
123
119
  // The instruction and work state to carry, absent for a pre-gate cut that resumes into the gate
124
- // rather than into implementation (joshuafolkken/kit#2354).
120
+ // rather than into implementation.
125
121
  handoff?: Handoff | undefined
126
122
  }
127
123
 
@@ -138,9 +134,9 @@ interface CutResumeRequest {
138
134
  // resume failure — wrong branch, a clean tree, an expired record, no declared cut, or a tree no longer
139
135
  // under its hold — is `stale`. A record a successor has already adopted — `is_handed_off` spent back to
140
136
  // `false` — is `handed-off`, so a process woken after its own cut is told to stop rather than sent to
141
- // investigate a tree that is not wrong (joshuafolkken/kit#1935). A record that matches the tree but
142
- // resumes into implementation without an instruction is `incomplete` — the run is not silently
143
- // continued lacking what it was told to do (joshuafolkken/kit#2354).
137
+ // investigate a tree that is not wrong. A record that matches the tree but resumes into implementation
138
+ // without an instruction is `incomplete` — the run is not silently continued lacking what it was told
139
+ // to do.
144
140
  type CutResume = 'resume' | 'stale' | 'handed-off' | 'incomplete'
145
141
 
146
142
  type CutRead =
@@ -149,9 +145,6 @@ type CutRead =
149
145
  | { kind: 'expired'; cut: RunCut }
150
146
  | { kind: 'unreadable' }
151
147
 
152
- const NONE_READ: CutRead = { kind: 'none' }
153
- const UNREADABLE_READ: CutRead = { kind: 'unreadable' }
154
-
155
148
  const run_cut_schema = z.object({
156
149
  invocation: z.string(),
157
150
  issue: z.string(),
@@ -178,42 +171,39 @@ function invocation_for(issue: string): string {
178
171
  }
179
172
 
180
173
  function parse_cut(raw: string): RunCut | undefined {
181
- try {
182
- const parsed = run_cut_schema.safeParse(JSON.parse(raw))
183
-
184
- return parsed.success ? parsed.data : undefined
185
- } catch {
186
- return undefined
187
- }
174
+ return json_value.parse_with(raw, run_cut_schema)
188
175
  }
189
176
 
190
- // A `cut_at` that is not a date is read as expired, for the reason `run-carry.ts` reads an unparsable
191
- // `started_at` that way: a record nothing can ever expire is the one state the bound exists to
192
- // prevent.
193
- function is_expired(cut: RunCut, now: Date): boolean {
194
- const started = Date.parse(cut.cut_at)
177
+ function cut_at_of(cut: RunCut): string {
178
+ return cut.cut_at
179
+ }
195
180
 
196
- if (Number.isNaN(started)) return true
181
+ // The expiry and the classification are `stamp-record.ts`'s, shared with `run-carry.ts` and
182
+ // `run-hold.ts`; what a `cut_at` that is not a date means is decided there.
183
+ const CUT_SPEC: StampRecordSpec<RunCut> = {
184
+ parse: parse_cut,
185
+ timestamp_of: cut_at_of,
186
+ max_age_ms: CUT_MAX_AGE_MS,
187
+ }
197
188
 
198
- return now.getTime() - started > CUT_MAX_AGE_MS
189
+ function is_expired(cut: RunCut, now: Date): boolean {
190
+ return stamp_record.is_older_than(cut_at_of(cut), CUT_MAX_AGE_MS, now)
199
191
  }
200
192
 
201
193
  function classify(raw: string | undefined, now: Date): CutRead {
202
- if (raw === undefined) return NONE_READ
203
-
204
- const cut = parse_cut(raw)
194
+ const read = stamp_record.classify(raw, CUT_SPEC, now)
205
195
 
206
- if (cut === undefined) return UNREADABLE_READ
196
+ if (!('record' in read)) return read
207
197
 
208
- return { kind: is_expired(cut, now) ? 'expired' : 'carried', cut }
198
+ return { kind: read.kind, cut: read.record }
209
199
  }
210
200
 
211
201
  function read_cut(target: string, now: Date = new Date()): CutRead {
212
202
  return classify(stamp_file.read_stamp_text(target), now)
213
203
  }
214
204
 
215
- // **The same read as `read_cut(cut_path(await worktree_directory()))`, taken synchronously**
216
- // (joshuafolkken/kit#1864). The pre-gate cut is enforced from a `PreToolUse` guard, and a guard
205
+ // **The same read as `read_cut(cut_path(await worktree_directory()))`, taken synchronously**.
206
+ // The pre-gate cut is enforced from a `PreToolUse` guard, and a guard
217
207
  // answers synchronously or not at all — so the one git call the path derivation needs is
218
208
  // `git_common_directory.own()`, the synchronous twin of the asynchronous reader, rather than a second
219
209
  // spelling of it. Everything after the path is already shared: `cut_path` keys the record and
@@ -247,7 +237,7 @@ function carried_cut_sync(
247
237
  return read.kind === 'carried' ? read.cut : undefined
248
238
  }
249
239
 
250
- // A lane's carried cut, read from outside the lane (joshuafolkken/kit#2484). The record is keyed to the
240
+ // A lane's carried cut, read from outside the lane. The record is keyed to the
251
241
  // lane's own git directory, so the parent — standing in the main checkout — resolves that directory
252
242
  // from the lane's path rather than its own, and gets the record path back to mark it.
253
243
  function lane_cut_sync(lane_directory: string): { target: string; cut: RunCut } | undefined {
@@ -272,15 +262,15 @@ function fresh_cut(spec: CutSpec, now: Date): RunCut {
272
262
  }
273
263
  }
274
264
 
275
- // **The implementation cut resumes back into implementation; the pre-gate cut resumes into the gate**
276
- // (joshuafolkken/kit#1933). The resume shape — the `resume-impl` verdict and the record cleared on
265
+ // **The implementation cut resumes back into implementation; the pre-gate cut resumes into the gate**.
266
+ // The resume shape — the `resume-impl` verdict and the record cleared on
277
267
  // adoption — is named once here rather than spelled as a phase comparison at each call site.
278
268
  function resumes_into_implementation(phase: string): boolean {
279
269
  return phase === IMPLEMENTATION_PHASE
280
270
  }
281
271
 
282
272
  // Whether a record serializes within the hand-off bound. The record a fresh process reads back must
283
- // stay small, or the resume re-establishes the very context the cut dropped (joshuafolkken/kit#2346).
273
+ // stay small, or the resume re-establishes the very context the cut dropped.
284
274
  function within_handoff_bound(cut: RunCut): boolean {
285
275
  return Buffer.byteLength(JSON.stringify(cut), 'utf8') <= MAX_HANDOFF_BYTES
286
276
  }
@@ -288,7 +278,7 @@ function within_handoff_bound(cut: RunCut): boolean {
288
278
  // Whether the record a spec would write fits the bound. `load_handoff` bounds the handoff alone, but the
289
279
  // record also carries the scalar fields, so a handoff just under the cap can still overflow once
290
280
  // assembled — the caller checks this before `begin_cut` so that case reports `bad-handoff` rather than
291
- // the exclusive-create's `busy` (joshuafolkken/kit#2354).
281
+ // the exclusive-create's `busy`.
292
282
  function record_within_bound(spec: CutSpec, now: Date = new Date()): boolean {
293
283
  return within_handoff_bound(fresh_cut(spec, now))
294
284
  }
@@ -327,22 +317,19 @@ function matches_state(cut: RunCut, request: CutResumeRequest): boolean {
327
317
 
328
318
  // A record a successor already adopted — the hand-off spent back to `false` for this issue's
329
319
  // invocation. It is told apart from a crash record (`is_handed_off` never set) so a process woken after
330
- // its own cut learns the run was carried on rather than being sent to investigate
331
- // (joshuafolkken/kit#1935).
320
+ // its own cut learns the run was carried on rather than being sent to investigate.
332
321
  function is_adopted_cut(cut: RunCut, issue: string): boolean {
333
322
  return cut.is_handed_off === false && cut.invocation === invocation_for(issue)
334
323
  }
335
324
 
336
325
  // A cut that resumes into implementation must carry the instruction; a pre-gate cut resumes into the
337
- // gate and needs none, so it always passes (joshuafolkken/kit#2354).
338
- // It reads a spec as well as a record, so `run:cut` refuses to write the cut its resume would refuse
339
- // (joshuafolkken/kit#2484) with the same predicate the resume answers `incomplete` on.
326
+ // gate and needs none, so it always passes. It reads a spec as well as a record, so `run:cut` refuses
327
+ // to write the cut its resume would refuse with the same predicate the resume answers `incomplete` on.
340
328
  function has_required_handoff(cut: Pick<RunCut, 'phase' | 'handoff'>): boolean {
341
329
  return !resumes_into_implementation(cut.phase) || run_cut_handoff.is_complete_handoff(cut.handoff)
342
330
  }
343
331
 
344
- // Whether `run:merge` may relaunch the successor of a lane whose processes have all gone
345
- // (joshuafolkken/kit#2484): a cut this issue declared and no successor adopted, carrying what its resume
332
+ // Whether `run:merge` may relaunch the successor of a lane whose processes have all gone: a cut this issue declared and no successor adopted, carrying what its resume
346
333
  // needs, and not relaunched by the fallback before. The tree itself is verified by the resume.
347
334
  function is_relaunchable(cut: RunCut, issue: string): boolean {
348
335
  return (
@@ -399,7 +386,7 @@ function hold_of(directory: string | undefined): RunHold | undefined {
399
386
  }
400
387
 
401
388
  // The issue a `fullrun` holds this tree for — what tells a `fullrun` held in its own checkout apart from
402
- // a person's tree (joshuafolkken/kit#2760). A `halfrun` or an in-session `backlogrun` child holds it
389
+ // a person's tree. A `halfrun` or an in-session `backlogrun` child holds it
403
390
  // too, but its cut would be resumed as `fullrun #N`, so only a hold `run:entry` marked names an issue.
404
391
  function fullrun_issue(hold: RunHold | undefined): string | undefined {
405
392
  return hold?.is_fullrun === true ? hold.issue : undefined
@@ -429,7 +416,7 @@ function busy_message(cut: RunCut): string {
429
416
  }
430
417
 
431
418
  // A successor already resumed this cut, so a process that reaches `--resume` after its own hand-off is
432
- // told to stop quietly rather than to investigate a tree that is not wrong (joshuafolkken/kit#1935).
419
+ // told to stop quietly rather than to investigate a tree that is not wrong.
433
420
  function handed_off_message(cut: RunCut): string {
434
421
  return `This cut was already handed off to a successor — ${describe_cut(cut)}. Nothing was resumed here; the run is being carried on by the process that adopted it, so this one has nothing to do.`
435
422
  }
@@ -442,8 +429,7 @@ function stale_message(cut: RunCut): string {
442
429
  }
443
430
 
444
431
  // The record matches the tree but resumes into implementation without an instruction, so the run would
445
- // be continued blind to what it was told to do — the failure mode joshuafolkken/kit#2354 exists to stop.
446
- // It is reported as a failure rather than a success, so the fresh process recovers the instruction
432
+ // be continued blind to what it was told to do. It is reported as a failure rather than a success, so the fresh process recovers the instruction
447
433
  // rather than restructuring a tree it does not understand.
448
434
  function incomplete_message(cut: RunCut): string {
449
435
  return `This cut carries no instruction to resume on — ${describe_cut(cut)}. Resume was refused rather than continuing without it; recover the run's instruction and work state before implementing, and clear the record with \`${END_COMMAND}\` if the run is over.`
@@ -7,13 +7,11 @@ import { stamp_file } from '#scripts/josh/stamp-file'
7
7
 
8
8
  // Starting a process that outlives this one, and keeping what it writes.
9
9
  //
10
- // **It was `run-wake-session.ts`'s until a second caller needed it** (joshuafolkken/kit#1749). The
11
- // supervisor was the only thing launching a detached session, so the launcher and the
12
- // `backlogrun`-specific invocation parsing sat in one file; a delegated child launched into a lane
13
- // needs exactly the launcher and none of the parsing. Copying it across would be the clone
14
- // `CLAUDE.md` prohibits — and this is the shape of clone that fails silently, because the copy that
15
- // drifts is the one that forgets to strip the parent session's environment and dies at its first API
16
- // request with nothing naming the cause (joshuafolkken/kit#1760).
10
+ // **It is its own module because two callers need the launcher and only one the parsing.** The
11
+ // supervisor and a delegated child launched into a lane both launch detached sessions. A copy would be
12
+ // the clone `CLAUDE.md` prohibits — and this is the shape of clone that fails silently, because the
13
+ // copy that drifts is the one that forgets to strip the parent session's environment and dies at its
14
+ // first API request with nothing naming the cause.
17
15
  //
18
16
  // **What is shared is the mechanism, never the argument vector.** Each caller composes its own
19
17
  // `LaunchArgv` out of its own constants and validated values — `run-wake-session.ts` rebuilds a
@@ -52,13 +50,13 @@ type AttachedLaunchResult =
52
50
  interface LaunchRequest {
53
51
  argv: LaunchArgv
54
52
  cwd: string
55
- // Where to keep what the child writes. **Absent means the output is discarded**, which is what every
56
- // launch did before joshuafolkken/kit#1746 and what a caller with nowhere to write still gets — the
57
- // log is an improvement on the diagnosis, never a precondition for starting a session.
53
+ // Where to keep what the child writes. **Absent means the output is discarded**, which is what a
54
+ // caller with nowhere to write gets — the log is an improvement on the diagnosis, never a
55
+ // precondition for starting a session.
58
56
  log_path?: string | undefined
59
57
  // Extra variables to set on the child, spread **after** the parent-session strip below, so a caller
60
58
  // can hand the child a fact the inherited environment does not carry — a dispatched lane child's mark
61
- // among them (joshuafolkken/kit#1904). Setting it here rather than mutating `process.env` keeps the
59
+ // among them. Setting it here rather than mutating `process.env` keeps the
62
60
  // launcher's own environment untouched, and spreading it last means an explicit value wins over an
63
61
  // inherited one of the same name.
64
62
  env?: Readonly<Record<string, string | undefined>>
@@ -127,16 +125,13 @@ function opened_log(log_path: string, on_error: (note: string) => void): number
127
125
  }
128
126
 
129
127
  // **The header is written by the launch and by nothing else.** Opening the file and announcing a
130
- // launch into it were one function until joshuafolkken/kit#1759, which is what made the file's
131
- // existence a side effect of launching: there was no way to obtain the descriptor without also
132
- // claiming a session had started. Split, `ensure_log` below can create the file the moment its path
133
- // is named, and a log nothing has launched into stays empty rather than carrying a header for a
134
- // session that never ran.
128
+ // launch into it are separate, so `ensure_log` below can create the file the moment its path is named,
129
+ // and a log nothing has launched into stays empty rather than carrying a header for a session that
130
+ // never ran.
135
131
  //
136
- // **It swallows its own failure, because a log failure is never a failed launch.** In `opened_log`
137
- // this write sat inside `open_log`'s `try`, so a full disk lost the header and started the session
138
- // anyway; reached from `launch`'s `try` it would answer `failed` instead and leave a cut
139
- // `backlogrun` asleep — the one outcome `open_log`'s comment below rules out.
132
+ // **It swallows its own failure, because a log failure is never a failed launch.** Reached from
133
+ // `launch`'s `try` it would answer `failed` instead and leave a cut `backlogrun` asleep — the one
134
+ // outcome `open_log`'s comment below rules out.
140
135
  function stamped(
141
136
  descriptor: number | undefined,
142
137
  argv: LaunchArgv,
@@ -154,13 +149,10 @@ function stamped(
154
149
 
155
150
  // **Opening the log is allowed to fail, and a failure is not a failed launch.** A temp directory that
156
151
  // cannot be written to is a reason to lose the diagnosis, never a reason to leave the run asleep — so
157
- // this answers `undefined` and the spawn goes ahead discarding output, exactly as it did before
158
- // joshuafolkken/kit#1746.
152
+ // this answers `undefined` and the spawn goes ahead discarding output.
159
153
  //
160
154
  // **It says so rather than failing quietly, though.** `--list` and every warning name this path
161
- // unconditionally, so a silent failure would send a person at three in the morning to a file holding
162
- // nothing of this run — the silent diagnosis joshuafolkken/kit#1746 was filed about, arrived at from
163
- // the other side.
155
+ // unconditionally, so a silent failure would send a person to a file holding nothing of this run.
164
156
  function open_log(
165
157
  log_path: string | undefined,
166
158
  on_error: (note: string) => void,
@@ -176,15 +168,11 @@ function open_log(
176
168
  }
177
169
  }
178
170
 
179
- // **The file exists because its path was resolved, not because something launched into it**
180
- // (joshuafolkken/kit#1759). `--list`, the already-running branch of `--start` and every warning name
181
- // this path unconditionally, and until this existed none of the three created anything: the file was
182
- // written only by the process that launched, at the moment it launched. So a supervisor started
183
- // before the log existed — detached, and alive for the hours a `backlogrun` takes — left the path
184
- // named for the whole run with nothing ever at it, and the one report a failure could make went to
185
- // that same absent file. Creating it where it is named is what makes the name a promise the reader
186
- // can check: an empty log says "this supervisor started nothing", which is an answer, where a
187
- // missing one said nothing at all.
171
+ // **The file exists because its path was resolved, not because something launched into it.**
172
+ // `--list`, the already-running branch of `--start` and every warning name this path unconditionally,
173
+ // so creating it where it is named is what makes the name a promise the reader can check: an empty
174
+ // log says "this supervisor started nothing", which is an answer, where a missing one says nothing at
175
+ // all.
188
176
  //
189
177
  // **No header is written here**, because nothing has been launched — see `stamped` above.
190
178
  function ensure_log(log_path: string, on_error: (note: string) => void): void {
@@ -193,17 +181,16 @@ function ensure_log(log_path: string, on_error: (note: string) => void): void {
193
181
  if (descriptor !== undefined) closeSync(descriptor)
194
182
  }
195
183
 
196
- // **`detached` is what puts the child outside the conversation, and discarding its output was never
197
- // part of that** (joshuafolkken/kit#1746). A process left attached is a child of the agent session,
184
+ // **`detached` is what puts the child outside the conversation, and discarding its output is no part
185
+ // of that.** A process left attached is a child of the agent session,
198
186
  // and the session cut is exactly the moment this has to survive — so a supervisor that the harness
199
187
  // backgrounds, the way `run:progress` is backgrounded, would die at the one event it exists to handle.
200
- // That argument is about the parent link alone. `stdio: 'ignore'` rode along with it and threw away
201
- // the one record that could say why a woken session exited without claiming the carry record, which is
202
- // the whole of what joshuafolkken/kit#1746 could not diagnose. Pointed at a file, the child is just as
203
- // detached and the output survives it.
188
+ // That argument is about the parent link alone. `stdio: 'ignore'` would throw away the one record that
189
+ // can say why a woken session exited without claiming the carry record; pointed at a file, the child is
190
+ // just as detached and the output survives it.
204
191
  //
205
192
  // **The parent session's environment is removed here, and that is why it is here rather than at each
206
- // call site** (joshuafolkken/kit#1760). A detached child outlives the invocation that spawned it, so a
193
+ // call site**. A detached child outlives the invocation that spawned it, so a
207
194
  // loopback proxy exported into that invocation is a dead address by the time the child dials it —
208
195
  // `ConnectionRefused` at the first API request, with nothing anywhere naming the cause. A second
209
196
  // launcher that composed its own `SpawnOptions` would be one edit away from that failure.
@@ -279,16 +266,14 @@ function ignore_spawn(_pid: number): void {
279
266
  // that array is a constant or an integer the caller composed, because each caller takes the text it was
280
267
  // handed apart and rebuilds it rather than passing it on.
281
268
  //
282
- // **It is what was left after the flow was actually broken, not something used instead of breaking
283
- // it.** Three earlier rounds tried to satisfy the rule by inspecting the string harder and moved it not
284
- // at all; the rebuild is what severed the flow, and the same change retired the pattern CodeQL had
285
- // found an exponential backtrack in — **`js/redos` is gone from this file rather than suppressed, and
286
- // this marker covers nothing of it.** What the rule still sees is the shape of a `spawn` reached from a
287
- // file that was read, and that shape is the design: starting a process from a record is the whole of
288
- // what a supervisor does.
269
+ // **It is what is left after the flow is actually broken, not something used instead of breaking it.**
270
+ // Inspecting the string harder does not satisfy the rule; the rebuild is what severs the flow —
271
+ // **`js/redos` is absent from this file rather than suppressed, and this marker covers nothing of
272
+ // it.** What the rule still sees is the shape of a `spawn` reached from a file that was read, and that
273
+ // shape is the design: starting a process from a record is the whole of what a supervisor does.
289
274
  //
290
- // Scoped to that one line on the user's explicit instruction of 2026-09-10 (joshuafolkken/kit#1719).
291
- // No project-wide exclusion and no change to the Sonar configuration.
275
+ // Scoped to that one line on the user's explicit instruction. No project-wide exclusion and no change
276
+ // to the Sonar configuration.
292
277
  function spawned(
293
278
  request: LaunchRequest,
294
279
  log: number | undefined,