@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
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { availableParallelism } from 'node:os'
|
|
2
|
+
import type { FreeCapacity } from '#scripts/test/unit-worker-share'
|
|
2
3
|
import { core_admission } from './core-admission'
|
|
3
4
|
import { core_budget, type LiveReservation } from './core-budget'
|
|
5
|
+
import { core_weights } from './core-weights'
|
|
4
6
|
import { held_mark } from './held-mark'
|
|
5
7
|
import { machine_capacity, type MachineReading } from './machine-capacity'
|
|
6
8
|
|
|
7
9
|
// The cores a unit suite may open workers on: the core count less the load from outside the core
|
|
8
10
|
// budget's ledger, the figure the ledger admits against (`machine_capacity.machine_budget`). The run
|
|
9
|
-
// count in `unit-
|
|
11
|
+
// count in `unit-run-marker.ts` divides the machine between unit runs; this is what bounds that
|
|
10
12
|
// division when something else holds the cores.
|
|
11
13
|
//
|
|
12
14
|
// Its own module because the reading needs the ledger, and `core-budget.ts` already imports
|
|
@@ -29,9 +31,7 @@ function running_claims(directory: string | undefined): Array<LiveReservation> {
|
|
|
29
31
|
|
|
30
32
|
// `undefined` where the machine could not be read — a CI runner, a CPU quota narrower than the host —
|
|
31
33
|
// which `unit_worker_share.cap_to_free` reads as the share as it was.
|
|
32
|
-
|
|
33
|
-
const reading = await (options.read_machine ?? machine_capacity.read_machine)()
|
|
34
|
-
|
|
34
|
+
function free_of(reading: MachineReading, options: FreeCoresOptions): number | undefined {
|
|
35
35
|
if (reading.busy_cores === undefined) return undefined
|
|
36
36
|
|
|
37
37
|
const ledger = core_admission.ledger_load(running_claims(options.directory), Date.now())
|
|
@@ -43,6 +43,29 @@ async function read(options: FreeCoresOptions = {}): Promise<number | undefined>
|
|
|
43
43
|
).cores
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
// **The workers the free memory holds** (joshuafolkken/kit#4528): the free memory over one worker's
|
|
47
|
+
// peak (`core_weights.MEMORY_MB.unit_worker`, where its measurement is recorded). Divided here, not in
|
|
48
|
+
// `unit-run-marker.ts`, which the vitest config imports — `core-weights.ts` there would widen every
|
|
49
|
+
// related run on it to the whole suite. The memory is the reading's own available figure, not the
|
|
50
|
+
// budget's: the ledger's held memory is added back there for admission's walk, and it is not free for
|
|
51
|
+
// this run's workers. `undefined` — a platform `machine-capacity.ts` reads no memory on — leaves the
|
|
52
|
+
// share as it was; a Linux CI runner reads `/proc/meminfo`, whose memory holds more workers than cores.
|
|
53
|
+
function workers_in_memory(available_mb: number | undefined): number | undefined {
|
|
54
|
+
if (available_mb === undefined) return undefined
|
|
55
|
+
|
|
56
|
+
return available_mb / core_weights.MEMORY_MB.unit_worker
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// One reading answers both halves: the sample window is waited out once.
|
|
60
|
+
async function read(options: FreeCoresOptions = {}): Promise<FreeCapacity> {
|
|
61
|
+
const reading = await (options.read_machine ?? machine_capacity.read_machine)()
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
cores: free_of(reading, options),
|
|
65
|
+
memory_workers: workers_in_memory(reading.available_mb),
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
46
69
|
const free_cores = { read }
|
|
47
70
|
|
|
48
71
|
export type { FreeCoresOptions }
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// **The gate's check names, in a module that imports nothing** (joshuafolkken/kit#5177). Most readers of
|
|
2
|
+
// `gate-plan.ts` wanted only these strings, and importing the plan for them tied every such reader into
|
|
3
|
+
// the plan's own imports — so a change to the plan reached most of the test suite. The plan builds its
|
|
4
|
+
// checks from these; a reader that needs only a name imports this leaf.
|
|
5
|
+
|
|
6
|
+
const LINT_LABEL = 'lint'
|
|
7
|
+
const TYPE_CHECK_LABEL = 'check'
|
|
8
|
+
// The `josh` command the gate's type check runs, shared with `check:related` so the scoped check runs the same one.
|
|
9
|
+
const TYPE_CHECK_TARGET = 'check'
|
|
10
|
+
const SPELL_CHECK_LABEL = 'cspell'
|
|
11
|
+
const SPELL_CHECK_TARGET = 'cspell:dot'
|
|
12
|
+
const UNIT_LABEL = 'test:unit'
|
|
13
|
+
const UNIT_TARGET = 'test:related'
|
|
14
|
+
// **The gate's unit leg runs the whole suite for a changed file every test imports**
|
|
15
|
+
// (joshuafolkken/kit#5122), which every other `josh test:related` narrows to its direct importers.
|
|
16
|
+
const KEEP_WHOLE_SUITE_FLAG = '--keep-whole-suite'
|
|
17
|
+
const BEHAVIOR_LABEL = 'behavior'
|
|
18
|
+
const METRICS_LABEL = 'metrics'
|
|
19
|
+
const EXPORTS_LABEL = 'exports'
|
|
20
|
+
const LOCKFILE_LABEL = 'lockfile'
|
|
21
|
+
|
|
22
|
+
// The checks whose warnings must survive the green record: eslint (the `lint` step) and svelte-check
|
|
23
|
+
// (the `check` step) both exit 0 while reporting per-tree warnings a developer needs to see again, so
|
|
24
|
+
// reusing a record taken from such a run would hide them. Every other step's
|
|
25
|
+
// warning-shaped output — a Vite config deprecation printed by `test:unit`, say — is not a per-tree
|
|
26
|
+
// finding and repeats every run, so it must not withhold the record. `has_checker_warning` narrows
|
|
27
|
+
// the withholding path down to these.
|
|
28
|
+
const WARNING_CHECKER_LABELS: ReadonlyArray<string> = [LINT_LABEL, TYPE_CHECK_LABEL]
|
|
29
|
+
|
|
30
|
+
const gate_labels = {
|
|
31
|
+
BEHAVIOR_LABEL,
|
|
32
|
+
EXPORTS_LABEL,
|
|
33
|
+
KEEP_WHOLE_SUITE_FLAG,
|
|
34
|
+
LINT_LABEL,
|
|
35
|
+
LOCKFILE_LABEL,
|
|
36
|
+
METRICS_LABEL,
|
|
37
|
+
SPELL_CHECK_LABEL,
|
|
38
|
+
SPELL_CHECK_TARGET,
|
|
39
|
+
TYPE_CHECK_LABEL,
|
|
40
|
+
TYPE_CHECK_TARGET,
|
|
41
|
+
UNIT_LABEL,
|
|
42
|
+
UNIT_TARGET,
|
|
43
|
+
WARNING_CHECKER_LABELS,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { gate_labels }
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { process_identity } from '#scripts/josh/process-identity'
|
|
2
|
-
import {
|
|
2
|
+
import type { GateCheckRecord } from '#scripts/lane/lane-ledger-schema'
|
|
3
|
+
import { lane_ledger_write } from '#scripts/lane/lane-ledger-write'
|
|
4
|
+
import { lane_paths } from '#scripts/lane/lane-paths'
|
|
5
|
+
import { related_scope } from '#scripts/test/test-related-scope'
|
|
3
6
|
import { core_admission } from './core-admission'
|
|
4
7
|
import { core_budget } from './core-budget'
|
|
5
|
-
import {
|
|
8
|
+
import { gate_labels } from './gate-labels'
|
|
6
9
|
import { gate_report, type GateStepResult } from './gate-report'
|
|
7
10
|
import { machine_capacity } from './machine-capacity'
|
|
8
11
|
|
|
@@ -13,8 +16,8 @@ import { machine_capacity } from './machine-capacity'
|
|
|
13
16
|
//
|
|
14
17
|
// **The machine is read where none of the gate's own checks runs — before the first starts and after
|
|
15
18
|
// the last ends.** The load average cannot tell the two apart: a solo gate started at 4 on the 11-core
|
|
16
|
-
// machine ended at 21, its own load. The reading is the core budget's own
|
|
17
|
-
//
|
|
19
|
+
// machine ended at 21, its own load. The reading is the core budget's own; "quiet" is no whole core
|
|
20
|
+
// busy beyond the background a developer machine always carries.
|
|
18
21
|
//
|
|
19
22
|
// **Between the ends, the load is read off the core budget's ledger, not the CPU**.
|
|
20
23
|
// Two readings missed every lane whose lint, tests or `ship` ran only while
|
|
@@ -23,7 +26,11 @@ import { machine_capacity } from './machine-capacity'
|
|
|
23
26
|
// is what tells the two apart: another `josh` run's admitted claim is another process's place, and its
|
|
24
27
|
// weight is the cores it holds. A claim still waiting holds none.
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
// **The background a quiet machine still carries.** On 2026-10-07 the 11-core machine idled at about
|
|
30
|
+
// 1.5 cores outside `josh` — Claude sessions 0.55, the window server 0.47, a browser 0.5. Admission
|
|
31
|
+
// counts it (`machine_capacity.external_cores`, joshuafolkken/kit#4238), but a gate timed beside it is
|
|
32
|
+
// still a solo gate for `josh metrics`, so it is no external load here.
|
|
33
|
+
const BACKGROUND_CORES = 2
|
|
27
34
|
// Often enough to catch another lane's shortest related lint, seldom enough that reading the markers —
|
|
28
35
|
// a process probe each — costs the gate nothing it could measure.
|
|
29
36
|
const SAMPLE_INTERVAL_MS = 3000
|
|
@@ -48,7 +55,7 @@ async function read_external_cores(): Promise<number | undefined> {
|
|
|
48
55
|
|
|
49
56
|
if (busy_cores === undefined) return undefined
|
|
50
57
|
|
|
51
|
-
return machine_capacity.external_cores(busy_cores,
|
|
58
|
+
return machine_capacity.external_cores(busy_cores, BACKGROUND_CORES)
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
// The cores other processes' admitted claims hold now. This gate's own claims are written by this
|
|
@@ -88,15 +95,41 @@ async function start(ledger_path: string | undefined): Promise<GateLedgerStart>
|
|
|
88
95
|
return { ledger_path, readings, sampler: start_sampler(readings) }
|
|
89
96
|
}
|
|
90
97
|
|
|
98
|
+
// The unit leg's own facts: the whole-suite fallback it took, or the since-green no-op that ran no
|
|
99
|
+
// test (joshuafolkken/kit#4457) — the two `josh lane:stats` must not time as an ordinary run.
|
|
100
|
+
function unit_facts(result: GateStepResult): Pick<GateCheckRecord, 'fallback' | 'is_unmoved'> {
|
|
101
|
+
if (result.label !== gate_labels.UNIT_LABEL) return {}
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
fallback: related_scope.fallback_kind(result.output),
|
|
105
|
+
...(related_scope.is_unmoved(result.output) && { is_unmoved: true }),
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
91
109
|
function check_records(results: ReadonlyArray<GateStepResult>): Array<GateCheckRecord> {
|
|
92
110
|
return results.map((result) => ({
|
|
93
111
|
label: result.label,
|
|
94
112
|
elapsed_ms: result.elapsed_ms,
|
|
95
113
|
is_passed: !gate_report.is_gate_step_failed(result),
|
|
96
114
|
is_reused: result.reused_at !== undefined,
|
|
115
|
+
...(result.cpu_ms !== undefined && { cpu_ms: Math.round(result.cpu_ms) }),
|
|
116
|
+
...unit_facts(result),
|
|
117
|
+
claim: result.claim,
|
|
97
118
|
}))
|
|
98
119
|
}
|
|
99
120
|
|
|
121
|
+
// A gate that reused a green record started no check: its line is counted as reused, never timed.
|
|
122
|
+
async function record_reused(ledger_path: string | undefined, elapsed_ms: number): Promise<void> {
|
|
123
|
+
if (ledger_path === undefined) return
|
|
124
|
+
|
|
125
|
+
await lane_ledger_write.record_gate(ledger_path, {
|
|
126
|
+
elapsed_ms,
|
|
127
|
+
is_passed: true,
|
|
128
|
+
is_reused: true,
|
|
129
|
+
issue: lane_paths.issue_here(),
|
|
130
|
+
})
|
|
131
|
+
}
|
|
132
|
+
|
|
100
133
|
// The caller measures the elapsed time before this, so the end's reading is never part of it.
|
|
101
134
|
async function record(
|
|
102
135
|
begun: GateLedgerStart,
|
|
@@ -107,20 +140,23 @@ async function record(
|
|
|
107
140
|
|
|
108
141
|
if (begun.ledger_path === undefined) return
|
|
109
142
|
|
|
110
|
-
const unit_ms = results.find((result) => result.label ===
|
|
143
|
+
const unit_ms = results.find((result) => result.label === gate_labels.UNIT_LABEL)?.elapsed_ms
|
|
111
144
|
const external_cores = peak([...begun.readings, await read_external_cores()])
|
|
112
145
|
|
|
113
|
-
await
|
|
146
|
+
await lane_ledger_write.record_gate(begun.ledger_path, {
|
|
114
147
|
...outcome,
|
|
115
148
|
unit_ms,
|
|
116
149
|
external_cores,
|
|
117
150
|
checks: check_records(results),
|
|
151
|
+
issue: lane_paths.issue_here(),
|
|
118
152
|
})
|
|
119
153
|
}
|
|
120
154
|
|
|
121
155
|
const gate_ledger = {
|
|
156
|
+
BACKGROUND_CORES,
|
|
122
157
|
SAMPLE_INTERVAL_MS,
|
|
123
158
|
record,
|
|
159
|
+
record_reused,
|
|
124
160
|
start,
|
|
125
161
|
}
|
|
126
162
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { availableParallelism } from 'node:os'
|
|
2
2
|
import { josh_verdict } from '#scripts/josh/josh-verdict'
|
|
3
3
|
import { unit_worker_share } from '#scripts/test/unit-worker-share'
|
|
4
|
-
import {
|
|
4
|
+
import { core_weights } from './core-weights'
|
|
5
|
+
import { gate_labels } from './gate-labels'
|
|
5
6
|
|
|
6
7
|
// How many of the gate's checks run at once, and how wide the one elastic check may fan out —
|
|
7
8
|
// both derived from the machine rather than fixed at four.
|
|
@@ -36,7 +37,7 @@ interface GateCheck {
|
|
|
36
37
|
// The unit suite reserves nothing: it sizes its own pool from the machine, so it is capped
|
|
37
38
|
// instead of reserved, and counting it here would reserve cores against itself.
|
|
38
39
|
reserved_cores: number
|
|
39
|
-
// The memory this check holds while it runs, `
|
|
40
|
+
// The memory this check holds while it runs, `core_weights.MEMORY_MB`'s measured peak; none declared is
|
|
40
41
|
// none waited for. The unit suite's is per worker, so it is derived instead.
|
|
41
42
|
memory_mb?: number
|
|
42
43
|
// A check whose `josh` command is kit-only, so a consumer's gate leaves it out rather than running
|
|
@@ -46,20 +47,20 @@ interface GateCheck {
|
|
|
46
47
|
is_kit_only?: boolean
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
50
|
+
const {
|
|
51
|
+
BEHAVIOR_LABEL,
|
|
52
|
+
EXPORTS_LABEL,
|
|
53
|
+
KEEP_WHOLE_SUITE_FLAG,
|
|
54
|
+
LINT_LABEL,
|
|
55
|
+
LOCKFILE_LABEL,
|
|
56
|
+
METRICS_LABEL,
|
|
57
|
+
SPELL_CHECK_LABEL,
|
|
58
|
+
SPELL_CHECK_TARGET,
|
|
59
|
+
TYPE_CHECK_LABEL,
|
|
60
|
+
TYPE_CHECK_TARGET,
|
|
61
|
+
UNIT_LABEL,
|
|
62
|
+
UNIT_TARGET,
|
|
63
|
+
} = gate_labels
|
|
63
64
|
|
|
64
65
|
// The checks that do not fan out across every core, in the order their output is printed. They are
|
|
65
66
|
// named apart from the unit suite because CI runs them on their own runner:
|
|
@@ -73,34 +74,37 @@ const WARNING_CHECKER_LABELS: ReadonlyArray<string> = [LINT_LABEL, TYPE_CHECK_LA
|
|
|
73
74
|
// `--no-unit` set stays "the whole gate minus the unit suite", and a CI runner — which has no recorded
|
|
74
75
|
// transcripts — runs it as a trivial green rather than skipping it.
|
|
75
76
|
//
|
|
76
|
-
// **The three reserving weights are `
|
|
77
|
+
// **The three reserving weights are `core_weights.CORE_WEIGHTS`**, the same
|
|
77
78
|
// numbers the `josh lint`, `josh check` and `josh cspell:dot` commands claim when run directly.
|
|
78
79
|
//
|
|
79
80
|
// **The two zero weights are measured, and they stay zero.** These are warm runs on the 11-core
|
|
80
81
|
// machine. `behavior` took 0.6s of wall for 0.7s of CPU, which
|
|
81
|
-
// is node starting up. `exports:unused` took 5.5s of wall for 9.0s of CPU, about 1.6 cores.
|
|
82
|
-
// that would be
|
|
83
|
-
// It would
|
|
84
|
-
// full length of the unit suite, to cover a burst that ends before lint does. Nothing has measured
|
|
82
|
+
// is node starting up. `exports:unused` took 5.5s of wall for 9.0s of CPU, about 1.6 cores. Rounded
|
|
83
|
+
// up, that would be two cores, but a reservation lasts the whole gate's plan, not the check's five
|
|
84
|
+
// seconds. It would raise `RESERVED_CORES` from 5 to 7 and cut the solo unit cap from 6 workers to 4
|
|
85
|
+
// for the full length of the unit suite, to cover a burst that ends before lint does. Nothing has measured
|
|
85
86
|
// that trade, so the measured shape stays.
|
|
86
87
|
const STATIC_CHECKS: ReadonlyArray<GateCheck> = [
|
|
88
|
+
// **The lint reads the branch's changed files, not the whole tree** (joshuafolkken/kit#4085), and
|
|
89
|
+
// falls back to the whole tree in CI and on a changed configuration (`lint-gate-scope.ts`).
|
|
87
90
|
{
|
|
88
91
|
label: LINT_LABEL,
|
|
89
92
|
target: 'lint',
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
args: ['--changed'],
|
|
94
|
+
reserved_cores: core_weights.CORE_WEIGHTS.lint,
|
|
95
|
+
memory_mb: core_weights.MEMORY_MB.lint,
|
|
92
96
|
},
|
|
93
97
|
{
|
|
94
98
|
label: TYPE_CHECK_LABEL,
|
|
95
|
-
target:
|
|
96
|
-
reserved_cores:
|
|
97
|
-
memory_mb:
|
|
99
|
+
target: TYPE_CHECK_TARGET,
|
|
100
|
+
reserved_cores: core_weights.CORE_WEIGHTS.type_check,
|
|
101
|
+
memory_mb: core_weights.MEMORY_MB.type_check,
|
|
98
102
|
},
|
|
99
103
|
{
|
|
100
|
-
label:
|
|
101
|
-
target:
|
|
102
|
-
reserved_cores:
|
|
103
|
-
memory_mb:
|
|
104
|
+
label: SPELL_CHECK_LABEL,
|
|
105
|
+
target: SPELL_CHECK_TARGET,
|
|
106
|
+
reserved_cores: core_weights.CORE_WEIGHTS.spell_check,
|
|
107
|
+
memory_mb: core_weights.MEMORY_MB.spell_check,
|
|
104
108
|
},
|
|
105
109
|
{ label: BEHAVIOR_LABEL, target: BEHAVIOR_LABEL, reserved_cores: 0 },
|
|
106
110
|
// **The unused-member check reserves no core**: it builds one TypeScript
|
|
@@ -117,16 +121,26 @@ const STATIC_CHECKS: ReadonlyArray<GateCheck> = [
|
|
|
117
121
|
target: METRICS_LABEL,
|
|
118
122
|
args: ['--no-startup'],
|
|
119
123
|
reserved_cores: 0,
|
|
120
|
-
memory_mb:
|
|
124
|
+
memory_mb: core_weights.MEMORY_MB.metrics,
|
|
121
125
|
is_kit_only: true,
|
|
122
126
|
},
|
|
127
|
+
// The lockfile policy check is network-bound and usually instant: it verifies only when the
|
|
128
|
+
// lockfile or `pnpm-workspace.yaml` moved from the merge-base (joshuafolkken/kit#4090), so it
|
|
129
|
+
// reserves no core. Kit's own until a consumer's private-registry entries are known to verify.
|
|
130
|
+
{ label: LOCKFILE_LABEL, target: 'lockfile:policy', reserved_cores: 0, is_kit_only: true },
|
|
123
131
|
]
|
|
124
132
|
|
|
125
133
|
// The checks, in the order their output is printed — the static set, then the unit suite last (the
|
|
126
134
|
// one check that fans out across every core, and the one the `--no-unit` split drops).
|
|
135
|
+
//
|
|
136
|
+
// **The unit check runs the tests the change can reach, not the whole suite**
|
|
137
|
+
// (joshuafolkken/kit#4065): `josh test:related` narrows through the module graph and the test-read
|
|
138
|
+
// map, and runs the whole suite — refreshing that map — whenever it cannot tell. The label stays
|
|
139
|
+
// `test:unit`, the name every ledger, reservation and record knows the check by. CI runs the whole
|
|
140
|
+
// sharded suite regardless.
|
|
127
141
|
const GATE_CHECKS: ReadonlyArray<GateCheck> = [
|
|
128
142
|
...STATIC_CHECKS,
|
|
129
|
-
{ label: UNIT_LABEL, target:
|
|
143
|
+
{ label: UNIT_LABEL, target: UNIT_TARGET, args: [KEEP_WHOLE_SUITE_FLAG], reserved_cores: 0 },
|
|
130
144
|
]
|
|
131
145
|
|
|
132
146
|
// **Selecting is not skipping, and the difference is where the unit suite runs rather than whether
|
|
@@ -152,7 +166,7 @@ function has_unit_check(checks: ReadonlyArray<GateCheck>): boolean {
|
|
|
152
166
|
return checks.some((check) => check.label === UNIT_LABEL)
|
|
153
167
|
}
|
|
154
168
|
|
|
155
|
-
// What the non-elastic checks hold between them: 2 +
|
|
169
|
+
// What the non-elastic checks hold between them: 2 + 2 + 1. Reduced over `STATIC_CHECKS`
|
|
156
170
|
// rather than over every check, because that is the set the sentence above names: `resolve_unit_worker_cap`
|
|
157
171
|
// spends this as the cores the unit suite must leave to its siblings, so summing the unit check into
|
|
158
172
|
// it would have the suite subtract its own reservation from its own budget the day that reservation
|
|
@@ -209,6 +223,15 @@ interface GatePlan {
|
|
|
209
223
|
// the exact opposite of what this function is for. `bounded-pool.ts` closes the same hole for the
|
|
210
224
|
// same reason. A count below one is nonsense too and is read as one run, which is the direction
|
|
211
225
|
// that leaves behavior where it was rather than throttling a gate on a bad input.
|
|
226
|
+
// The order the gate both counts and starts its checks in. `toSorted` is stable, so checks of one
|
|
227
|
+
// weight keep their declaration order.
|
|
228
|
+
function lightest_first<Item>(
|
|
229
|
+
items: ReadonlyArray<Item>,
|
|
230
|
+
reserved_cores_of: (item: Item) => number,
|
|
231
|
+
): Array<Item> {
|
|
232
|
+
return items.toSorted((left, right) => reserved_cores_of(left) - reserved_cores_of(right))
|
|
233
|
+
}
|
|
234
|
+
|
|
212
235
|
function shared_cores(available_cores: number, concurrent_runs: number): number {
|
|
213
236
|
const runs = Number.isFinite(concurrent_runs)
|
|
214
237
|
? Math.max(unit_worker_share.SOLO_RUNS, concurrent_runs)
|
|
@@ -217,9 +240,9 @@ function shared_cores(available_cores: number, concurrent_runs: number): number
|
|
|
217
240
|
return Math.max(MIN_SHARED_CORES, Math.floor(available_cores / runs))
|
|
218
241
|
}
|
|
219
242
|
|
|
220
|
-
// Admit checks
|
|
243
|
+
// Admit checks, lightest first, while the running set's reserved cores still fit **this run's
|
|
221
244
|
// share** of the machine. On a machine running one gate that share is the machine, so this bites
|
|
222
|
-
// only below
|
|
245
|
+
// only below five cores — the three reserving checks want five between them — and there it is the
|
|
223
246
|
// difference between two checks sharing a core and four fighting over it.
|
|
224
247
|
//
|
|
225
248
|
// **Under concurrency it is the only lever there is, and that is a measurement rather than a
|
|
@@ -236,16 +259,23 @@ function shared_cores(available_cores: number, concurrent_runs: number): number
|
|
|
236
259
|
// the gate still reports every failure in one pass — `bounded_pool` queues what it does not start,
|
|
237
260
|
// and no check ever rejects (see `run_gate_steps`). What changes is how many are in flight at
|
|
238
261
|
// once, which is scheduling and never coverage.
|
|
262
|
+
//
|
|
263
|
+
// **The checks are counted lightest first, and `run_gate_steps` starts them in the same order**
|
|
264
|
+
// (joshuafolkken/kit#4609). Counted in declaration order, the first check over the share ended the
|
|
265
|
+
// count, so on CI's four cores lint and the type check filled it and every zero-weight check after
|
|
266
|
+
// the spell check queued behind a check that was only waiting for cores. Lightest first, the `break`
|
|
267
|
+
// is exact: once one check does not fit, no heavier one after it can.
|
|
239
268
|
function resolve_concurrency(
|
|
240
269
|
available_cores: number,
|
|
241
270
|
concurrent_runs: number = unit_worker_share.SOLO_RUNS,
|
|
242
271
|
checks: ReadonlyArray<GateCheck> = GATE_CHECKS,
|
|
243
272
|
): number {
|
|
244
273
|
const share = shared_cores(available_cores, concurrent_runs)
|
|
274
|
+
const ordered = lightest_first(checks, (check) => check.reserved_cores)
|
|
245
275
|
let admitted = 0
|
|
246
276
|
let reserved = 0
|
|
247
277
|
|
|
248
|
-
for (const check of
|
|
278
|
+
for (const check of ordered) {
|
|
249
279
|
reserved += check.reserved_cores
|
|
250
280
|
|
|
251
281
|
if (reserved > share) break
|
|
@@ -269,8 +299,8 @@ function resolve_concurrency(
|
|
|
269
299
|
//
|
|
270
300
|
// **The shared branch drops `RESERVED_CORES`, knowingly, and it is not a strict improvement.** Each
|
|
271
301
|
// concurrent gate still runs lint, the type check and the spell check beside its unit step, and the
|
|
272
|
-
// share below does not subtract them: on 12 cores a solo gate takes
|
|
273
|
-
//
|
|
302
|
+
// share below does not subtract them: on 12 cores a solo gate takes 7 unit workers plus 3 siblings —
|
|
303
|
+
// 10 processes for 12 cores — while two concurrent gates take 6 each plus 3 siblings each, which is 18.
|
|
274
304
|
// The obvious correction, `⌊(cores − RESERVED_CORES × runs) ÷ runs⌋`, is **not** applied because
|
|
275
305
|
// nothing has measured it: it hands two gates on an 11-core machine one worker apiece, against the
|
|
276
306
|
// 11.7s-at-8-workers / 16.7s-at-4 curve the table above was built from, and trading a measured
|
|
@@ -309,8 +339,9 @@ function solo_unit_weight(available_cores: number): number {
|
|
|
309
339
|
// once**: no second set of weights is introduced, so a change to the measured reservation moves the
|
|
310
340
|
// admission with it.
|
|
311
341
|
//
|
|
312
|
-
// **A solo gate's four weights sum to exactly the core count** — `reserved(2 +
|
|
313
|
-
// unit_cap(cores -
|
|
342
|
+
// **A solo gate's four weights sum to exactly the core count** — `reserved(2 + 2 + 1) +
|
|
343
|
+
// unit_cap(cores - 5)` is `cores` — which is what lets every check of a lone gate on a machine with room
|
|
344
|
+
// (its busy cores within what the ledger holds, `core-budget.ts`) be admitted at once,
|
|
314
345
|
// its concurrency unchanged. A machine below the measured one leaves the unit suite uncapped and reads
|
|
315
346
|
// its weight from the same identity, `cores - RESERVED_CORES` clamped at zero, so the sum is the core
|
|
316
347
|
// count there too.
|
|
@@ -321,7 +352,7 @@ function check_weight(check: GateCheck, plan: GatePlan, available_cores: number)
|
|
|
321
352
|
}
|
|
322
353
|
|
|
323
354
|
function unit_memory(workers: number): number {
|
|
324
|
-
return workers *
|
|
355
|
+
return workers * core_weights.MEMORY_MB.unit_worker
|
|
325
356
|
}
|
|
326
357
|
|
|
327
358
|
// The memory a check holds: its declared figure, or for the unit suite one
|
|
@@ -332,29 +363,72 @@ function check_memory(check: GateCheck, plan: GatePlan, available_cores: number)
|
|
|
332
363
|
return unit_memory(check_weight(check, plan, available_cores))
|
|
333
364
|
}
|
|
334
365
|
|
|
366
|
+
// The workers a lone direct run opens below the gate's solo weight: vitest's own default, one per core
|
|
367
|
+
// but one, bounded by the gate's solo workers on the measured machine. **A direct run has no siblings**,
|
|
368
|
+
// so subtracting `RESERVED_CORES` for them sized a four-core CI runner to zero and its suite to one
|
|
369
|
+
// worker (joshuafolkken/kit#4607); vitest's default is what that runner ran before the claim bounded it.
|
|
370
|
+
// The bound keeps a mid-sized machine from claiming more than the measured one does.
|
|
371
|
+
function direct_solo_workers(available_cores: number): number {
|
|
372
|
+
const vitest_default = available_cores - unit_worker_share.MAIN_PROCESS_CORES
|
|
373
|
+
const floor = Math.min(vitest_default, solo_unit_weight(MEASURED_CORES))
|
|
374
|
+
|
|
375
|
+
return Math.max(solo_unit_weight(available_cores), floor)
|
|
376
|
+
}
|
|
377
|
+
|
|
335
378
|
// The cores a unit run started directly reserves: the share it will pass to
|
|
336
|
-
// vitest while other runs are live, and otherwise
|
|
337
|
-
// machine
|
|
379
|
+
// vitest while other runs are live, and otherwise `direct_solo_workers`. **Not the whole
|
|
380
|
+
// machine where there is room to leave**: FIFO admission lets a claim of every core in only
|
|
338
381
|
// once the ledger is empty, so a one-file `josh test:related` would wait out every other lane's gate
|
|
339
|
-
// and hold every later claim behind it
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
//
|
|
382
|
+
// and hold every later claim behind it — the solo bound stops below the core count from seven cores up.
|
|
383
|
+
// One weight for the suite however it is started. **Plus vitest's own process** (joshuafolkken/kit#4362):
|
|
384
|
+
// the workers are the share, and the claim holds the process that drives them on top
|
|
385
|
+
// (`unit_worker_share.cap_to_claim` takes it back off).
|
|
343
386
|
function direct_unit_weight(
|
|
344
387
|
available_cores: number = availableParallelism(),
|
|
345
388
|
live_runs: number = unit_worker_share.live_run_count(),
|
|
346
389
|
): number {
|
|
347
|
-
const
|
|
348
|
-
unit_worker_share.current_share(available_cores, live_runs) ??
|
|
390
|
+
const workers =
|
|
391
|
+
unit_worker_share.current_share(available_cores, live_runs) ??
|
|
392
|
+
direct_solo_workers(available_cores)
|
|
393
|
+
|
|
394
|
+
return Math.max(unit_worker_share.MIN_WORKERS, workers) + unit_worker_share.MAIN_PROCESS_CORES
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// The related files one vitest worker clears in about 30 seconds: `tools/test/unit-durations.json`'s
|
|
398
|
+
// median file takes 105 ms (2077 files), and 30 000 ÷ 105 ≈ 285 (joshuafolkken/kit#5135).
|
|
399
|
+
const FILES_PER_WORKER = 285
|
|
400
|
+
|
|
401
|
+
// The cores a narrowed `josh test:related` reserves once its scope is known: one worker for each
|
|
402
|
+
// `FILES_PER_WORKER` related files, at least `MIN_WORKERS` and at most the share `direct_unit_weight`
|
|
403
|
+
// gives the whole suite, plus vitest's own process. **A small scope no longer claims the whole width**,
|
|
404
|
+
// so the other lanes' unit claims stop waiting behind a twenty-second run (joshuafolkken/kit#5135).
|
|
405
|
+
function scoped_unit_weight(
|
|
406
|
+
files: number,
|
|
407
|
+
available_cores: number = availableParallelism(),
|
|
408
|
+
live_runs: number = unit_worker_share.live_run_count(),
|
|
409
|
+
): number {
|
|
410
|
+
const { MAIN_PROCESS_CORES, MIN_WORKERS } = unit_worker_share
|
|
411
|
+
const share = direct_unit_weight(available_cores, live_runs) - MAIN_PROCESS_CORES
|
|
412
|
+
const wanted = Math.max(MIN_WORKERS, Math.ceil(files / FILES_PER_WORKER))
|
|
349
413
|
|
|
350
|
-
return Math.
|
|
414
|
+
return Math.min(wanted, share) + MAIN_PROCESS_CORES
|
|
351
415
|
}
|
|
352
416
|
|
|
353
|
-
// What a unit run started directly holds: one worker's peak for each
|
|
417
|
+
// What a unit run started directly holds: one worker's peak for each core `direct_unit_weight` gives
|
|
418
|
+
// it, vitest's own process counted as one more.
|
|
354
419
|
function direct_unit_memory(): number {
|
|
355
420
|
return unit_memory(direct_unit_weight())
|
|
356
421
|
}
|
|
357
422
|
|
|
423
|
+
// The claim every unit run started directly declares — `josh test:unit` and the pre-push hook —
|
|
424
|
+
// declared once so the two cannot drift apart. `josh test:related` claims in its body instead, once
|
|
425
|
+
// its scope is known (`scoped_unit_weight`).
|
|
426
|
+
const DIRECT_UNIT_CLAIM = {
|
|
427
|
+
core_weight: direct_unit_weight,
|
|
428
|
+
memory_mb: direct_unit_memory,
|
|
429
|
+
is_unit_claim: true,
|
|
430
|
+
} as const
|
|
431
|
+
|
|
358
432
|
function unit_cap_for(
|
|
359
433
|
checks: ReadonlyArray<GateCheck>,
|
|
360
434
|
available_cores: number,
|
|
@@ -398,25 +472,6 @@ function resolve_gate_plan(
|
|
|
398
472
|
}
|
|
399
473
|
}
|
|
400
474
|
|
|
401
|
-
// The unit cap bounded by the cores free of load from outside the core budget's ledger
|
|
402
|
-
// (`free-cores.ts`), so the run count's share is never wider than what is free. A plan with no unit
|
|
403
|
-
// step carries no cap, and an unread machine leaves the cap as resolved (`unit_worker_share.cap_to_free`).
|
|
404
|
-
function bound_by_free(
|
|
405
|
-
plan: GatePlan,
|
|
406
|
-
available_cores: number,
|
|
407
|
-
free_cores: number | undefined,
|
|
408
|
-
): GatePlan {
|
|
409
|
-
if (!has_unit_check(plan.checks)) return plan
|
|
410
|
-
|
|
411
|
-
const unit_worker_cap = unit_worker_share.cap_to_free(
|
|
412
|
-
plan.unit_worker_cap,
|
|
413
|
-
free_cores,
|
|
414
|
-
available_cores,
|
|
415
|
-
)
|
|
416
|
-
|
|
417
|
-
return { ...plan, unit_worker_cap }
|
|
418
|
-
}
|
|
419
|
-
|
|
420
475
|
// Printed once per run, so a gate that was slow on someone else's machine can be read without
|
|
421
476
|
// re-deriving the plan from their core count.
|
|
422
477
|
//
|
|
@@ -460,29 +515,26 @@ function format_gate_plan(
|
|
|
460
515
|
}
|
|
461
516
|
|
|
462
517
|
const gate_plan = {
|
|
463
|
-
|
|
518
|
+
DIRECT_UNIT_CLAIM,
|
|
519
|
+
FILES_PER_WORKER,
|
|
464
520
|
GATE_CHECKS,
|
|
465
|
-
LINT_LABEL,
|
|
466
521
|
MEASURED_CORES,
|
|
467
|
-
METRICS_LABEL,
|
|
468
522
|
RESERVED_CORES,
|
|
469
523
|
STATIC_CHECKS,
|
|
470
|
-
TYPE_CHECK_LABEL,
|
|
471
|
-
UNIT_LABEL,
|
|
472
|
-
WARNING_CHECKER_LABELS,
|
|
473
|
-
bound_by_free,
|
|
474
524
|
check_memory,
|
|
475
525
|
check_weight,
|
|
476
|
-
direct_unit_memory,
|
|
477
526
|
direct_unit_weight,
|
|
478
527
|
format_gate_plan,
|
|
479
528
|
format_machine,
|
|
480
529
|
has_unit_check,
|
|
530
|
+
lightest_first,
|
|
481
531
|
plan_of,
|
|
482
532
|
resolve_concurrency,
|
|
483
533
|
resolve_gate_plan,
|
|
484
534
|
resolve_unit_worker_cap,
|
|
535
|
+
scoped_unit_weight,
|
|
485
536
|
select_gate_checks,
|
|
537
|
+
unit_memory,
|
|
486
538
|
}
|
|
487
539
|
|
|
488
540
|
export type { GateCheck, GatePlan }
|