@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
package/.github/workflows/ci.yml
CHANGED
|
@@ -51,6 +51,8 @@ jobs:
|
|
|
51
51
|
contents: read
|
|
52
52
|
steps:
|
|
53
53
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
54
|
+
with:
|
|
55
|
+
persist-credentials: false
|
|
54
56
|
|
|
55
57
|
- name: Setup pnpm and install dependencies
|
|
56
58
|
uses: ./.github/actions/setup-pnpm
|
|
@@ -87,6 +89,8 @@ jobs:
|
|
|
87
89
|
steps:
|
|
88
90
|
- name: Checkout code
|
|
89
91
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
92
|
+
with:
|
|
93
|
+
persist-credentials: false
|
|
90
94
|
|
|
91
95
|
# The MCR image lags the npm publish by days, so a version-derived tag is not
|
|
92
96
|
# guaranteed to exist. Probe it first and fall back to a plain runner instead of
|
|
@@ -150,6 +154,9 @@ jobs:
|
|
|
150
154
|
pull-requests: read
|
|
151
155
|
outputs:
|
|
152
156
|
reuse: ${{ steps.prove.outputs.reuse }}
|
|
157
|
+
run-id: ${{ steps.prove.outputs.run-id }}
|
|
158
|
+
pull-number: ${{ steps.prove.outputs.pull-number }}
|
|
159
|
+
author-association: ${{ steps.prove.outputs.author-association }}
|
|
153
160
|
steps:
|
|
154
161
|
- name: Prove the pushed tree passed PR Checks
|
|
155
162
|
id: prove
|
|
@@ -165,7 +172,7 @@ jobs:
|
|
|
165
172
|
exit 0
|
|
166
173
|
fi
|
|
167
174
|
if ! pull=$(printf '%s' "${pulls}" | jq -r --arg sha "${CURRENT_SHA}" \
|
|
168
|
-
'[.[] | select(.merged_at != null and .merge_commit_sha == $sha and .base.ref == "main")] | if length == 1 then .[0] | [.number, .head.sha, .head.ref, .created_at, .merged_at] | @tsv else empty end'); then
|
|
175
|
+
'[.[] | select(.merged_at != null and .merge_commit_sha == $sha and .base.ref == "main")] | if length == 1 then .[0] | [.number, .head.sha, .head.ref, .created_at, .merged_at, .author_association] | @tsv else empty end'); then
|
|
169
176
|
echo '::notice::Could not parse the pull request; running the verification jobs.'
|
|
170
177
|
exit 0
|
|
171
178
|
fi
|
|
@@ -173,7 +180,7 @@ jobs:
|
|
|
173
180
|
echo 'No unique merged pull request matched this push; running the verification jobs.'
|
|
174
181
|
exit 0
|
|
175
182
|
fi
|
|
176
|
-
IFS=$'\t' read -r pull_number head_sha head_ref created_at merged_at <<< "${pull}"
|
|
183
|
+
IFS=$'\t' read -r pull_number head_sha head_ref created_at merged_at author_association <<< "${pull}"
|
|
177
184
|
|
|
178
185
|
if ! current_tree=$(gh api "repos/${REPOSITORY}/git/commits/${CURRENT_SHA}" --jq '.tree.sha') || \
|
|
179
186
|
! pr_tree=$(gh api "repos/${REPOSITORY}/git/commits/${head_sha}" --jq '.tree.sha'); then
|
|
@@ -217,6 +224,9 @@ jobs:
|
|
|
217
224
|
fi
|
|
218
225
|
|
|
219
226
|
echo 'reuse=true' >> "$GITHUB_OUTPUT"
|
|
227
|
+
echo "run-id=${run_id}" >> "$GITHUB_OUTPUT"
|
|
228
|
+
echo "pull-number=${pull_number}" >> "$GITHUB_OUTPUT"
|
|
229
|
+
echo "author-association=${author_association}" >> "$GITHUB_OUTPUT"
|
|
220
230
|
echo "Reusing successful PR Checks for tree ${current_tree}."
|
|
221
231
|
|
|
222
232
|
# joshuafolkken/kit#1226 split the gate's four checks across two runners. The unit suite is the only
|
|
@@ -232,12 +242,23 @@ jobs:
|
|
|
232
242
|
# needed a ruleset edit to stay as strict as it was, and left every merge between the two
|
|
233
243
|
# unguarded. So the two halves run under new names and `Checks` stays exactly what the ruleset
|
|
234
244
|
# already requires: a job that is green only when both halves are.
|
|
245
|
+
#
|
|
246
|
+
# **The static half is a matrix of three legs** (joshuafolkken/kit#5215). On one runner its seven
|
|
247
|
+
# checks took 4.1 minutes while every unit shard was done in about two, so it was the critical path
|
|
248
|
+
# to `Checks`. Each leg is still `josh gate`, narrowed by `--static-group` to the partition
|
|
249
|
+
# `scripts/gate/gate-static-group.ts` defines, and restores only the caches its checks write — a leg
|
|
250
|
+
# that restored a cache it never writes would save it back unchanged under the same sha-keyed name,
|
|
251
|
+
# racing the leg that does write it. `needs.static-checks.result` is `success` only when every leg is.
|
|
235
252
|
static-checks:
|
|
236
|
-
name: Static Checks
|
|
253
|
+
name: Static Checks (${{ matrix.group }})
|
|
237
254
|
needs: reuse-pr-checks
|
|
238
255
|
if: ${{ !cancelled() && needs.reuse-pr-checks.outputs.reuse != 'true' }}
|
|
239
256
|
runs-on: ubuntu-latest
|
|
240
257
|
timeout-minutes: 8
|
|
258
|
+
strategy:
|
|
259
|
+
fail-fast: false
|
|
260
|
+
matrix:
|
|
261
|
+
group: [lint, types, rest]
|
|
241
262
|
permissions:
|
|
242
263
|
contents: read
|
|
243
264
|
packages: read
|
|
@@ -250,13 +271,16 @@ jobs:
|
|
|
250
271
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
251
272
|
with:
|
|
252
273
|
fetch-depth: 2
|
|
274
|
+
persist-credentials: false
|
|
253
275
|
|
|
254
276
|
- name: Setup Node.js
|
|
277
|
+
id: setup-node
|
|
255
278
|
uses: ./.github/actions/setup-node
|
|
256
279
|
with:
|
|
257
280
|
registry-url: 'https://npm.pkg.github.com'
|
|
258
281
|
|
|
259
282
|
- name: Setup ESLint cache
|
|
283
|
+
if: matrix.group == 'lint'
|
|
260
284
|
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
261
285
|
id: eslint-cache
|
|
262
286
|
with:
|
|
@@ -273,11 +297,19 @@ jobs:
|
|
|
273
297
|
# first — so the cache tracks `main` instead of freezing on the first commit that hit the
|
|
274
298
|
# config-hash key and never re-saving. The config-hash body above still cold-invalidates on a
|
|
275
299
|
# rule edit exactly as before; the sha only ever adds a save, never suppresses one.
|
|
276
|
-
|
|
300
|
+
# joshuafolkken/kit#4346: ESLint hashes `process.version` into every entry, and runner
|
|
301
|
+
# images carry different Node.js patch releases for `'24'`. Restored across two of them,
|
|
302
|
+
# every entry was stale and lint ran cold (~340s against ~60s), so the resolved version
|
|
303
|
+
# leads every key and restore-key: each release keeps its own lineage.
|
|
304
|
+
# joshuafolkken/kit#4496: the key is not built from `scripts/gate/toolchain-inputs.ts`, the
|
|
305
|
+
# list every local reuse reads — the cache is restored before the install, with no tsx to run
|
|
306
|
+
# it. The lockfile and eslint config hashes move it with the two inputs ESLint's own
|
|
307
|
+
# per-entry check does not cover.
|
|
308
|
+
key: ${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('eslint.config.js', 'eslint/**/*.js') }}-${{ github.sha }}
|
|
277
309
|
restore-keys: |
|
|
278
|
-
${{ runner.os }}-eslint-cache-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('eslint.config.js', 'eslint/**/*.js') }}-
|
|
279
|
-
${{ runner.os }}-eslint-cache-${{ hashFiles('pnpm-lock.yaml') }}-
|
|
280
|
-
${{ runner.os }}-eslint-cache-
|
|
310
|
+
${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('eslint.config.js', 'eslint/**/*.js') }}-
|
|
311
|
+
${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml') }}-
|
|
312
|
+
${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-
|
|
281
313
|
|
|
282
314
|
# `.tsbuildinfo` and `.cspellcache` were not cached in CI at all, so the type check and spell
|
|
283
315
|
# check ran cold on every run. Both are content-addressed — `tsc` records its compiler options
|
|
@@ -289,6 +321,7 @@ jobs:
|
|
|
289
321
|
# `josh check` runs `tsc --noEmit --incremental --tsBuildInfoFile .tsbuildinfo` and `josh
|
|
290
322
|
# cspell:dot` runs `cspell . --dot --cache --cache-strategy content --cache-location .cspellcache`.
|
|
291
323
|
- name: Setup TypeScript build cache
|
|
324
|
+
if: matrix.group == 'types'
|
|
292
325
|
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
293
326
|
id: tsbuildinfo-cache
|
|
294
327
|
with:
|
|
@@ -300,6 +333,7 @@ jobs:
|
|
|
300
333
|
${{ runner.os }}-tsbuildinfo-
|
|
301
334
|
|
|
302
335
|
- name: Setup cspell cache
|
|
336
|
+
if: matrix.group == 'rest'
|
|
303
337
|
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
304
338
|
id: cspell-cache
|
|
305
339
|
with:
|
|
@@ -310,6 +344,25 @@ jobs:
|
|
|
310
344
|
${{ runner.os }}-cspell-cache-${{ hashFiles('pnpm-lock.yaml') }}-
|
|
311
345
|
${{ runner.os }}-cspell-cache-
|
|
312
346
|
|
|
347
|
+
# joshuafolkken/kit#5116: `josh lint --changed` runs `prettier --check . --cache --cache-strategy
|
|
348
|
+
# content --cache-location .prettiercache` beside eslint, and with no restored cache it walked
|
|
349
|
+
# the whole tree cold on every run. Prettier hashes each file's absolute path into its entry
|
|
350
|
+
# (`scripts/josh/josh-command-types.ts` → `GATE_CACHE_SPECS`), which is why no lane shares it,
|
|
351
|
+
# but the runner checks out to the same path on every run, so an earlier run's entries hit. The
|
|
352
|
+
# key is the eslint cache's shape: lockfile and prettier config hashes, then the sha.
|
|
353
|
+
- name: Setup prettier cache
|
|
354
|
+
if: matrix.group == 'lint'
|
|
355
|
+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
356
|
+
id: prettier-cache
|
|
357
|
+
with:
|
|
358
|
+
path: |
|
|
359
|
+
.prettiercache
|
|
360
|
+
key: ${{ runner.os }}-prettier-cache-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('prettier.config.js', 'prettier/**/*.js') }}-${{ github.sha }}
|
|
361
|
+
restore-keys: |
|
|
362
|
+
${{ runner.os }}-prettier-cache-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('prettier.config.js', 'prettier/**/*.js') }}-
|
|
363
|
+
${{ runner.os }}-prettier-cache-${{ hashFiles('pnpm-lock.yaml') }}-
|
|
364
|
+
${{ runner.os }}-prettier-cache-
|
|
365
|
+
|
|
313
366
|
- name: Setup pnpm and install dependencies
|
|
314
367
|
uses: ./.github/actions/setup-pnpm
|
|
315
368
|
with:
|
|
@@ -356,9 +409,144 @@ jobs:
|
|
|
356
409
|
# default branch itself. A name that does not resolve fails the step rather than comparing
|
|
357
410
|
# with nothing.
|
|
358
411
|
- name: Run verification gate
|
|
359
|
-
run: pnpm josh gate --verbose --no-unit
|
|
412
|
+
run: pnpm josh gate --verbose --no-unit "--static-group=${STATIC_GROUP}"
|
|
360
413
|
env:
|
|
361
414
|
JOSH_METRICS_BASE: HEAD^1
|
|
415
|
+
STATIC_GROUP: ${{ matrix.group }}
|
|
416
|
+
|
|
417
|
+
# joshuafolkken/kit#4449: a main push that reuses this run skips the job above, so it saves no
|
|
418
|
+
# ESLint cache, and a later pull request restored an entry several merges old. Since
|
|
419
|
+
# joshuafolkken/kit#4415 every entry whose imports changed since then is linted afresh — 1,180 to
|
|
420
|
+
# 2,281 of about 3,200 files at 38 to 58 changed ones. The cache this run leaves is the cache of
|
|
421
|
+
# the tree the push carries, so it is handed to `seed-eslint-cache` below rather than linted
|
|
422
|
+
# again there. The prefix is the cache key above without its sha; the seed job saves it under
|
|
423
|
+
# the push's sha, and the test pins the two together. The upload only saves time, so a
|
|
424
|
+
# transient artifact-service error must not turn this required job red; it continues on error.
|
|
425
|
+
- name: Write ESLint cache prefix
|
|
426
|
+
id: eslint-cache-prefix
|
|
427
|
+
if: github.event_name == 'pull_request' && matrix.group == 'lint'
|
|
428
|
+
env:
|
|
429
|
+
ESLINT_CACHE_PREFIX: ${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('eslint.config.js', 'eslint/**/*.js') }}-
|
|
430
|
+
run: printf '%s\n' "${ESLINT_CACHE_PREFIX}" > eslint-cache-prefix
|
|
431
|
+
|
|
432
|
+
- name: Upload ESLint cache
|
|
433
|
+
if: github.event_name == 'pull_request' && matrix.group == 'lint'
|
|
434
|
+
continue-on-error: true
|
|
435
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
436
|
+
with:
|
|
437
|
+
name: eslint-cache-${{ github.event.pull_request.number }}
|
|
438
|
+
path: |
|
|
439
|
+
.eslintcache
|
|
440
|
+
eslint-cache-prefix
|
|
441
|
+
include-hidden-files: true
|
|
442
|
+
retention-days: 1
|
|
443
|
+
|
|
444
|
+
# joshuafolkken/kit#4449: the other half of the hand-off above. It runs only on a push that reused
|
|
445
|
+
# a pull request's Checks, reads that exact run's cache, and saves it under this push's sha, so the
|
|
446
|
+
# next pull request restores the cache of the tree it branched from. `actions/cache` misses on the
|
|
447
|
+
# fresh key and saves the downloaded file in its post step; the prefix is checked before it becomes
|
|
448
|
+
# a key. A missing artifact — a run from before this — or a prefix that is not a key saves nothing
|
|
449
|
+
# and leaves the push green; the next pull request then restores an older entry, as it did before.
|
|
450
|
+
# Only a pull request whose author holds a trusted association (OWNER / MEMBER / COLLABORATOR) is promoted:
|
|
451
|
+
# an outside author's run can write any `.eslintcache` it likes, and main's scope would then let
|
|
452
|
+
# later pull requests skip lint on that forged record (joshuafolkken/kit#5050).
|
|
453
|
+
seed-eslint-cache:
|
|
454
|
+
name: Seed ESLint Cache
|
|
455
|
+
needs: reuse-pr-checks
|
|
456
|
+
if: ${{ needs.reuse-pr-checks.outputs.reuse == 'true' }}
|
|
457
|
+
runs-on: ubuntu-latest
|
|
458
|
+
timeout-minutes: 2
|
|
459
|
+
permissions:
|
|
460
|
+
actions: read
|
|
461
|
+
steps:
|
|
462
|
+
- name: Download the reused run's ESLint cache
|
|
463
|
+
id: download
|
|
464
|
+
env:
|
|
465
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
466
|
+
REPOSITORY: ${{ github.repository }}
|
|
467
|
+
RUN_ID: ${{ needs.reuse-pr-checks.outputs.run-id }}
|
|
468
|
+
PULL_NUMBER: ${{ needs.reuse-pr-checks.outputs.pull-number }}
|
|
469
|
+
AUTHOR_ASSOCIATION: ${{ needs.reuse-pr-checks.outputs.author-association }}
|
|
470
|
+
run: |
|
|
471
|
+
case "${AUTHOR_ASSOCIATION}" in
|
|
472
|
+
OWNER | MEMBER | COLLABORATOR) ;;
|
|
473
|
+
*)
|
|
474
|
+
echo "::notice::The pull request's author association (${AUTHOR_ASSOCIATION:-unknown}) is not trusted; saving nothing."
|
|
475
|
+
exit 0
|
|
476
|
+
;;
|
|
477
|
+
esac
|
|
478
|
+
if ! gh run download "${RUN_ID}" --repo "${REPOSITORY}" --name "eslint-cache-${PULL_NUMBER}"; then
|
|
479
|
+
echo '::notice::The reused run left no ESLint cache; saving nothing.'
|
|
480
|
+
exit 0
|
|
481
|
+
fi
|
|
482
|
+
prefix=$(cat eslint-cache-prefix)
|
|
483
|
+
if ! printf '%s' "${prefix}" | grep -Eq '^[A-Za-z]+-eslint-cache-v[0-9.]+-[0-9a-f]+-[0-9a-f]+-$'; then
|
|
484
|
+
echo '::warning::The ESLint cache prefix is not a cache key; saving nothing.'
|
|
485
|
+
exit 0
|
|
486
|
+
fi
|
|
487
|
+
echo "prefix=${prefix}" >> "$GITHUB_OUTPUT"
|
|
488
|
+
|
|
489
|
+
- name: Save the ESLint cache under this push
|
|
490
|
+
id: save
|
|
491
|
+
if: steps.download.outputs.prefix != ''
|
|
492
|
+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
493
|
+
with:
|
|
494
|
+
path: |
|
|
495
|
+
.eslintcache
|
|
496
|
+
key: ${{ steps.download.outputs.prefix }}${{ github.sha }}
|
|
497
|
+
|
|
498
|
+
# joshuafolkken/kit#5189: the seed above saves the pull request's cache under the Node.js release
|
|
499
|
+
# *that* run resolved. When the runner images move to a new patch release, main holds no lineage
|
|
500
|
+
# for it, and the first pull request on the new release lints cold (Static Checks 3.7 → 6.6 min).
|
|
501
|
+
# This job restores with the static-checks key on its own runner, after the seed has saved: an
|
|
502
|
+
# exact hit means the seed already wrote this release's lineage for this push, and nothing runs.
|
|
503
|
+
# A miss — a new release, or a seed that saved nothing — lints here, and `actions/cache` saves the
|
|
504
|
+
# result in its post step, so the cold lint is paid on main instead of on a pull request. The lint
|
|
505
|
+
# only saves time, so its step continues on error: a red lint still saves, and leaves the job green.
|
|
506
|
+
warm-eslint-lineage:
|
|
507
|
+
name: Warm ESLint Lineage
|
|
508
|
+
needs: [reuse-pr-checks, seed-eslint-cache]
|
|
509
|
+
if: ${{ !cancelled() && needs.reuse-pr-checks.outputs.reuse == 'true' }}
|
|
510
|
+
runs-on: ubuntu-latest
|
|
511
|
+
timeout-minutes: 10
|
|
512
|
+
permissions:
|
|
513
|
+
contents: read
|
|
514
|
+
packages: read
|
|
515
|
+
steps:
|
|
516
|
+
- name: Checkout code
|
|
517
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
518
|
+
with:
|
|
519
|
+
persist-credentials: false
|
|
520
|
+
|
|
521
|
+
- name: Setup Node.js
|
|
522
|
+
id: setup-node
|
|
523
|
+
uses: ./.github/actions/setup-node
|
|
524
|
+
with:
|
|
525
|
+
registry-url: 'https://npm.pkg.github.com'
|
|
526
|
+
|
|
527
|
+
- name: Setup ESLint cache
|
|
528
|
+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
529
|
+
id: eslint-cache
|
|
530
|
+
with:
|
|
531
|
+
path: |
|
|
532
|
+
.eslintcache
|
|
533
|
+
key: ${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('eslint.config.js', 'eslint/**/*.js') }}-${{ github.sha }}
|
|
534
|
+
restore-keys: |
|
|
535
|
+
${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('eslint.config.js', 'eslint/**/*.js') }}-
|
|
536
|
+
${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml') }}-
|
|
537
|
+
${{ runner.os }}-eslint-cache-${{ steps.setup-node.outputs.node-version }}-
|
|
538
|
+
|
|
539
|
+
- name: Setup pnpm and install dependencies
|
|
540
|
+
if: steps.eslint-cache.outputs.cache-hit != 'true'
|
|
541
|
+
uses: ./.github/actions/setup-pnpm
|
|
542
|
+
with:
|
|
543
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
544
|
+
|
|
545
|
+
- name: Lint to write this release's lineage
|
|
546
|
+
id: lint
|
|
547
|
+
if: steps.eslint-cache.outputs.cache-hit != 'true'
|
|
548
|
+
continue-on-error: true
|
|
549
|
+
run: pnpm josh lint
|
|
362
550
|
|
|
363
551
|
# The other half of the gate, on a runner of its own. A GitHub job is its own machine, so this job
|
|
364
552
|
# sets Node up again; the pnpm preamble is the shared `.github/actions/setup-pnpm` action
|
|
@@ -366,24 +554,29 @@ jobs:
|
|
|
366
554
|
# `scripts/ci/ci-yml-action-parity.test.ts` compares the two files without the action's own pins
|
|
367
555
|
# (joshuafolkken/kit#3095).
|
|
368
556
|
#
|
|
369
|
-
# No ESLint cache here — nothing in this job lints — and no `--maxWorkers`: `
|
|
370
|
-
#
|
|
371
|
-
#
|
|
557
|
+
# No ESLint cache here — nothing in this job lints — and no `--maxWorkers`: `josh test:unit` sizes a
|
|
558
|
+
# lone run's claim on a 4-core runner at vitest's own default, three workers plus vitest itself
|
|
559
|
+
# (`gate_plan.direct_unit_weight`, joshuafolkken/kit#4607).
|
|
372
560
|
# **Sharded across runners, because one runner is already saturated** (joshuafolkken/kit#3220).
|
|
373
561
|
# Alone on a 4-core runner vitest takes every core, so the suite can only get faster by spreading
|
|
374
562
|
# its files over more machines. `fail-fast: false` keeps a red shard from cancelling the others,
|
|
375
563
|
# so one run reports every failing file. The `Checks` aggregate below reads `needs.unit.result`,
|
|
376
564
|
# which for a matrix is `success` only when every shard succeeded — no change there is needed.
|
|
565
|
+
# The shards split by the recorded per-file durations in `tools/test/unit-durations.json`, not by
|
|
566
|
+
# file count, so they finish together (`tools/test/duration-shard.ts`, joshuafolkken/kit#4467).
|
|
567
|
+
# Six shards (joshuafolkken/kit#5090): at three (joshuafolkken/kit#4610) the slowest shard had
|
|
568
|
+
# become the last check `Checks` waited on, past Static Checks. Six bring a shard's recorded load
|
|
569
|
+
# to about two minutes; past that the longest single file, not the shard count, sets the floor.
|
|
377
570
|
# Only kit shards: the distributed template runs the unit suite inside its single `checks` job,
|
|
378
571
|
# where a small consumer suite would pay the duplicated setup and could leave a shard with no file.
|
|
379
572
|
unit:
|
|
380
|
-
name: Unit Tests (${{ matrix.shard }}/
|
|
573
|
+
name: Unit Tests (${{ matrix.shard }}/6)
|
|
381
574
|
needs: reuse-pr-checks
|
|
382
575
|
if: ${{ !cancelled() && needs.reuse-pr-checks.outputs.reuse != 'true' }}
|
|
383
576
|
strategy:
|
|
384
577
|
fail-fast: false
|
|
385
578
|
matrix:
|
|
386
|
-
shard: [1, 2, 3]
|
|
579
|
+
shard: [1, 2, 3, 4, 5, 6]
|
|
387
580
|
runs-on: ubuntu-latest
|
|
388
581
|
timeout-minutes: 8
|
|
389
582
|
permissions:
|
|
@@ -392,6 +585,8 @@ jobs:
|
|
|
392
585
|
steps:
|
|
393
586
|
- name: Checkout code
|
|
394
587
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
588
|
+
with:
|
|
589
|
+
persist-credentials: false
|
|
395
590
|
|
|
396
591
|
- name: Setup Node.js
|
|
397
592
|
uses: ./.github/actions/setup-node
|
|
@@ -413,7 +608,7 @@ jobs:
|
|
|
413
608
|
# `scripts/ci/ci-yml-unit-job.test.ts` pins the command; the guard itself is
|
|
414
609
|
# `scripts/test/test-unit-guard.ts`.
|
|
415
610
|
- name: Run unit tests
|
|
416
|
-
run: pnpm josh test:unit --shard=${{ matrix.shard }}/
|
|
611
|
+
run: pnpm josh test:unit --shard=${{ matrix.shard }}/6
|
|
417
612
|
|
|
418
613
|
# One shard is enough: the check does not depend on which test files ran beside it.
|
|
419
614
|
- name: Verify optional ESLint consumer install
|
|
@@ -440,21 +635,30 @@ jobs:
|
|
|
440
635
|
# shell body is the pattern to keep out of a workflow regardless of the value's provenance.
|
|
441
636
|
checks:
|
|
442
637
|
name: Checks
|
|
443
|
-
needs: [reuse-pr-checks, static-checks, unit]
|
|
638
|
+
needs: [reuse-pr-checks, static-checks, unit, node-compat]
|
|
444
639
|
if: always()
|
|
445
640
|
runs-on: ubuntu-latest
|
|
446
641
|
timeout-minutes: 2
|
|
447
642
|
permissions: {}
|
|
448
643
|
steps:
|
|
644
|
+
# `node-compat` is aggregated here rather than added to the ruleset: the ruleset holds the one
|
|
645
|
+
# `Checks` context, and a matrix check name would drift with every Node version bump. It runs on
|
|
646
|
+
# the reuse path too, so its result is required on both paths (joshuafolkken/kit#4545).
|
|
449
647
|
- name: Require both halves of the verification gate
|
|
450
648
|
env:
|
|
451
649
|
REUSE_RESULT: ${{ needs.reuse-pr-checks.outputs.reuse }}
|
|
452
650
|
STATIC_RESULT: ${{ needs.static-checks.result }}
|
|
453
651
|
UNIT_RESULT: ${{ needs.unit.result }}
|
|
652
|
+
NODE_RESULT: ${{ needs.node-compat.result }}
|
|
454
653
|
run: |
|
|
455
654
|
echo "Reuse PR Checks: ${REUSE_RESULT}"
|
|
456
655
|
echo "Static Checks: ${STATIC_RESULT}"
|
|
457
656
|
echo "Unit Tests: ${UNIT_RESULT}"
|
|
657
|
+
echo "Node builds: ${NODE_RESULT}"
|
|
658
|
+
if [ "${NODE_RESULT}" != 'success' ]; then
|
|
659
|
+
echo "::error::the Node build matrix did not pass"
|
|
660
|
+
exit 1
|
|
661
|
+
fi
|
|
458
662
|
if [ "${STATIC_RESULT}" = 'success' ] && [ "${UNIT_RESULT}" = 'success' ]; then
|
|
459
663
|
exit 0
|
|
460
664
|
fi
|
|
@@ -476,12 +680,52 @@ jobs:
|
|
|
476
680
|
|
|
477
681
|
- name: Upload PR Checks evidence
|
|
478
682
|
if: github.event_name == 'pull_request'
|
|
479
|
-
uses: actions/upload-artifact@
|
|
683
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
480
684
|
with:
|
|
481
685
|
name: pr-checks-${{ github.event.pull_request.number }}
|
|
482
686
|
path: pr-checks-evidence
|
|
483
687
|
retention-days: 1
|
|
484
688
|
|
|
689
|
+
# The pre-commit secretlint scan skips when its binary is missing and never runs on a commit made
|
|
690
|
+
# with `--no-verify`, so this job scans the pull request's changes again where neither applies
|
|
691
|
+
# (joshuafolkken/kit#4657). It needs no other job and none needs it, so it stays off the critical
|
|
692
|
+
# path, and its own `Secret Scan` context is what makes a finding block the merge. Only the files
|
|
693
|
+
# the pull request adds or changes are read: the merge commit's first parent is the base, which is
|
|
694
|
+
# why the checkout fetches two commits. secretlint comes from the same store cache every other job
|
|
695
|
+
# installs from, and `JOSH_SECRETLINT_REQUIRE` turns the hook's missing-binary skip into a failure.
|
|
696
|
+
# `shell: bash` adds `pipefail`, so a diff that fails cannot hand `xargs` an empty list and pass.
|
|
697
|
+
secret-scan:
|
|
698
|
+
name: Secret Scan
|
|
699
|
+
if: github.event_name == 'pull_request'
|
|
700
|
+
runs-on: ubuntu-latest
|
|
701
|
+
timeout-minutes: 5
|
|
702
|
+
permissions:
|
|
703
|
+
contents: read
|
|
704
|
+
packages: read
|
|
705
|
+
steps:
|
|
706
|
+
- name: Checkout code
|
|
707
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
708
|
+
with:
|
|
709
|
+
persist-credentials: false
|
|
710
|
+
fetch-depth: 2
|
|
711
|
+
|
|
712
|
+
- name: Setup Node.js
|
|
713
|
+
uses: ./.github/actions/setup-node
|
|
714
|
+
with:
|
|
715
|
+
registry-url: 'https://npm.pkg.github.com'
|
|
716
|
+
|
|
717
|
+
- name: Setup pnpm and install dependencies
|
|
718
|
+
uses: ./.github/actions/setup-pnpm
|
|
719
|
+
with:
|
|
720
|
+
node-auth-token: ${{ secrets.GITHUB_TOKEN }}
|
|
721
|
+
|
|
722
|
+
- name: Scan the changed files for secrets
|
|
723
|
+
id: scan
|
|
724
|
+
shell: bash
|
|
725
|
+
env:
|
|
726
|
+
JOSH_SECRETLINT_REQUIRE: '1'
|
|
727
|
+
run: git diff -z --name-only --diff-filter=d HEAD^1 HEAD | xargs -0 -r pnpm josh secretlint-scan
|
|
728
|
+
|
|
485
729
|
security:
|
|
486
730
|
name: Security Audit
|
|
487
731
|
runs-on: ubuntu-latest
|
|
@@ -491,6 +735,8 @@ jobs:
|
|
|
491
735
|
steps:
|
|
492
736
|
- name: Checkout code
|
|
493
737
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
738
|
+
with:
|
|
739
|
+
persist-credentials: false
|
|
494
740
|
|
|
495
741
|
- name: Run security audit
|
|
496
742
|
uses: google/osv-scanner-action/osv-scanner-action@b1d267aea5211fa648d9d442fa64b90dbdcbdd36 # v2.7.0
|
|
@@ -508,6 +754,8 @@ jobs:
|
|
|
508
754
|
steps:
|
|
509
755
|
- name: Checkout code
|
|
510
756
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
757
|
+
with:
|
|
758
|
+
persist-credentials: false
|
|
511
759
|
|
|
512
760
|
# The same rule `scripts/test/test-e2e-guard.ts` applies locally, so a suite that runs under
|
|
513
761
|
# `pnpm josh test:e2e` is a suite CI runs too. Every `*.e2e.{ts,js}` outside `node_modules`
|
|
@@ -561,6 +809,8 @@ jobs:
|
|
|
561
809
|
steps:
|
|
562
810
|
- name: Checkout code
|
|
563
811
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
812
|
+
with:
|
|
813
|
+
persist-credentials: false
|
|
564
814
|
|
|
565
815
|
- name: Setup Node.js
|
|
566
816
|
uses: ./.github/actions/setup-node
|
|
@@ -601,7 +851,7 @@ jobs:
|
|
|
601
851
|
# marked red on the run and a missing report is never silent. This job is skipped while kit
|
|
602
852
|
# ships no E2E specs; the guard is here so adding one cannot quietly turn the gap live.
|
|
603
853
|
- name: Upload test results
|
|
604
|
-
uses: actions/upload-artifact@
|
|
854
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
605
855
|
if: always()
|
|
606
856
|
continue-on-error: true
|
|
607
857
|
with:
|
|
@@ -4,9 +4,10 @@ on: pull_request
|
|
|
4
4
|
|
|
5
5
|
# One run per pull request, superseded ones cancelled. `ci.yml` groups its pull-request runs the
|
|
6
6
|
# same way but no longer its pushes: since joshuafolkken/kit#1481 it appends the commit sha on a
|
|
7
|
-
# `push` event, which this workflow — triggered by `pull_request` alone — has no use for.
|
|
8
|
-
#
|
|
9
|
-
# distributed copy), so here the group only keeps a
|
|
7
|
+
# `push` event, which this workflow — triggered by `pull_request` alone — has no use for. A stale run
|
|
8
|
+
# cannot arm behind the withdrawal below: its `--match-head-commit` is refused once the branch moved
|
|
9
|
+
# (joshuafolkken/kit#842 is about the distributed copy), so here the group only keeps a
|
|
10
|
+
# force-pushed bump from paying for two runs.
|
|
10
11
|
concurrency:
|
|
11
12
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
13
|
cancel-in-progress: true
|
|
@@ -51,13 +52,71 @@ jobs:
|
|
|
51
52
|
# npm bumps never auto-merge, at any semver level: kit publishes lint plugins as runtime
|
|
52
53
|
# dependencies, so a patch release can change rule behavior for every consumer while kit's own
|
|
53
54
|
# CI only proves that kit still builds. Major bumps never auto-merge in either ecosystem.
|
|
55
|
+
#
|
|
56
|
+
# Only the `github-actions` group merges: `.github/dependabot.yml` puts the actions the publish
|
|
57
|
+
# jobs run with publish credentials, and those of the `pack` job that builds the tarball they
|
|
58
|
+
# publish, in a group of their own, because a hijacked release of one would publish with valid
|
|
59
|
+
# provenance, so a person reviews it (joshuafolkken/kit#4633, joshuafolkken/kit#4654). An
|
|
60
|
+
# ungrouped pull request does not merge either, so a bump that escapes both groups is reviewed.
|
|
61
|
+
#
|
|
62
|
+
# `--match-head-commit` refuses to arm when the branch moved after the event this run was
|
|
63
|
+
# triggered for, so a commit pushed before the arming does not merge on the bump's metadata. A
|
|
64
|
+
# push after the arming is the withdrawal step's (joshuafolkken/kit#4654).
|
|
54
65
|
- name: Enable auto-merge for github-actions patch and minor updates
|
|
55
66
|
if: >-
|
|
56
67
|
github.actor == 'dependabot[bot]'
|
|
57
68
|
&& steps.metadata.outputs.package-ecosystem == 'github_actions'
|
|
69
|
+
&& steps.metadata.outputs.dependency-group == 'github-actions'
|
|
58
70
|
&& (steps.metadata.outputs.update-type == 'version-update:semver-patch'
|
|
59
71
|
|| steps.metadata.outputs.update-type == 'version-update:semver-minor')
|
|
60
72
|
env:
|
|
61
73
|
PR_URL: ${{ github.event.pull_request.html_url }}
|
|
74
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
|
62
75
|
GH_TOKEN: ${{ github.token }}
|
|
63
|
-
run: gh pr merge --auto --merge "$PR_URL"
|
|
76
|
+
run: gh pr merge --auto --merge --match-head-commit "$HEAD_SHA" "$PR_URL"
|
|
77
|
+
|
|
78
|
+
# The arming only binds the head it was made on: GitHub keeps auto-merge on through a later push,
|
|
79
|
+
# so a commit a collaborator pushes to the branch would merge on the bump's metadata. A push by
|
|
80
|
+
# anyone but Dependabot therefore withdraws the arming this workflow made (joshuafolkken/kit#4691).
|
|
81
|
+
# Only that one: an auto-merge a maintainer enabled by hand — before their push or after it — is
|
|
82
|
+
# their decision, and the step reads who enabled it to leave it alone.
|
|
83
|
+
#
|
|
84
|
+
# `--disable-auto` is an error on a pull request with nothing armed, so the state is read first;
|
|
85
|
+
# a read that fails falls through to the withdrawal rather than past it, and a withdrawal that
|
|
86
|
+
# still fails after its retries leaves the run red. GraphQL names the token's identity
|
|
87
|
+
# `github-actions`; the REST spelling is accepted too.
|
|
88
|
+
- name: Withdraw this workflow's auto-merge after a push by anyone but Dependabot
|
|
89
|
+
id: withdraw
|
|
90
|
+
if: github.actor != 'dependabot[bot]'
|
|
91
|
+
env:
|
|
92
|
+
PR_URL: ${{ github.event.pull_request.html_url }}
|
|
93
|
+
# A variable so the unit test that runs this script can set the delay to zero.
|
|
94
|
+
RETRY_ATTEMPTS: '3'
|
|
95
|
+
RETRY_BACKOFF_SECONDS: '5'
|
|
96
|
+
GH_TOKEN: ${{ github.token }}
|
|
97
|
+
run: |
|
|
98
|
+
enabler="$(gh pr view "$PR_URL" --json autoMergeRequest \
|
|
99
|
+
--jq '.autoMergeRequest.enabledBy.login // ""')" || enabler=unknown
|
|
100
|
+
|
|
101
|
+
case "$enabler" in
|
|
102
|
+
'')
|
|
103
|
+
echo 'Auto-merge is not enabled — nothing to withdraw.'
|
|
104
|
+
exit 0
|
|
105
|
+
;;
|
|
106
|
+
github-actions | 'github-actions[bot]' | unknown) ;;
|
|
107
|
+
*)
|
|
108
|
+
echo "Auto-merge was enabled by $enabler — leaving their decision as it is."
|
|
109
|
+
exit 0
|
|
110
|
+
;;
|
|
111
|
+
esac
|
|
112
|
+
|
|
113
|
+
attempt=1
|
|
114
|
+
|
|
115
|
+
until gh pr merge --disable-auto "$PR_URL"; do
|
|
116
|
+
if [ "$attempt" -ge "$RETRY_ATTEMPTS" ]; then
|
|
117
|
+
exit 1
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
sleep "$((attempt * RETRY_BACKOFF_SECONDS))"
|
|
121
|
+
attempt=$((attempt + 1))
|
|
122
|
+
done
|
|
@@ -23,6 +23,7 @@ jobs:
|
|
|
23
23
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
24
24
|
with:
|
|
25
25
|
fetch-depth: 0
|
|
26
|
+
persist-credentials: false
|
|
26
27
|
|
|
27
28
|
- name: Configure Git
|
|
28
29
|
run: |
|
|
@@ -35,7 +36,14 @@ jobs:
|
|
|
35
36
|
# resolves to that branch, not the released tag. Use the tag carried in the
|
|
36
37
|
# dispatch payload (set by auto-tag.yml) as the merge source instead.
|
|
37
38
|
REF_NAME: ${{ inputs.tag || github.event.client_payload.tag }}
|
|
39
|
+
GH_TOKEN: ${{ github.token }}
|
|
38
40
|
run: |
|
|
41
|
+
# The checkout keeps no credentials, so the token reaches git for this step only, through
|
|
42
|
+
# the environment rather than .git/config (joshuafolkken/kit#4651).
|
|
43
|
+
BASIC=$(printf 'x-access-token:%s' "$GH_TOKEN" | base64 -w0)
|
|
44
|
+
echo "::add-mask::$BASIC"
|
|
45
|
+
export GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=http.https://github.com/.extraheader GIT_CONFIG_VALUE_0="AUTHORIZATION: basic $BASIC"
|
|
46
|
+
|
|
39
47
|
if [ -z "$REF_NAME" ]; then
|
|
40
48
|
echo "::error::new-tag-created dispatch carried no tag payload; aborting." >&2
|
|
41
49
|
exit 1
|