@joshuafolkken/kit 1.1050.0 → 1.1128.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 (630) hide show
  1. package/.claude/settings.json +9 -8
  2. package/.claude/skills/epic-commands/SKILL.md +5 -7
  3. package/.claude/skills/workflow-commands/SKILL.md +20 -12
  4. package/.claude/skills/workflow-commands/background-commands.md +36 -84
  5. package/.claude/skills/workflow-commands/backlogrun-child.md +1 -1
  6. package/.claude/skills/workflow-commands/backlogrun-lanes.md +8 -6
  7. package/.claude/skills/workflow-commands/backlogrun-progress.md +30 -33
  8. package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -12
  9. package/.claude/skills/workflow-commands/backlogrun.md +2 -2
  10. package/.claude/skills/workflow-commands/chain-rule.md +4 -2
  11. package/.claude/skills/workflow-commands/delegation.md +3 -3
  12. package/.claude/skills/workflow-commands/followup-reference.md +1 -1
  13. package/.claude/skills/workflow-commands/followup.md +7 -3
  14. package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
  15. package/.claude/skills/workflow-commands/fullrun.md +8 -6
  16. package/.claude/skills/workflow-commands/halfrun.md +19 -21
  17. package/.claude/skills/workflow-commands/issue-comments.md +1 -1
  18. package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
  19. package/.claude/skills/workflow-commands/issue-scout.md +1 -1
  20. package/.claude/skills/workflow-commands/kickoff.md +9 -4
  21. package/.claude/skills/workflow-commands/latest-gate.md +8 -16
  22. package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
  23. package/.claude/skills/workflow-commands/observation-filing.md +3 -3
  24. package/.claude/skills/workflow-commands/pre-gate-cut.md +4 -8
  25. package/.claude/skills/workflow-commands/prerequisite.md +1 -1
  26. package/.claude/skills/workflow-commands/prrun.md +36 -0
  27. package/.claude/skills/workflow-commands/retrospective.md +1 -1
  28. package/.claude/skills/workflow-commands/split-assessment.md +4 -18
  29. package/.claude/skills/workflow-commands/working-tree-hold.md +22 -2
  30. package/.codex/hooks.json +16 -20
  31. package/.github/actions/setup-node/action.yml +33 -0
  32. package/.github/actions/setup-pnpm/action.yml +93 -0
  33. package/.github/dependabot.yml +5 -1
  34. package/.github/workflows/auto-tag.yml +2 -3
  35. package/.github/workflows/ci.yml +31 -134
  36. package/.github/workflows/dependabot-auto-merge.yml +1 -0
  37. package/.github/workflows/pr-classification.yml +6 -44
  38. package/.github/workflows/production.yml +1 -0
  39. package/.github/workflows/publish.yml +43 -47
  40. package/.github/workflows/sonar-qube.yml +41 -4
  41. package/.pnpmfile.mjs +29 -0
  42. package/AGENTS.md +5 -2
  43. package/CLAUDE.md +33 -27
  44. package/GEMINI.md +5 -2
  45. package/README.md +66 -20
  46. package/SECURITY.md +37 -6
  47. package/cspell/index.yaml +6 -1
  48. package/dist/CLAUDE.basic.md +6 -6
  49. package/dist/CLAUDE.md +33 -27
  50. package/dist/CLAUDE.static.md +6 -6
  51. package/dist/config-merge/index.js +48 -12
  52. package/dist/hooks/batch-guard.js +4 -4
  53. package/dist/hooks/{chunk-7VPDUBRN.js → chunk-4JZDP5X5.js} +152 -155
  54. package/dist/hooks/{chunk-HJIISEAC.js → chunk-5SD2YM7Z.js} +5 -13
  55. package/dist/hooks/{chunk-NAS4C7GP.js → chunk-77J7IEQM.js} +2 -2
  56. package/dist/hooks/{chunk-DMQN45FN.js → chunk-7HVB7SZG.js} +3 -3
  57. package/dist/hooks/{chunk-RLDX5SOC.js → chunk-AIOIOMPX.js} +4413 -1970
  58. package/dist/hooks/{chunk-5BK3K7V4.js → chunk-M7QKEKWO.js} +873 -2049
  59. package/dist/hooks/{chunk-WQ4OSBSS.js → chunk-MKVGBQPA.js} +2 -2
  60. package/dist/hooks/{chunk-EJDX2TOB.js → chunk-NXYMNPUQ.js} +7 -88
  61. package/dist/hooks/{chunk-NJQOBE6L.js → chunk-QVLT52OV.js} +2 -7
  62. package/dist/hooks/{chunk-GQ7KP45M.js → chunk-XYUIQOW3.js} +2 -2
  63. package/dist/hooks/codex-hook-adapter.js +12 -48
  64. package/dist/hooks/duplicate-read-guard.js +5 -5
  65. package/dist/hooks/format-edited.js +2 -2
  66. package/dist/hooks/inputs.json +280 -0
  67. package/dist/hooks/investigation-guard.js +5 -5
  68. package/dist/hooks/pretool-guard.js +9 -9
  69. package/dist/hooks/session-lang.js +0 -1
  70. package/dist/hooks/stop-guard.js +192 -333
  71. package/dist/josh.js +240 -148
  72. package/dist/managed-marker/index.js +2 -1
  73. package/dist/version/index.js +70 -78
  74. package/eslint/rules/promise.js +5 -0
  75. package/eslint/rules/unicorn.js +3 -2
  76. package/package.json +26 -5
  77. package/pnpm-workspace.yaml +5 -7
  78. package/prompts/collaboration-workflow/glossary.md +17 -0
  79. package/prompts/collaboration-workflow/issue-citation.md +5 -5
  80. package/prompts/collaboration-workflow/issue-template.md +1 -1
  81. package/prompts/collaboration-workflow/operating-rules.md +5 -5
  82. package/prompts/collaboration-workflow/overview.md +13 -1
  83. package/prompts/collaboration-workflow/principles.md +9 -0
  84. package/prompts/collaboration-workflow/report-format.md +1 -1
  85. package/prompts/collaboration-workflow/residency.md +3 -3
  86. package/prompts/collaboration-workflow/rule-delivery.md +1 -1
  87. package/prompts/collaboration-workflow/turn-batching.md +3 -3
  88. package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
  89. package/prompts/collaboration-workflow/wip-cap.md +25 -22
  90. package/prompts/collaboration-workflow.md +6 -8
  91. package/prompts/review-rubric.md +1 -1
  92. package/prompts/review.md +3 -3
  93. package/prompts/sonar-hotspot-handling.md +11 -3
  94. package/prompts/testing-guide.md +3 -3
  95. package/scripts/adopt/adopt-toolkits.ts +0 -2
  96. package/scripts/adopt/adopt.ts +0 -2
  97. package/scripts/agent/agent-argv.ts +0 -2
  98. package/scripts/agent/agent-diagnostics.ts +1 -1
  99. package/scripts/agent/agent-role-profile.ts +0 -7
  100. package/scripts/agent/claude-agent-argv.ts +0 -2
  101. package/scripts/agent/codex-agent-argv.ts +1 -1
  102. package/scripts/agent/codex-hooks.ts +92 -0
  103. package/scripts/agent/interactive-ask.ts +1 -1
  104. package/scripts/auto-ok/auto-ok-cli.ts +6 -16
  105. package/scripts/backlog/backlog-arrival.ts +30 -10
  106. package/scripts/backlog/backlog-budget-cli.ts +15 -16
  107. package/scripts/backlog/backlog-budget.ts +0 -2
  108. package/scripts/backlog/backlog-defect-priority.ts +2 -2
  109. package/scripts/backlog/backlog-drive-cli.ts +10 -8
  110. package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
  111. package/scripts/backlog/backlog-drive-named.ts +2 -1
  112. package/scripts/backlog/backlog-drive.ts +76 -16
  113. package/scripts/backlog/backlog-named.ts +0 -3
  114. package/scripts/backlog/backlog-next.ts +9 -15
  115. package/scripts/backlog/backlog-offer-cli.ts +6 -19
  116. package/scripts/backlog/backlog-plan-cli.ts +1 -7
  117. package/scripts/backlog/backlog-plan.ts +30 -19
  118. package/scripts/backlog/backlog-pool.ts +3 -6
  119. package/scripts/backlog/backlog-rank.ts +2 -2
  120. package/scripts/backlog/backlog-ready.ts +39 -10
  121. package/scripts/backlog/backlog-scope.ts +1 -3
  122. package/scripts/backlog/backlog-stalled-detect.ts +2 -2
  123. package/scripts/backlog/backlog-stalled.ts +0 -1
  124. package/scripts/backlog/backlog-waves.ts +5 -2
  125. package/scripts/behavior/behavior-cli.ts +1 -1
  126. package/scripts/build/build-codex-hooks.ts +26 -0
  127. package/scripts/build/build-hooks.ts +85 -9
  128. package/scripts/build/hook-bundle-stamp.ts +111 -0
  129. package/scripts/cases/cases-cli.ts +1 -1
  130. package/scripts/cases/cases-logic.ts +1 -1
  131. package/scripts/ci/composite-actions.ts +30 -0
  132. package/scripts/ci/pr-classification.ts +3 -3
  133. package/scripts/claude/workflow-destination.ts +10 -1
  134. package/scripts/clone/clone-fingerprint.ts +0 -1
  135. package/scripts/clone/clone-scan-cli.ts +1 -1
  136. package/scripts/clone/clone-scan.ts +1 -1
  137. package/scripts/config-merge/json-format.ts +0 -1
  138. package/scripts/config-merge/parse-jsonc.ts +33 -3
  139. package/scripts/config-merge/patch-json-key.ts +13 -6
  140. package/scripts/config-merge/patch-yaml-list.ts +1 -1
  141. package/scripts/cost-runtime/codex-usage.ts +2 -9
  142. package/scripts/cost-runtime/cost-attribute.ts +0 -1
  143. package/scripts/cost-runtime/cost-cli.ts +3 -10
  144. package/scripts/cost-runtime/cost-corpus.ts +0 -2
  145. package/scripts/cost-runtime/cost-format.ts +0 -3
  146. package/scripts/cost-runtime/cost-pricing.ts +0 -1
  147. package/scripts/cost-runtime/cost-tokens.ts +0 -1
  148. package/scripts/delegation/delegation-cli.ts +1 -1
  149. package/scripts/delegation/delegation-policy.ts +0 -1
  150. package/scripts/delegation/duplicate-read-guard.ts +0 -8
  151. package/scripts/delegation/fanout-cli.ts +1 -1
  152. package/scripts/delegation/fanout.ts +0 -2
  153. package/scripts/delegation/investigation-reads.ts +1 -164
  154. package/scripts/discovery/repo-map-logic.ts +0 -1
  155. package/scripts/discovery/repo-party-cli.ts +1 -1
  156. package/scripts/doctor/doctor-consumer.ts +6 -10
  157. package/scripts/doctor/doctor-io.ts +9 -13
  158. package/scripts/doctor/doctor-logic.ts +0 -4
  159. package/scripts/doctor/doctor.ts +14 -9
  160. package/scripts/document/backlogrun-parent-read-set.ts +12 -1
  161. package/scripts/document/document-byte-budget.ts +5 -5
  162. package/scripts/document/document-byte-check.ts +0 -1
  163. package/scripts/document/document-read-cli.ts +0 -2
  164. package/scripts/document/document-section-cli.ts +1 -1
  165. package/scripts/document/document-section.ts +0 -3
  166. package/scripts/document/edit-files-cli.ts +0 -1
  167. package/scripts/document/entry-read-budget.ts +21 -7
  168. package/scripts/document/entry-read-set.ts +32 -8
  169. package/scripts/document/lane-child-read-set.ts +8 -6
  170. package/scripts/document/read-files-cli.ts +0 -4
  171. package/scripts/document/read-set-cli.ts +0 -2
  172. package/scripts/document/read-set-point-of-use.ts +9 -3
  173. package/scripts/document/read-set-pricing.ts +0 -1
  174. package/scripts/document/read-set-trim.ts +4 -2
  175. package/scripts/epic/epic-add.ts +1 -1
  176. package/scripts/epic/epic-audit-cli.ts +1 -4
  177. package/scripts/epic/epic-audit-orphans.ts +1 -3
  178. package/scripts/epic/epic-audit-rationale.ts +0 -1
  179. package/scripts/epic/epic-audit-report.ts +0 -2
  180. package/scripts/epic/epic-audit.ts +8 -22
  181. package/scripts/epic/epic-bundle-cli.ts +1 -1
  182. package/scripts/epic/epic-bundle-evidence.ts +0 -1
  183. package/scripts/epic/epic-bundle-referenced.ts +1 -5
  184. package/scripts/epic/epic-bundle.ts +0 -4
  185. package/scripts/epic/epic-busy.ts +4 -5
  186. package/scripts/epic/epic-candidate-confirm.ts +0 -5
  187. package/scripts/epic/epic-classify.ts +2 -2
  188. package/scripts/epic/epic-cli-argv.ts +0 -1
  189. package/scripts/epic/epic-close-comment.ts +1 -1
  190. package/scripts/epic/epic-close.ts +5 -2
  191. package/scripts/epic/epic-cross-repo.ts +2 -4
  192. package/scripts/epic/epic-decision.ts +0 -1
  193. package/scripts/epic/epic-fetch.ts +2 -2
  194. package/scripts/epic/epic-index.ts +2 -3
  195. package/scripts/epic/epic-issue.ts +1 -15
  196. package/scripts/epic/epic-lane-offer.ts +9 -8
  197. package/scripts/epic/epic-nested.ts +1 -1
  198. package/scripts/epic/epic-next-read.ts +1 -3
  199. package/scripts/epic/epic-next-views.ts +0 -1
  200. package/scripts/epic/epic-next.ts +1 -10
  201. package/scripts/epic/epic-parse.ts +0 -1
  202. package/scripts/epic/epic-promote.ts +0 -9
  203. package/scripts/epic/epic-rank.ts +2 -2
  204. package/scripts/epic/epic-read.ts +1 -2
  205. package/scripts/epic/epic-reconcile.ts +1 -1
  206. package/scripts/epic/epic-reference.ts +1 -13
  207. package/scripts/epic/epic-relation-recheck.ts +1 -1
  208. package/scripts/epic/epic-relations.ts +1 -1
  209. package/scripts/epic/epic-remove.ts +1 -1
  210. package/scripts/epic/epic-report.ts +0 -1
  211. package/scripts/epic/epic-run.ts +2 -3
  212. package/scripts/epic/epic-shape.ts +1 -1
  213. package/scripts/epic/epic-solo-stale.ts +107 -0
  214. package/scripts/epic/epic-solo.ts +3 -2
  215. package/scripts/epic/epic-triage.ts +1 -1
  216. package/scripts/epic/epic-validate.ts +1 -1
  217. package/scripts/epic/epic.ts +1 -1
  218. package/scripts/exports/unused-members-cli.ts +53 -0
  219. package/scripts/{git → followup}/followup-issue-number.ts +1 -6
  220. package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
  221. package/scripts/{git → followup}/git-followup-finish.ts +1 -3
  222. package/scripts/{git → followup}/git-followup-flush.ts +2 -2
  223. package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
  224. package/scripts/{git → followup}/git-followup-label.ts +4 -4
  225. package/scripts/followup/git-followup-merged.ts +112 -0
  226. package/scripts/{git → followup}/git-followup-pending.ts +1 -1
  227. package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
  228. package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
  229. package/scripts/{git → followup}/git-pr-followup.ts +53 -16
  230. package/scripts/gate/core-budget.ts +3 -9
  231. package/scripts/gate/gate-plan.ts +7 -4
  232. package/scripts/gate/gate-report.ts +0 -6
  233. package/scripts/gate/gate-tree.ts +1 -1
  234. package/scripts/gate/pre-commit-type-check.ts +0 -6
  235. package/scripts/gate/project-checks.ts +7 -8
  236. package/scripts/gate/scoped-green.ts +0 -1
  237. package/scripts/gate/type-check-step.ts +1 -1
  238. package/scripts/gate/verification-gate.ts +0 -2
  239. package/scripts/gh/fix-gh-packages.ts +15 -12
  240. package/scripts/gh/gh-spawn.ts +2 -2
  241. package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
  242. package/scripts/{git → gh}/git-gh-check.ts +2 -1
  243. package/scripts/{git → gh}/git-gh-exec.ts +1 -1
  244. package/scripts/{git → gh}/git-gh-failure.ts +1 -1
  245. package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
  246. package/scripts/{git → gh}/git-gh-issue-list.ts +13 -10
  247. package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
  248. package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
  249. package/scripts/{git → gh}/git-gh-issue-write.ts +4 -1
  250. package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +4 -1
  251. package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
  252. package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
  253. package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
  254. package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
  255. package/scripts/{git → gh}/git-gh-pr.ts +3 -1
  256. package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
  257. package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
  258. package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
  259. package/scripts/{git → gh}/git-pr-checks.ts +2 -1
  260. package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
  261. package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
  262. package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
  263. package/scripts/{git → gh}/git-pr.ts +3 -3
  264. package/scripts/git/changed-file-scope.ts +0 -1
  265. package/scripts/git/git-branch.ts +3 -6
  266. package/scripts/git/git-command.ts +6 -1
  267. package/scripts/git/git-commit.ts +1 -1
  268. package/scripts/git/git-common-directory.ts +80 -24
  269. package/scripts/git/git-error.ts +66 -9
  270. package/scripts/git/git-issue.ts +1 -1
  271. package/scripts/git/git-preflight.ts +2 -2
  272. package/scripts/git/git-prompt.ts +6 -31
  273. package/scripts/git/git-push.ts +1 -1
  274. package/scripts/git/git-spawn-sync.ts +65 -0
  275. package/scripts/git/git-spawn.ts +5 -4
  276. package/scripts/git/git-staging.ts +1 -0
  277. package/scripts/git/git-status.ts +1 -1
  278. package/scripts/git/git-workflow.ts +1 -1
  279. package/scripts/git/gone-branch.ts +1 -0
  280. package/scripts/git/listing-cutoff.ts +1 -1
  281. package/scripts/git/main-merge.ts +1 -1
  282. package/scripts/git/main-sync.ts +19 -1
  283. package/scripts/git/parse-json-array.ts +0 -3
  284. package/scripts/git/repository-lock.ts +16 -16
  285. package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
  286. package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +2 -7
  287. package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
  288. package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
  289. package/scripts/hooks/codex-hook-adapter.ts +0 -1
  290. package/scripts/hooks/edited-cspell.ts +1 -1
  291. package/scripts/hooks/format-edited-file.ts +2 -0
  292. package/scripts/hooks/pre-push-unit.ts +0 -4
  293. package/scripts/hooks/pretool-guard.ts +22 -4
  294. package/scripts/hooks/reserved-run.ts +1 -1
  295. package/scripts/hooks/step-zero-notice.ts +76 -0
  296. package/scripts/hooks/stop-guard.ts +47 -21
  297. package/scripts/init/claude-plugin-config.ts +4 -5
  298. package/scripts/init/hook-command-rewrite.ts +16 -8
  299. package/scripts/init/hook-launch.ts +41 -15
  300. package/scripts/init/init-basic.ts +2 -5
  301. package/scripts/init/init-file-action.ts +54 -0
  302. package/scripts/init/init-logic-migrate.ts +35 -17
  303. package/scripts/init/init-logic-secretlint.ts +1 -1
  304. package/scripts/init/init-logic.ts +10 -19
  305. package/scripts/init/init.ts +11 -71
  306. package/scripts/init/kit-written-paths.ts +2 -0
  307. package/scripts/init/project-profile.ts +9 -17
  308. package/scripts/init/start-exec.ts +1 -1
  309. package/scripts/init/start-setup-pr.ts +6 -6
  310. package/scripts/init/start-steps.ts +3 -1
  311. package/scripts/issue/behavior-change-lint.ts +0 -1
  312. package/scripts/issue/defect-rate-cli.ts +64 -23
  313. package/scripts/issue/defect-rate.ts +1 -2
  314. package/scripts/{git → issue}/git-next-issues.ts +3 -3
  315. package/scripts/issue/issue-backlinks-cli.ts +1 -5
  316. package/scripts/issue/issue-backlinks.ts +7 -14
  317. package/scripts/issue/issue-cite-cli.ts +2 -6
  318. package/scripts/issue/issue-cite.ts +12 -8
  319. package/scripts/issue/issue-classification.ts +1 -9
  320. package/scripts/issue/issue-closing-pr.ts +4 -4
  321. package/scripts/issue/issue-comment-cli.ts +2 -2
  322. package/scripts/issue/issue-file-cli.ts +5 -5
  323. package/scripts/issue/issue-file.ts +7 -14
  324. package/scripts/issue/issue-fold-cli.ts +1 -1
  325. package/scripts/issue/issue-fold-existing-cli.ts +1 -1
  326. package/scripts/{git → issue}/issue-labels.ts +8 -0
  327. package/scripts/issue/issue-lint-cli.ts +1 -1
  328. package/scripts/issue/issue-merged.ts +2 -2
  329. package/scripts/{git → issue}/issue-rank.ts +1 -1
  330. package/scripts/issue/issue-read-cli.ts +8 -47
  331. package/scripts/issue/issue-read.ts +0 -2
  332. package/scripts/issue/issue-report-failures.ts +80 -0
  333. package/scripts/issue/issue-scout-cli.ts +1 -7
  334. package/scripts/issue/issue-scout-closed.ts +2 -2
  335. package/scripts/issue/issue-scout.ts +0 -2
  336. package/scripts/issue/issue-state-cli.ts +5 -46
  337. package/scripts/issue/issue-state.ts +1 -5
  338. package/scripts/issue/markdown-section.ts +21 -6
  339. package/scripts/issue/measure-rerun-cli.ts +74 -15
  340. package/scripts/issue/reproduction-measure.ts +1 -1
  341. package/scripts/josh/cli-body.ts +1 -1
  342. package/scripts/josh/file-map-stamp.ts +0 -3
  343. package/scripts/josh/josh-command-map.ts +2 -0
  344. package/scripts/josh/josh-commands-ai.ts +9 -102
  345. package/scripts/josh/josh-commands-backlog.ts +5 -1
  346. package/scripts/josh/josh-commands-development.ts +8 -1
  347. package/scripts/josh/josh-commands-issue.ts +2 -2
  348. package/scripts/josh/josh-commands-maintenance.ts +7 -0
  349. package/scripts/josh/josh-commands-project.ts +7 -1
  350. package/scripts/josh/josh-commands-run.ts +114 -0
  351. package/scripts/josh/josh-commands-versioning.ts +8 -0
  352. package/scripts/josh/josh-commands-workflow.ts +3 -3
  353. package/scripts/josh/path-decision.ts +0 -3
  354. package/scripts/josh/process-owner.ts +16 -0
  355. package/scripts/josh/run-github-prerequisite.ts +3 -6
  356. package/scripts/josh/session-language-cli.ts +0 -1
  357. package/scripts/lane/lane-await.ts +46 -19
  358. package/scripts/lane/lane-capacity.ts +6 -3
  359. package/scripts/lane/lane-child-invocation.ts +20 -7
  360. package/scripts/lane/lane-cli.ts +1 -4
  361. package/scripts/lane/lane-close.ts +5 -4
  362. package/scripts/lane/lane-dispatch.ts +3 -4
  363. package/scripts/lane/lane-environment.ts +0 -9
  364. package/scripts/lane/lane-handoff.ts +38 -0
  365. package/scripts/lane/lane-launch-cli.ts +31 -27
  366. package/scripts/lane/lane-open.ts +0 -3
  367. package/scripts/lane/lane-output.ts +0 -1
  368. package/scripts/lane/lane-registry.ts +9 -0
  369. package/scripts/lane/openai-lane-ship.ts +2 -0
  370. package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
  371. package/scripts/lane/openai-lane-supervisor.ts +6 -4
  372. package/scripts/lane/openai-review-broker.ts +7 -1
  373. package/scripts/lib/bounded-pool.ts +1 -0
  374. package/scripts/lib/cli-flags.ts +31 -2
  375. package/scripts/lib/error-message.ts +12 -1
  376. package/scripts/lib/json-value.ts +5 -4
  377. package/scripts/lib/poll.ts +3 -1
  378. package/scripts/lib/timed-fetch.ts +15 -0
  379. package/scripts/lib/timeouts.ts +13 -0
  380. package/scripts/{yaml → lib}/yaml-document.ts +3 -1
  381. package/scripts/{bytes → lines}/bytes-command.ts +0 -2
  382. package/scripts/lines/line-targets.ts +0 -11
  383. package/scripts/lines/lines-command.ts +5 -4
  384. package/scripts/lint/lint-related-scope.ts +0 -1
  385. package/scripts/lint/lint-related.ts +1 -1
  386. package/scripts/{git → notify}/telegram-notify.ts +2 -2
  387. package/scripts/{git → notify}/telegram-test.ts +4 -4
  388. package/scripts/observations/observation-ledger-home.ts +0 -1
  389. package/scripts/observations/observation-ledger-line.ts +0 -1
  390. package/scripts/observations/observation-ledger-migrate.ts +1 -1
  391. package/scripts/observations/observations-flush-landing.ts +3 -3
  392. package/scripts/observations/observations-flush.ts +2 -2
  393. package/scripts/overrides/lockfile-overrides.ts +1 -1
  394. package/scripts/overrides/overrides-logic.ts +1 -1
  395. package/scripts/package/package-scout-cli.ts +2 -7
  396. package/scripts/package/package-scout.ts +0 -2
  397. package/scripts/propagate/propagate-git-failure.ts +0 -1
  398. package/scripts/propagate/propagate-git.ts +3 -10
  399. package/scripts/propagate/propagate-publish.ts +2 -3
  400. package/scripts/propagate/propagate-run.ts +0 -2
  401. package/scripts/propagate/propagate-steps.ts +3 -5
  402. package/scripts/propagate/propagate-targets.ts +0 -4
  403. package/scripts/propagate/propagate.ts +0 -4
  404. package/scripts/refactor/import-graph.ts +0 -1
  405. package/scripts/refactor/refactor-lint.ts +0 -2
  406. package/scripts/refactor/refactor-scan.ts +2 -2
  407. package/scripts/refactor/refactor-targets.ts +0 -1
  408. package/scripts/registry-migration/migrate-logic.ts +28 -21
  409. package/scripts/registry-migration/migrate.ts +25 -14
  410. package/scripts/release/github-release-cli.ts +19 -6
  411. package/scripts/release/github-release-environment.ts +46 -0
  412. package/scripts/release/github-release.ts +151 -94
  413. package/scripts/release/release-history.ts +0 -1
  414. package/scripts/release/release-plan.ts +0 -1
  415. package/scripts/release/release-publish.ts +38 -5
  416. package/scripts/release/release-scope-cli.ts +1 -2
  417. package/scripts/release/release-tag.ts +2 -4
  418. package/scripts/release/release-worktree.ts +97 -2
  419. package/scripts/repo/auto-merge-setting-logic.ts +1 -4
  420. package/scripts/repo/repo-setting.ts +1 -1
  421. package/scripts/repo/repository-labels.ts +3 -3
  422. package/scripts/repo/required-checks-logic.ts +206 -0
  423. package/scripts/repo/required-checks-report.ts +71 -0
  424. package/scripts/repo/ruleset-check-cli.ts +53 -0
  425. package/scripts/repo/ruleset-check.ts +147 -0
  426. package/scripts/report/report-lint-cli.ts +0 -4
  427. package/scripts/review/disposition-cli.ts +1 -1
  428. package/scripts/review/live-evidence.ts +1 -1
  429. package/scripts/review/review-attest-cli.ts +0 -6
  430. package/scripts/review/review-attest.ts +4 -16
  431. package/scripts/review/review-brief-cli.ts +23 -6
  432. package/scripts/review/review-brief.ts +21 -8
  433. package/scripts/review/review-checkout.ts +3 -2
  434. package/scripts/review/review-diff-parts.ts +89 -0
  435. package/scripts/review/review-diff-write.ts +97 -0
  436. package/scripts/review/review-finding-ledger.ts +0 -1
  437. package/scripts/review/review-record-cli.ts +10 -17
  438. package/scripts/review/review-record.ts +0 -1
  439. package/scripts/review/review-round2-cli.ts +1 -1
  440. package/scripts/review/review-stamps.ts +0 -3
  441. package/scripts/review/review-tree.ts +14 -2
  442. package/scripts/rules/decision-oracle-stage.ts +18 -0
  443. package/scripts/rules/decision-oracle.ts +10 -7
  444. package/scripts/rules/delivered-rules.ts +9 -1
  445. package/scripts/rules/destructive-command.ts +119 -0
  446. package/scripts/rules/direct-filing.ts +1 -1
  447. package/scripts/rules/early-heartbeat.ts +4 -3
  448. package/scripts/rules/file-body.ts +0 -3
  449. package/scripts/rules/filing-cap.ts +0 -2
  450. package/scripts/rules/gh-api.ts +7 -2
  451. package/scripts/rules/git-argv.ts +18 -7
  452. package/scripts/rules/git-force.ts +0 -2
  453. package/scripts/rules/implementation-cut.ts +0 -1
  454. package/scripts/rules/index-guard.ts +71 -0
  455. package/scripts/rules/issue-citation.ts +50 -25
  456. package/scripts/rules/lane-background.ts +15 -7
  457. package/scripts/rules/lane-park.ts +22 -6
  458. package/scripts/rules/last-prompt.ts +1 -0
  459. package/scripts/rules/oracle-consulted.ts +1 -1
  460. package/scripts/rules/oracle-firing.ts +1 -0
  461. package/scripts/rules/oracle-list-cli.ts +0 -3
  462. package/scripts/rules/permission-guards.ts +14 -0
  463. package/scripts/rules/protected-files.ts +74 -0
  464. package/scripts/rules/reply-language.ts +1 -1
  465. package/scripts/rules/rule-body-guard.ts +0 -3
  466. package/scripts/rules/rule-value-cli.ts +0 -1
  467. package/scripts/rules/shell-body-trigger.ts +0 -1
  468. package/scripts/rules/shell-segments.ts +0 -1
  469. package/scripts/rules/stop-rules.ts +20 -9
  470. package/scripts/rules/tail-commands.ts +1 -1
  471. package/scripts/rules/test-declared-commit.ts +1 -1
  472. package/scripts/rules/third-party-write.ts +0 -1
  473. package/scripts/rules/worktree-guard.ts +26 -9
  474. package/scripts/run/run-carry-args.ts +8 -12
  475. package/scripts/run/run-carry-cli.ts +0 -2
  476. package/scripts/run/run-carry-stash.ts +2 -2
  477. package/scripts/run/run-carry-streak.ts +1 -1
  478. package/scripts/run/run-cut-args.ts +1 -6
  479. package/scripts/run/run-cut-cli.ts +0 -7
  480. package/scripts/run/run-cut.ts +8 -54
  481. package/scripts/run/run-ending-cli.ts +2 -6
  482. package/scripts/run/run-ending.ts +1 -4
  483. package/scripts/run/run-entry-cli.ts +133 -25
  484. package/scripts/run/run-entry-stop.ts +104 -0
  485. package/scripts/run/run-entry.ts +0 -1
  486. package/scripts/run/run-event-cli.ts +0 -2
  487. package/scripts/run/run-event-follow.ts +1 -0
  488. package/scripts/run/run-event-render.ts +1 -1
  489. package/scripts/run/run-event-scope.ts +53 -4
  490. package/scripts/run/run-event-stream-emit.ts +7 -2
  491. package/scripts/run/run-event-stream.ts +0 -3
  492. package/scripts/run/run-event-watch.ts +1 -0
  493. package/scripts/run/run-halfrun-resume.ts +20 -7
  494. package/scripts/run/run-headless.ts +2 -2
  495. package/scripts/run/run-hold-cli.ts +33 -10
  496. package/scripts/run/run-hold.ts +29 -6
  497. package/scripts/run/run-issue-number.ts +1 -1
  498. package/scripts/run/run-liveness-cli.ts +2 -6
  499. package/scripts/run/run-liveness.ts +2 -3
  500. package/scripts/run/run-merge-cli.ts +7 -23
  501. package/scripts/run/run-merge-steps.ts +5 -5
  502. package/scripts/run/run-merge.ts +1 -1
  503. package/scripts/run/run-next-cli.ts +1 -1
  504. package/scripts/run/run-parent-cut-hook.ts +4 -2
  505. package/scripts/run/run-preflight.ts +2 -9
  506. package/scripts/run/run-prep-cli.ts +6 -3
  507. package/scripts/run/run-prep-locate.ts +1 -1
  508. package/scripts/run/run-progress-args.ts +20 -4
  509. package/scripts/run/run-progress-cli.ts +35 -36
  510. package/scripts/run/run-progress-clock.ts +10 -35
  511. package/scripts/run/run-progress-config.ts +0 -4
  512. package/scripts/run/run-progress-read.ts +1 -2
  513. package/scripts/run/run-progress.ts +1 -2
  514. package/scripts/run/run-prrun-resume.ts +117 -0
  515. package/scripts/run/run-report-cli.ts +1 -2
  516. package/scripts/run/run-report.ts +0 -1
  517. package/scripts/run/run-retrospective.ts +1 -1
  518. package/scripts/run/run-review-cli.ts +0 -3
  519. package/scripts/run/run-review-steps.ts +2 -0
  520. package/scripts/run/run-review.ts +0 -2
  521. package/scripts/run/run-ship-cli.ts +29 -19
  522. package/scripts/run/run-ship-detach.ts +1 -0
  523. package/scripts/run/run-ship-next.ts +106 -0
  524. package/scripts/run/run-ship-preflight.ts +1 -1
  525. package/scripts/run/run-ship-probe.ts +4 -1
  526. package/scripts/run/run-ship-return.ts +8 -3
  527. package/scripts/run/run-ship-review-steps.ts +18 -4
  528. package/scripts/run/run-ship-review.ts +11 -0
  529. package/scripts/run/run-ship-scoped.ts +1 -0
  530. package/scripts/run/run-ship-steps.ts +1 -1
  531. package/scripts/run/run-ship.ts +0 -1
  532. package/scripts/run/run-stage-read.ts +62 -0
  533. package/scripts/run/run-stage.ts +160 -0
  534. package/scripts/run/run-status-cli.ts +3 -16
  535. package/scripts/run/run-step-cli.ts +21 -14
  536. package/scripts/run/run-step.ts +1 -1
  537. package/scripts/run/run-stop-notify.ts +1 -3
  538. package/scripts/run/run-stranded-cli.ts +0 -4
  539. package/scripts/run/run-stranded-detect.ts +2 -2
  540. package/scripts/run/run-tail-cli.ts +17 -11
  541. package/scripts/run/run-tail.ts +2 -0
  542. package/scripts/run/run-tidy-lanes.ts +6 -2
  543. package/scripts/run/run-tidy-stashes.ts +12 -12
  544. package/scripts/run/run-wake-cli.ts +4 -13
  545. package/scripts/run/run-wake-loop.ts +2 -2
  546. package/scripts/run/run-wake.ts +2 -4
  547. package/scripts/run/run-watcher-guard-cli.ts +0 -4
  548. package/scripts/run/run-watcher-guard.ts +18 -12
  549. package/scripts/run/run-watcher-hook.ts +1 -1
  550. package/scripts/safe-chain/ci-installer-pin.ts +11 -5
  551. package/scripts/safe-chain/pack-hook.ts +92 -0
  552. package/scripts/safe-chain/project-config.ts +1 -1
  553. package/scripts/security/security-audit-provision-logic.ts +0 -1
  554. package/scripts/security/security-audit-provision.ts +3 -2
  555. package/scripts/security/security-audit.ts +0 -1
  556. package/scripts/security/security-updates-logic.ts +0 -1
  557. package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
  558. package/scripts/sonar/sonar-hotspots.ts +0 -1
  559. package/scripts/sonar/sonar-new-code-cli.ts +150 -0
  560. package/scripts/sonar/sonar-new-code.ts +79 -0
  561. package/scripts/sonar/sonar-project.ts +97 -0
  562. package/scripts/split/split-assess-cli.ts +1 -1
  563. package/scripts/split/split-assess.ts +2 -5
  564. package/scripts/sync/managed-config-scope-cli.ts +1 -1
  565. package/scripts/sync/skill-migration.ts +0 -1
  566. package/scripts/sync/sync-ai-files.ts +4 -0
  567. package/scripts/sync/sync-hook-safety.ts +2 -3
  568. package/scripts/sync/sync.ts +1 -8
  569. package/scripts/sync/template-source-logic.ts +0 -1
  570. package/scripts/sync/workflow-pin-logic.ts +16 -28
  571. package/scripts/test/test-declared-changed.ts +13 -16
  572. package/scripts/test/test-declared-logic.ts +0 -1
  573. package/scripts/test/test-declared.ts +3 -9
  574. package/scripts/test/test-red-commit.ts +2 -2
  575. package/scripts/test/test-red.ts +14 -7
  576. package/scripts/test/test-type-logic.ts +1 -1
  577. package/scripts/test/unit-worker-share.ts +7 -16
  578. package/scripts/time-runtime/time-batch-guard.ts +1 -2
  579. package/scripts/time-runtime/time-bundle-call.ts +0 -1
  580. package/scripts/time-runtime/time-bundles.ts +0 -4
  581. package/scripts/time-runtime/time-density-hook.ts +0 -2
  582. package/scripts/time-runtime/time-followup-stage.ts +1 -1
  583. package/scripts/time-runtime/time-format.ts +0 -73
  584. package/scripts/time-runtime/time-round-trips.ts +0 -4
  585. package/scripts/time-runtime/time-single-check.ts +1 -1
  586. package/scripts/time-runtime/time-spans.ts +1 -1
  587. package/scripts/time-runtime/time-transcript-line.ts +1 -2
  588. package/scripts/ui/ui-routes-cli.ts +0 -5
  589. package/scripts/ui/ui-routes.ts +0 -5
  590. package/scripts/version/effective-upstream.ts +2 -2
  591. package/scripts/version/latest-corepack.ts +7 -9
  592. package/scripts/version/latest-scope-cli.ts +0 -2
  593. package/scripts/version/latest-update.ts +0 -2
  594. package/scripts/version/npm-registry.ts +2 -2
  595. package/scripts/version/publishable-range-check.ts +1 -1
  596. package/scripts/version/release-hold.ts +0 -4
  597. package/scripts/version/running-binary.ts +2 -2
  598. package/scripts/version/version-check-logic.ts +0 -2
  599. package/scripts/version/version-commands.ts +11 -1
  600. package/scripts/version/version-remote.ts +3 -3
  601. package/scripts/version/version-targets.ts +4 -4
  602. package/templates/CLAUDE.basic.md +6 -6
  603. package/templates/sonar-project.properties +28 -1
  604. package/templates/workflows/ci.yml +16 -82
  605. package/templates/workflows/dependabot-auto-merge.yml +6 -3
  606. package/templates/workflows/github-release.yml +79 -0
  607. package/tsconfig.sonar.json +4 -22
  608. package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
  609. package/prompts/collaboration-workflow/epic-audit.md +0 -5
  610. package/prompts/collaboration-workflow/epic-bundle.md +0 -5
  611. package/scripts/init/plugin-install-hint.ts +0 -47
  612. package/scripts/version/parse-json.ts +0 -13
  613. /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
  614. /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
  615. /package/scripts/{git → gh}/git-gh-command.ts +0 -0
  616. /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
  617. /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
  618. /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
  619. /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
  620. /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
  621. /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
  622. /package/scripts/{git → gh}/git-pr-error.ts +0 -0
  623. /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
  624. /package/scripts/{git → gh}/github-issue-url.ts +0 -0
  625. /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
  626. /package/scripts/{git → issue}/issue-reference.ts +0 -0
  627. /package/scripts/{git → lib}/animation-helpers.ts +0 -0
  628. /package/scripts/{git → lib}/git-animation.ts +0 -0
  629. /package/scripts/{git → notify}/git-notify.ts +0 -0
  630. /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
@@ -46,7 +46,7 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
46
46
  reference: ['', 'automation', ['processes']],
47
47
  },
48
48
  bytes: {
49
- script: 'scripts/bytes/bytes-command.ts',
49
+ script: 'scripts/lines/bytes-command.ts',
50
50
  description:
51
51
  "Print an agent-read document's byte size against its ceiling and the headroom left",
52
52
  category: 'Development',
@@ -128,6 +128,13 @@ const DEV_COMMANDS: Record<string, CommandEntry> = {
128
128
  category: 'Development',
129
129
  reference: ['', 'developer', ['files']],
130
130
  },
131
+ 'exports:unused': {
132
+ script: 'scripts/exports/unused-members-cli.ts',
133
+ description:
134
+ 'Report exported namespace members nothing reads (kit only; a consumer project skips it)',
135
+ category: 'Development',
136
+ reference: ['', 'developer', ['none']],
137
+ },
131
138
  'test:unit': {
132
139
  script: 'scripts/test/test-unit-guard.ts',
133
140
  description:
@@ -29,7 +29,7 @@ const ISSUE_COMMANDS: Record<string, CommandEntry> = {
29
29
  description:
30
30
  'Before filing: say whether an issue like this exists and which epic it belongs to',
31
31
  category: 'AI tools',
32
- reference: ['<title> [--body <summary>]', 'automation', ['network']],
32
+ reference: ['<title> [--body <summary> | --body-file <path>]', 'automation', ['network']],
33
33
  },
34
34
  'defect:rate': {
35
35
  script: 'scripts/issue/defect-rate-cli.ts',
@@ -49,7 +49,7 @@ const ISSUE_COMMANDS: Record<string, CommandEntry> = {
49
49
  script: 'scripts/issue/issue-fold-existing-cli.ts',
50
50
  description: 'Assess whether a complete draft can join an unstarted issue',
51
51
  category: 'AI tools',
52
- reference: ['<assessment.json>', 'automation', ['none']],
52
+ reference: ['<assessment.json> [--json]', 'automation', ['none']],
53
53
  },
54
54
  'issue:cite': {
55
55
  script: 'scripts/issue/issue-cite-cli.ts',
@@ -10,6 +10,13 @@ const MAINTENANCE_COMMANDS: Record<string, CommandEntry> = {
10
10
  reference: ['[--fix]', 'developer', ['files']],
11
11
  tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
12
12
  },
13
+ 'ruleset:check': {
14
+ script: 'scripts/repo/ruleset-check-cli.ts',
15
+ description:
16
+ "Check that the default branch requires every status check kit's workflows report (--apply adds the missing ones)",
17
+ category: 'Maintenance',
18
+ reference: ['[--apply]', 'maintainer', ['network']],
19
+ },
13
20
  overrides: {
14
21
  script: 'scripts/overrides/overrides-check.ts',
15
22
  description: 'Check pnpm overrides for drift',
@@ -40,7 +40,7 @@ const PROJECT_COMMANDS: Record<string, CommandEntry> = {
40
40
  },
41
41
  'registry:migrate': {
42
42
  script: 'scripts/registry-migration/migrate.ts',
43
- description: 'Migrate a kit-only project from GitHub Packages to public npm',
43
+ description: 'Migrate a project from GitHub Packages to public npm',
44
44
  category: 'Project',
45
45
  reference: ['', 'developer', ['files', 'network', 'processes']],
46
46
  },
@@ -57,6 +57,12 @@ const PROJECT_COMMANDS: Record<string, CommandEntry> = {
57
57
  category: 'Project',
58
58
  reference: ['<PR>', 'automation', ['network']],
59
59
  },
60
+ 'sonar:new-code': {
61
+ script: 'scripts/sonar/sonar-new-code-cli.ts',
62
+ description: 'Fail when a pull request adds any new SonarCloud issue or duplicated block',
63
+ category: 'Project',
64
+ reference: ['<PR>', 'automation', ['network']],
65
+ },
60
66
  'ui:routes': {
61
67
  script: 'scripts/ui/ui-routes-cli.ts',
62
68
  description: 'List the screenshot-target routes the current change touches',
@@ -0,0 +1,114 @@
1
+ import { OPTIONAL_ENV_FILE_FLAGS, type CommandEntry } from './josh-command-types'
2
+
3
+ // The run-lifecycle registry (`run:hold` through `run:step`), split out of `josh-commands-ai.ts` so
4
+ // that file stays under its 300-code-line limit, as `BACKLOG_COMMANDS` and `LANE_COMMANDS` were
5
+ // (joshuafolkken/kit#2992). It is spread into `AI_COMMANDS` at the place the entries used to sit, so
6
+ // the generated catalog keeps their order.
7
+
8
+ // One script answers both `run:hold` and `run:release`; the flag below is what tells them apart.
9
+ const RUN_HOLD_SCRIPT = 'scripts/run/run-hold-cli.ts'
10
+
11
+ /* eslint-disable @typescript-eslint/naming-convention */
12
+ const RUN_COMMANDS: Record<string, CommandEntry> = {
13
+ 'run:hold': {
14
+ script: RUN_HOLD_SCRIPT,
15
+ description: 'Claim this working tree for a run, or say which run already holds it',
16
+ category: 'AI tools',
17
+ reference: ['[<issue> [--fullrun | --halfrun-stop | --prrun-stop]]', 'automation', ['files']],
18
+ },
19
+ 'run:release': {
20
+ script: RUN_HOLD_SCRIPT,
21
+ description: "Release this working tree's run record",
22
+ category: 'AI tools',
23
+ reference: ['[issue|--force]', 'automation', ['files']],
24
+ default_script_arguments: ['--release'],
25
+ },
26
+ 'run:tidy': {
27
+ script: 'scripts/run/run-tidy-cli.ts',
28
+ description: 'Close merged lanes and drop stashes whose issues are all merged',
29
+ category: 'AI tools',
30
+ reference: ['', 'automation', ['git', 'network', 'files']],
31
+ },
32
+ 'run:carry': {
33
+ script: 'scripts/run/run-carry-cli.ts',
34
+ description: 'Carry one invocation’s budget across its own session cuts',
35
+ category: 'AI tools',
36
+ reference: ['<operation> [arguments...]', 'automation', ['files']],
37
+ },
38
+ 'run:wake': {
39
+ script: 'scripts/run/run-wake-cli.ts',
40
+ // `.env` rather than the ambient environment:
41
+ // the failure warning needs the Telegram credentials, the same
42
+ // reasons `notify` and `followup` carry these flags.
43
+ tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
44
+ description: 'Wake the next session of a cut backlogrun from outside the conversation',
45
+ category: 'AI tools',
46
+ reference: ['[options]', 'automation', ['processes', 'notifications']],
47
+ },
48
+ 'run:cut': {
49
+ script: 'scripts/run/run-cut-cli.ts',
50
+ description: 'Cut a lane child before the gate and resume a fresh process',
51
+ category: 'AI tools',
52
+ reference: ['[--resume] <issue> [--impl] [--handoff <path>]', 'automation', ['files']],
53
+ },
54
+ 'run:liveness': {
55
+ script: 'scripts/run/run-liveness-cli.ts',
56
+ description: 'Say whether a delegated unit is still working, or stopped without reporting',
57
+ category: 'AI tools',
58
+ reference: ['<issue> --output <path> [options]', 'automation', ['processes']],
59
+ },
60
+ 'run:ending': {
61
+ script: 'scripts/run/run-ending-cli.ts',
62
+ description: 'Classify how a dispatched lane child ended (merged, cut, abandoned, unreadable)',
63
+ category: 'AI tools',
64
+ reference: ['<issue> --output <path> [--repo <owner/repo>]', 'automation', ['network']],
65
+ },
66
+ 'run:progress': {
67
+ script: 'scripts/run/run-progress-cli.ts',
68
+ description: 'Report an unattended run’s progress once it has gone quiet for an interval',
69
+ category: 'AI tools',
70
+ reference: [
71
+ '[--once | --wait] [--interval <minutes>] [--hours <hours>] [--repo <owner/repo>] [--output <path>] | --mark | --path',
72
+ 'automation',
73
+ ['files'],
74
+ ],
75
+ },
76
+ 'run:prep': {
77
+ script: 'scripts/run/run-prep-cli.ts',
78
+ description: 'Bundle a run’s pre-edit reads: body, comments, state, dependency scope',
79
+ category: 'AI tools',
80
+ reference: ['<issue>', 'automation', ['network']],
81
+ },
82
+ // The entry sequence a lane opened on, folded into one call (joshuafolkken/kit#2372): claim the tree,
83
+ // read the budget, gather the issue reads and decide the pre-implementation step. `run:hold`,
84
+ // `cost --cut`, `run:prep` and `run:step` were four round trips re-billing a lane's full context each.
85
+ 'run:entry': {
86
+ script: 'scripts/run/run-entry-cli.ts',
87
+ description:
88
+ 'Open a run in one call: claim the tree, read the budget, bundle the reads, decide the pre-implementation step',
89
+ category: 'AI tools',
90
+ reference: ['<issue> [--to <command>]', 'automation', ['git', 'network', 'files']],
91
+ },
92
+ 'run:status': {
93
+ script: 'scripts/run/run-status-cli.ts',
94
+ description: 'Bundle a run’s read-only status: issue state, cost verdict, carry counters',
95
+ category: 'AI tools',
96
+ reference: ['<issue> [--repo <owner/repo>]', 'automation', ['network']],
97
+ },
98
+ 'run:next': {
99
+ script: 'scripts/run/run-next-cli.ts',
100
+ description: 'Print the next step a fullrun takes, computed from the run’s state',
101
+ category: 'AI tools',
102
+ reference: ['<issue>', 'automation', ['network']],
103
+ },
104
+ 'run:step': {
105
+ script: 'scripts/run/run-step-cli.ts',
106
+ description:
107
+ 'Print the run’s next single action, computed from the event stream, carry record and issue state',
108
+ category: 'AI tools',
109
+ reference: ['<issue>', 'automation', ['network', 'files']],
110
+ },
111
+ }
112
+ /* eslint-enable @typescript-eslint/naming-convention */
113
+
114
+ export { RUN_COMMANDS }
@@ -42,6 +42,14 @@ const VERSIONING_COMMANDS: Record<string, CommandEntry> = {
42
42
  category: 'Versioning',
43
43
  reference: ['[--json]', 'automation', ['none']],
44
44
  },
45
+ // Run by the release workflows, kit's and the one sync distributes, after a tag has published
46
+ // (joshuafolkken/kit#3007). Settings come from the environment, so the workflow decides them.
47
+ 'release:github': {
48
+ script: 'scripts/release/github-release-cli.ts',
49
+ description: 'Create the GitHub Release for a published tag, with generated notes',
50
+ category: 'Versioning',
51
+ reference: ['', 'automation', ['network', 'release']],
52
+ },
45
53
  }
46
54
  /* eslint-enable @typescript-eslint/naming-convention */
47
55
 
@@ -35,7 +35,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
35
35
  // than dropped: `telegram_notify.send` now throws on missing credentials and on a failed send, so
36
36
  // `josh notify` exits non-zero instead of warning and answering 0.
37
37
  followup: {
38
- script: 'scripts/git/git-followup-workflow.ts',
38
+ script: 'scripts/followup/git-followup-workflow.ts',
39
39
  description: 'Follow-up git workflow',
40
40
  category: 'Workflow',
41
41
  reference: [
@@ -46,7 +46,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
46
46
  tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
47
47
  },
48
48
  notify: {
49
- script: 'scripts/git/telegram-test.ts',
49
+ script: 'scripts/notify/telegram-test.ts',
50
50
  description: 'Send Telegram notification',
51
51
  category: 'Workflow',
52
52
  reference: ['--task-type <type> --body <text>', 'automation', ['notifications']],
@@ -89,7 +89,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
89
89
  script: 'scripts/issue/measure-rerun-cli.ts',
90
90
  description: 'Re-run a merged issue’s baseline command and print the before/after pair',
91
91
  category: 'Workflow',
92
- reference: ['<path>', 'automation', ['processes', 'files']],
92
+ reference: ['<issue-number>', 'automation', ['network', 'processes', 'files']],
93
93
  },
94
94
  // A script rather than an `sh -c` chain, because it has a precondition to enforce: run inside a
95
95
  // linked work tree it would hijack the default branch from every other one (joshuafolkken/kit#1535).
@@ -93,12 +93,9 @@ const path_decision = {
93
93
  format_path_list,
94
94
  has_unknown_flag,
95
95
  JSON_FLAG,
96
- KNOWN_FLAGS,
97
- MAX_LISTED_PATHS,
98
96
  parse_options,
99
97
  print_decision,
100
98
  run_path_decision,
101
- STAGED_FLAG,
102
99
  }
103
100
 
104
101
  export { path_decision }
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod'
2
+
3
+ // The pair a record names its writing process by, as `process_identity` reads it back
4
+ // (joshuafolkken/kit#1245): the pid, and the opaque start token `process_identity.own_fields` wrote
5
+ // beside it. Every lock, marker and ledger entry that later asks `is_same_process` carries this pair,
6
+ // so its shape is declared once here and each record extends it (joshuafolkken/kit#2986).
7
+ //
8
+ // `process_start` is optional because a record written before joshuafolkken/kit#1245, or on a platform
9
+ // whose start time cannot be read, carries only the pid — `is_same_process` has an answer of its own
10
+ // for that case rather than the record being rejected.
11
+ const process_owner_schema = z.object({ pid: z.number(), process_start: z.string().optional() })
12
+
13
+ type ProcessOwner = z.infer<typeof process_owner_schema>
14
+
15
+ export { process_owner_schema }
16
+ export type { ProcessOwner }
@@ -1,7 +1,7 @@
1
1
  import { existsSync } from 'node:fs'
2
2
  import path from 'node:path'
3
3
  import { repo_origin } from '#scripts/discovery/repo-origin'
4
- import { execaSync } from 'execa'
4
+ import { git_spawn_sync } from '#scripts/git/git-spawn-sync'
5
5
 
6
6
  const GITHUB_RUN_COMMANDS = new Set([
7
7
  'run:entry',
@@ -19,11 +19,8 @@ function explanation(root: string, command: string): string | undefined {
19
19
  return `${command} requires Git and a GitHub origin. Run git init and add a GitHub origin first.`
20
20
  }
21
21
 
22
- const result = execaSync('git', ['config', '--get', 'remote.origin.url'], {
23
- cwd: root,
24
- reject: false,
25
- })
26
- if (result.exitCode === 0 && repo_origin.parse_origin_url(result.stdout)) return undefined
22
+ const url = git_spawn_sync.origin_url(root)
23
+ if (url !== undefined && repo_origin.parse_origin_url(url)) return undefined
27
24
 
28
25
  return `${command} requires a GitHub origin. Add an origin pointing to GitHub first.`
29
26
  }
@@ -41,7 +41,6 @@ const session_language_cli = {
41
41
  DEFAULT_SESSION_LANG,
42
42
  ENV_KEY,
43
43
  format_line,
44
- main,
45
44
  resolve_session_lang,
46
45
  SCOPE_NOTE,
47
46
  }
@@ -1,8 +1,8 @@
1
1
  import { spawnSync } from 'node:child_process'
2
2
  import { setTimeout as sleep } from 'node:timers/promises'
3
- import { git_common_directory } from '#scripts/git/git-common-directory'
4
- import { run_ship_detach } from '#scripts/run/run-ship-detach'
3
+ import { run_liveness } from '#scripts/run/run-liveness'
5
4
  import { lane_child_invocation } from './lane-child-invocation'
5
+ import { lane_handoff } from './lane-handoff'
6
6
 
7
7
  // Detached lane children are not harness-tracked processes, so their completion fires no
8
8
  // re-invocation event in the parent's session. Without a blocking wait the parent notices only
@@ -23,15 +23,20 @@ const MS_PER_SECOND = 1000
23
23
  const ISSUE_PATTERN = /^[1-9]\d*$/u
24
24
  const PROCESS_FOUND = 0
25
25
 
26
+ // `is_settled` is read once, when the wait starts: a child that ended between two `lane:await` calls
27
+ // never appears in the second one, and only its settled issue tells it apart from one not yet
28
+ // launched (joshuafolkken/kit#3133).
26
29
  interface AwaitState {
27
30
  appeared: boolean
28
31
  disappeared_at: number | undefined
29
32
  first_polled_at: number | undefined
33
+ is_settled?: boolean
30
34
  }
31
35
 
32
36
  // Injectable for testing -- the CLI never overrides these.
33
37
  interface AwaitOptions {
34
38
  is_running?: (issue: string) => boolean
39
+ is_settled?: (issue: string) => Promise<boolean>
35
40
  poll_ms?: number
36
41
  reconfirm_ms?: number
37
42
  never_appeared_timeout_ms?: number
@@ -44,6 +49,7 @@ interface CheckConfig {
44
49
  }
45
50
 
46
51
  interface RunConfig extends CheckConfig {
52
+ is_settled: (issue: string) => Promise<boolean>
47
53
  poll_ms: number
48
54
  }
49
55
 
@@ -52,30 +58,46 @@ function is_process_running_default(issue: string): boolean {
52
58
  const result = spawnSync('pgrep', ['-f', pattern], { encoding: 'utf8' })
53
59
 
54
60
  if (result.status === PROCESS_FOUND) return true
55
- const repository = git_common_directory.repository(process.cwd())
56
61
 
57
- return (
58
- repository !== undefined && run_ship_detach.read_result(repository, issue)?.result === 'running'
59
- )
62
+ return lane_handoff.is_ship_running(issue, process.cwd())
60
63
  }
61
64
 
62
- function make_initial_state(): AwaitState {
63
- return { appeared: false, disappeared_at: undefined, first_polled_at: undefined }
65
+ // The same positive evidence `run:liveness` answers `settled` on: the issue closed, or it was parked.
66
+ async function is_settled_default(issue: string): Promise<boolean> {
67
+ return (await run_liveness.read_child_settled(issue)) === true
64
68
  }
65
69
 
66
- function make_states(issues: ReadonlyArray<string>): Map<string, AwaitState> {
67
- return new Map(issues.map((issue) => [issue, make_initial_state()]))
70
+ function make_initial_state(is_settled: boolean): AwaitState {
71
+ return { appeared: false, disappeared_at: undefined, first_polled_at: undefined, is_settled }
68
72
  }
69
73
 
70
- function resolve_options(options: AwaitOptions): RunConfig {
74
+ async function make_states(
75
+ issues: ReadonlyArray<string>,
76
+ is_settled: (issue: string) => Promise<boolean>,
77
+ ): Promise<Map<string, AwaitState>> {
78
+ const settled = await Promise.all(issues.map(async (issue) => await is_settled(issue)))
79
+
80
+ return new Map(issues.map((issue, index) => [issue, make_initial_state(settled[index] === true)]))
81
+ }
82
+
83
+ function resolve_timing(
84
+ options: AwaitOptions,
85
+ ): Pick<RunConfig, 'never_appeared_timeout_ms' | 'poll_ms' | 'reconfirm_ms'> {
71
86
  return {
72
- is_running: options.is_running ?? is_process_running_default,
73
87
  poll_ms: options.poll_ms ?? DEFAULT_POLL_MS,
74
88
  reconfirm_ms: options.reconfirm_ms ?? RECONFIRM_MS,
75
89
  never_appeared_timeout_ms: options.never_appeared_timeout_ms ?? NEVER_APPEARED_TIMEOUT_MS,
76
90
  }
77
91
  }
78
92
 
93
+ function resolve_options(options: AwaitOptions): RunConfig {
94
+ return {
95
+ is_running: options.is_running ?? is_process_running_default,
96
+ is_settled: options.is_settled ?? is_settled_default,
97
+ ...resolve_timing(options),
98
+ }
99
+ }
100
+
79
101
  function update_liveness(state: AwaitState, is_live: boolean): void {
80
102
  if (!is_live) return
81
103
 
@@ -83,13 +105,16 @@ function update_liveness(state: AwaitState, is_live: boolean): void {
83
105
  state.disappeared_at = undefined
84
106
  }
85
107
 
86
- // Throws if the issue never appeared within the timeout window; otherwise records the first-seen time.
108
+ // Returns the issue when it had already settled before the wait started — it ended and will never
109
+ // appear. Otherwise throws if it never appeared within the timeout window, and records the first-seen time.
87
110
  function check_not_appeared(
88
111
  issue: string,
89
112
  state: AwaitState,
90
113
  now_ms: number,
91
114
  timeout_ms: number,
92
- ): void {
115
+ ): string | undefined {
116
+ if (state.is_settled === true) return issue
117
+
93
118
  state.first_polled_at ??= now_ms
94
119
  const elapsed_ms = now_ms - state.first_polled_at
95
120
 
@@ -98,10 +123,13 @@ function check_not_appeared(
98
123
  `lane child ${issue} never appeared within ${String(timeout_ms / MS_PER_SECOND)}s`,
99
124
  )
100
125
  }
126
+
127
+ return undefined
101
128
  }
102
129
 
103
130
  // Returns the issue that has confirmed-completed this tick, `undefined` if none yet.
104
- // The `appeared` guard prevents a process that never showed up from being declared done.
131
+ // The `appeared` guard prevents a process that never showed up from being declared done, unless its
132
+ // issue had already settled when the wait started.
105
133
  function check_issue(
106
134
  issue: string,
107
135
  state: AwaitState,
@@ -115,9 +143,7 @@ function check_issue(
115
143
  if (is_live) return undefined
116
144
 
117
145
  if (!state.appeared) {
118
- check_not_appeared(issue, state, now_ms, config.never_appeared_timeout_ms)
119
-
120
- return undefined
146
+ return check_not_appeared(issue, state, now_ms, config.never_appeared_timeout_ms)
121
147
  }
122
148
 
123
149
  if (state.disappeared_at === undefined) {
@@ -148,13 +174,14 @@ async function wait_for_any(
148
174
  options: AwaitOptions = {},
149
175
  ): Promise<string> {
150
176
  const config = resolve_options(options)
151
- const states = make_states(issues)
177
+ const states = await make_states(issues, config.is_settled)
152
178
 
153
179
  for (;;) {
154
180
  const completed = check_any(states, Date.now(), config)
155
181
 
156
182
  if (completed !== undefined) return completed
157
183
 
184
+ // eslint-disable-next-line no-await-in-loop -- polling: each read waits on the state the previous one saw
158
185
  await sleep(config.poll_ms)
159
186
  }
160
187
  }
@@ -1,4 +1,5 @@
1
1
  import type { LaneEnvironment } from './lane-paths'
2
+ import { lane_seed_policy } from './lane-seed'
2
3
 
3
4
  // How many lanes one repository may run at once, and how many of them are free
4
5
  // (joshuafolkken/kit#1491).
@@ -54,14 +55,16 @@ function lane_limit(environment: LaneEnvironment = process.env): LimitChoice {
54
55
  // Never negative: a repository holding more `in-progress` issues than the limit allows — the limit
55
56
  // was lowered, or a stale label outlived its run — has no free lane, and a negative count read as
56
57
  // "how many to offer" would be a slice nobody meant.
58
+ //
59
+ // **A limit above the seat count is capped at the seats** (joshuafolkken/kit#3027). `lane:open` refuses
60
+ // a tenth lane however high `JOSH_LANE_LIMIT` is set, so counting free lanes past the seats offers a
61
+ // launch that is bound to be refused.
57
62
  function free_lanes(limit: number, occupied: number): number {
58
- return Math.max(NO_LANES, limit - occupied)
63
+ return Math.max(NO_LANES, Math.min(limit, lane_seed_policy.LAST_LANE_SEAT) - occupied)
59
64
  }
60
65
 
61
66
  const lane_capacity = {
62
- DEFAULT_LANE_LIMIT,
63
67
  LANE_LIMIT_KEY,
64
- read_limit,
65
68
  lane_limit,
66
69
  free_lanes,
67
70
  }
@@ -1,4 +1,10 @@
1
1
  import { run_issue_number } from '#scripts/run/run-issue-number'
2
+ import { run_ship_next, type ShipResume } from '#scripts/run/run-ship-next'
3
+ import type { Stage } from '#scripts/run/run-ship-stage'
4
+
5
+ interface ShipStop extends ShipResume {
6
+ stage: Stage
7
+ }
2
8
 
3
9
  const CHILD_INVOCATION = 'fullrun'
4
10
  const RESUME_GUIDE = '.claude/skills/workflow-commands/pre-gate-cut.md'
@@ -52,17 +58,24 @@ function outage_resume_invocation(issue: string): string {
52
58
 
53
59
  // The prompt a lane child is relaunched with when its detached ship supervisor stopped at a failed
54
60
  // stage (joshuafolkken/kit#2428) — a red gate, a High/Medium review, a failed push or red CI. The agent
55
- // ended at the hand-off, so this is how control comes back to one: it reads the stopped report through
56
- // the command `run:step` names, fixes it and hands the region back. It ends with `child_invocation` for
57
- // the reason `resume_invocation` does — the parent's poll keeps matching the relaunched process.
58
- function ship_stop_invocation(issue: string): string {
59
- const preamble = `Resuming the lane child for issue #${issue} after its detached ship supervisor stopped at a failed stage — do not re-read the workflow-commands entry documents (SKILL.md, fullrun.md). Run \`pnpm josh run:step ${issue}\` and read the stopped report it names, fix what stopped the ship, then hand the region back per chain-rule.md. Do not re-plan or re-implement what is already on the branch.`
61
+ // ended at the hand-off, so this is how control comes back to one: it reads the stopped report, fixes it
62
+ // and hands the region back. It ends with `child_invocation` for the reason `resume_invocation` does —
63
+ // the parent's poll keeps matching the relaunched process.
64
+ //
65
+ // **A known stage puts the next command in the prompt** (joshuafolkken/kit#2964), so the relaunched
66
+ // session runs it rather than re-deriving it from `chain-rule.md`. An OpenAI lane's supervisor sees only
67
+ // that the ship failed, not where, so without a stage the prompt points at `run:step` as before.
68
+ function ship_stop_invocation(issue: string, stop?: ShipStop): string {
69
+ const opening = `Resuming the lane child for issue #${issue} after its detached ship supervisor stopped at a failed stage — do not re-read the workflow-commands entry documents (SKILL.md, fullrun.md).`
70
+ const next =
71
+ stop === undefined
72
+ ? `Run \`pnpm josh run:step ${issue}\` and read the stopped report it names, fix what stopped the ship, then hand the region back per chain-rule.md.`
73
+ : run_ship_next.next_step(issue, stop.stage, stop)
60
74
 
61
- return `${preamble} ${child_invocation(issue)}`
75
+ return `${opening} ${next} Do not re-plan or re-implement what is already on the branch. ${child_invocation(issue)}`
62
76
  }
63
77
 
64
78
  const lane_child_invocation = {
65
- CHILD_INVOCATION,
66
79
  child_invocation,
67
80
  outage_resume_invocation,
68
81
  process_pattern,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env tsx
2
2
  import { fileURLToPath } from 'node:url'
3
3
  import { epic_busy } from '#scripts/epic/epic-busy'
4
- import { git_gh_command } from '#scripts/git/git-gh-command'
4
+ import { git_gh_command } from '#scripts/gh/git-gh-command'
5
5
  import type { OpenIssueData } from '#scripts/git/schemas'
6
6
  import { issue_cite, type IssueCiter } from '#scripts/issue/issue-cite'
7
7
  import { error_text } from '#scripts/lib/error-message'
@@ -417,9 +417,6 @@ const lane_cli = {
417
417
  ALL_FLAG,
418
418
  NONE_TOKEN,
419
419
  USAGE,
420
- main,
421
- parse_issue,
422
- parse_lane_issue,
423
420
  refusal_message,
424
421
  run,
425
422
  }
@@ -1,6 +1,7 @@
1
1
  import { existsSync, rmSync } from 'node:fs'
2
2
  import { git_command } from '#scripts/git/git-command'
3
3
  import { git_worktree } from '#scripts/git/git-worktree'
4
+ import { error_text } from '#scripts/lib/error-message'
4
5
  import { lane_paths } from './lane-paths'
5
6
  import { lane_reap } from './lane-reap'
6
7
  import { lane_registry, type LaneInfo } from './lane-registry'
@@ -147,7 +148,9 @@ async function try_close(issue: string): Promise<boolean> {
147
148
  const outcome = await close_lane(issue)
148
149
 
149
150
  return outcome.kind !== 'incomplete'
150
- } catch {
151
+ } catch (error) {
152
+ error_text.trace_swallowed('lane_close.try_close', error)
153
+
151
154
  return false
152
155
  }
153
156
  }
@@ -158,6 +161,7 @@ async function close_each(issues: ReadonlyArray<string>): Promise<SweepOutcome>
158
161
  const sweep: SweepOutcome = { closed: [], failed: [] }
159
162
 
160
163
  for (const issue of issues) {
164
+ // eslint-disable-next-line no-await-in-loop -- worktree writes contend for the same registration directory
161
165
  const bucket = (await try_close(issue)) ? sweep.closed : sweep.failed
162
166
 
163
167
  bucket.push(issue)
@@ -186,10 +190,7 @@ async function close_all_lanes(): Promise<SweepOutcome> {
186
190
  const lane_close = {
187
191
  close_all_lanes,
188
192
  close_lane,
189
- lane_root_directory,
190
- lane_targets,
191
193
  prune_lanes,
192
- remove_lane,
193
194
  resolve_lane,
194
195
  }
195
196
 
@@ -1,8 +1,8 @@
1
1
  import { agent_argv, type AgentArgv, type AgentArgvResult } from '#scripts/agent/agent-argv'
2
2
  import { agent_role_profile, type AgentProfile } from '#scripts/agent/agent-role-profile'
3
- import { git_gh_command } from '#scripts/git/git-gh-command'
4
- import { IN_PROGRESS_LABEL } from '#scripts/git/issue-labels'
5
- import { telegram_notify } from '#scripts/git/telegram-notify'
3
+ import { git_gh_command } from '#scripts/gh/git-gh-command'
4
+ import { IN_PROGRESS_LABEL } from '#scripts/issue/issue-labels'
5
+ import { telegram_notify } from '#scripts/notify/telegram-notify'
6
6
  import { detached_launch } from '#scripts/run/detached-launch'
7
7
  import { run_ending } from '#scripts/run/run-ending'
8
8
  import { run_event_stream } from '#scripts/run/run-event-stream'
@@ -444,7 +444,6 @@ async function warn_of_problem(outcome: DispatchOutcome, issue: string): Promise
444
444
  }
445
445
 
446
446
  const lane_dispatch = {
447
- CHILD_INVOCATION: lane_child_invocation.CHILD_INVOCATION,
448
447
  child_invocation,
449
448
  default_log_path,
450
449
  describe,
@@ -58,10 +58,6 @@ function is_key_line(line: string, key: string): boolean {
58
58
  return body.slice(key.length).trimStart().startsWith(ASSIGNMENT_SEPARATOR)
59
59
  }
60
60
 
61
- function is_seed_line(line: string): boolean {
62
- return is_key_line(line, PORT_SEED_KEY)
63
- }
64
-
65
61
  function is_seat_line(line: string): boolean {
66
62
  return is_key_line(line, LANE_SEAT_KEY)
67
63
  }
@@ -235,12 +231,7 @@ function with_lane_output(content: string, output: string, profile?: AgentProfil
235
231
  }
236
232
 
237
233
  const lane_environment = {
238
- LANE_OUTPUT_KEY,
239
- LANE_PROVIDER_KEY,
240
- LANE_ROLE_KEY,
241
- is_output_line,
242
234
  is_seat_line,
243
- is_seed_line,
244
235
  lane_file_content,
245
236
  read_lane_output,
246
237
  read_lane_profile,