@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,7 +4,7 @@ import { prior_comment_read } from './prior-comment-read'
4
4
  import { shell_segments } from './shell-segments'
5
5
 
6
6
  // The trigger and the delivered text behind the `issue-comments` row of `delivered-rules.ts`, moved
7
- // out of the enumeration so the list stays a list (joshuafolkken/kit#3264).
7
+ // out of the enumeration so the list stays a list.
8
8
 
9
9
  // **A shell line carries several commands, and the subcommand has to be the one being invoked.**
10
10
  // Each segment is judged on its own, anchored at its start, so `gh issue comment <N> -b "… gh issue
@@ -29,7 +29,7 @@ const ISSUES_PATH = /repos\/[^\s'"]*\/issues\//u
29
29
 
30
30
  // A field projection — `--jq` for `gh api`, `--json` for `gh issue view` — whose value never names the
31
31
  // body. `gh api …/issues/<N> --jq '{state, labels}'` fetches the Issue only to read its state or its
32
- // labels, which is a state check and not the body read this rule guards (joshuafolkken/kit#1905); a
32
+ // labels, which is a state check and not the body read this rule guards; a
33
33
  // `--jq '.body'` still names the body and stays a body read. The value is taken quoted or bare, so the
34
34
  // comma list `--json state,labels` and the expression `'{state, labels}'` are read the same way.
35
35
  const FIELD_PROJECTION = /(?:--jq|--json)[= ]\s*('[^']*'|"[^"]*"|\S+)/u
@@ -78,20 +78,26 @@ function reads_issue_comments(command: string): boolean {
78
78
  }
79
79
 
80
80
  // **The refusal hands over the command that fixes it**, because reading is not the same as
81
- // obeying: a sentence saying "also read the comments" is prose of exactly the kind
82
- // joshuafolkken/kit#1344 measured as moving nothing, while a refused body read leaves the run
83
- // holding the reissue that makes the comments *present*. The conflict rule ships with it — a
84
- // delivery that said only "read them" would hand back the deciding at the moment nothing else is
85
- // open to read, the mistake joshuafolkken/kit#1518 corrected for the WIP cap.
81
+ // obeying: a sentence saying "also read the comments" is prose that moves nothing, while a refused
82
+ // body read leaves the run holding the reissue that makes the comments *present*. The conflict rule
83
+ // ships with it — a delivery that said only "read them" would hand back the deciding at the moment
84
+ // nothing else is open to read.
85
+ //
86
+ // **The command comes first, the reason after**. The first line is the guard's
87
+ // label and then the call itself — `issue:read` prints the body and every comment in one read, `<N>`
88
+ // being the Issue the refused call named — so a run that reads only the opening still leaves holding
89
+ // the fix. The label keeps `time_transcript_line.guard_from_refusal` naming this guard, not the command.
86
90
  const ISSUE_COMMENTS_REASON =
87
- "⛔ an Issue's comments are part of the Issue: read them before implementing, not only the body. " +
88
- 'A decision recorded after the body was written lives only in a comment — a corrected diagnosis ' +
89
- '(joshuafolkken/kit#1537), a changed default and an added acceptance criterion ' +
91
+ '⛔ issue comments: pnpm josh issue:read <N>\n' +
92
+ "Run that in place of this read: <N> is the Issue it names, and an Issue's comments are part of " +
93
+ 'the Issue, so the body and every comment come back together. Without josh, add ' +
94
+ "`gh api repos/{owner}/{repo}/issues/<N>/comments --jq '.[] | {user: .user.login, created_at, " +
95
+ "body}'` beside the body read, or `gh issue view <N> --comments` where GraphQL is reachable.\n" +
96
+ 'Why: a decision recorded after the body was written lives only in a comment — a corrected ' +
97
+ 'diagnosis (joshuafolkken/kit#1537), a changed default and an added acceptance criterion ' +
90
98
  '(joshuafolkken/kit#1520), a scope handed to another Issue (joshuafolkken/kit#1304) — and ' +
91
99
  'nothing in the body says it was superseded, so a body-only reader builds the wrong thing and ' +
92
- 'sees no contradiction. Reissue this read with the comments included: ' +
93
- "`gh api repos/{owner}/{repo}/issues/<N>/comments --jq '.[] | {user: .user.login, created_at, " +
94
- "body}'` beside the body read, or `gh issue view <N> --comments` where GraphQL is reachable. " +
100
+ 'sees no contradiction. ' +
95
101
  'Then the later text is the agreement in force — a comment supersedes the body it contradicts — ' +
96
102
  "except for two answers that are not the run's to make: work a comment reassigns to another " +
97
103
  'Issue is out of scope and is not implemented, and a comment saying the Issue no longer has a ' +
@@ -107,6 +113,8 @@ const ROW = {
107
113
  reason: ISSUE_COMMENTS_REASON,
108
114
  already_satisfied: prior_comment_read.already_read_for_call,
109
115
  keeps: bash_triggers.on_bash_command(reads_issue_comments),
116
+ // The opening the reason carried before it led with the command.
117
+ former_reasons: ["⛔ an Issue's comments are part of the Issue: read them before implementing"],
110
118
  }
111
119
 
112
120
  const issue_comments = {
@@ -2,8 +2,8 @@ import { time_shell } from '#scripts/time-runtime/time-shell'
2
2
  import { bash_triggers } from './bash-triggers'
3
3
  import { shell_segments } from './shell-segments'
4
4
 
5
- // The trigger and the delivered text behind the `josh-git-bare` row of `delivered-rules.ts`
6
- // (joshuafolkken/kit#2297): a `pnpm josh git` issued without `-y` / `--yes`.
5
+ // The trigger and the delivered text behind the `josh-git-bare` row of `delivered-rules.ts`:
6
+ // a `pnpm josh git` issued without `-y` / `--yes`.
7
7
  //
8
8
  // **A bare `pnpm josh git` cannot succeed from an agent, and it wastes the time it takes to fail.** The
9
9
  // command prompts to confirm the staging, and with no TTY the prompt falls to its cancel branch —
@@ -9,26 +9,24 @@ import {
9
9
  } from '#scripts/time-runtime/time-transcript-line'
10
10
  import { run_tail_rule } from './run-tail-rule'
11
11
 
12
- // A dispatched lane child is stopped from backgrounding a long-running josh command (joshuafolkken/kit#2704).
12
+ // A dispatched lane child is stopped from backgrounding a long-running josh command.
13
13
  //
14
14
  // **A headless child's turn-end is its process's end.** A lane child runs as `claude -p`, and there the
15
15
  // background Bash tasks die with the turn — so "a background command's exit re-invokes the session"
16
- // (`background-commands.md`) does not hold. joshuafolkken/kit#2457 refused a non-detached `josh ship`
17
- // for exactly that reason, but only `ship`: the #2606 child backgrounded `pnpm josh gate && pnpm josh git
18
- // -y …` directly, ended its turn, and the gate died at `exit code 143` with the implementation, the
19
- // scoped checks, a review round and the live verification all done — parked instead of merged.
16
+ // (`background-commands.md`) does not hold. A child that backgrounds `pnpm josh gate && pnpm josh git
17
+ // -y …` and ends its turn sees the gate die at `exit code 143` with the implementation, the scoped
18
+ // checks, a review round and the live verification all done — parked instead of merged.
20
19
  //
21
20
  // **So the refusal is put at the launch, and it names the detached route.** The region from the gate to
22
21
  // the merge belongs to `pnpm josh ship --detach` in a child (`chain-rule.md` step 0), whose supervisor
23
22
  // outlives the turn.
24
23
  //
25
- // **`ship` is in the set too, `--detach` or not** (joshuafolkken/kit#3027). #2457 detaches it in a child,
26
- // but only after its preflight — the scoped checks — has passed in the calling process, so a
27
- // backgrounded `ship` is killed at the turn's end before any supervisor exists: the #3022 child did
28
- // exactly that and was parked as a failure. Issued in the foreground it returns at `launched` within the
29
- // tool timeout, and the supervisor carries the rest. A backgrounded `ship` alone is no longer refused but
30
- // rewritten into that foreground call (`foreground_input`, joshuafolkken/kit#3154); one chained after
31
- // another long command is still refused.
24
+ // **`ship` is in the set too, `--detach` or not**. It detaches in a child, but only after its
25
+ // preflight — the scoped checks — has passed in the calling process, so a backgrounded `ship` is
26
+ // killed at the turn's end before any supervisor exists. Issued in the foreground it returns at
27
+ // `launched` within the tool timeout, and the supervisor carries the rest. A backgrounded `ship` alone
28
+ // is not refused but rewritten into that foreground call (`foreground_input`); one chained after
29
+ // another long command is refused.
32
30
  //
33
31
  // **Its stop-time half reads the same fact from the other side.** A backgrounded task the transcript
34
32
  // launched but never saw finish is still running, and in a child the stop about to happen kills it —
@@ -60,7 +58,7 @@ function long_commands_of(command: string): Array<string> {
60
58
 
61
59
  // A call whose long-running work is `ship` alone. In a child a foreground `ship` already detaches
62
60
  // itself after its preflight (`run-ship-cli.ts` → `should_detach`), so the only fault in backgrounding
63
- // it is the flag — and the flag is what the hook rewrites (joshuafolkken/kit#3154).
61
+ // it is the flag — and the flag is what the hook rewrites.
64
62
  function ships_alone(command: string): boolean {
65
63
  const names = long_commands_of(command)
66
64
 
@@ -103,7 +101,7 @@ function is_background_long_run(
103
101
  return is_candidate(call) && is_lane_child()
104
102
  }
105
103
 
106
- // **A backgrounded `ship` in a child is rewritten, not refused** (joshuafolkken/kit#3154). The refusal
104
+ // **A backgrounded `ship` in a child is rewritten, not refused**. The refusal
107
105
  // asked for nothing but the same call in the foreground — 14 of 41 lane `ship` refusals in one measured
108
106
  // backlogrun were that round trip, paid at the run's largest context. The input with the flag cleared,
109
107
  // or `undefined` for every call this does not apply to.
@@ -137,8 +135,8 @@ function unfinished_ids(
137
135
  return launched.filter((id) => id !== '' && !finished.has(id))
138
136
  }
139
137
 
140
- // The background tasks the tail launched and never saw finish — commands and subagents alike
141
- // (joshuafolkken/kit#2774), since a lane child's turn-end kills either.
138
+ // The background tasks the tail launched and never saw finish — commands and subagents alike,
139
+ // since a lane child's turn-end kills either.
142
140
  function pending_background_ids(tail: string): ReadonlyArray<string> {
143
141
  return unfinished_ids(tail, (block) => [block.background_id, block.agent_id])
144
142
  }
@@ -1,9 +1,10 @@
1
+ import { platform_temporary } from '#scripts/josh/platform-temporary'
1
2
  import { lane_child_marker } from '#scripts/lane/lane-child-marker'
2
3
  import { bash_triggers } from './bash-triggers'
3
4
  import { shell_segments } from './shell-segments'
4
5
 
5
6
  // A dispatched lane child is stopped from running its parent's budget commands, and told the live
6
- // carry record is its parent's rather than a competing run (joshuafolkken/kit#2267).
7
+ // carry record is its parent's rather than a competing run.
7
8
  //
8
9
  // **A child read its own parent as a competitor and refused to implement.** On 2026-09-21, inside
9
10
  // `backlogrun #2252`, a lane launched for #2258 stopped before touching a line: the child ran
@@ -32,13 +33,46 @@ import { shell_segments } from './shell-segments'
32
33
  // canonical form only — `shell_segments.is_josh_command` canonicalizes an alias before the match.
33
34
  const RUN_BUDGET_COMMANDS: ReadonlySet<string> = new Set(['run:merge', 'run:carry'])
34
35
 
36
+ // **A `run:carry` call prefixed with a non-empty `JOSH_TEMP_ROOT` cannot reach the parent's record**,
37
+ // because every record it keeps is a `stamp_path` under that root. It is how
38
+ // live evidence of it is taken, so it is let through rather than refused — refusing it is what sent a
39
+ // child round the guard to the bare CLI, which then ended its parent's record. `run:merge` stays
40
+ // refused under any root: besides its record it syncs main, closes lanes and writes to GitHub, none of
41
+ // which a redirected root moves. Only a leading
42
+ // assignment counts: an `export` in an earlier segment is not read, and is refused as before. A bare
43
+ // variable is refused too: shell state does not survive between tool calls, so `$EV` set in an
44
+ // earlier call expands to nothing here, and an empty root is the live run's default one.
45
+ //
46
+ // One leading assignment, its value read as the shell reads it: a run of quoted strings, `$(…)`
47
+ // substitutions (one nested level) and plain characters, so a space inside a quote or a substitution
48
+ // does not end it. Cut at the first space, `JOSH_TEMP_ROOT=$(mktemp -d -t ev) pnpm josh run:merge`
49
+ // left `ev) pnpm …` behind, whose head the command reader rejects, and slipped the refusal.
50
+ const LEADING_ASSIGNMENT = String.raw`[A-Za-z_]\w*=(?:"[^"]*"|'[^']*'|\$\((?:[^()]|\([^()]*\))*\)|[^\s"'])*\s+`
51
+
52
+ const REDIRECTED_PREFIX = new RegExp(
53
+ String.raw`^(?:${LEADING_ASSIGNMENT})*${platform_temporary.TEMP_ROOT_KEY}=(?!""|''|\s|$|"?\$\{?[A-Za-z_])`,
54
+ 'u',
55
+ )
56
+
57
+ // The budget commands with an effect outside the temp root, so a redirected root does not isolate them.
58
+ const SHARED_STATE_COMMANDS: ReadonlySet<string> = new Set(['run:merge'])
59
+
60
+ // The leading assignments, stripped before the command is read. The shared command reader unwraps
61
+ // `$(…)` into the command position — the subshell is the real work in a cost row — so without this
62
+ // `JOSH_TEMP_ROOT="$(mktemp -d)" pnpm josh run:merge` read as `mktemp` and slipped the refusal.
63
+ const LEADING_ASSIGNMENTS = new RegExp(`^(?:${LEADING_ASSIGNMENT})*`, 'u')
64
+
65
+ function is_budget_segment(segment: string): boolean {
66
+ const commands = REDIRECTED_PREFIX.test(segment) ? SHARED_STATE_COMMANDS : RUN_BUDGET_COMMANDS
67
+
68
+ return shell_segments.is_josh_command(segment.replace(LEADING_ASSIGNMENTS, ''), commands)
69
+ }
70
+
35
71
  // A segment that invokes one of the parent's budget commands. Segment-wise and alias-expanded for the
36
72
  // reason every command predicate in this directory is: one shell line carries several commands, and a
37
73
  // name quoted inside a body is not the command being invoked.
38
74
  function invokes_budget_command(command: string): boolean {
39
- return shell_segments
40
- .segments_of(command)
41
- .some((segment) => shell_segments.is_josh_command(segment, RUN_BUDGET_COMMANDS))
75
+ return shell_segments.segments_of(command).some((segment) => is_budget_segment(segment))
42
76
  }
43
77
 
44
78
  // **The command test comes first and the world is consulted second**, so the `is_child_of` read — the
@@ -71,7 +105,9 @@ const LANE_CARRY_CONFLICT_REASON =
71
105
  'dispatched child cannot ask, and there is nothing to decide. Continue implementing this Issue; the ' +
72
106
  'parent owns the budget and counts the outcome at the return. The procedure is ' +
73
107
  '`.claude/skills/workflow-commands/pre-gate-cut.md` and `backlogrun-progress.md` → "The hand-off". ' +
74
- 'This rule fires on every occurrence, not once per run.'
108
+ 'Live evidence of `run:carry` is taken with a fresh `JOSH_TEMP_ROOT` prefixed to the call, which this ' +
109
+ 'rule lets through (joshuafolkken/kit#3458); `run:merge` is refused under any root, because it also ' +
110
+ 'syncs main, closes lanes and writes to GitHub. This rule fires on every occurrence, not once per run.'
75
111
 
76
112
  // The row itself, so `delivered-rules.ts` spreads one entry. `is_trigger` reads the input through
77
113
  // `on_bash_command` — the `Bash` tool-name gate every command row shares — and `decide` returns true
@@ -3,16 +3,13 @@ import { lane_child_marker } from '#scripts/lane/lane-child-marker'
3
3
  import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
4
4
 
5
5
  // A dispatched lane child's interactive ask is refused and routed to the park procedure, delivered at
6
- // the call it binds on (joshuafolkken/kit#2201).
6
+ // the call it binds on.
7
7
  //
8
- // **This is joshuafolkken/kit#2034's rule, moved one tool-call earlier.** #2034 gave a lane child that
9
- // stops for a decision the right instruction — park the question on the Issue before it notifies — but
10
- // wired it to the `confirmation` notify. A child that reaches for `AskUserQuestion` never gets that
11
- // far: the ask is refused by the harness, the turn ends there, and #2034's guard never fires. Measured
12
- // on 2026-09-20 inside `backlogrun #2163 --only`: #2178's child hit a Tier B branch, called
13
- // `AskUserQuestion`, was refused, and died with the question stranded in its exit record's
14
- // `permission_denials`. So the trigger is the ask itself, not the stop that a routed child would have
15
- // reached afterward.
8
+ // **This is `lane-park.ts`'s rule, moved one tool-call earlier.** That rule parks the question on the
9
+ // Issue before the `confirmation` notify. A child that reaches for `AskUserQuestion` never gets that
10
+ // far: the ask is refused by the harness, the turn ends there with the question stranded in its exit
11
+ // record's `permission_denials`, and the park guard never fires. So the trigger is the ask itself,
12
+ // not the stop that a routed child would have reached afterward.
16
13
  //
17
14
  // **A hook denial is guidance, where the harness's own denial is death.** The harness refuses an
18
15
  // interactive ask in a headless session by ending the turn; this rule refuses the same call with a
@@ -4,18 +4,15 @@ import { lane_handoff } from '#scripts/lane/lane-handoff'
4
4
  import { bash_triggers } from './bash-triggers'
5
5
  import { shell_segments } from './shell-segments'
6
6
 
7
- // A dispatched lane child records its park before it stops, delivered at the call it binds on
8
- // (joshuafolkken/kit#2034).
7
+ // A dispatched lane child records its park before it stops, delivered at the call it binds on.
9
8
  //
10
- // **A lane child that stopped for a decision left no question behind.** A `backlogrun` dispatches a
11
- // child as a detached `fullrun #<N>` process, and its only route to ask a person anything is to park
12
- // the Issue — `needs-decision` plus a comment carrying the question. Measured twice in one run on
13
- // 2026-09-14: #2012's child had its `AskUserQuestion` refused (it is headless), wrote the question
14
- // into its final message, sent a `confirmation` Telegram and exited; #2011 wrote a Tier B decision to
15
- // its final message and exited the same way. Neither left a label or a comment, so the parent found an
16
- // OPEN Issue with `in-progress` and no question, and a person looking at the Issue could not tell what
17
- // to answer. The child is the one process that knows the question, the options and whether it stashed,
18
- // and that knowledge died with its turn.
9
+ // **A lane child that stops for a decision must leave the question behind.** A `backlogrun`
10
+ // dispatches a child as a detached `fullrun #<N>` process, and its only route to ask a person
11
+ // anything is to park the Issue — `needs-decision` plus a comment carrying the question. A child that
12
+ // writes the question only into its final message leaves the parent an OPEN Issue with `in-progress`
13
+ // and no question, and a person looking at the Issue cannot tell what to answer. The child is the one
14
+ // process that knows the question, the options and whether it stashed, and that knowledge dies with
15
+ // its turn.
19
16
  //
20
17
  // **The stop is one shell call, so the rule is delivered rather than resident.** `CLAUDE.md` mandates
21
18
  // a `confirmation` Telegram before any mid-workflow stop, so `pnpm josh notify --task-type
@@ -53,7 +50,7 @@ function is_confirmation_notify(command: string): boolean {
53
50
  }
54
51
 
55
52
  // The josh notify invocation in either spelling, anywhere in a blob of text. The stop guard
56
- // (joshuafolkken/kit#2121) asks whether a confirmation notify was issued *this turn* by scanning the
53
+ // asks whether a confirmation notify was issued *this turn* by scanning the
57
54
  // transcript tail rather than one command, so the "is it a stop notification" judgement stays here —
58
55
  // the same `CONFIRMATION_TASK_TYPE` regex, never a second copy of it.
59
56
  const NOTIFY_INVOCATION = /josh\s+(?:notify|nf)\b/u
@@ -64,7 +61,7 @@ const NOTIFY_INVOCATION = /josh\s+(?:notify|nf)\b/u
64
61
  // on purpose — the guard's safe direction is to read a real stop notification as present, so a run
65
62
  // that sent one is never told it did not.
66
63
  //
67
- // **A command that sent the Telegram itself prints this line instead** (joshuafolkken/kit#3099):
64
+ // **A command that sent the Telegram itself prints this line instead**:
68
65
  // `run:entry` notifies from inside its own stop, so no `josh notify` invocation reaches the transcript,
69
66
  // and the line it prints is what the tail carries. One constant, printed there and matched here.
70
67
  const COMMAND_NOTIFY_MARKER = 'stop notified: a confirmation Telegram was sent by this command'
@@ -81,7 +78,7 @@ function mentions_confirmation_notify(text: string): boolean {
81
78
  // human-or-child fact the pre-gate cut reads: a person working in a lane carries no mark and sees no
82
79
  // refusal, and a mark that leaked in naming another issue is read as a person too.
83
80
  //
84
- // **A child that handed its region to the detached ship is not parking** (joshuafolkken/kit#2962): its
81
+ // **A child that handed its region to the detached ship is not parking**: its
85
82
  // stop waits on nobody, so the park checklist is the wrong advice. `lane_handoff.is_handed_off` is the
86
83
  // reading the `Stop` hook stands its notify demand down on, so the two hooks cannot disagree.
87
84
  function is_parking_child(directory: string = process.cwd()): boolean {
@@ -126,8 +123,7 @@ const LANE_PARK_REASON =
126
123
  'before it stops", and the park itself is `backlogrun-park.md` → "park and continue".'
127
124
 
128
125
  // The row itself, so `delivered-rules.ts` spreads one entry. **Once per run rather than `decide`, and
129
- // no `already_satisfied`.** The stop ends the turn, so it is not the recurring act joshuafolkken/kit#1570
130
- // wrote `decide` for. It carries no `already_satisfied` because the park it asks for is a GitHub label a
126
+ // no `already_satisfied`.** The stop ends the turn, so it is not the recurring act `decide` is for. It carries no `already_satisfied` because the park it asks for is a GitHub label a
131
127
  // synchronous guard cannot read, and the transcript-tail alternative would read a child that merely
132
128
  // *read* `backlogrun-park.md` — whose prose carries the `labels[]=needs-decision` command — as
133
129
  // compliant and fall silent on a real violation (the header above). `keeps` reads an actual
@@ -6,8 +6,7 @@ import { lane_park } from './lane-park'
6
6
  import { shell_segments } from './shell-segments'
7
7
  import { tail_commands } from './tail-commands'
8
8
 
9
- // A dispatched lane child that split its own Issue is stopped from parking the epic it promoted
10
- // (joshuafolkken/kit#3296).
9
+ // A dispatched lane child that split its own Issue is stopped from parking the epic it promoted.
11
10
  //
12
11
  // **A split is not a park.** On 2026-10-06, inside a `backlogrun`, the lane child for #3255 promoted
13
12
  // its Issue to an epic with `pnpm josh epic --promote 3255`, filed #3291–#3294, then applied
@@ -4,24 +4,21 @@ import { bash_triggers } from './bash-triggers'
4
4
  import { git_argv } from './git-argv'
5
5
  import { shell_segments } from './shell-segments'
6
6
 
7
- // A dispatched lane child is stopped from running `git switch main` — the fifth of the "always fails or
8
- // answers nothing" misfires joshuafolkken/kit#2297 catalogued (joshuafolkken/kit#2313). A lane is a
9
- // linked work tree, `main` is checked out by the primary work tree, and git allows one branch in one
10
- // work tree at a time — so the call is **structurally guaranteed to fail** with `fatal: 'main' is
11
- // already used by worktree at '<the primary checkout>'`. It was measured 11 times in the 2026-09-21
12
- // backlogrun, always in a lane child.
7
+ // A dispatched lane child is stopped from running `git switch main` — a call that always fails. A
8
+ // lane is a linked work tree, `main` is checked out by the primary work tree, and git allows one
9
+ // branch in one work tree at a time — so the call is **structurally guaranteed to fail** with
10
+ // `fatal: 'main' is already used by worktree at '<the primary checkout>'`.
13
11
  //
14
12
  // **The source is the parent's step, not the child's.** The distributed procedures write
15
- // `git switch main && git pull` as the step before reading the dependency scope, and that is *correct in
13
+ // `pnpm josh ms` as the step before reading the dependency scope, and that is *correct in
16
14
  // the primary checkout* (`backlogrun-lanes.md` → "Once per repository, before the first lane opens"). A
17
15
  // child that runs the same line verbatim fails every time, and the failure is not free: a refused call
18
- // drops the independent calls batched beside it (joshuafolkken/kit#2177), so a batching child loses the
16
+ // drops the independent calls batched beside it, so a batching child loses the
19
17
  // most. `josh main:sync` (`main-sync.ts`) already refuses inside a linked work tree for the same reason;
20
18
  // this is the *raw* form of the same call, refused before it fails rather than after.
21
19
  //
22
20
  // **It refuses rather than rewrites, because a `PreToolUse` guard can only `allow` / `deny` a command,
23
- // never substitute a different one** (joshuafolkken/kit#2313 decision comment). So the refusal hands back
24
- // the next command, exactly as #2297 required of `test:declared`: the lane is already on its own issue
21
+ // never substitute a different one**. So the refusal hands back the next command: the lane is already on its own issue
25
22
  // branch, branched from a fresh default before it opened, and the latest default is brought in during the
26
23
  // gate by `pnpm josh main:merge` — so skip the step and keep implementing on the current branch.
27
24
  //
@@ -30,8 +27,8 @@ import { shell_segments } from './shell-segments'
30
27
  // differs per repository — so hardcoding `main` would both miss a renamed default and need an async
31
28
  // `get_default_branch`. A lane child belongs on its own `<issue>-lane` branch; a `git switch` to anything
32
29
  // else is the misfire. Its own branch is read synchronously from the checkout path
33
- // (`lane_paths.lane_issue_of`), the weaker-but-synchronous lane test a guard is bound to
34
- // (joshuafolkken/kit#1864). `git switch` alone is covered — it never means a pathspec, so there is no
30
+ // (`lane_paths.lane_issue_of`), the weaker-but-synchronous lane test a guard is bound to.
31
+ // `git switch` alone is covered — it never means a pathspec, so there is no
35
32
  // ambiguity — and `git checkout -- <path>` stays `worktree-guard.ts`'s.
36
33
  //
37
34
  // **The command test comes first and the world is consulted second**, so the lane read runs only on the
@@ -113,7 +110,7 @@ const LANE_SWITCH_MAIN_REASON =
113
110
  'and the latest default is brought in during the gate by `pnpm josh main:merge`. So skip this step ' +
114
111
  'and keep implementing on the current branch — no `git switch`, no `git pull`. `pnpm josh main:sync` ' +
115
112
  '(`josh ms`) is refused in a lane for the same reason, and a lane is finished with `pnpm josh ' +
116
- 'lane:close <issue-number>`. The parent runs `git switch main && git pull` in the primary checkout ' +
113
+ 'lane:close <issue-number>`. The parent runs `pnpm josh ms` in the primary checkout ' +
117
114
  'before each lane opens, never the child — `backlogrun-lanes.md` and `backlogrun-child.md` are the ' +
118
115
  'single sources. This rule fires on every occurrence, not once per run.'
119
116
 
@@ -4,7 +4,7 @@ import { z } from 'zod'
4
4
  import { filing_cap } from './filing-cap'
5
5
 
6
6
  // The text of the person's last prompt on a transcript tail — what the stop guard's citation row
7
- // reads to tell a `#N` the person quoted from one the run brought in itself (joshuafolkken/kit#2819).
7
+ // reads to tell a `#N` the person quoted from one the run brought in itself.
8
8
  //
9
9
  // **A prompt is `filing_cap`'s prompt line, minus what the harness wrote there.** A skill's body is a
10
10
  // `user` line with no tool result too, but it carries `isMeta`; a background task's completion notice
@@ -6,15 +6,15 @@ import { oracle_firing, type FiringPoint } from './oracle-firing'
6
6
  import { shell_segments } from './shell-segments'
7
7
  import { tail_commands } from './tail-commands'
8
8
 
9
- // The one generic rule that turns a declared firing point into a delivered guard (joshuafolkken/kit#2324).
9
+ // The one generic rule that turns a declared firing point into a delivered guard.
10
10
  // `oracle-firing.ts` records, per oracle, the action that must consult it first; this generates a
11
11
  // `DeliveredRule` for each such oracle — refused when the run performs the governed action without
12
12
  // having run the oracle's command earlier, stood down once it has.
13
13
  //
14
14
  // **It is `issue-scout`'s shape, generalized.** Each generated row refuses until its
15
- // `already_satisfied` stand-down reads the command off the tail — refuse the governed call, hand back the command,
16
- // stand down once that command is on the tail. What `issue-scout` and `issue-fold` hand-wrote per
17
- // oracle, this reads from the registry: the refusal is assembled from the oracle's decision, command,
15
+ // `already_satisfied` stand-down reads the command off the tail — refuse the governed call, hand back
16
+ // the command, stand down once that command is on the tail. What `issue-scout` hand-wrote per oracle,
17
+ // this reads from the registry: the refusal is assembled from the oracle's decision, command,
18
18
  // answer vocabulary and single source, so no oracle carries a hand-written refusal of its own. **No new
19
19
  // delivery path** — the rows join `DELIVERED_RULES` and fire through the same `create_transcript_guard`
20
20
  // shell every other row uses.
@@ -71,7 +71,7 @@ function row_for(oracle: Oracle, firing_point: FiringPoint): DeliveredRule {
71
71
 
72
72
  // One row per oracle that declared a firing point, in registry order. Spread into `DELIVERED_RULES`
73
73
  // after the filing rows, so a firing point that overlaps a filing (`issue:lint`) delivers on the
74
- // reissue rather than ahead of `wip-cap` / `issue-scout`.
74
+ // reissue rather than ahead of `filing-cap`.
75
75
  const ROWS: ReadonlyArray<DeliveredRule> = oracle_firing
76
76
  .firing_oracles()
77
77
  .map(({ oracle, firing_point }) => row_for(oracle, firing_point))
@@ -1,7 +1,7 @@
1
1
  import { decision_oracle } from './decision-oracle'
2
2
  import { shell_segments } from './shell-segments'
3
3
 
4
- // The firing-point declaration every decision oracle owes (joshuafolkken/kit#2324). An oracle records a
4
+ // The firing-point declaration every decision oracle owes. An oracle records a
5
5
  // *decision*, but nothing on the oracle entry says which action must consult it first — so the 32
6
6
  // oracles have a command each and a firing point almost never. This module is the missing half: for
7
7
  // every oracle name, either the governed action (a `FiringPoint`, matched as a Bash command) or the
@@ -32,8 +32,8 @@ function is_package_add(command: string): boolean {
32
32
  }
33
33
 
34
34
  // The firing point wired — the oracle whose governed call can be named without guessing: the package
35
- // add. The Issue filing's `issue:lint` point left with joshuafolkken/kit#2808, when `josh issue:file`
36
- // began running the lint itself. The rest declare why none can be named, so the unenforced oracles are
35
+ // add. The Issue filing needs no `issue:lint` point, because `josh issue:file` runs the lint itself.
36
+ // The rest declare why none can be named, so the unenforced oracles are
37
37
  // visible rather than silently missing.
38
38
  const FIRING: ReadonlyMap<string, FiringPoint> = new Map([
39
39
  [
@@ -49,7 +49,7 @@ const FIRING: ReadonlyMap<string, FiringPoint> = new Map([
49
49
  // oracles already gated or sequenced elsewhere. `PHASE` — the governed act is a run phase, not one
50
50
  // shell call. `READ` — it answers a status question and governs no action of its own. `SELF` — the
51
51
  // command is itself the act, with nothing earlier to gate. A guard for any of these would fire on the
52
- // wrong turn or double-gate a call another rule already claims; `release:scope` (joshuafolkken/kit#2334)
52
+ // wrong turn or double-gate a call another rule already claims; `release:scope`
53
53
  // is the one that *trails* rather than gates — it reads state that only exists after the merge.
54
54
  const PHASE =
55
55
  'the act it governs is a phase of a run, not a single shell call a trigger can anchor on'
@@ -60,7 +60,7 @@ const LATEST_SCOPE_REASON =
60
60
  'the run it governs (`pnpm josh latest`) is already gated at its point of use by the latest-gate; ' +
61
61
  'a firing here would double-gate it'
62
62
  // `josh issue:file` runs the scout, the lint and `epic:bundle` itself, and a filing made any other way
63
- // is refused by the `direct-filing` row (joshuafolkken/kit#2808) — so none of the three has a call left
63
+ // is refused by the `direct-filing` row — so none of the three has a call left
64
64
  // to gate before.
65
65
  const FILING_STEP_REASON =
66
66
  '`pnpm josh issue:file` runs it as one of its filing steps, and a direct filing is refused by the ' +
@@ -83,10 +83,7 @@ const NOT_NAMED: ReadonlyMap<string, string> = new Map([
83
83
  ['epic:bundle', FILING_STEP_REASON],
84
84
  ['issue:scout', FILING_STEP_REASON],
85
85
  ['issue:lint', FILING_STEP_REASON],
86
- [
87
- 'issue:fold',
88
- 'the second filing it governs is already gated by the `issue-fold` delivered rule',
89
- ],
86
+ ['issue:fold', '`issue:file` asks the fold question itself on the second filing it governs'],
90
87
  ['cases', READ],
91
88
  ['issue:state', READ],
92
89
  ['run:cut:resume', SELF],
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'
3
3
  import { decision_oracle } from './decision-oracle'
4
4
  import { oracle_firing } from './oracle-firing'
5
5
 
6
- // `josh oracle:list` — print the decision oracles enumeration (joshuafolkken/kit#2117).
6
+ // `josh oracle:list` — print the decision oracles enumeration.
7
7
  //
8
8
  // A command rather than a paragraph: the criterion is `prompts/collaboration-workflow/residency.md`
9
9
  // → question 0, and the list is what it points at. Adding an oracle here is the whole action;
@@ -18,7 +18,7 @@ function pad_field(label: string): string {
18
18
  }
19
19
 
20
20
  // The firing point an oracle governs, or the reason none is named — one line either way, so `oracle:list`
21
- // shows at a glance which oracles a guard enforces and which stay visibly unenforced (joshuafolkken/kit#2324).
21
+ // shows at a glance which oracles a guard enforces and which stay visibly unenforced.
22
22
  function firing_line(oracle: (typeof decision_oracle.DECISION_ORACLES)[0]): string {
23
23
  const declaration = oracle_firing.declaration_for(oracle.name)
24
24
 
@@ -3,12 +3,12 @@ import { direct_pr_create } from './direct-pr-create'
3
3
  import { index_guard } from './index-guard'
4
4
  import { protected_files } from './protected-files'
5
5
 
6
- // The three rows that close the deny-list bypasses (joshuafolkken/kit#2983), gathered so
6
+ // The three rows that close the deny-list bypasses, gathered so
7
7
  // `delivered-rules.ts` spreads one entry. Each reads argv or a file path rather than a glob: an index
8
8
  // mutation in any git spelling, a recursive forced `rm` or a destructive `gh` call, and a Read of
9
9
  // `.env` or an edit of a consumer's `.claude/settings.json`. Their triggers are disjoint from every
10
10
  // other row's — `git restore` is split with `worktree-mutation` by `--staged` alone. The fourth row,
11
- // `direct-pr-create` (joshuafolkken/kit#3183), closes the same kind of gap for `gh pr create`, which
11
+ // `direct-pr-create`, closes the same kind of gap for `gh pr create`, which
12
12
  // the deny list never listed: it claims `gh pr create` and a `gh api` write to the pulls collection.
13
13
  const ROWS = [
14
14
  index_guard.ROW,