@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
|
@@ -2,10 +2,12 @@ import { GATE_COMMAND } from '#scripts/josh/josh-command-types'
|
|
|
2
2
|
import { josh_verdict } from '#scripts/josh/josh-verdict'
|
|
3
3
|
import { buffered_process, type BufferedProcessResult } from '#scripts/lib/buffered-process'
|
|
4
4
|
import { status_icons } from '#scripts/lib/status-icons'
|
|
5
|
+
import { MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
5
6
|
import { NOT_USED_MARKER, NOTHING_TO_CHECK_MARKER } from '#scripts/test/skip-marker'
|
|
6
7
|
import { test_unit_guard } from '#scripts/test/test-unit-guard'
|
|
8
|
+
import { gate_labels } from './gate-labels'
|
|
7
9
|
import { gate_log } from './gate-log'
|
|
8
|
-
import {
|
|
10
|
+
import { verification_tail } from './verification-tail'
|
|
9
11
|
|
|
10
12
|
// The gate's console reporting, split out of `verification-gate.ts` so that file stays under its line
|
|
11
13
|
// ceiling while it grows the scoped pre-check and the failure summary. Nothing
|
|
@@ -31,6 +33,18 @@ interface GateStepResult extends BufferedProcessResult {
|
|
|
31
33
|
// Set when the check was not started because its inputs match the record taken at this time
|
|
32
34
|
// (`check-reuse.ts`).
|
|
33
35
|
reused_at?: string | undefined
|
|
36
|
+
// The CPU milliseconds the check's process tree spent, where the gate could read it (`check-cpu.ts`).
|
|
37
|
+
cpu_ms?: number | undefined
|
|
38
|
+
// The check's place in the core budget, absent on a check that claimed none (`gate-run-steps.ts`).
|
|
39
|
+
claim?: CheckClaim | undefined
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// The width a check asked the core budget for, the width it ran at and how long it waited for it, so
|
|
43
|
+
// whether a unit claim's wait for room paid off is read per run (joshuafolkken/kit#4451).
|
|
44
|
+
interface CheckClaim {
|
|
45
|
+
requested: number
|
|
46
|
+
granted: number
|
|
47
|
+
waited_ms: number
|
|
34
48
|
}
|
|
35
49
|
|
|
36
50
|
function is_gate_step_failed(result: GateStepResult): boolean {
|
|
@@ -85,7 +99,7 @@ function checker_lines(result: GateStepResult): ReadonlyArray<string> {
|
|
|
85
99
|
}
|
|
86
100
|
|
|
87
101
|
function has_checker_warning(result: GateStepResult): boolean {
|
|
88
|
-
if (!
|
|
102
|
+
if (!gate_labels.WARNING_CHECKER_LABELS.includes(result.label)) return false
|
|
89
103
|
|
|
90
104
|
return checker_lines(result).some((line) =>
|
|
91
105
|
WARNING_MARKERS.some((marker) => line.includes(marker)),
|
|
@@ -147,7 +161,6 @@ function should_print_body(result: GateStepResult, is_verbose: boolean): boolean
|
|
|
147
161
|
// Seconds to one decimal, which is the resolution the answer is read at: the question a gate's
|
|
148
162
|
// timing answers is "which of the four is the long pole", and no check is ever separated from
|
|
149
163
|
// another by less than a tenth of a second.
|
|
150
|
-
const MS_PER_SECOND = 1000
|
|
151
164
|
const SECONDS_DECIMALS = 1
|
|
152
165
|
|
|
153
166
|
function format_seconds(elapsed_ms: number): string {
|
|
@@ -189,15 +202,16 @@ function print_gate_step(result: GateStepResult, is_verbose: boolean): void {
|
|
|
189
202
|
function format_failure_actions(failed: ReadonlyArray<GateStepResult>): string {
|
|
190
203
|
if (failed.length === 0) return ''
|
|
191
204
|
|
|
192
|
-
const lines = failed.map(
|
|
193
|
-
(result
|
|
205
|
+
const lines = failed.map((result) =>
|
|
206
|
+
verification_tail.format_rerun(result.label, `pnpm ${result.command}`),
|
|
194
207
|
)
|
|
195
208
|
|
|
196
209
|
return `${GATE_COMMAND} — next:\n${lines.join('\n')}\n`
|
|
197
210
|
}
|
|
198
211
|
|
|
199
212
|
// **A check that started past the core budget is said in the summary, not only in the log**.
|
|
200
|
-
// The wait cap admits a check that waited two minutes whatever the budget says
|
|
213
|
+
// The wait cap admits a check that waited two minutes whatever the budget says — sooner where outside
|
|
214
|
+
// load holds it and does not ease —
|
|
201
215
|
// so a gate that ran over-subscribed would otherwise look exactly like one that fitted.
|
|
202
216
|
function format_budget_notes(results: ReadonlyArray<GateStepResult>): string {
|
|
203
217
|
const lines = results.flatMap((result) =>
|
|
@@ -243,10 +257,10 @@ function print_gate_summary(
|
|
|
243
257
|
failed.length === 0
|
|
244
258
|
? format_green_verdict(results, total)
|
|
245
259
|
: josh_verdict.format_gate_failed(failed.map((result) => result.label).join(', '), total)
|
|
246
|
-
const
|
|
260
|
+
const failures = `${format_budget_notes(results)}${format_failure_actions(failed)}`
|
|
247
261
|
|
|
248
262
|
process.stdout.write(
|
|
249
|
-
`\n${
|
|
263
|
+
`\n${verification_tail.format_tail({ failures, log: { path: log_path }, verdict })}`,
|
|
250
264
|
)
|
|
251
265
|
}
|
|
252
266
|
|
|
@@ -285,5 +299,5 @@ const gate_report = {
|
|
|
285
299
|
report_gate_steps,
|
|
286
300
|
}
|
|
287
301
|
|
|
288
|
-
export type { GateReport, GateStep, GateStepResult }
|
|
302
|
+
export type { CheckClaim, GateReport, GateStep, GateStepResult }
|
|
289
303
|
export { gate_report }
|
|
@@ -2,17 +2,25 @@ import { availableParallelism } from 'node:os'
|
|
|
2
2
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
3
3
|
import { buffered_process } from '#scripts/lib/buffered-process'
|
|
4
4
|
import { unit_worker_share } from '#scripts/test/unit-worker-share'
|
|
5
|
-
import {
|
|
5
|
+
import { check_cpu, type CheckCpu } from './check-cpu'
|
|
6
|
+
import { core_budget, type Admission } from './core-budget'
|
|
7
|
+
import { free_cores } from './free-cores'
|
|
8
|
+
import { gate_labels } from './gate-labels'
|
|
6
9
|
import { gate_plan, type GatePlan } from './gate-plan'
|
|
7
|
-
import type { GateStep, GateStepResult } from './gate-report'
|
|
8
|
-
import { build_gate_step } from './gate-steps'
|
|
10
|
+
import type { CheckClaim, GateStep, GateStepResult } from './gate-report'
|
|
11
|
+
import { build_gate_step, with_granted_workers } from './gate-steps'
|
|
9
12
|
import { project_checks } from './project-checks'
|
|
10
13
|
|
|
11
14
|
// Running the gate's checks: each one under its place in the machine-wide budget, a reused one
|
|
12
15
|
// (`check-reuse.ts`) without starting it. `verification-gate.ts` decides what runs and records the
|
|
13
16
|
// outcome; this module only runs it.
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
// `cpu` is the gate's shared reader, so concurrent checks each take their own growth; a lone call
|
|
19
|
+
// reads its child alone from a baseline of its own.
|
|
20
|
+
async function run_gate_step(
|
|
21
|
+
step: GateStep,
|
|
22
|
+
cpu: CheckCpu = check_cpu.check_cpu_reader(),
|
|
23
|
+
): Promise<GateStepResult> {
|
|
16
24
|
if (step.skip_reason !== undefined) {
|
|
17
25
|
return {
|
|
18
26
|
label: step.label,
|
|
@@ -28,7 +36,7 @@ async function run_gate_step(step: GateStep): Promise<GateStepResult> {
|
|
|
28
36
|
step.cwd === undefined ? {} : { cwd: step.cwd },
|
|
29
37
|
)
|
|
30
38
|
|
|
31
|
-
return { label: step.label, command: step.command_args.join(' '), ...result }
|
|
39
|
+
return { label: step.label, command: step.command_args.join(' '), ...result, cpu_ms: cpu() }
|
|
32
40
|
}
|
|
33
41
|
|
|
34
42
|
// This gate's share of the machine, resolved once at the gate's entry and carried down as one value.
|
|
@@ -54,7 +62,11 @@ function default_budget(): BudgetContext {
|
|
|
54
62
|
interface ReservedStep {
|
|
55
63
|
step: GateStep
|
|
56
64
|
weight: number
|
|
65
|
+
// The check's own `reserved_cores`, the key `gate_plan.lightest_first` orders the pool's queue by.
|
|
66
|
+
reserved_cores: number
|
|
57
67
|
memory_mb: number
|
|
68
|
+
// The plan's `--maxWorkers` for the unit suite, the width the free memory bounds once it is admitted.
|
|
69
|
+
worker_cap: number | undefined
|
|
58
70
|
// When the check's own green record was taken, for a check `check-reuse.ts` found reusable.
|
|
59
71
|
reused_at: string | undefined
|
|
60
72
|
}
|
|
@@ -71,7 +83,9 @@ async function build_reserved_steps(
|
|
|
71
83
|
plan.checks.map(async (check) => ({
|
|
72
84
|
step: await build_gate_step(check, process.cwd(), plan),
|
|
73
85
|
weight: gate_plan.check_weight(check, plan, available_cores),
|
|
86
|
+
reserved_cores: check.reserved_cores,
|
|
74
87
|
memory_mb: gate_plan.check_memory(check, plan, available_cores),
|
|
88
|
+
worker_cap: plan.unit_worker_cap,
|
|
75
89
|
reused_at: reused.get(check.label),
|
|
76
90
|
})),
|
|
77
91
|
)
|
|
@@ -90,6 +104,34 @@ function reused_result(step: GateStep, reused_at: string): GateStepResult {
|
|
|
90
104
|
}
|
|
91
105
|
}
|
|
92
106
|
|
|
107
|
+
// What the check asked the budget for and what it ran at, for its ledger row (`gate-ledger.ts`).
|
|
108
|
+
function claim_of(requested: number, admission: Admission): CheckClaim {
|
|
109
|
+
return {
|
|
110
|
+
requested,
|
|
111
|
+
granted: admission.granted ?? requested,
|
|
112
|
+
waited_ms: admission.waited_ms ?? 0,
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// **The unit step's width is bounded by the free memory too** (joshuafolkken/kit#4528). The plan's cap
|
|
117
|
+
// and the granted width are sized from the cores alone, and the `--maxWorkers` they become skips the
|
|
118
|
+
// guard's own reading (`test-unit-guard.ts`), so the memory is read here, once the claim is admitted
|
|
119
|
+
// and the suite is about to start. The free cores are not applied: the admission has already narrowed
|
|
120
|
+
// the claim to them (joshuafolkken/kit#4167).
|
|
121
|
+
async function admitted_step(
|
|
122
|
+
reserved: ReservedStep,
|
|
123
|
+
admission: Admission,
|
|
124
|
+
available_cores: number,
|
|
125
|
+
): Promise<GateStep> {
|
|
126
|
+
if (reserved.step.label !== gate_labels.UNIT_LABEL) return reserved.step
|
|
127
|
+
|
|
128
|
+
const { memory_workers } = await free_cores.read({ available_cores })
|
|
129
|
+
const asked = admission.granted ?? reserved.worker_cap
|
|
130
|
+
const workers = unit_worker_share.cap_to_free(asked, memory_workers, available_cores)
|
|
131
|
+
|
|
132
|
+
return with_granted_workers(reserved.step, workers)
|
|
133
|
+
}
|
|
134
|
+
|
|
93
135
|
// **A nested gate takes no reservation, and the budget is what makes that necessary rather than
|
|
94
136
|
// merely tidy**. The unit step spawns the suite, which runs this repository's
|
|
95
137
|
// own gate tests; each of those is a gate inside the outer gate's unit reservation, and a place it
|
|
@@ -98,24 +140,49 @@ function reused_result(step: GateStep, reused_at: string): GateStepResult {
|
|
|
98
140
|
async function run_reserved_step(
|
|
99
141
|
reserved: ReservedStep,
|
|
100
142
|
budget: BudgetContext,
|
|
143
|
+
cpu: CheckCpu,
|
|
101
144
|
): Promise<GateStepResult> {
|
|
102
145
|
if (reserved.reused_at !== undefined) return reused_result(reserved.step, reserved.reused_at)
|
|
103
|
-
if (!budget.is_reserved) return await run_gate_step(reserved.step)
|
|
146
|
+
if (!budget.is_reserved) return await run_gate_step(reserved.step, cpu)
|
|
104
147
|
|
|
105
148
|
return await core_budget.with_core_reservation(
|
|
106
149
|
reserved.weight,
|
|
107
150
|
async (admission) => ({
|
|
108
|
-
...(await run_gate_step(
|
|
151
|
+
...(await run_gate_step(
|
|
152
|
+
await admitted_step(reserved, admission, budget.available_cores),
|
|
153
|
+
cpu,
|
|
154
|
+
)),
|
|
109
155
|
budget_note: core_budget.describe_overflow(admission),
|
|
156
|
+
claim: claim_of(reserved.weight, admission),
|
|
110
157
|
}),
|
|
111
158
|
{
|
|
112
159
|
budget: budget.available_cores,
|
|
113
160
|
memory_mb: reserved.memory_mb,
|
|
114
161
|
command: `gate ${reserved.step.label}`,
|
|
162
|
+
is_unit: reserved.step.label === gate_labels.UNIT_LABEL,
|
|
115
163
|
},
|
|
116
164
|
)
|
|
117
165
|
}
|
|
118
166
|
|
|
167
|
+
// The pool's queue in the order `resolve_concurrency` counted it (joshuafolkken/kit#4609), so the
|
|
168
|
+
// checks its width admitted are the ones that start, and one over the share waits for a slot rather
|
|
169
|
+
// than taking one ahead of a zero-weight check. Each result goes back to its check's declaration
|
|
170
|
+
// position, so the printed sections keep their order.
|
|
171
|
+
async function run_lightest_first(
|
|
172
|
+
reserved: ReadonlyArray<ReservedStep>,
|
|
173
|
+
concurrency: number,
|
|
174
|
+
run: (entry: ReservedStep) => Promise<GateStepResult>,
|
|
175
|
+
): Promise<ReadonlyArray<GateStepResult>> {
|
|
176
|
+
const indexed = reserved.map((entry, index) => ({ entry, index }))
|
|
177
|
+
const queue = gate_plan.lightest_first(indexed, ({ entry }) => entry.reserved_cores)
|
|
178
|
+
const finished = await bounded_pool.bounded_map(queue, concurrency, async ({ entry, index }) => ({
|
|
179
|
+
index,
|
|
180
|
+
result: await run(entry),
|
|
181
|
+
}))
|
|
182
|
+
|
|
183
|
+
return finished.toSorted((left, right) => left.index - right.index).map(({ result }) => result)
|
|
184
|
+
}
|
|
185
|
+
|
|
119
186
|
// `bounded_pool` rather than a bare `Promise.all`, so the plan's `concurrency` is what decides how
|
|
120
187
|
// many run at once. **The all-failures-in-one-pass property survives the
|
|
121
188
|
// change** because no check ever rejects: `buffered_process` reports a non-zero exit as a value, so
|
|
@@ -129,6 +196,7 @@ async function run_gate_steps(
|
|
|
129
196
|
reused: ReusedChecks = new Map(),
|
|
130
197
|
): Promise<ReadonlyArray<GateStepResult>> {
|
|
131
198
|
const reserved = await build_reserved_steps(plan, budget.available_cores, reused)
|
|
199
|
+
const cpu = check_cpu.check_cpu_reader()
|
|
132
200
|
|
|
133
201
|
// **The checks run under the held mark, so a check's own dispatch claims nothing**.
|
|
134
202
|
// Each check is a `pnpm josh <target>` child, and a target that declares
|
|
@@ -136,10 +204,10 @@ async function run_gate_steps(
|
|
|
136
204
|
// sets the mark too, since its checks are covered by the outer gate's reservation.
|
|
137
205
|
return await core_budget.with_held_mark(
|
|
138
206
|
async () =>
|
|
139
|
-
await
|
|
207
|
+
await run_lightest_first(
|
|
140
208
|
reserved,
|
|
141
209
|
plan.concurrency,
|
|
142
|
-
async (entry) => await run_reserved_step(entry, budget),
|
|
210
|
+
async (entry) => await run_reserved_step(entry, budget, cpu),
|
|
143
211
|
),
|
|
144
212
|
)
|
|
145
213
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { file_map_stamp, type FileMapStamp } from '#scripts/josh/file-map-stamp'
|
|
2
2
|
import { review_brief } from '#scripts/review/review-brief'
|
|
3
3
|
import { review_stamps } from '#scripts/review/review-stamps'
|
|
4
4
|
|
|
@@ -64,8 +64,35 @@ const FORCE_FLAG = '--force'
|
|
|
64
64
|
// rewritten by the hook's own install each cost minutes before anyone could tell them apart.
|
|
65
65
|
type GateReuse = { stamp: FileMapStamp } | { miss: string }
|
|
66
66
|
|
|
67
|
+
const NO_BASE = 'the merge base could not be read'
|
|
68
|
+
const NO_CHANGE = 'no file differs from the merge base'
|
|
69
|
+
|
|
70
|
+
// The fingerprint of every declared check's tools and environment (`verification-inputs.ts`).
|
|
71
|
+
const INPUTS_MOVED = 'a checked tool or environment variable changed since the green gate'
|
|
72
|
+
const BASE_MOVED = 'the merge base moved since the green gate'
|
|
73
|
+
|
|
67
74
|
function base_moved(recorded: string | undefined, base: string): string {
|
|
68
|
-
return
|
|
75
|
+
return `${BASE_MOVED} (${recorded ?? 'none'} → ${base})`
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function stamp_miss(stamp: FileMapStamp, base: string): string | undefined {
|
|
79
|
+
if (stamp.base !== base) return base_moved(stamp.base, base)
|
|
80
|
+
|
|
81
|
+
return review_stamps.gate_stamp.describes_inputs(stamp) ? undefined : INPUTS_MOVED
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const NO_MATCHING_RECORD = 'no green gate record matches the changed files'
|
|
85
|
+
|
|
86
|
+
// joshuafolkken/kit#5214: a record that exists but covers other files is told apart from no record
|
|
87
|
+
// at all, with the sizes of the two maps, so a log shows how far the tree had moved past it.
|
|
88
|
+
function record_miss(recorded: FileMapStamp | undefined, tree: Record<string, string>): string {
|
|
89
|
+
if (recorded === undefined) return NO_MATCHING_RECORD
|
|
90
|
+
|
|
91
|
+
const changed = String(Object.keys(tree).length)
|
|
92
|
+
const covered = String(Object.keys(recorded.files).length)
|
|
93
|
+
const differing = String(file_map_stamp.changed_since(recorded, tree).length)
|
|
94
|
+
|
|
95
|
+
return `${NO_MATCHING_RECORD} (${changed} changed, record covers ${covered}, ${differing} differ)`
|
|
69
96
|
}
|
|
70
97
|
|
|
71
98
|
function gate_reuse(
|
|
@@ -73,15 +100,36 @@ function gate_reuse(
|
|
|
73
100
|
base: string | undefined,
|
|
74
101
|
source?: string,
|
|
75
102
|
): GateReuse {
|
|
76
|
-
if (base === undefined) return { miss:
|
|
77
|
-
if (Object.keys(tree).length === 0) return { miss:
|
|
103
|
+
if (base === undefined) return { miss: NO_BASE }
|
|
104
|
+
if (Object.keys(tree).length === 0) return { miss: NO_CHANGE }
|
|
78
105
|
|
|
79
|
-
const
|
|
106
|
+
const recorded = review_stamps.gate_stamp.read(source)
|
|
107
|
+
const stamp = review_brief.matching_stamp(recorded, tree)
|
|
80
108
|
|
|
81
|
-
if (stamp === undefined) return { miss:
|
|
82
|
-
|
|
109
|
+
if (stamp === undefined) return { miss: record_miss(recorded, tree) }
|
|
110
|
+
|
|
111
|
+
const miss = stamp_miss(stamp, base)
|
|
112
|
+
|
|
113
|
+
return miss === undefined ? { stamp } : { miss }
|
|
114
|
+
}
|
|
83
115
|
|
|
84
|
-
|
|
116
|
+
// joshuafolkken/kit#5234: the kind of a miss, read off the sentence `gate_reuse` wrote, so a ledger
|
|
117
|
+
// counts the reasons without a second wording of them. A record that covers other files is checked
|
|
118
|
+
// before no record at all, since its sentence starts with the other's. A miss no prefix names is
|
|
119
|
+
// `other`; a hook's own refusals are told apart first, by `hook_gate_reuse.miss_kind`.
|
|
120
|
+
const MISS_KINDS: ReadonlyArray<readonly [string, string]> = [
|
|
121
|
+
[NO_BASE, 'no-base'],
|
|
122
|
+
[NO_CHANGE, 'no-change'],
|
|
123
|
+
[`${NO_MATCHING_RECORD} (`, 'record-differs'],
|
|
124
|
+
[NO_MATCHING_RECORD, 'no-record'],
|
|
125
|
+
[BASE_MOVED, 'base-moved'],
|
|
126
|
+
[INPUTS_MOVED, 'inputs-moved'],
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
const OTHER_MISS = 'other'
|
|
130
|
+
|
|
131
|
+
function miss_kind(miss: string): string {
|
|
132
|
+
return MISS_KINDS.find(([prefix]) => miss.startsWith(prefix))?.[1] ?? OTHER_MISS
|
|
85
133
|
}
|
|
86
134
|
|
|
87
135
|
function stamp_of(reuse: GateReuse): FileMapStamp | undefined {
|
|
@@ -143,6 +191,7 @@ const gate_skip = {
|
|
|
143
191
|
format_reuse_notice,
|
|
144
192
|
format_skip,
|
|
145
193
|
gate_reuse,
|
|
194
|
+
miss_kind,
|
|
146
195
|
reusable_green_gate,
|
|
147
196
|
stamp_of,
|
|
148
197
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { gate_labels } from './gate-labels'
|
|
2
|
+
import type { GateCheck } from './gate-plan'
|
|
3
|
+
|
|
4
|
+
// **CI runs the static set as three parallel legs, and each leg is still `josh gate`**
|
|
5
|
+
// (joshuafolkken/kit#5215). One runner ran all seven checks for about four minutes while every unit
|
|
6
|
+
// shard was done in two, so `static-checks` was the merge's critical path. The legs are a matrix over
|
|
7
|
+
// the names below, each running `pnpm josh gate --no-unit --static-group=<name>`, so CI keeps the
|
|
8
|
+
// gate's one definition of every check and its all-failures-in-one-pass summary rather than restating
|
|
9
|
+
// the commands per job. `gate-static-group.test.ts` pins the partition: every static check is in
|
|
10
|
+
// exactly one group, and the workflow's matrix names exactly these groups.
|
|
11
|
+
//
|
|
12
|
+
// The split follows the weights: lint alone (the cold-cache outlier), the type check with the
|
|
13
|
+
// unused-export walk (both build a TypeScript program), and the light rest together.
|
|
14
|
+
const STATIC_GROUP_FLAG_PREFIX = '--static-group='
|
|
15
|
+
|
|
16
|
+
const STATIC_GROUPS: Readonly<Record<string, ReadonlyArray<string>>> = {
|
|
17
|
+
lint: [gate_labels.LINT_LABEL],
|
|
18
|
+
types: [gate_labels.TYPE_CHECK_LABEL, gate_labels.EXPORTS_LABEL],
|
|
19
|
+
rest: [
|
|
20
|
+
gate_labels.SPELL_CHECK_LABEL,
|
|
21
|
+
gate_labels.BEHAVIOR_LABEL,
|
|
22
|
+
gate_labels.METRICS_LABEL,
|
|
23
|
+
gate_labels.LOCKFILE_LABEL,
|
|
24
|
+
],
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// The group an argument names, or `undefined` when it is not the flag or names no group — so an
|
|
28
|
+
// unknown group is refused with every other unknown argument.
|
|
29
|
+
function group_of(argument: string): string | undefined {
|
|
30
|
+
if (!argument.startsWith(STATIC_GROUP_FLAG_PREFIX)) return undefined
|
|
31
|
+
|
|
32
|
+
const name = argument.slice(STATIC_GROUP_FLAG_PREFIX.length)
|
|
33
|
+
|
|
34
|
+
return Object.hasOwn(STATIC_GROUPS, name) ? name : undefined
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function find_group(arguments_: ReadonlyArray<string>): string | undefined {
|
|
38
|
+
return arguments_.map((argument) => group_of(argument)).find((name) => name !== undefined)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function narrow_checks(
|
|
42
|
+
checks: ReadonlyArray<GateCheck>,
|
|
43
|
+
group: string | undefined,
|
|
44
|
+
): ReadonlyArray<GateCheck> {
|
|
45
|
+
if (group === undefined) return checks
|
|
46
|
+
|
|
47
|
+
const labels = STATIC_GROUPS[group] ?? []
|
|
48
|
+
|
|
49
|
+
return checks.filter((check) => labels.includes(check.label))
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const gate_static_group = {
|
|
53
|
+
STATIC_GROUPS,
|
|
54
|
+
STATIC_GROUP_FLAG_PREFIX,
|
|
55
|
+
find_group,
|
|
56
|
+
group_of,
|
|
57
|
+
narrow_checks,
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export { gate_static_group }
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { gate_labels } from './gate-labels'
|
|
1
2
|
import { gate_plan, type GateCheck, type GatePlan } from './gate-plan'
|
|
2
3
|
import type { GateStep } from './gate-report'
|
|
3
4
|
import { project_checks } from './project-checks'
|
|
4
5
|
import { type_check_step } from './type-check-step'
|
|
5
6
|
|
|
6
7
|
const JOSH = 'josh'
|
|
7
|
-
const { TYPE_CHECK_LABEL, UNIT_LABEL } =
|
|
8
|
+
const { TYPE_CHECK_LABEL, UNIT_LABEL } = gate_labels
|
|
8
9
|
const UNIT_WORKER_FLAG = '--maxWorkers'
|
|
9
10
|
|
|
10
11
|
function unit_worker_args(check: GateCheck, plan: GatePlan): ReadonlyArray<string> {
|
|
@@ -42,6 +43,17 @@ async function build_gate_step(
|
|
|
42
43
|
return { label: check.label, command_args, cwd, skip_reason }
|
|
43
44
|
}
|
|
44
45
|
|
|
46
|
+
// The unit step at a narrower worker count: the one its claim was admitted at past the wait cap
|
|
47
|
+
// (`core_admission.narrowed_weight`), or the one the free memory holds (`gate-run-steps.ts`). Any
|
|
48
|
+
// other step, or one left as asked, is returned unchanged.
|
|
49
|
+
function with_granted_workers(step: GateStep, granted: number | undefined): GateStep {
|
|
50
|
+
if (granted === undefined || step.label !== UNIT_LABEL) return step
|
|
51
|
+
|
|
52
|
+
const kept = step.command_args.filter((argument) => !argument.startsWith(`${UNIT_WORKER_FLAG}=`))
|
|
53
|
+
|
|
54
|
+
return { ...step, command_args: [...kept, `${UNIT_WORKER_FLAG}=${String(granted)}`] }
|
|
55
|
+
}
|
|
56
|
+
|
|
45
57
|
async function build_gate_steps(
|
|
46
58
|
start_directory: string,
|
|
47
59
|
plan: GatePlan = gate_plan.resolve_gate_plan(),
|
|
@@ -51,4 +63,4 @@ async function build_gate_steps(
|
|
|
51
63
|
)
|
|
52
64
|
}
|
|
53
65
|
|
|
54
|
-
export { build_gate_step, build_gate_steps, UNIT_WORKER_FLAG }
|
|
66
|
+
export { build_gate_step, build_gate_steps, UNIT_WORKER_FLAG, with_granted_workers }
|
|
@@ -30,9 +30,11 @@ async function read_changed_files(): Promise<Record<string, string>> {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
// The resolver lives in `git/change-base.ts`, because the review brief
|
|
33
|
-
// needs exactly this reading and a second copy of it is the clone `CLAUDE.md` prohibits.
|
|
33
|
+
// needs exactly this reading and a second copy of it is the clone `CLAUDE.md` prohibits. It is read
|
|
34
|
+
// through a merge in progress, as the file map is (joshuafolkken/kit#5307): a map measured from the
|
|
35
|
+
// later base beside `HEAD`'s older one would let a re-merged default branch reuse a stale record.
|
|
34
36
|
async function read_base(): Promise<string | undefined> {
|
|
35
|
-
return await change_base.
|
|
37
|
+
return await change_base.resolved_through_merge()
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
// The two readings are independent, so they are started together rather than one after the other.
|
|
@@ -103,6 +103,12 @@ interface HookReuse {
|
|
|
103
103
|
source?: string | undefined
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
const ARGUMENTS_MISS = 'arguments were passed to the hook'
|
|
107
|
+
|
|
108
|
+
function force_miss(force_environment: string): string {
|
|
109
|
+
return `${force_environment} is set`
|
|
110
|
+
}
|
|
111
|
+
|
|
106
112
|
// The stamp rather than a boolean, for the same reason `gate_skip.gate_reuse` hands one back: the
|
|
107
113
|
// caller prints `taken_at`, and a record that does not describe this tree has no timestamp worth
|
|
108
114
|
// printing. A refusal carries its reason instead.
|
|
@@ -111,19 +117,30 @@ interface HookReuse {
|
|
|
111
117
|
// asked for that run rather than for a recorded result about a whole tree, and a hook's own line passes
|
|
112
118
|
// none, so this costs it nothing.
|
|
113
119
|
function hook_reuse(input: HookReuse): GateReuse {
|
|
114
|
-
if (input.extra_arguments.length > 0) return { miss:
|
|
115
|
-
if (is_force_requested(input.force_env)) return { miss:
|
|
120
|
+
if (input.extra_arguments.length > 0) return { miss: ARGUMENTS_MISS }
|
|
121
|
+
if (is_force_requested(input.force_env)) return { miss: force_miss(input.force_env) }
|
|
116
122
|
if (!input.is_tree_carried) return { miss: input.carry_miss }
|
|
117
123
|
|
|
118
124
|
return gate_skip.gate_reuse(input.tree.files, input.tree.base, input.source)
|
|
119
125
|
}
|
|
120
126
|
|
|
127
|
+
// joshuafolkken/kit#5234: the kind of a refusal `hook_reuse` answered, the hook's own three refusals
|
|
128
|
+
// told apart before the gate's, so a ledger counts each without a second wording of the sentences.
|
|
129
|
+
function miss_kind(miss: string, input: Pick<HookReuse, 'carry_miss' | 'force_env'>): string {
|
|
130
|
+
if (miss === ARGUMENTS_MISS) return 'arguments'
|
|
131
|
+
if (miss === force_miss(input.force_env)) return 'forced'
|
|
132
|
+
if (miss === input.carry_miss) return 'tree-not-carried'
|
|
133
|
+
|
|
134
|
+
return gate_skip.miss_kind(miss)
|
|
135
|
+
}
|
|
136
|
+
|
|
121
137
|
const hook_gate_reuse = {
|
|
122
138
|
GATE_REUSING_TARGETS,
|
|
123
139
|
hook_reuse,
|
|
124
140
|
is_force_requested,
|
|
125
141
|
is_index_matching_worktree,
|
|
126
142
|
is_worktree_clean,
|
|
143
|
+
miss_kind,
|
|
127
144
|
read_status_lines,
|
|
128
145
|
}
|
|
129
146
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
4
|
+
|
|
5
|
+
// **The one fingerprint every kept result is computed with** (joshuafolkken/kit#4497). A reuse of a
|
|
6
|
+
// verdict holds only while what it read holds, and each reader of a verdict once computed that on its
|
|
7
|
+
// own — the ESLint cache's import closure, the test-read map's dirty files, the gate's tool versions —
|
|
8
|
+
// so a miss in one (joshuafolkken/kit#4407, #4415, #4423, #4425) was a miss nowhere else. Every one now
|
|
9
|
+
// digests a file, a set of files and a set of named entries here.
|
|
10
|
+
|
|
11
|
+
// The digest of a path that does not exist, or cannot be read, so it still differs from any content.
|
|
12
|
+
const ABSENT = 'absent'
|
|
13
|
+
|
|
14
|
+
function of_content(content: Buffer | string): string {
|
|
15
|
+
return stamp_file.digest(content)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// One digest over `entries`, independent of their order.
|
|
19
|
+
function of_entries(entries: Iterable<string>): string {
|
|
20
|
+
return of_content([...entries].toSorted((left, right) => left.localeCompare(right)).join('\n'))
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function of_file(file_path: string): string {
|
|
24
|
+
try {
|
|
25
|
+
return of_content(readFileSync(file_path))
|
|
26
|
+
} catch {
|
|
27
|
+
return ABSENT
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Each of `relatives` (relative to `root`) keyed to the digest of its content, in path order.
|
|
32
|
+
function of_files(root: string, relatives: Iterable<string>): Record<string, string> {
|
|
33
|
+
const sorted = [...new Set(relatives)].toSorted((left, right) => left.localeCompare(right))
|
|
34
|
+
|
|
35
|
+
return Object.fromEntries(
|
|
36
|
+
sorted.map((relative) => [relative, of_file(path.join(root, relative))]),
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const input_fingerprint = { ABSENT, of_entries, of_file, of_files }
|
|
41
|
+
|
|
42
|
+
export { input_fingerprint }
|