@joshuafolkken/kit 1.1514.0 → 1.2114.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/investigator.md +1 -1
- 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/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- 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-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- 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 +25 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +5 -4
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -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-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +62 -10
- 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 +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- 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 +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -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-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +33 -2
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- 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 +85 -0
- 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/followup-review-gates.ts +81 -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 +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- 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 +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- 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/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- 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 +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- 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 +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- 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-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- 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 +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +38 -179
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- 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 +56 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +114 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +213 -0
- 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 +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -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 +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- 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/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +160 -161
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +142 -101
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- 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-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -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-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -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 +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- 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-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- 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-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- 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-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- 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/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- 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/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +24 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -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 +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- 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-main.ts +12 -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-blobs.ts +221 -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 +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -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-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- 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 +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +71 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +90 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +264 -258
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- 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 +54 -10
- 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-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +58 -10
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- 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 +76 -48
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- 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 +28 -7
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -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 +6 -3
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- 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 +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- 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 +44 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +6 -11
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- 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-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -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 +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- 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 +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +64 -151
- 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 +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- 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 +40 -8
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-O6GDRNJB.js +0 -343
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/filing-cap.ts +0 -132
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { LaunchOutcome } from '#scripts/lane/lane-launch-cli'
|
|
2
|
+
import type { DrivePorts, DriveState, PassResult } from './backlog-drive'
|
|
3
|
+
import { backlog_drive_seats } from './backlog-drive-seats'
|
|
4
|
+
|
|
5
|
+
// The launches of one offered pass, out of `backlog-drive.ts` so the loop stays within its size.
|
|
6
|
+
|
|
7
|
+
const NO_FREE_LANES = 0
|
|
8
|
+
const LAUNCHED = 'launched'
|
|
9
|
+
const UNOPENED = 'unopened'
|
|
10
|
+
// The launch port's answer for an issue its measurement declaration closed (`backlog-measure-close.ts`).
|
|
11
|
+
const MEASURED_LAUNCH = 'measured' as const
|
|
12
|
+
|
|
13
|
+
type DriveLaunch = LaunchOutcome['kind'] | typeof MEASURED_LAUNCH
|
|
14
|
+
|
|
15
|
+
interface Settled {
|
|
16
|
+
in_flight: Array<string>
|
|
17
|
+
measured: Array<string>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function handed_back(issue: string, state: DriveState): PassResult {
|
|
21
|
+
return { kind: 'end', end: { reason: 'launch', token: undefined, issue }, state }
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// A `lane:open` refused with every lane taken is a wait, not a judgement: the
|
|
25
|
+
// next offer after a lane frees retries it. A step failing after the lane opened is always handed back —
|
|
26
|
+
// that lane holds the last seat itself, so the free count would read the failure as a full pool.
|
|
27
|
+
async function refused(
|
|
28
|
+
issue: string,
|
|
29
|
+
outcome: DriveLaunch,
|
|
30
|
+
state: DriveState,
|
|
31
|
+
ports: DrivePorts,
|
|
32
|
+
): Promise<PassResult> {
|
|
33
|
+
if (outcome !== UNOPENED) return handed_back(issue, state)
|
|
34
|
+
if ((await ports.free_lanes()) <= NO_FREE_LANES) return { kind: 'continue', state }
|
|
35
|
+
|
|
36
|
+
return handed_back(issue, state)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// **Only a launch or a measured close is activity**: a pass that started nothing — every lane taken
|
|
40
|
+
// — keeps `active` where it was, or the once-a-minute offer would restart the idle budget for good. A
|
|
41
|
+
// measured issue is closed but may still read OPEN to `backlog:next`, so it is excluded as a merge is.
|
|
42
|
+
function launched(state: DriveState, settled: Settled, ports: DrivePorts): DriveState {
|
|
43
|
+
const { in_flight, measured } = settled
|
|
44
|
+
|
|
45
|
+
if (in_flight.length === state.in_flight.length && measured.length === 0) {
|
|
46
|
+
return { ...state, in_flight }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const exclude = [...state.exclude, ...measured]
|
|
50
|
+
|
|
51
|
+
return { ...state, in_flight, exclude, active: ports.now().toISOString() }
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Whether the launch settled the issue — into flight, or closed by its measurement.
|
|
55
|
+
function is_settled(settled: Settled, issue: string, outcome: DriveLaunch): boolean {
|
|
56
|
+
if (outcome === MEASURED_LAUNCH) settled.measured.push(issue)
|
|
57
|
+
if (outcome === LAUNCHED) settled.in_flight.push(issue)
|
|
58
|
+
|
|
59
|
+
return outcome === MEASURED_LAUNCH || outcome === LAUNCHED
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// **No more new lanes than free lanes**. `backlog:offer` lists every ready issue without reading the
|
|
63
|
+
// lanes, so launching all of them overran `JOSH_LANE_LIMIT` until `lane:open` ran out of seats. An issue
|
|
64
|
+
// that already holds a kept lane reuses its port seat but takes a place under the limit, ahead of a
|
|
65
|
+
// fresh launch; the rest launch up to the free count (`backlog-drive-seats.ts`), read before the first.
|
|
66
|
+
async function launch_all(
|
|
67
|
+
issues: ReadonlyArray<string>,
|
|
68
|
+
state: DriveState,
|
|
69
|
+
ports: DrivePorts,
|
|
70
|
+
): Promise<PassResult> {
|
|
71
|
+
const settled: Settled = { in_flight: [...state.in_flight], measured: [] }
|
|
72
|
+
const launching = await backlog_drive_seats.seated(issues, ports)
|
|
73
|
+
|
|
74
|
+
for (const issue of launching) {
|
|
75
|
+
// eslint-disable-next-line no-await-in-loop -- lanes launch in order and the first refusal ends the pass
|
|
76
|
+
const outcome = await ports.launch(issue)
|
|
77
|
+
|
|
78
|
+
if (!is_settled(settled, issue, outcome)) {
|
|
79
|
+
// eslint-disable-next-line no-await-in-loop -- lanes launch in order and the first refusal ends the pass
|
|
80
|
+
return await refused(issue, outcome, launched(state, settled, ports), ports)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return { kind: 'continue', state: launched(state, settled, ports) }
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const backlog_drive_launch_pass = { MEASURED_LAUNCH, launch_all }
|
|
88
|
+
|
|
89
|
+
export type { DriveLaunch }
|
|
90
|
+
export { backlog_drive_launch_pass }
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { git_stash } from '#scripts/git/stash/git-stash'
|
|
2
|
-
import { lane_launch_cli
|
|
2
|
+
import { lane_launch_cli } from '#scripts/lane/lane-launch-cli'
|
|
3
3
|
import { run_event_setup } from '#scripts/run/event/run-event-setup'
|
|
4
|
+
import { backlog_drive_launch_pass, type DriveLaunch } from './backlog-drive-launch-pass'
|
|
4
5
|
import { backlog_drive_owner } from './backlog-drive-owner'
|
|
6
|
+
import { backlog_measure_close } from './backlog-measure-close'
|
|
7
|
+
|
|
8
|
+
const { MEASURED_LAUNCH } = backlog_drive_launch_pass
|
|
5
9
|
|
|
6
10
|
// The driver's lane launch. The parent that ran `josh latest` in the primary
|
|
7
11
|
// checkout leaves its rewritten lock file in a stash under this message — `backlogrun-lanes.md` →
|
|
@@ -27,8 +31,10 @@ async function latest_stash(): Promise<string | undefined> {
|
|
|
27
31
|
return selection.kind === 'match' ? LATEST_STASH_MESSAGE : undefined
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
// An issue its measurement declaration closed takes no lane (`backlog-measure-close.ts`).
|
|
35
|
+
async function launch(issue: string, owner: string): Promise<DriveLaunch> {
|
|
31
36
|
await backlog_drive_owner.assert_current(owner)
|
|
37
|
+
if (await backlog_measure_close.closed(issue)) return MEASURED_LAUNCH
|
|
32
38
|
await run_event_setup.emit(run_event_setup.opening_lane(issue))
|
|
33
39
|
|
|
34
40
|
const outcome = await lane_launch_cli.launch_lane({ issue, stash: await latest_stash() })
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { machine_capacity, type MachineSample } from '#scripts/gate/machine-capacity'
|
|
2
|
+
import {
|
|
3
|
+
run_board_machine,
|
|
4
|
+
type MachineGauges,
|
|
5
|
+
type MachineMark,
|
|
6
|
+
} from '#scripts/run/board/run-board-machine'
|
|
7
|
+
import type { DrivePorts, DriveState, PassResult } from './backlog-drive'
|
|
8
|
+
|
|
9
|
+
// Whether the machine has room for one more lane (joshuafolkken/kit#4084). The lane limit counts lanes,
|
|
10
|
+
// not memory, so a lane opened while the machine swapped slowed every gate already running.
|
|
11
|
+
//
|
|
12
|
+
// **The reading is `run:board`'s own** (`run-board-machine.ts`): 🧠 and 💾 are the figures a person
|
|
13
|
+
// sees beside the waiting row, and the thresholds are the gauges' red and yellow.
|
|
14
|
+
//
|
|
15
|
+
// **Stopping is looser than resuming, so a machine near one threshold does not open and stop in turn.**
|
|
16
|
+
// A lane stops being opened when the kernel calls the memory critical, 🧠 turns red or 💾 swaps at a
|
|
17
|
+
// red rate. It resumes only once the kernel reads under critical and 🧠 and 💾 are both back under
|
|
18
|
+
// yellow. The kernel's warning is no hold (joshuafolkken/kit#4199): macOS keeps it long after the
|
|
19
|
+
// pressure passed, so a run held on it never resumed.
|
|
20
|
+
//
|
|
21
|
+
// **The 🧠 resume bar stays at yellow (70%) on measurement** (joshuafolkken/kit#4529). Across the
|
|
22
|
+
// 2026-10-22 run on an 18 GB machine (106 one-minute samples, 24 after the whole-suite and vitest-worker
|
|
23
|
+
// cuts merged) 🧠 never reached 70%, peaking at 67%; every memory hold, 1.3 minutes in all, came with a
|
|
24
|
+
// swap burst. 💾 is what holds a lane, so a lower 🧠 bar would admit nothing sooner and only risk swap.
|
|
25
|
+
//
|
|
26
|
+
// **A figure that could not be read is no limit**, as in the gate's core budget: a machine without
|
|
27
|
+
// `sysctl` dispatches as it did before memory was read.
|
|
28
|
+
|
|
29
|
+
const { MEMORY_RED, MEMORY_YELLOW, SWAP_RED_MB_PER_S, SWAP_YELLOW_MB_PER_S } = run_board_machine
|
|
30
|
+
const { PRESSURE_HOLD } = machine_capacity
|
|
31
|
+
// Two readings closer than this give no swap rate: a page swapped in a few milliseconds is no rate.
|
|
32
|
+
const MIN_RATE_MS = 1000
|
|
33
|
+
// The `hold` reason a pass held by memory records, read back by `run:board` and `lane:stats`.
|
|
34
|
+
const HOLD_REASON = 'memory'
|
|
35
|
+
|
|
36
|
+
type MemoryGauges = Pick<MachineGauges, 'memory_percent' | 'swap_mb_per_s' | 'memory_pressure'>
|
|
37
|
+
|
|
38
|
+
function is_kernel_pressured(gauges: MemoryGauges): boolean {
|
|
39
|
+
return (gauges.memory_pressure ?? 0) >= PRESSURE_HOLD
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function is_stop(gauges: MemoryGauges): boolean {
|
|
43
|
+
return (
|
|
44
|
+
is_kernel_pressured(gauges) ||
|
|
45
|
+
(gauges.memory_percent ?? 0) >= MEMORY_RED ||
|
|
46
|
+
(gauges.swap_mb_per_s ?? 0) >= SWAP_RED_MB_PER_S
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function is_resume(gauges: MemoryGauges): boolean {
|
|
51
|
+
return (
|
|
52
|
+
!is_kernel_pressured(gauges) &&
|
|
53
|
+
(gauges.memory_percent ?? 0) < MEMORY_YELLOW &&
|
|
54
|
+
(gauges.swap_mb_per_s ?? 0) < SWAP_YELLOW_MB_PER_S
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
interface GaugePorts {
|
|
59
|
+
read: () => Promise<MachineSample>
|
|
60
|
+
now: () => number
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const PRODUCTION: GaugePorts = { read: machine_capacity.read_sample, now: Date.now }
|
|
64
|
+
|
|
65
|
+
// What one gauge carries between calls.
|
|
66
|
+
interface GaugeMemo {
|
|
67
|
+
last: MachineMark | undefined
|
|
68
|
+
// The last swap rate measured, kept for a reading too close to the last to measure its own.
|
|
69
|
+
swap_mb_per_s: number | undefined
|
|
70
|
+
is_held: boolean
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// The reading's gauges, the rate measured from the last reading at least `MIN_RATE_MS` old; the last
|
|
74
|
+
// moves on only then, so two close calls keep measuring from the same one. A reading too close to
|
|
75
|
+
// measure keeps the last rate measured, so a held machine still swapping does not read 0 and resume.
|
|
76
|
+
function is_rate_of(last: MachineMark | undefined, mark: MachineMark): last is MachineMark {
|
|
77
|
+
return last !== undefined && mark.at_ms - last.at_ms >= MIN_RATE_MS
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function rated(memo: GaugeMemo, mark: MachineMark): MemoryGauges {
|
|
81
|
+
const { last } = memo
|
|
82
|
+
const is_rated = is_rate_of(last, mark)
|
|
83
|
+
|
|
84
|
+
if (last === undefined || is_rated) memo.last = mark
|
|
85
|
+
|
|
86
|
+
const gauges = run_board_machine.gauges_of(is_rated ? last : undefined, mark)
|
|
87
|
+
|
|
88
|
+
if (is_rated) memo.swap_mb_per_s = gauges.swap_mb_per_s
|
|
89
|
+
|
|
90
|
+
return { ...gauges, swap_mb_per_s: memo.swap_mb_per_s }
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// The production `memory_held` port: each call reads the machine once, and the hold is carried
|
|
94
|
+
// between calls — a held machine waits for the resume, a free one for the stop.
|
|
95
|
+
function gauge(ports: GaugePorts = PRODUCTION): () => Promise<boolean> {
|
|
96
|
+
const memo: GaugeMemo = { last: undefined, swap_mb_per_s: undefined, is_held: false }
|
|
97
|
+
|
|
98
|
+
return async function memory_held(): Promise<boolean> {
|
|
99
|
+
const gauges = rated(memo, { sample: await ports.read(), at_ms: ports.now() })
|
|
100
|
+
|
|
101
|
+
memo.is_held = memo.is_held ? !is_resume(gauges) : is_stop(gauges)
|
|
102
|
+
|
|
103
|
+
return memo.is_held
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// An offer that answered `run` on a machine with no room: nothing launches, the pass records why, and
|
|
108
|
+
// the loop polls the memory until it clears.
|
|
109
|
+
async function held(state: DriveState, ports: Pick<DrivePorts, 'hold'>): Promise<PassResult> {
|
|
110
|
+
await ports.hold(HOLD_REASON)
|
|
111
|
+
|
|
112
|
+
return { kind: 'continue', state: { ...state, is_memory_held: true } }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Whether a held run's memory cleared since: the pass asks the offer again, not waiting out its interval.
|
|
116
|
+
async function is_cleared(
|
|
117
|
+
state: DriveState,
|
|
118
|
+
ports: Pick<DrivePorts, 'memory_held'>,
|
|
119
|
+
): Promise<boolean> {
|
|
120
|
+
return state.is_memory_held === true && !(await ports.memory_held())
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const backlog_drive_memory = { HOLD_REASON, gauge, held, is_cleared }
|
|
124
|
+
|
|
125
|
+
export { backlog_drive_memory }
|
|
126
|
+
export type { MemoryGauges }
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
+
import { auto_ok_cli } from '#scripts/auto-ok/auto-ok-cli'
|
|
1
2
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
EPIC_LABEL,
|
|
5
|
+
has_label_name,
|
|
6
|
+
has_parked_label,
|
|
7
|
+
parked_label_of,
|
|
8
|
+
} from '#scripts/issue/issue-labels'
|
|
3
9
|
import type { IssueState } from '#scripts/issue/issue-state'
|
|
4
10
|
import { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
11
|
+
import { lane_plan } from '#scripts/lane/lane-plan'
|
|
5
12
|
import type { RunCarry } from '#scripts/run/carry/run-carry'
|
|
6
|
-
import { run_carry_added } from '#scripts/run/carry/run-carry-added'
|
|
7
|
-
import type { MergeResult } from '#scripts/run/merge/run-merge-cli'
|
|
8
|
-
import { run_invocation } from '#scripts/run/run-invocation'
|
|
9
13
|
import { backlog_budget } from './backlog-budget'
|
|
10
14
|
import type { DriveState, OfferRead } from './backlog-drive'
|
|
11
15
|
import { backlog_drive_epic } from './backlog-drive-epic'
|
|
12
16
|
import { backlog_drive_named } from './backlog-drive-named'
|
|
13
17
|
import { backlog_drive_unread } from './backlog-drive-unread'
|
|
18
|
+
import type { Declared } from './backlog-overlap'
|
|
19
|
+
import { backlog_plan_comment } from './backlog-plan-comment'
|
|
14
20
|
|
|
15
21
|
interface NamedContext {
|
|
16
22
|
is_only: boolean
|
|
@@ -51,13 +57,11 @@ function budget_offer(
|
|
|
51
57
|
}
|
|
52
58
|
}
|
|
53
59
|
|
|
54
|
-
//
|
|
55
|
-
//
|
|
60
|
+
// Whether a named issue has already settled without this run dispatching it: closed is merged, and a
|
|
61
|
+
// park (`PARKED_LABELS`) waits on a person, so re-dispatching it only repeats the stop it parked on.
|
|
56
62
|
// Either is booked done rather than offered.
|
|
57
|
-
function
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return has_label_name(state.labels, NEEDS_DECISION_LABEL) ? 'parked' : undefined
|
|
63
|
+
function is_settled(state: IssueState): boolean {
|
|
64
|
+
return state.state.toUpperCase() === 'CLOSED' || has_parked_label(state.labels)
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
async function classify(
|
|
@@ -70,14 +74,8 @@ async function classify(
|
|
|
70
74
|
|
|
71
75
|
if (result.kind !== 'state') return backlog_drive_unread.offer(issue, result, state.retries)
|
|
72
76
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (outcome !== undefined) {
|
|
76
|
-
await backlog_drive_named.mark_done(
|
|
77
|
-
issue,
|
|
78
|
-
{ outcome, code: 0, token: 'none', is_offer: true },
|
|
79
|
-
owner,
|
|
80
|
-
)
|
|
77
|
+
if (is_settled(result.state)) {
|
|
78
|
+
await backlog_drive_named.mark_settled(issue, owner)
|
|
81
79
|
|
|
82
80
|
return { verdict: 'wait', issues: [], retries: NO_RETRIES }
|
|
83
81
|
}
|
|
@@ -90,26 +88,37 @@ async function classify(
|
|
|
90
88
|
// **A named issue booked done is not thereby merged**: a park and a failure are
|
|
91
89
|
// booked done too, so the run moves past them. One the run's own merges did not record and GitHub does
|
|
92
90
|
// not read as closed ended without a merge — and an unreadable state counts as that, because a false
|
|
93
|
-
// stop reaches a person while a false finish ends the run where nobody sees it.
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
// stop reaches a person while a false finish ends the run where nobody sees it. The answer is why it
|
|
92
|
+
// did not merge (joshuafolkken/kit#4746): the park it sits on, or that it is open without one.
|
|
93
|
+
async function unmerged_reason(
|
|
94
|
+
issue: number,
|
|
95
|
+
merged: ReadonlyArray<number>,
|
|
96
|
+
): Promise<string | undefined> {
|
|
97
|
+
if (merged.includes(issue)) return undefined
|
|
96
98
|
|
|
97
99
|
const result = await issue_state_cli.read_issue(String(issue))
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
if (result.kind !== 'state') return 'state unreadable'
|
|
102
|
+
if (result.state.state.toUpperCase() === 'CLOSED') return undefined
|
|
103
|
+
|
|
104
|
+
return parked_label_of(result.state.labels) ?? 'open'
|
|
100
105
|
}
|
|
101
106
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
function cite(issue: number, reason: string | undefined): string | undefined {
|
|
108
|
+
return reason === undefined ? undefined : `${issue_cite.plain(issue)} (${reason})`
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Each named issue that did not merge, with its reason. The issues `run:add` put in count too: one that
|
|
112
|
+
// parked is no more a merge than a declared one.
|
|
113
|
+
async function unmerged_of(carry: RunCarry): Promise<Array<string>> {
|
|
114
|
+
const declared = backlog_drive_named.named_issues(carry)
|
|
109
115
|
const merged = carry.merged_issues ?? []
|
|
110
|
-
const
|
|
116
|
+
const reasons = await Promise.all(
|
|
117
|
+
declared.map(async (issue) => await unmerged_reason(issue, merged)),
|
|
118
|
+
)
|
|
119
|
+
const cited = declared.map((issue, index) => cite(issue, reasons[index]))
|
|
111
120
|
|
|
112
|
-
return
|
|
121
|
+
return cited.filter((line) => line !== undefined)
|
|
113
122
|
}
|
|
114
123
|
|
|
115
124
|
// The `--only` run's end: a finish when every named issue merged, otherwise a stop naming the ones that
|
|
@@ -119,9 +128,11 @@ async function only_end(carry: RunCarry, named: OfferRead): Promise<OfferRead> {
|
|
|
119
128
|
|
|
120
129
|
if (unmerged.length === 0) return named
|
|
121
130
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
131
|
+
return {
|
|
132
|
+
...named,
|
|
133
|
+
reason: `only: ${unmerged.join(', ')} ended without a merge`,
|
|
134
|
+
is_finish: false,
|
|
135
|
+
}
|
|
125
136
|
}
|
|
126
137
|
|
|
127
138
|
async function not_run(
|
|
@@ -131,12 +142,39 @@ async function not_run(
|
|
|
131
142
|
return named?.is_finish === true ? await only_end(carry, named) : named
|
|
132
143
|
}
|
|
133
144
|
|
|
145
|
+
// What the lanes in flight declare — recorded plan, else plan comment, else body, the scope `lane:plan` and
|
|
146
|
+
// `backlog:next` read. A lane the listing does not carry, or an unread listing, declares its plan alone.
|
|
147
|
+
async function in_flight_declared(in_flight: ReadonlyArray<string>): Promise<Declared> {
|
|
148
|
+
const listing = await auto_ok_cli.fetch_opted_in()
|
|
149
|
+
const listed = listing.kind === 'read' ? listing.issues : []
|
|
150
|
+
const pool = in_flight
|
|
151
|
+
.map(Number)
|
|
152
|
+
.map((number) => listed.find((issue) => issue.number === number) ?? { number })
|
|
153
|
+
|
|
154
|
+
return await backlog_plan_comment.declared_of(pool, process.cwd())
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// The issues in flight, with each named one whose yielded plan a running lane still holds: the offer
|
|
158
|
+
// waits on it as on a lane, so the run does not relaunch it into the same yield (joshuafolkken/kit#4926).
|
|
159
|
+
// The listing is read only when a named issue yielded and a lane runs.
|
|
160
|
+
async function holding(carry: RunCarry, in_flight: ReadonlyArray<string>): Promise<Array<string>> {
|
|
161
|
+
const yielded = backlog_drive_named
|
|
162
|
+
.named_issues(carry)
|
|
163
|
+
.filter((issue) => lane_plan.is_yielded(issue, process.cwd()))
|
|
164
|
+
if (yielded.length === 0 || in_flight.length === 0) return [...in_flight]
|
|
165
|
+
const declared = await in_flight_declared(in_flight)
|
|
166
|
+
const held = yielded.filter((issue) => lane_plan.is_yield_held(issue, declared, process.cwd()))
|
|
167
|
+
|
|
168
|
+
return [...new Set([...in_flight, ...held.map(String)])]
|
|
169
|
+
}
|
|
170
|
+
|
|
134
171
|
async function read(
|
|
135
172
|
carry: RunCarry,
|
|
136
173
|
state: DriveState,
|
|
137
174
|
context: NamedContext,
|
|
138
175
|
): Promise<OfferRead | undefined> {
|
|
139
|
-
const
|
|
176
|
+
const waiting = { ...state, in_flight: await holding(carry, state.in_flight) }
|
|
177
|
+
const named = backlog_drive_named.offer(carry, waiting, context.is_only)
|
|
140
178
|
if (named?.verdict !== 'run') return await not_run(carry, named)
|
|
141
179
|
const budget = budget_offer(carry, state, context.forwarded)
|
|
142
180
|
if (budget.verdict !== 'run') return budget
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { lane_parked } from '#scripts/lane/lane-parked'
|
|
2
2
|
import { run_carry, type RunCarry } from '#scripts/run/carry/run-carry'
|
|
3
|
+
import { run_carry_added } from '#scripts/run/carry/run-carry-added'
|
|
3
4
|
import type { RunEvent } from '#scripts/run/event/run-event-stream'
|
|
4
5
|
import type { MergeResult } from '#scripts/run/merge/run-merge-cli'
|
|
5
6
|
import { run_merge_token } from '#scripts/run/merge/run-merge-token'
|
|
@@ -23,18 +24,46 @@ function is_declared(carry: RunCarry, issue: string): boolean {
|
|
|
23
24
|
// An issue `run:add` put in that is already in flight holds nothing up: it was
|
|
24
25
|
// asked for on its own, so the declared item behind it — an epic whose children fill the free lanes —
|
|
25
26
|
// is offered beside it. A declared issue in flight still holds the ones declared after it.
|
|
26
|
-
function is_held(carry: RunCarry,
|
|
27
|
-
return !
|
|
27
|
+
function is_held(carry: RunCarry, in_flight: ReadonlyArray<string>, issue: number): boolean {
|
|
28
|
+
return !in_flight.includes(String(issue)) || is_declared(carry, String(issue))
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
function next_of(carry: RunCarry,
|
|
31
|
+
function next_of(carry: RunCarry, in_flight: ReadonlyArray<string>): number | undefined {
|
|
31
32
|
const remaining = run_carry.remaining_of(carry) ?? []
|
|
32
33
|
|
|
33
|
-
return remaining.find((issue) => is_held(carry,
|
|
34
|
+
return remaining.find((issue) => is_held(carry, in_flight, issue)) ?? remaining[FIRST]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// The declared issue `issue` starts after while the declared order holds it: the one declared just
|
|
38
|
+
// before it, once it is behind `next_of` — what `offer` runs or waits on — whether that has started yet
|
|
39
|
+
// or not (joshuafolkken/kit#4279). `run:board` names it on the queued row; an issue `run:add` put in, or
|
|
40
|
+
// one already in flight, is held by nothing.
|
|
41
|
+
function held_after(
|
|
42
|
+
carry: RunCarry,
|
|
43
|
+
in_flight: ReadonlyArray<string>,
|
|
44
|
+
issue: number,
|
|
45
|
+
): number | undefined {
|
|
46
|
+
const next = next_of(carry, in_flight)
|
|
47
|
+
if (next === undefined || in_flight.includes(String(issue))) return undefined
|
|
48
|
+
const declared = (run_carry.remaining_of(carry) ?? []).filter((number) =>
|
|
49
|
+
is_declared(carry, String(number)),
|
|
50
|
+
)
|
|
51
|
+
const index = declared.indexOf(issue)
|
|
52
|
+
|
|
53
|
+
return index > declared.indexOf(next) ? declared[index - 1] : undefined
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// **An `--only` run ends once nothing it named is left and nothing is in flight**
|
|
57
|
+
// (joshuafolkken/kit#4746): the stop's reason is read when it is offered, so one offered while a lane
|
|
58
|
+
// still ran would name that lane's issue unmerged even after it merged.
|
|
59
|
+
function only_end(state: DriveState): OfferRead {
|
|
60
|
+
return state.in_flight.length > 0
|
|
61
|
+
? { verdict: 'wait', issues: [], retries: NO_RETRIES }
|
|
62
|
+
: { verdict: 'stop', issues: [], retries: NO_RETRIES, reason: 'only', is_finish: true }
|
|
34
63
|
}
|
|
35
64
|
|
|
36
65
|
function offer(carry: RunCarry, state: DriveState, is_only: boolean): OfferRead | undefined {
|
|
37
|
-
const next = next_of(carry, state)
|
|
66
|
+
const next = next_of(carry, state.in_flight)
|
|
38
67
|
|
|
39
68
|
if (next !== undefined) {
|
|
40
69
|
const issue = String(next)
|
|
@@ -44,9 +73,7 @@ function offer(carry: RunCarry, state: DriveState, is_only: boolean): OfferRead
|
|
|
44
73
|
: { verdict: 'run', issues: [issue], retries: NO_RETRIES }
|
|
45
74
|
}
|
|
46
75
|
|
|
47
|
-
return is_only
|
|
48
|
-
? { verdict: 'stop', issues: [], retries: NO_RETRIES, reason: 'only', is_finish: true }
|
|
49
|
-
: undefined
|
|
76
|
+
return is_only ? only_end(state) : undefined
|
|
50
77
|
}
|
|
51
78
|
|
|
52
79
|
function is_done(result: MergeResult): boolean {
|
|
@@ -101,15 +128,28 @@ async function should_skip(issue: string, outcome: MergeResult['outcome']): Prom
|
|
|
101
128
|
return await lane_parked.is_parked(issue)
|
|
102
129
|
}
|
|
103
130
|
|
|
131
|
+
async function carry_target(): Promise<string | undefined> {
|
|
132
|
+
const directory = await run_carry.repository_directory()
|
|
133
|
+
|
|
134
|
+
return directory === undefined ? undefined : run_carry.carry_path(directory)
|
|
135
|
+
}
|
|
136
|
+
|
|
104
137
|
async function mark_done(issue: string, result: MergeResult, owner: string): Promise<void> {
|
|
105
138
|
if (!is_done(result)) return
|
|
106
|
-
const
|
|
107
|
-
if (
|
|
108
|
-
const target = run_carry.carry_path(directory)
|
|
109
|
-
if (!mark_one(target, issue, owner)) return
|
|
139
|
+
const target = await carry_target()
|
|
140
|
+
if (target === undefined || !mark_one(target, issue, owner)) return
|
|
110
141
|
if (await should_skip(issue, result.outcome)) skip_after_failure(target, issue, owner)
|
|
111
142
|
}
|
|
112
143
|
|
|
144
|
+
// **A named issue settled before this run dispatched it skips nothing** (joshuafolkken/kit#4746): it
|
|
145
|
+
// did not fail inside the run, so booking the ones declared after it done would end an `--only` run
|
|
146
|
+
// over issues no lane ever started.
|
|
147
|
+
async function mark_settled(issue: string, owner: string): Promise<void> {
|
|
148
|
+
const target = await carry_target()
|
|
149
|
+
|
|
150
|
+
if (target !== undefined) mark_one(target, issue, owner)
|
|
151
|
+
}
|
|
152
|
+
|
|
113
153
|
async function reconcile(
|
|
114
154
|
carry: RunCarry,
|
|
115
155
|
events: ReadonlyArray<RunEvent>,
|
|
@@ -129,4 +169,32 @@ async function reconcile(
|
|
|
129
169
|
}
|
|
130
170
|
}
|
|
131
171
|
|
|
132
|
-
|
|
172
|
+
// The issues the run names: the declared list in its order, with the ones `run:add` put in.
|
|
173
|
+
function named_issues(carry: RunCarry): ReadonlyArray<number> {
|
|
174
|
+
return run_carry_added.ordered(run_invocation.issue_numbers(carry.invocation) ?? [], carry.added)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// **A `--only` run adopts only the carried lanes it names** (joshuafolkken/kit#4282): it drains
|
|
178
|
+
// nothing, and its stop waits for every lane in flight, so a lane an earlier invocation dispatched for
|
|
179
|
+
// another issue would hold the run's end until that issue settled. The next draining run collects it.
|
|
180
|
+
function own_carried(
|
|
181
|
+
carry: RunCarry,
|
|
182
|
+
dispatched: ReadonlyArray<string>,
|
|
183
|
+
is_only: boolean,
|
|
184
|
+
): ReadonlyArray<string> {
|
|
185
|
+
if (!is_only) return dispatched
|
|
186
|
+
const named = named_issues(carry)
|
|
187
|
+
|
|
188
|
+
return dispatched.filter((issue) => named.includes(Number(issue)))
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export const backlog_drive_named = {
|
|
192
|
+
next_of,
|
|
193
|
+
offer,
|
|
194
|
+
held_after,
|
|
195
|
+
mark_done,
|
|
196
|
+
mark_settled,
|
|
197
|
+
named_issues,
|
|
198
|
+
own_carried,
|
|
199
|
+
reconcile,
|
|
200
|
+
}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
import type { RunCarry } from '#scripts/run/carry/run-carry'
|
|
2
2
|
import type { DriveState } from './backlog-drive'
|
|
3
|
-
|
|
4
|
-
const LIST_SEPARATOR = ','
|
|
3
|
+
import { backlog_offer_exclude } from './backlog-offer-exclude'
|
|
5
4
|
|
|
6
5
|
// **A child in flight is never offered**. A lane child merges its own PR and
|
|
7
6
|
// drops `in-progress` before GitHub closes the issue and before the loop collects it, so `backlog:next`
|
|
8
7
|
// can offer it again; launching it then is refused by its still-open lane and handed to an AI session.
|
|
9
|
-
function excluded(state: DriveState): ReadonlyArray<string> {
|
|
10
|
-
return [...new Set([...state.exclude, ...state.in_flight])]
|
|
11
|
-
}
|
|
12
|
-
|
|
13
8
|
function offer_argv(
|
|
14
9
|
state: DriveState,
|
|
15
10
|
carry: RunCarry,
|
|
16
11
|
forwarded: ReadonlyArray<string>,
|
|
17
12
|
): ReadonlyArray<string> {
|
|
18
|
-
const exclude =
|
|
13
|
+
const exclude = backlog_offer_exclude.exclude_of(state.exclude, state.in_flight)
|
|
19
14
|
|
|
20
15
|
return [
|
|
21
16
|
'backlog:offer',
|
|
@@ -30,7 +25,7 @@ function offer_argv(
|
|
|
30
25
|
String(state.in_flight.length),
|
|
31
26
|
'--retries',
|
|
32
27
|
String(state.retries),
|
|
33
|
-
...(exclude
|
|
28
|
+
...backlog_offer_exclude.exclude_argv(exclude),
|
|
34
29
|
...forwarded,
|
|
35
30
|
]
|
|
36
31
|
}
|