@joshuafolkken/kit 1.1784.0 → 1.2116.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.
- package/.claude/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/workflow-commands/SKILL.md +6 -6
- package/.claude/skills/workflow-commands/background-commands.md +8 -5
- package/.claude/skills/workflow-commands/backlogrun-child.md +3 -1
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-park.md +5 -2
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -3
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +41 -32
- package/.claude/skills/workflow-commands/delegation.md +6 -6
- package/.claude/skills/workflow-commands/entry-sequence.md +2 -2
- package/.claude/skills/workflow-commands/followup.md +7 -5
- package/.claude/skills/workflow-commands/fullrun-steps.md +6 -6
- package/.claude/skills/workflow-commands/fullrun.md +1 -1
- package/.claude/skills/workflow-commands/issue-comments.md +9 -4
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/kickoff.md +2 -2
- package/.claude/skills/workflow-commands/observation-filing.md +1 -1
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -7
- package/.claude/skills/workflow-commands/prerequisite.md +3 -2
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +7 -5
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-pnpm/action.yml +9 -16
- package/.github/dependabot.yml +16 -0
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +155 -15
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +60 -45
- package/.vscode/settings.json +19 -0
- package/CLAUDE.md +5 -12
- package/SECURITY.md +2 -2
- package/dist/CLAUDE.md +5 -12
- package/dist/commands/document-read-cli.js +2 -1
- package/dist/commands/document-section-main.js +2 -1
- package/dist/commands/read-set-cli.js +194 -134
- package/dist/commands/run-prep-main.js +9694 -10173
- package/dist/commands/run-step-cli.js +22138 -18285
- package/dist/hooks/audit-provision.js +23 -5
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/{chunk-CWMBGKYW.js → chunk-5PM2JRGV.js} +2153 -856
- package/dist/hooks/{chunk-WR2KQAYZ.js → chunk-7SIUNQXK.js} +1207 -1470
- package/dist/hooks/{chunk-O2YBIDSI.js → chunk-CQD4LJE6.js} +1682 -1130
- package/dist/hooks/{chunk-VWWCFGWK.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/{chunk-XGBNSWEI.js → chunk-UJ3FPMMM.js} +132 -49
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +8 -8
- package/dist/hooks/format-edited.js +4 -5
- package/dist/hooks/inputs.json +386 -360
- package/dist/hooks/pretool-guard.js +7 -6
- package/dist/hooks/session-lang.js +101 -258
- package/dist/hooks/stop-guard.js +1744 -2576
- package/dist/josh.js +7133 -6368
- package/dist/version/index.js +161 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/package.json +16 -9
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +14 -11
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +40 -21
- package/prompts/collaboration-workflow/lane-instructions.md +3 -1
- package/prompts/collaboration-workflow/measurement.md +8 -1
- package/prompts/collaboration-workflow/operating-rules.md +11 -2
- package/prompts/collaboration-workflow/output-bounds.md +6 -2
- package/prompts/collaboration-workflow/plan-comment.md +1 -1
- package/prompts/collaboration-workflow/principles.md +9 -0
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/upstream-interrupt.md +2 -2
- package/prompts/collaboration-workflow/wip-cap.md +3 -1
- package/prompts/review-rubric.md +8 -0
- package/prompts/review.md +31 -22
- package/prompts/testing-guide.md +1 -0
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +20 -9
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-cli.ts +6 -1
- package/scripts/backlog/backlog-drive-hold.ts +3 -3
- package/scripts/backlog/backlog-drive-idle.ts +10 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -30
- package/scripts/backlog/backlog-drive-named.ts +28 -7
- package/scripts/backlog/backlog-drive-paused.ts +5 -4
- package/scripts/backlog/backlog-drive-restore.ts +11 -3
- package/scripts/backlog/backlog-drive.ts +21 -60
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next.ts +39 -49
- package/scripts/backlog/backlog-occupied.ts +2 -2
- package/scripts/backlog/backlog-overlap.ts +42 -8
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +19 -6
- package/scripts/backlog/backlog-pool.ts +50 -12
- package/scripts/backlog/backlog-rank.ts +60 -13
- package/scripts/backlog/backlog-stalled-detect.ts +2 -1
- package/scripts/backlog/backlog-waves.ts +17 -2
- package/scripts/backlog/backlogrun-launch.ts +7 -4
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-cli.ts +37 -16
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +2 -2
- package/scripts/delegation/duplicate-read-guard.ts +1 -0
- package/scripts/delegation/investigation-guard.ts +14 -2
- package/scripts/delegation/investigation-reads.ts +45 -23
- package/scripts/dependabot/dependabot-cooldown.ts +3 -2
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +17 -7
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-cli-argv.ts +2 -2
- package/scripts/epic/epic-fetch.ts +4 -2
- package/scripts/epic/epic-graph.ts +7 -2
- package/scripts/epic/epic-issue.ts +3 -1
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +13 -10
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +41 -11
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +24 -5
- package/scripts/followup/git-pr-followup.ts +62 -27
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +2 -2
- package/scripts/gate/busy-average.ts +34 -2
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/command-memory.ts +1 -1
- package/scripts/gate/core-admission.ts +24 -6
- package/scripts/gate/core-budget-timing.ts +20 -6
- package/scripts/gate/core-budget.ts +40 -11
- package/scripts/gate/core-wait-record.ts +3 -2
- package/scripts/gate/core-wait.ts +25 -2
- package/scripts/gate/core-weights.ts +15 -7
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +14 -6
- package/scripts/gate/gate-plan.ts +103 -58
- package/scripts/gate/gate-report.ts +9 -7
- package/scripts/gate/gate-run-steps.ts +26 -3
- package/scripts/gate/gate-skip.ts +45 -6
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +2 -1
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/scoped-green.ts +68 -15
- package/scripts/gate/since-green.ts +14 -6
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/verification-gate.ts +51 -16
- package/scripts/gate/verification-inputs.ts +21 -6
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +23 -2
- package/scripts/gh/git-ai-review-scan.ts +1 -1
- package/scripts/gh/git-gh-api-path.ts +12 -3
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +4 -2
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +8 -2
- package/scripts/gh/git-gh-issue.ts +12 -5
- package/scripts/gh/git-gh-pr-auto-merge.ts +13 -6
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +3 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +22 -7
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +21 -7
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +3 -0
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/git/base-tree.ts +30 -0
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +16 -1
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +66 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-schemas.ts +13 -0
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +53 -5
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +11 -2
- package/scripts/git/stash/stash-push-cli.ts +10 -0
- package/scripts/hooks/batch-guard.ts +40 -21
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +22 -2
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +14 -1
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +76 -10
- package/scripts/hooks/pretool-guard.ts +2 -0
- package/scripts/hooks/reserved-run.ts +14 -1
- package/scripts/hooks/run-hook.sh +23 -8
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +3 -15
- package/scripts/hooks/stop-guard.ts +7 -6
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +5 -1
- package/scripts/init/hook-launch.ts +4 -2
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-line.ts +19 -1
- package/scripts/issue/defect-rate-cli.ts +5 -102
- package/scripts/issue/defect-report.ts +4 -4
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +64 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-body-or-comment.ts +38 -4
- package/scripts/issue/issue-cite-cli.ts +1 -3
- package/scripts/issue/issue-classification.ts +1 -0
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-evidence-exit.ts +4 -2
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +111 -38
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +43 -6
- package/scripts/issue/issue-labels.ts +19 -2
- package/scripts/issue/issue-lint-cli.ts +27 -2
- package/scripts/issue/issue-measured-cli.ts +13 -35
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-not-before-label.ts +2 -2
- package/scripts/issue/issue-not-before.ts +4 -1
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +174 -43
- package/scripts/issue/issue-rank.ts +21 -4
- package/scripts/issue/issue-read-cli.ts +32 -6
- package/scripts/issue/issue-read.ts +37 -12
- package/scripts/issue/issue-sample-gate.ts +95 -74
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +12 -11
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +31 -1
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -12
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -70
- package/scripts/issue/plan-consumers-section.ts +22 -1
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/command-usage.ts +3 -2
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -82
- package/scripts/josh/josh-commands-agent-hooks.ts +6 -6
- package/scripts/josh/josh-commands-ai.ts +5 -5
- package/scripts/josh/josh-commands-development.ts +59 -58
- package/scripts/josh/josh-commands-issue-write.ts +23 -4
- package/scripts/josh/josh-commands-issue.ts +32 -0
- package/scripts/josh/josh-commands-lane.ts +87 -4
- package/scripts/josh/josh-commands-lint.ts +16 -3
- package/scripts/josh/josh-commands-maintenance.ts +15 -0
- package/scripts/josh/josh-commands-review.ts +41 -6
- package/scripts/josh/josh-commands-ship.ts +56 -8
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-workflow.ts +1 -1
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +5 -3
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/stamp-file.ts +11 -2
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +5 -8
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-check-stats.ts +29 -8
- package/scripts/lane/lane-child-invocation.ts +9 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-close.ts +8 -3
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +2 -2
- package/scripts/lane/lane-gap-stats.ts +7 -6
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +119 -36
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +31 -177
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +176 -59
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +16 -7
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +4 -1
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-registry.ts +14 -1
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-sampler.ts +23 -4
- package/scripts/lane/lane-session-action.ts +93 -18
- package/scripts/lane/lane-session-broker.ts +49 -21
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-spent.ts +1 -1
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +13 -1
- package/scripts/lane/lane-state.ts +41 -9
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +21 -5
- package/scripts/lane/lane-stop-stats.ts +51 -19
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-transcript-calls.ts +67 -10
- package/scripts/lane/lane-transcript-stats.ts +44 -12
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +108 -31
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +45 -6
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/import-graph.ts +141 -11
- package/scripts/lint/lint-gate-scope.ts +2 -2
- package/scripts/lint/lint-parallel.ts +54 -6
- package/scripts/lint/lint-related.ts +154 -33
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/telegram-notify.ts +12 -3
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush.ts +32 -9
- package/scripts/overrides/overrides-check.ts +9 -1
- package/scripts/release/release-approval-prune.ts +7 -1
- package/scripts/repo/required-checks-logic.ts +4 -1
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +15 -1
- package/scripts/report/report-labels.ts +12 -1
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +26 -7
- package/scripts/report/report-lint.ts +2 -20
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +68 -19
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +14 -7
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +85 -22
- package/scripts/review/review-finding-ledger.ts +109 -7
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +11 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +4 -2
- package/scripts/review/review-record-cli.ts +177 -54
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +91 -29
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +24 -8
- package/scripts/review/review-stamps.ts +7 -3
- package/scripts/review/review-stop-log.ts +20 -6
- package/scripts/review/review-stops-cli.ts +2 -1
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/rules/agent-model.ts +1 -1
- package/scripts/rules/bash-triggers.ts +3 -3
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle.ts +1 -1
- package/scripts/rules/delivered-rules.ts +36 -17
- package/scripts/rules/destructive-command.ts +3 -11
- package/scripts/rules/direct-issue-comment.ts +34 -12
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +4 -24
- package/scripts/rules/early-heartbeat.ts +2 -0
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/guard-remedy.ts +14 -5
- package/scripts/rules/implementation-cut.ts +61 -28
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +9 -4
- package/scripts/rules/josh-git-bare.ts +1 -1
- package/scripts/rules/lane-background.ts +41 -13
- package/scripts/rules/lane-direct-tool.ts +107 -9
- package/scripts/rules/lane-interactive-ask.ts +4 -1
- package/scripts/rules/lane-park.ts +4 -2
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +1 -1
- package/scripts/rules/lane-switch-main.ts +4 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/permission-guards.ts +5 -1
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +67 -17
- package/scripts/rules/poll-loop.ts +72 -9
- package/scripts/rules/pr-merge.ts +5 -5
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +88 -24
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +5 -15
- package/scripts/rules/rule-value-cache.ts +53 -5
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +59 -11
- package/scripts/rules/rule-value.ts +17 -4
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +10 -2
- package/scripts/rules/stop-rule-rows.ts +1 -13
- package/scripts/rules/stop-rules.ts +33 -58
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +110 -23
- package/scripts/rules/timed-rerun.ts +1 -1
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +22 -7
- package/scripts/run/board/run-board-ending-reason.ts +6 -2
- package/scripts/run/board/run-board-fit.ts +24 -1
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-header.ts +8 -0
- package/scripts/run/board/run-board-labels.ts +11 -1
- package/scripts/run/board/run-board-lane-time.ts +1 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-notes.ts +7 -1
- package/scripts/run/board/run-board-operation.ts +4 -2
- package/scripts/run/board/run-board-phase.ts +2 -5
- package/scripts/run/board/run-board-plan.ts +1 -1
- package/scripts/run/board/run-board-read.ts +46 -1
- package/scripts/run/board/run-board-reason.ts +20 -8
- package/scripts/run/board/run-board-render-checks.ts +3 -2
- package/scripts/run/board/run-board-render-drawn.ts +11 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-lead.ts +9 -0
- package/scripts/run/board/run-board-render-legend.ts +19 -0
- package/scripts/run/board/run-board-render-tail.ts +1 -1
- package/scripts/run/board/run-board-render.ts +82 -18
- package/scripts/run/board/run-board-spin.ts +1 -3
- package/scripts/run/board/run-board-status.ts +2 -0
- package/scripts/run/board/run-board-tick.ts +39 -10
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +3 -2
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +52 -8
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-filed.ts +9 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +4 -0
- package/scripts/run/event/run-event-stream.ts +25 -3
- package/scripts/run/hold/run-stop-notify.ts +3 -8
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +66 -23
- package/scripts/run/merge/run-merge-outcome.ts +2 -0
- package/scripts/run/merge/run-merge-ship.ts +13 -3
- package/scripts/run/merge/run-merge-signals.ts +40 -23
- package/scripts/run/merge/run-merge-steps.ts +56 -36
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +41 -14
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +26 -6
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-prep.ts +1 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +5 -2
- package/scripts/run/ship/run-ship-args.ts +19 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +131 -39
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +10 -4
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +16 -1
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +27 -26
- package/scripts/run/ship/run-ship-overlap.ts +8 -3
- package/scripts/run/ship/run-ship-place.ts +9 -2
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +77 -23
- package/scripts/run/ship/run-ship-preflight.ts +16 -4
- package/scripts/run/ship/run-ship-probe.ts +23 -9
- package/scripts/run/ship/run-ship-relaunch-cap.ts +43 -7
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-return.ts +103 -29
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +230 -59
- package/scripts/run/ship/run-ship-review.ts +171 -51
- package/scripts/run/ship/run-ship-reviewer.ts +138 -42
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +49 -13
- package/scripts/run/ship/run-ship-steps.ts +24 -4
- package/scripts/run/ship/run-ship-stop-cause.ts +43 -2
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-sync.ts +171 -30
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +16 -2
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +6 -113
- package/scripts/run/wake/run-wake-code.ts +53 -11
- package/scripts/run/wake/run-wake-driver.ts +5 -3
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +5 -3
- package/scripts/run/wake/run-wake-ports.ts +11 -3
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake.ts +3 -2
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/project-config.ts +3 -2
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-provision-main.ts +9 -1
- package/scripts/security/security-audit-provision.ts +1 -1
- package/scripts/security/security-audit.ts +21 -1
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/split/split-assess.ts +12 -3
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +20 -2
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +208 -20
- package/scripts/test/test-pinned-main.ts +84 -18
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +258 -47
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +35 -11
- package/scripts/test/test-read-recording.ts +17 -5
- package/scripts/test/test-read-trace.ts +26 -8
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red.ts +34 -14
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +4 -1
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +43 -23
- package/scripts/test/test-related-scope.ts +99 -34
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +167 -83
- package/scripts/test/test-unit-guard.ts +28 -5
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-worker-share.ts +5 -4
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +12 -1
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +36 -5
- package/scripts/time-runtime/time-markers.ts +2 -2
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +17 -5
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/latest-corepack.ts +2 -0
- package/templates/gitignore +2 -0
- package/templates/workflows/ci.yml +41 -0
- package/dist/hooks/chunk-AZX4FGQ3.js +0 -207
- package/dist/hooks/chunk-PT5R6UJD.js +0 -7131
- package/dist/hooks/chunk-TUIFS5E7.js +0 -72
- package/dist/hooks/chunk-YCDOIR3I.js +0 -3456
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/rules/filing-cap.ts +0 -139
|
@@ -36,7 +36,8 @@ const SHIP_COMMANDS: Record<string, CommandEntry> = {
|
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
names: [OUTPUT],
|
|
39
|
-
description:
|
|
39
|
+
description:
|
|
40
|
+
'the transcript the outage and usage-limit splits read; absent, they are off.',
|
|
40
41
|
},
|
|
41
42
|
{
|
|
42
43
|
names: ['--driver'],
|
|
@@ -49,16 +50,43 @@ const SHIP_COMMANDS: Record<string, CommandEntry> = {
|
|
|
49
50
|
'run:review': {
|
|
50
51
|
script: 'scripts/run/review/run-review-cli.ts',
|
|
51
52
|
description:
|
|
52
|
-
'Start the gate in the background and
|
|
53
|
+
'Start test:pinned and the gate in the background and write the /code-review brief to a file, printing its path, in one call so they overlap (--join to join them; it stops on an unpinned change)',
|
|
53
54
|
category: 'AI tools',
|
|
54
|
-
reference: [
|
|
55
|
+
reference: [
|
|
56
|
+
'[--code-only] [--unpinned-ok "<reason>"] | --join [--fixing] | --pinned | --push',
|
|
57
|
+
'automation',
|
|
58
|
+
['processes', 'files', 'git', 'network'],
|
|
59
|
+
],
|
|
55
60
|
usage: {
|
|
56
61
|
examples: [
|
|
57
62
|
{
|
|
58
63
|
arguments: '',
|
|
59
|
-
note: 'detach the gate,
|
|
64
|
+
note: 'detach test:pinned and the gate, write the brief (the interaction brief after it where due) to a file and print its path, then launch a reviewer per brief',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
arguments: '--code-only',
|
|
68
|
+
note: "josh ship's own open: code's brief alone, since the ship opens the interaction brief itself",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
arguments: '--unpinned-ok "only logs"',
|
|
72
|
+
note: 'check beside the pair as ever; the join prints the list and the reason and carries on past unpinned places',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
arguments: '--join',
|
|
76
|
+
note: 'after the review returns: join the gate and test:pinned; exit 3 on an unpinned change',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
arguments: '--join --fixing',
|
|
80
|
+
note: 'the join when round 1 has fixes to make: no grace on test:pinned, left running; prints the unpinned places the cache already holds',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
arguments: '--pinned',
|
|
84
|
+
note: "read test:pinned alone (the ship's pre-detach reads it anyway); a lane child returns at once",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
arguments: '--push',
|
|
88
|
+
note: 'launched by a lane open: push and open the PR at a green gate',
|
|
60
89
|
},
|
|
61
|
-
{ arguments: '--join', note: 'after the review returns: join the gate, check its verdict' },
|
|
62
90
|
],
|
|
63
91
|
},
|
|
64
92
|
},
|
|
@@ -91,7 +119,7 @@ const SHIP_COMMANDS: Record<string, CommandEntry> = {
|
|
|
91
119
|
'Ship a change in one call: gate, commit/push/PR, the CI-wait merge and the report bookkeeping, stopping at the first failed step',
|
|
92
120
|
category: 'AI tools',
|
|
93
121
|
reference: [
|
|
94
|
-
'"<title> #<N>" [<follow-up-N> ...] [--cite <N>] [--review] [--detach] [--body-file <path>] [--notify-message <text> | --notify-message-file <path>] | --log <N>',
|
|
122
|
+
'"<title> #<N>" [<follow-up-N> ...] [--cite <N>] [--review [--unpinned-ok "<reason>"]] [--detach] [--body-file <path>] [--notify-message <text> | --notify-message-file <path>] | --log <N>',
|
|
95
123
|
'automation',
|
|
96
124
|
['git', 'network'],
|
|
97
125
|
],
|
|
@@ -112,12 +140,32 @@ const SHIP_COMMANDS: Record<string, CommandEntry> = {
|
|
|
112
140
|
{
|
|
113
141
|
names: ['--review'],
|
|
114
142
|
description:
|
|
115
|
-
'runs review round 1 beside the gate, and round 2 after the commit when `review:round2` requires it; a High or an unfixed Medium stops the ship.',
|
|
143
|
+
'runs review round 1 beside the gate, and round 2 after the commit when `review:round2` requires it; a High or an unfixed Medium stops the ship. A pre-detach `test:pinned` stop at the first unpinned hunk probes the rest in the background, for the next pre-detach.',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
names: ['--unpinned-ok <reason>'],
|
|
147
|
+
description:
|
|
148
|
+
"forwarded to round 1's `run:review`, past `unpinned` places no test can pin.",
|
|
116
149
|
},
|
|
117
150
|
{
|
|
118
151
|
names: ['--detach'],
|
|
119
152
|
description:
|
|
120
|
-
'hands the ship to a supervisor (implied in a lane child); a stop emits `ship-stop` (`--log <N>`). The preflight, type check, unused exports, cspell
|
|
153
|
+
'hands the ship to a supervisor (implied in a lane child); a stop emits `ship-stop` (`--log <N>`). The preflight, type check, unused exports, cspell, guard tests and (`--review`, under `--unpinned-ok`, given or recorded, only if round 1 is reused) `test:pinned` precede hand-off, the checks even after a preflight refusal, so one stop reports every failure.',
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
'ship:wait': {
|
|
159
|
+
script: 'scripts/run/ship/run-ship-wait-cli.ts',
|
|
160
|
+
description:
|
|
161
|
+
'Wait on a detached ship through its gate and review round 1, so a stop there returns to this session (returned | passed | ended | pending)',
|
|
162
|
+
category: 'AI tools',
|
|
163
|
+
reference: ['<N>', 'automation', ['files', 'processes']],
|
|
164
|
+
usage: {
|
|
165
|
+
examples: [
|
|
166
|
+
{
|
|
167
|
+
arguments: '<N>',
|
|
168
|
+
note: 're-issue it on `pending` while `cost --cut` is `under`; `returned` prints the stop to fix',
|
|
121
169
|
},
|
|
122
170
|
],
|
|
123
171
|
},
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { gate_plan } from '#scripts/gate/gate-plan'
|
|
2
|
+
import type { CommandEntry } from './josh-command-types'
|
|
3
|
+
|
|
4
|
+
// The commands that check a change's tests rather than run them, split out of
|
|
5
|
+
// `josh-commands-development.ts` when it reached its line cap (joshuafolkken/kit#5153). `DEV_COMMANDS`
|
|
6
|
+
// spreads this in at the same place, so the map keeps its order.
|
|
7
|
+
|
|
8
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
9
|
+
const TEST_CHECK_COMMANDS: Record<string, CommandEntry> = {
|
|
10
|
+
'test:declared': {
|
|
11
|
+
script: 'scripts/test/test-declared.ts',
|
|
12
|
+
description:
|
|
13
|
+
'Report whether the working-tree change needs a test (required/exempt/satisfied); --match checks Step 0 declarations on stdin',
|
|
14
|
+
category: 'Development',
|
|
15
|
+
reference: ['[--match]', 'developer', ['processes']],
|
|
16
|
+
usage: {
|
|
17
|
+
examples: [
|
|
18
|
+
{ arguments: '' },
|
|
19
|
+
{ arguments: '--match', note: 'check Step 0 declarations on stdin' },
|
|
20
|
+
{ arguments: '--help', note: 'print usage, including the --match stdin form' },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
'test:red': {
|
|
25
|
+
script: 'scripts/test/test-red-main.ts',
|
|
26
|
+
description:
|
|
27
|
+
'Run the changed unit tests against the pre-fix tree (merge-base worktree) and report red/green/no-test/stopped/test-only',
|
|
28
|
+
category: 'Development',
|
|
29
|
+
reference: ['', 'developer', ['git', 'processes']],
|
|
30
|
+
usage: { examples: [{ arguments: '', note: 'red, green, no-test, stopped or test-only' }] },
|
|
31
|
+
},
|
|
32
|
+
'test:reach': {
|
|
33
|
+
script: 'scripts/test/test-reach-cli.ts',
|
|
34
|
+
description:
|
|
35
|
+
"Print how many test files each file's imports reach — the count test:related sizes its claim by — one '<count> <file>' line per file",
|
|
36
|
+
category: 'Development',
|
|
37
|
+
reference: ['<files...>', 'automation', ['none']],
|
|
38
|
+
usage: {
|
|
39
|
+
examples: [
|
|
40
|
+
{
|
|
41
|
+
arguments: 'scripts/lane/lane-ledger.ts',
|
|
42
|
+
note: 'a reach count to measure before and after a change',
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
'test:pinned': {
|
|
48
|
+
script: 'scripts/test/test-pinned-main.ts',
|
|
49
|
+
description:
|
|
50
|
+
"Revert each changed hunk outside tests and fixtures only they reach, and replace each added file's top-level function bodies with a throw, in a HEAD worktree, run the related tests, and list what no test went red on",
|
|
51
|
+
category: 'Development',
|
|
52
|
+
reference: [
|
|
53
|
+
'[--max <n>] [--record <token>] [--origin <run-review|pre-detach|manual>] [--first-unpinned]',
|
|
54
|
+
'developer',
|
|
55
|
+
['git', 'processes'],
|
|
56
|
+
],
|
|
57
|
+
...gate_plan.DIRECT_UNIT_CLAIM,
|
|
58
|
+
usage: {
|
|
59
|
+
examples: [
|
|
60
|
+
{ arguments: '', note: 'unpinned <file>:<line> lines; unchecked counted per reason' },
|
|
61
|
+
{ arguments: '--max 5', note: 'check at most 5 hunks; the rest count as unchecked' },
|
|
62
|
+
{
|
|
63
|
+
arguments: '--record <token>',
|
|
64
|
+
note: 'also leave the answer, under the launch token, for run:review --join',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
arguments: '--origin pre-detach',
|
|
68
|
+
note: 'name what started the run on its lane ledger row (default manual)',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
arguments: '--first-unpinned',
|
|
72
|
+
note: 'start no probe once one hunk is unpinned; the rest count as unchecked',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
}
|
|
78
|
+
/* eslint-enable @typescript-eslint/naming-convention */
|
|
79
|
+
|
|
80
|
+
export { TEST_CHECK_COMMANDS }
|
|
@@ -188,7 +188,7 @@ const WORKFLOW_COMMANDS: Record<string, CommandEntry> = {
|
|
|
188
188
|
description: 'Record a review round’s findings, or check a round was recorded',
|
|
189
189
|
category: 'Workflow',
|
|
190
190
|
reference: [
|
|
191
|
-
'--issue <N> [--comment | --interaction] [<category>:<severity>:<file> ...] | --check [--interaction] --issue <N>',
|
|
191
|
+
'--issue <N> [--comment | --interaction] [<category>:<severity>:<file>[ — <reason>] ...] | --check [--interaction] --issue <N>',
|
|
192
192
|
'automation',
|
|
193
193
|
['files', 'network'],
|
|
194
194
|
],
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs'
|
|
2
|
+
import { parseEnv } from 'node:util'
|
|
1
3
|
import { ENV_FILE_NAME } from '#ports'
|
|
4
|
+
import { OPTIONAL_ENV_FILE_FLAGS } from './josh-command-types'
|
|
2
5
|
|
|
3
6
|
// Loading `.env` from inside a command, for the commands that must stay in-process.
|
|
4
7
|
//
|
|
@@ -8,23 +11,60 @@ import { ENV_FILE_NAME } from '#ports'
|
|
|
8
11
|
// command a hook fires on every `Bash` call, or one an unattended `epicrun` polls every sixty
|
|
9
12
|
// seconds, cannot pay that, so it reads the file itself instead.
|
|
10
13
|
//
|
|
11
|
-
// `
|
|
14
|
+
// `parseEnv` is node's own `--env-file` parser, and the loader keeps node's precedence: a value
|
|
12
15
|
// already in the environment wins over the file's. A missing or unreadable file is swallowed,
|
|
13
16
|
// exactly as `--env-file-if-exists` does.
|
|
14
17
|
//
|
|
18
|
+
// **A switch that turns a guard or a gate off is never taken from the file** (kit #4660): the run
|
|
19
|
+
// can write `.env`, so a switch read from it would let the run switch off the guards that bind it. It
|
|
20
|
+
// counts only from the environment the session was launched with — `JOSH_RULE_GUARD=off claude`. The
|
|
21
|
+
// flag form is loaded through the same filter (`apply_node_flags`), so a process kit starts never
|
|
22
|
+
// inherits a switch from the file either.
|
|
23
|
+
//
|
|
15
24
|
// **Call it only on the real command path** — inside the `import.meta.url` guard, or the hook's own
|
|
16
25
|
// entry — never from a function a unit test calls, so a developer's own `.env` cannot decide what
|
|
17
26
|
// the tests see.
|
|
18
|
-
|
|
27
|
+
|
|
28
|
+
// Every `JOSH_*_GUARD` switch, the hooks' `JOSH_*_FORCE` skips and the gate's `JOSH_SCOPED_GREEN`.
|
|
29
|
+
const LAUNCH_ONLY_KEY = /^JOSH_(?:\w+_GUARD|\w+_FORCE|SCOPED_GREEN)$/u
|
|
30
|
+
|
|
31
|
+
function is_launch_only_key(key: string): boolean {
|
|
32
|
+
return LAUNCH_ONLY_KEY.test(key)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function read_environment_file(): string {
|
|
19
36
|
try {
|
|
20
|
-
|
|
37
|
+
return readFileSync(ENV_FILE_NAME, 'utf8')
|
|
21
38
|
} catch {
|
|
22
39
|
// No `.env` beside this project, or one this process may not read. The caller then reads from
|
|
23
40
|
// the environment alone, which is what it did before any file existed.
|
|
41
|
+
return ''
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function load_environment_file(): void {
|
|
46
|
+
const entries = Object.entries(parseEnv(read_environment_file()))
|
|
47
|
+
|
|
48
|
+
for (const [key, value] of entries) {
|
|
49
|
+
if (!is_launch_only_key(key) && process.env[key] === undefined) process.env[key] = value
|
|
24
50
|
}
|
|
25
51
|
}
|
|
26
52
|
|
|
53
|
+
// The node flags a spawned command is started with. The `.env` flag is loaded here, into the
|
|
54
|
+
// environment the child inherits, rather than handed to node, whose own loader cannot leave the
|
|
55
|
+
// launch-only keys out.
|
|
56
|
+
function apply_node_flags(flags: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
57
|
+
const [environment_flag] = OPTIONAL_ENV_FILE_FLAGS
|
|
58
|
+
|
|
59
|
+
if (!flags.includes(environment_flag ?? '')) return flags
|
|
60
|
+
|
|
61
|
+
load_environment_file()
|
|
62
|
+
|
|
63
|
+
return flags.filter((flag) => flag !== environment_flag)
|
|
64
|
+
}
|
|
65
|
+
|
|
27
66
|
const josh_environment_file = {
|
|
67
|
+
apply_node_flags,
|
|
28
68
|
load_environment_file,
|
|
29
69
|
}
|
|
30
70
|
|
|
@@ -31,8 +31,8 @@ function bundled_script_path(package_directory: string, script: string): string
|
|
|
31
31
|
|
|
32
32
|
// The file this dispatcher imports in its own process, or `undefined` to spawn tsx instead.
|
|
33
33
|
// `tsx_arguments` are node flags the script needs *before* its own code runs — today every one of
|
|
34
|
-
// them a form of `--env-file`, which
|
|
35
|
-
//
|
|
34
|
+
// them a form of `--env-file`, which the dispatcher loads into the child's environment just before
|
|
35
|
+
// it spawns (`josh_environment_file.apply_node_flags`). Those commands (`doctor`, `latest:scope`, `followup`, `notify`) keep a
|
|
36
36
|
// process of their own; each runs at most a few times per run, so none of them is where the cost
|
|
37
37
|
// this saves accumulates. Under plain node, which cannot load a `.ts` script at all, only a
|
|
38
38
|
// pre-built command runs in-process; every other one keeps spawning tsx.
|
|
@@ -8,14 +8,15 @@ import { package_version_schema } from '#scripts/lib/schemas'
|
|
|
8
8
|
import { resolve_spawn_exit } from '#scripts/lib/spawn-exit'
|
|
9
9
|
import { execaSync } from 'execa'
|
|
10
10
|
import { command_suggest } from './command-suggest'
|
|
11
|
+
import { ALIASES } from './josh-aliases'
|
|
11
12
|
import {
|
|
12
|
-
ALIASES,
|
|
13
13
|
CATEGORY_ORDER,
|
|
14
14
|
COMMAND_MAP,
|
|
15
15
|
type CommandCategory,
|
|
16
16
|
type CommandEntry,
|
|
17
17
|
} from './josh-command-map'
|
|
18
18
|
import { composite_arguments, USAGE_ERROR_EXIT_CODE } from './josh-composite-arguments'
|
|
19
|
+
import { josh_environment_file } from './josh-environment-file'
|
|
19
20
|
import { josh_in_process } from './josh-in-process'
|
|
20
21
|
import { kit_only } from './kit-only'
|
|
21
22
|
import { find_package_directory } from './package-directory'
|
|
@@ -193,7 +194,7 @@ function spawn_script_entry(
|
|
|
193
194
|
|
|
194
195
|
return spawn_script(runner.executable, [
|
|
195
196
|
...runner.leading_arguments,
|
|
196
|
-
...(entry.tsx_arguments ?? []),
|
|
197
|
+
...josh_environment_file.apply_node_flags(entry.tsx_arguments ?? []),
|
|
197
198
|
script_path,
|
|
198
199
|
...script_arguments,
|
|
199
200
|
])
|
|
@@ -309,7 +310,8 @@ const josh_logic = {
|
|
|
309
310
|
}
|
|
310
311
|
|
|
311
312
|
export type { CommandEntry } from './josh-command-map'
|
|
312
|
-
export { ALIASES
|
|
313
|
+
export { ALIASES } from './josh-aliases'
|
|
314
|
+
export { COMMAND_MAP } from './josh-command-map'
|
|
313
315
|
export { SPAWN_ERROR_EXIT_CODE } from '#scripts/lib/spawn-exit'
|
|
314
316
|
export { composite_arguments, USAGE_ERROR_EXIT_CODE } from './josh-composite-arguments'
|
|
315
317
|
export {
|
package/scripts/josh/josh-run.ts
CHANGED
|
@@ -17,6 +17,8 @@ import { execa } from 'execa'
|
|
|
17
17
|
//
|
|
18
18
|
// **`timeout_ms` bounds a read made from inside a loop**: the step is killed and
|
|
19
19
|
// its exit reads as a failure, so a hung network call ends a pass instead of the loop around it.
|
|
20
|
+
//
|
|
21
|
+
// **`environment` adds to the inherited one** for that one step — a switch the step's hooks read.
|
|
20
22
|
|
|
21
23
|
const PNPM = 'pnpm'
|
|
22
24
|
const JOSH = 'josh'
|
|
@@ -29,15 +31,31 @@ interface JoshResult {
|
|
|
29
31
|
err?: string
|
|
30
32
|
}
|
|
31
33
|
|
|
34
|
+
interface ExtraOptions {
|
|
35
|
+
timeout?: number
|
|
36
|
+
env?: Readonly<Record<string, string>>
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function extra_options(
|
|
40
|
+
timeout_ms: number | undefined,
|
|
41
|
+
environment: Readonly<Record<string, string>> | undefined,
|
|
42
|
+
): ExtraOptions {
|
|
43
|
+
return {
|
|
44
|
+
...(timeout_ms !== undefined && { timeout: timeout_ms }),
|
|
45
|
+
...(environment !== undefined && { env: environment }),
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
32
49
|
async function josh_run(
|
|
33
50
|
args: ReadonlyArray<string>,
|
|
34
51
|
should_forward_stderr = false,
|
|
35
52
|
timeout_ms?: number,
|
|
53
|
+
environment?: Readonly<Record<string, string>>,
|
|
36
54
|
): Promise<JoshResult> {
|
|
37
55
|
const result = await execa(PNPM, [JOSH, ...args], {
|
|
38
56
|
reject: false,
|
|
39
57
|
stderr: should_forward_stderr ? FORWARDED_STDERR : 'pipe',
|
|
40
|
-
...(timeout_ms
|
|
58
|
+
...extra_options(timeout_ms, environment),
|
|
41
59
|
})
|
|
42
60
|
|
|
43
61
|
return {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// The run's own records — observations, accepted metrics — josh writes under the root `.josh/`
|
|
2
|
+
// directory. `defect-report.ts`, `scoped-green.ts`, `test-read-map.ts`, `test-pinned-cache.ts` and
|
|
3
|
+
// the background `josh test:pinned`'s tree key (`run-review-pinned-tree.ts`) read such a path as
|
|
4
|
+
// bookkeeping, not as a change to the code — no test reads it.
|
|
5
|
+
const RUN_RECORD_ROOT = '.josh/'
|
|
6
|
+
|
|
7
|
+
function is_run_record(relative: string): boolean {
|
|
8
|
+
return relative.startsWith(RUN_RECORD_ROOT)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const run_record_path = {
|
|
12
|
+
is_run_record,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { run_record_path }
|
|
@@ -69,14 +69,22 @@ function account_key(): string {
|
|
|
69
69
|
// **`suffix` is what the file is, not decoration.** Every record here was JSON until `josh gate`
|
|
70
70
|
// needed to keep another tool's output verbatim, and a log named `.json`
|
|
71
71
|
// tells every reader — a person, an editor, a `less` — that it is something it is not.
|
|
72
|
-
function
|
|
72
|
+
function stamp_name(
|
|
73
73
|
prefix: string,
|
|
74
74
|
root: string = PACKAGE_DIR,
|
|
75
75
|
suffix: string = STAMP_SUFFIX,
|
|
76
76
|
): string {
|
|
77
77
|
const key = digest(`${account_key()}${ACCOUNT_KEY_SEPARATOR}${root}`).slice(0, STAMP_KEY_LENGTH)
|
|
78
78
|
|
|
79
|
-
return
|
|
79
|
+
return `${prefix}${key}${suffix}`
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function stamp_path(
|
|
83
|
+
prefix: string,
|
|
84
|
+
root: string = PACKAGE_DIR,
|
|
85
|
+
suffix: string = STAMP_SUFFIX,
|
|
86
|
+
): string {
|
|
87
|
+
return path.join(PLATFORM_TEMP_ROOT, stamp_name(prefix, root, suffix))
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
// **The write unlinks first, then creates exclusively.** `rmSync` removes a symlink rather than
|
|
@@ -199,6 +207,7 @@ const stamp_file = {
|
|
|
199
207
|
replace_stamp,
|
|
200
208
|
replace_text_stamp,
|
|
201
209
|
remove_stamp,
|
|
210
|
+
stamp_name,
|
|
202
211
|
stamp_path,
|
|
203
212
|
write_stamp,
|
|
204
213
|
write_text_stamp,
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
4
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
5
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
6
|
+
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
7
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
8
|
+
import { lane_adopt, type Adoption } from './lane-adopt'
|
|
9
|
+
import { lane_registry, type LaneInfo } from './lane-registry'
|
|
10
|
+
import { lane_state, type LaneRecords } from './lane-state'
|
|
11
|
+
|
|
12
|
+
// `josh lane:adopt <issue> | --all` — write a state record for each open lane that lost its own
|
|
13
|
+
// (`lane-adopt.ts`), one line per lane. A named lane left unknown exits non-zero; one already recorded
|
|
14
|
+
// had nothing to adopt and exits zero. Under `--all` neither is a failure.
|
|
15
|
+
|
|
16
|
+
const ARGV_OFFSET = 2
|
|
17
|
+
const SUCCESS_EXIT_CODE = 0
|
|
18
|
+
const FAILURE_EXIT_CODE = 1
|
|
19
|
+
const ALL_FLAG = '--all'
|
|
20
|
+
const USAGE = 'Usage: josh lane:adopt <issue-number> | josh lane:adopt --all'
|
|
21
|
+
|
|
22
|
+
async function named_lane(issue: string): Promise<Array<LaneInfo> | undefined> {
|
|
23
|
+
if (!issue_number_shape.is_issue_number(issue)) return undefined
|
|
24
|
+
|
|
25
|
+
const lane = await lane_registry.find_open_lane(issue)
|
|
26
|
+
|
|
27
|
+
return lane === undefined ? [] : [lane]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function lanes_of(target: ReadonlyArray<string>): Promise<Array<LaneInfo> | undefined> {
|
|
31
|
+
const [issue, ...rest] = target
|
|
32
|
+
|
|
33
|
+
if (issue === undefined || rest.length > 0) return undefined
|
|
34
|
+
|
|
35
|
+
return issue === ALL_FLAG ? await lane_registry.list_lanes() : await named_lane(issue)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function outcome_text(adoption: Adoption): string {
|
|
39
|
+
if (adoption.kind === 'left') return `left unknown — ${adoption.reason}`
|
|
40
|
+
if (adoption.kind === 'kept') return `already recorded ${adoption.state}`
|
|
41
|
+
|
|
42
|
+
return `recorded open — ${lane_adopt.facts_text(adoption.facts)}`
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Adopt one lane, report it, and put an adoption on the run's event stream as a note, as
|
|
46
|
+
// `backlog-drive-adopt.ts` does: a `lane-state` line would reset the once-per-episode paused-lanes
|
|
47
|
+
// notice (`backlog-drive-paused.ts`) though no paused lane changed.
|
|
48
|
+
async function settle(lane: LaneInfo, records: LaneRecords): Promise<Adoption> {
|
|
49
|
+
const adoption = await lane_adopt.adopt(lane, records)
|
|
50
|
+
const { ADOPT_COMMAND } = lane_adopt
|
|
51
|
+
|
|
52
|
+
console.info(`${ADOPT_COMMAND} ${session_cite.issue(lane.issue)}: ${outcome_text(adoption)}`)
|
|
53
|
+
if (adoption.kind !== 'adopted') return adoption
|
|
54
|
+
|
|
55
|
+
await run_event_stream_emit.emit(
|
|
56
|
+
run_event_stream.EVENT_KIND.NOTE,
|
|
57
|
+
`${issue_cite.plain(lane.issue)} adopted by ${ADOPT_COMMAND}`,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
return adoption
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async function apply(lanes: ReadonlyArray<LaneInfo>, is_named: boolean): Promise<number> {
|
|
64
|
+
const records = await lane_state.read_states(lanes.map((lane) => lane.issue))
|
|
65
|
+
const adoptions = await Promise.all(lanes.map(async (lane) => await settle(lane, records)))
|
|
66
|
+
|
|
67
|
+
return is_named && adoptions.some((adoption) => adoption.kind === 'left')
|
|
68
|
+
? FAILURE_EXIT_CODE
|
|
69
|
+
: SUCCESS_EXIT_CODE
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function report(message: string): number {
|
|
73
|
+
console.error(message)
|
|
74
|
+
|
|
75
|
+
return FAILURE_EXIT_CODE
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
79
|
+
const lanes = await lanes_of(argv)
|
|
80
|
+
|
|
81
|
+
if (lanes === undefined) return report(USAGE)
|
|
82
|
+
|
|
83
|
+
if (lanes.length === 0 && argv[0] !== ALL_FLAG) {
|
|
84
|
+
return report(`No open lane for ${session_cite.issue(argv[0] ?? '')}`)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return await apply(lanes, argv[0] !== ALL_FLAG)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
91
|
+
process.exitCode = await run(argv)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const lane_adopt_cli = { run }
|
|
95
|
+
|
|
96
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
97
|
+
|
|
98
|
+
export { lane_adopt_cli }
|