@joshuafolkken/kit 1.1471.0 → 1.1784.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/settings.json +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- package/scripts/auto-ok/auto-ok-cli.ts +14 -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 +6 -7
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- 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 +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +54 -7
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -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 +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +69 -0
- 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 +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +137 -18
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- 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/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- 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 +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- 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-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-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +31 -60
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +65 -129
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/gh/git-pr.ts +13 -1
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -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 +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +78 -0
- package/scripts/git/main-merge.ts +39 -14
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- 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 +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +5 -16
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- 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/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -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 +34 -78
- 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/expected-effect-lint.ts +60 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- 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 +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -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 +81 -90
- package/scripts/issue/issue-lint-cli.ts +7 -13
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -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 +111 -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.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- 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 +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +19 -25
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +19 -5
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- 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 +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- 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 +111 -71
- 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 +31 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +112 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -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 +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- package/scripts/josh/process-identity.ts +13 -4
- 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 +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-preserve.ts +29 -1
- 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 +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- 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/read-file.ts +3 -1
- 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/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.ts +265 -0
- package/scripts/lint/format.ts +14 -5
- package/scripts/lint/import-graph.ts +279 -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 +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +12 -11
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- 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 +18 -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 +6 -15
- package/scripts/report/report-format-reference.ts +4 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +82 -16
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -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 +67 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +90 -3
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +76 -7
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -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 +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -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 +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- 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 +118 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +240 -61
- package/scripts/run/board/run-board-length.ts +52 -0
- 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 +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- 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 +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -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 +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -47
- 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 +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -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 +2 -2
- package/scripts/run/board/run-board-state.ts +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- 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.ts +9 -4
- package/scripts/run/cut/run-cut-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- 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-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- 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 +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- 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.ts +2 -1
- 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 +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- 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 +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -0
- package/scripts/run/run-step.ts +1 -1
- 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 +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- package/scripts/run/ship/run-ship.ts +30 -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-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- 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 +3 -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 +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- 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 +15 -0
- package/scripts/split/split-measure.ts +65 -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/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +55 -6
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +54 -21
- package/scripts/test/unit-count-file.ts +37 -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 +71 -137
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- 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 +10 -1
- package/scripts/time-runtime/time-shell.ts +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- 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/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -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 +10 -3
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -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-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- 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/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/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// The weights heavy tools declare to the core budget (`core-budget.ts`), in their own module so the
|
|
2
|
+
// ledger's file stays under its line ceiling.
|
|
3
|
+
|
|
4
|
+
// One tool's measured run: its CPU seconds over its wall seconds, the cores it kept busy on average.
|
|
5
|
+
interface Measurement {
|
|
6
|
+
cpu_s: number
|
|
7
|
+
wall_s: number
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// **What each heavy tool was measured at, on the 11-core machine.** The whole-tree eslint scan behind
|
|
11
|
+
// `josh lines` and `josh refactor:scan`, cold on 2026-10-06. eslint over 40 staged files
|
|
12
|
+
// (`pre-commit-lint.ts`), which the gate's lint also runs beside its sibling linters, so it is the
|
|
13
|
+
// lint's floor; whole runs were observed at 124–147% CPU. The type check and the spell check with
|
|
14
|
+
// `/usr/bin/time -l` on 2026-10-21 under a load average of 14. `prettier --check` over 40 staged
|
|
15
|
+
// files, `josh retrospective` and a fresh lane's `pnpm install --frozen-lockfile` with
|
|
16
|
+
// `/usr/bin/time -l` on 2026-10-17 under a load average of 16. The gate ledger records each check's
|
|
17
|
+
// CPU beside its duration (`check-cpu.ts`), so these can be re-measured from it.
|
|
18
|
+
const MEASURED = {
|
|
19
|
+
lint: { cpu_s: 16.9, wall_s: 14 },
|
|
20
|
+
type_check: { cpu_s: 31.2, wall_s: 27.3 },
|
|
21
|
+
spell_check: { cpu_s: 6, wall_s: 5.6 },
|
|
22
|
+
eslint_scan: { cpu_s: 113, wall_s: 98 },
|
|
23
|
+
format: { cpu_s: 2.1, wall_s: 1.7 },
|
|
24
|
+
retrospective: { cpu_s: 16.5, wall_s: 19.8 },
|
|
25
|
+
install: { cpu_s: 1.9, wall_s: 6.1 },
|
|
26
|
+
} as const satisfies Readonly<Record<string, Measurement>>
|
|
27
|
+
|
|
28
|
+
// **Rounded up, never down** (joshuafolkken/kit#4362): a weight is a whole number of cores, and the
|
|
29
|
+
// floored table of joshuafolkken/kit#3354 let a 1.15-core eslint scan claim one, so the budget admitted
|
|
30
|
+
// more than the machine had.
|
|
31
|
+
function rounded_up(measurement: Measurement): number {
|
|
32
|
+
return Math.ceil(measurement.cpu_s / measurement.wall_s)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// **The cores each heavy tool occupies, declared once for both places that reserve them**
|
|
36
|
+
// `gate-plan.ts`'s checks and the `josh` commands that run the same tools
|
|
37
|
+
// directly read these, so a direct `josh lint` claims what the gate's lint claims. Each is its
|
|
38
|
+
// measurement rounded up. `e2e` is the Playwright worker count `josh test:e2e` passes locally — the
|
|
39
|
+
// two-worker run CI already sizes for its four-core runner — since kit has no e2e suite of its own to
|
|
40
|
+
// time.
|
|
41
|
+
const CORE_WEIGHTS = {
|
|
42
|
+
lint: rounded_up(MEASURED.lint),
|
|
43
|
+
type_check: rounded_up(MEASURED.type_check),
|
|
44
|
+
spell_check: rounded_up(MEASURED.spell_check),
|
|
45
|
+
eslint_scan: rounded_up(MEASURED.eslint_scan),
|
|
46
|
+
format: rounded_up(MEASURED.format),
|
|
47
|
+
retrospective: rounded_up(MEASURED.retrospective),
|
|
48
|
+
install: rounded_up(MEASURED.install),
|
|
49
|
+
e2e: 2,
|
|
50
|
+
} as const
|
|
51
|
+
|
|
52
|
+
// **The memory each heavy tool holds, declared beside its cores**: peak
|
|
53
|
+
// resident size in MB, rounded up. Measured with `/usr/bin/time -l` on the 11-core / 18 GB machine on
|
|
54
|
+
// 2026-10-07: the type check 1,244 MB, the spell check 330 MB, and one unit worker 319 MB over 54 test
|
|
55
|
+
// files. Typed eslint was 1,207 MB over one directory and was observed at 1.6–2.4 GB per whole-tree
|
|
56
|
+
// `eslint .` with three lanes running the same day, so lint and the whole-tree scan take that peak.
|
|
57
|
+
// On 2026-10-17: prettier 260 MB, the retrospective 862 MB and a lane install 65 MB. On 2026-10-22
|
|
58
|
+
// (joshuafolkken/kit#4528) the whole suite, 1,830 files at `--maxWorkers=3` beside four lanes, sampled
|
|
59
|
+
// each worker's resident size once a second: the largest peaked at 381 MB, so the 54-file
|
|
60
|
+
// measurement had read a worker short of the files it lives through.
|
|
61
|
+
const MEMORY_MB = {
|
|
62
|
+
lint: 2400,
|
|
63
|
+
type_check: 1300,
|
|
64
|
+
spell_check: 350,
|
|
65
|
+
eslint_scan: 2400,
|
|
66
|
+
unit_worker: 400,
|
|
67
|
+
format: 300,
|
|
68
|
+
retrospective: 900,
|
|
69
|
+
install: 100,
|
|
70
|
+
} as const
|
|
71
|
+
|
|
72
|
+
// **The program a command launches, mapped to the `MEMORY_MB` row it holds** — the one table
|
|
73
|
+
// `command-memory.ts` reads a wrapped command's memory off. `install` is `pnpm install` read past its
|
|
74
|
+
// `pnpm` wrapper (`git_argv.program_of`).
|
|
75
|
+
const TOOL_MEMORY: Readonly<Partial<Record<string, keyof typeof MEMORY_MB>>> = {
|
|
76
|
+
eslint: 'lint',
|
|
77
|
+
tsc: 'type_check',
|
|
78
|
+
cspell: 'spell_check',
|
|
79
|
+
vitest: 'unit_worker',
|
|
80
|
+
prettier: 'format',
|
|
81
|
+
install: 'install',
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const core_weights = { CORE_WEIGHTS, MEASURED, MEMORY_MB, TOOL_MEMORY }
|
|
85
|
+
|
|
86
|
+
export { core_weights }
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { availableParallelism } from 'node:os'
|
|
2
|
+
import type { FreeCapacity } from '#scripts/test/unit-worker-share'
|
|
3
|
+
import { core_admission } from './core-admission'
|
|
4
|
+
import { core_budget, type LiveReservation } from './core-budget'
|
|
5
|
+
import { core_weights } from './core-weights'
|
|
6
|
+
import { held_mark } from './held-mark'
|
|
7
|
+
import { machine_capacity, type MachineReading } from './machine-capacity'
|
|
8
|
+
|
|
9
|
+
// The cores a unit suite may open workers on: the core count less the load from outside the core
|
|
10
|
+
// budget's ledger, the figure the ledger admits against (`machine_capacity.machine_budget`). The run
|
|
11
|
+
// count in `unit-run-marker.ts` divides the machine between unit runs; this is what bounds that
|
|
12
|
+
// division when something else holds the cores.
|
|
13
|
+
//
|
|
14
|
+
// Its own module because the reading needs the ledger, and `core-budget.ts` already imports
|
|
15
|
+
// `unit-worker-share.ts` — reading it from there would close a cycle.
|
|
16
|
+
|
|
17
|
+
interface FreeCoresOptions {
|
|
18
|
+
available_cores?: number
|
|
19
|
+
read_machine?: () => Promise<MachineReading>
|
|
20
|
+
directory?: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// **The claim a parent command holds for this run is left out of the ledger.** It is admitted before
|
|
24
|
+
// this run starts a worker, so none of its weight is in the reading yet; counting it would subtract
|
|
25
|
+
// it from load it never added and mask that much outside load (`held_mark.held_reservation`).
|
|
26
|
+
function running_claims(directory: string | undefined): Array<LiveReservation> {
|
|
27
|
+
const own = held_mark.held_reservation()
|
|
28
|
+
|
|
29
|
+
return core_budget.live_reservations(directory).filter((entry) => entry.key !== own)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// `undefined` where the machine could not be read — a CI runner, a CPU quota narrower than the host —
|
|
33
|
+
// which `unit_worker_share.cap_to_free` reads as the share as it was.
|
|
34
|
+
function free_of(reading: MachineReading, options: FreeCoresOptions): number | undefined {
|
|
35
|
+
if (reading.busy_cores === undefined) return undefined
|
|
36
|
+
|
|
37
|
+
const ledger = core_admission.ledger_load(running_claims(options.directory), Date.now())
|
|
38
|
+
|
|
39
|
+
return machine_capacity.machine_budget(
|
|
40
|
+
options.available_cores ?? availableParallelism(),
|
|
41
|
+
reading,
|
|
42
|
+
ledger,
|
|
43
|
+
).cores
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// **The workers the free memory holds** (joshuafolkken/kit#4528): the free memory over one worker's
|
|
47
|
+
// peak (`core_weights.MEMORY_MB.unit_worker`, where its measurement is recorded). Divided here, not in
|
|
48
|
+
// `unit-run-marker.ts`, which the vitest config imports — `core-weights.ts` there would widen every
|
|
49
|
+
// related run on it to the whole suite. The memory is the reading's own available figure, not the
|
|
50
|
+
// budget's: the ledger's held memory is added back there for admission's walk, and it is not free for
|
|
51
|
+
// this run's workers. `undefined` — a platform `machine-capacity.ts` reads no memory on — leaves the
|
|
52
|
+
// share as it was; a Linux CI runner reads `/proc/meminfo`, whose memory holds more workers than cores.
|
|
53
|
+
function workers_in_memory(available_mb: number | undefined): number | undefined {
|
|
54
|
+
if (available_mb === undefined) return undefined
|
|
55
|
+
|
|
56
|
+
return available_mb / core_weights.MEMORY_MB.unit_worker
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// One reading answers both halves: the sample window is waited out once.
|
|
60
|
+
async function read(options: FreeCoresOptions = {}): Promise<FreeCapacity> {
|
|
61
|
+
const reading = await (options.read_machine ?? machine_capacity.read_machine)()
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
cores: free_of(reading, options),
|
|
65
|
+
memory_workers: workers_in_memory(reading.available_mb),
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const free_cores = { read }
|
|
70
|
+
|
|
71
|
+
export type { FreeCoresOptions }
|
|
72
|
+
export { free_cores }
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { process_identity } from '#scripts/josh/process-identity'
|
|
2
|
-
import { lane_ledger } from '#scripts/lane/lane-ledger'
|
|
2
|
+
import { lane_ledger, type GateCheckRecord } from '#scripts/lane/lane-ledger'
|
|
3
|
+
import { related_scope } from '#scripts/test/test-related-scope'
|
|
3
4
|
import { core_admission } from './core-admission'
|
|
4
5
|
import { core_budget } from './core-budget'
|
|
5
6
|
import { gate_plan } from './gate-plan'
|
|
6
|
-
import type
|
|
7
|
+
import { gate_report, type GateStepResult } from './gate-report'
|
|
7
8
|
import { machine_capacity } from './machine-capacity'
|
|
8
9
|
|
|
9
10
|
// A finished gate's line in the lane ledger: its duration, its verdict, its
|
|
@@ -13,8 +14,8 @@ import { machine_capacity } from './machine-capacity'
|
|
|
13
14
|
//
|
|
14
15
|
// **The machine is read where none of the gate's own checks runs — before the first starts and after
|
|
15
16
|
// the last ends.** The load average cannot tell the two apart: a solo gate started at 4 on the 11-core
|
|
16
|
-
// machine ended at 21, its own load. The reading is the core budget's own
|
|
17
|
-
//
|
|
17
|
+
// machine ended at 21, its own load. The reading is the core budget's own; "quiet" is no whole core
|
|
18
|
+
// busy beyond the background a developer machine always carries.
|
|
18
19
|
//
|
|
19
20
|
// **Between the ends, the load is read off the core budget's ledger, not the CPU**.
|
|
20
21
|
// Two readings missed every lane whose lint, tests or `ship` ran only while
|
|
@@ -23,7 +24,11 @@ import { machine_capacity } from './machine-capacity'
|
|
|
23
24
|
// is what tells the two apart: another `josh` run's admitted claim is another process's place, and its
|
|
24
25
|
// weight is the cores it holds. A claim still waiting holds none.
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
// **The background a quiet machine still carries.** On 2026-10-07 the 11-core machine idled at about
|
|
28
|
+
// 1.5 cores outside `josh` — Claude sessions 0.55, the window server 0.47, a browser 0.5. Admission
|
|
29
|
+
// counts it (`machine_capacity.external_cores`, joshuafolkken/kit#4238), but a gate timed beside it is
|
|
30
|
+
// still a solo gate for `josh metrics`, so it is no external load here.
|
|
31
|
+
const BACKGROUND_CORES = 2
|
|
27
32
|
// Often enough to catch another lane's shortest related lint, seldom enough that reading the markers —
|
|
28
33
|
// a process probe each — costs the gate nothing it could measure.
|
|
29
34
|
const SAMPLE_INTERVAL_MS = 3000
|
|
@@ -48,7 +53,7 @@ async function read_external_cores(): Promise<number | undefined> {
|
|
|
48
53
|
|
|
49
54
|
if (busy_cores === undefined) return undefined
|
|
50
55
|
|
|
51
|
-
return machine_capacity.external_cores(busy_cores,
|
|
56
|
+
return machine_capacity.external_cores(busy_cores, BACKGROUND_CORES)
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
// The cores other processes' admitted claims hold now. This gate's own claims are written by this
|
|
@@ -88,6 +93,36 @@ async function start(ledger_path: string | undefined): Promise<GateLedgerStart>
|
|
|
88
93
|
return { ledger_path, readings, sampler: start_sampler(readings) }
|
|
89
94
|
}
|
|
90
95
|
|
|
96
|
+
// The unit leg's own facts: the whole-suite fallback it took, or the since-green no-op that ran no
|
|
97
|
+
// test (joshuafolkken/kit#4457) — the two `josh lane:stats` must not time as an ordinary run.
|
|
98
|
+
function unit_facts(result: GateStepResult): Pick<GateCheckRecord, 'fallback' | 'is_unmoved'> {
|
|
99
|
+
if (result.label !== gate_plan.UNIT_LABEL) return {}
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
fallback: related_scope.fallback_kind(result.output),
|
|
103
|
+
...(related_scope.is_unmoved(result.output) && { is_unmoved: true }),
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function check_records(results: ReadonlyArray<GateStepResult>): Array<GateCheckRecord> {
|
|
108
|
+
return results.map((result) => ({
|
|
109
|
+
label: result.label,
|
|
110
|
+
elapsed_ms: result.elapsed_ms,
|
|
111
|
+
is_passed: !gate_report.is_gate_step_failed(result),
|
|
112
|
+
is_reused: result.reused_at !== undefined,
|
|
113
|
+
...(result.cpu_ms !== undefined && { cpu_ms: Math.round(result.cpu_ms) }),
|
|
114
|
+
...unit_facts(result),
|
|
115
|
+
claim: result.claim,
|
|
116
|
+
}))
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// A gate that reused a green record started no check: its line is counted as reused, never timed.
|
|
120
|
+
async function record_reused(ledger_path: string | undefined, elapsed_ms: number): Promise<void> {
|
|
121
|
+
if (ledger_path === undefined) return
|
|
122
|
+
|
|
123
|
+
await lane_ledger.record_gate(ledger_path, { elapsed_ms, is_passed: true, is_reused: true })
|
|
124
|
+
}
|
|
125
|
+
|
|
91
126
|
// The caller measures the elapsed time before this, so the end's reading is never part of it.
|
|
92
127
|
async function record(
|
|
93
128
|
begun: GateLedgerStart,
|
|
@@ -101,12 +136,19 @@ async function record(
|
|
|
101
136
|
const unit_ms = results.find((result) => result.label === gate_plan.UNIT_LABEL)?.elapsed_ms
|
|
102
137
|
const external_cores = peak([...begun.readings, await read_external_cores()])
|
|
103
138
|
|
|
104
|
-
await lane_ledger.record_gate(begun.ledger_path, {
|
|
139
|
+
await lane_ledger.record_gate(begun.ledger_path, {
|
|
140
|
+
...outcome,
|
|
141
|
+
unit_ms,
|
|
142
|
+
external_cores,
|
|
143
|
+
checks: check_records(results),
|
|
144
|
+
})
|
|
105
145
|
}
|
|
106
146
|
|
|
107
147
|
const gate_ledger = {
|
|
148
|
+
BACKGROUND_CORES,
|
|
108
149
|
SAMPLE_INTERVAL_MS,
|
|
109
150
|
record,
|
|
151
|
+
record_reused,
|
|
110
152
|
start,
|
|
111
153
|
}
|
|
112
154
|
|
|
@@ -49,8 +49,10 @@ interface GateCheck {
|
|
|
49
49
|
const LINT_LABEL = 'lint'
|
|
50
50
|
const TYPE_CHECK_LABEL = 'check'
|
|
51
51
|
const UNIT_LABEL = 'test:unit'
|
|
52
|
+
const UNIT_TARGET = 'test:related'
|
|
52
53
|
const BEHAVIOR_LABEL = 'behavior'
|
|
53
54
|
const METRICS_LABEL = 'metrics'
|
|
55
|
+
const EXPORTS_LABEL = 'exports'
|
|
54
56
|
|
|
55
57
|
// The checks whose warnings must survive the green record: eslint (the `lint` step) and svelte-check
|
|
56
58
|
// (the `check` step) both exit 0 while reporting per-tree warnings a developer needs to see again, so
|
|
@@ -77,15 +79,18 @@ const WARNING_CHECKER_LABELS: ReadonlyArray<string> = [LINT_LABEL, TYPE_CHECK_LA
|
|
|
77
79
|
//
|
|
78
80
|
// **The two zero weights are measured, and they stay zero.** These are warm runs on the 11-core
|
|
79
81
|
// machine. `behavior` took 0.6s of wall for 0.7s of CPU, which
|
|
80
|
-
// is node starting up. `exports:unused` took 5.5s of wall for 9.0s of CPU, about 1.6 cores.
|
|
81
|
-
// that would be
|
|
82
|
-
// It would
|
|
83
|
-
// full length of the unit suite, to cover a burst that ends before lint does. Nothing has measured
|
|
82
|
+
// is node starting up. `exports:unused` took 5.5s of wall for 9.0s of CPU, about 1.6 cores. Rounded
|
|
83
|
+
// up, that would be two cores, but a reservation lasts the whole gate's plan, not the check's five
|
|
84
|
+
// seconds. It would raise `RESERVED_CORES` from 6 to 8 and cut the solo unit cap from 5 workers to 3
|
|
85
|
+
// for the full length of the unit suite, to cover a burst that ends before lint does. Nothing has measured
|
|
84
86
|
// that trade, so the measured shape stays.
|
|
85
87
|
const STATIC_CHECKS: ReadonlyArray<GateCheck> = [
|
|
88
|
+
// **The lint reads the branch's changed files, not the whole tree** (joshuafolkken/kit#4085), and
|
|
89
|
+
// falls back to the whole tree in CI and on a changed configuration (`lint-gate-scope.ts`).
|
|
86
90
|
{
|
|
87
91
|
label: LINT_LABEL,
|
|
88
92
|
target: 'lint',
|
|
93
|
+
args: ['--changed'],
|
|
89
94
|
reserved_cores: core_budget.CORE_WEIGHTS.lint,
|
|
90
95
|
memory_mb: core_budget.MEMORY_MB.lint,
|
|
91
96
|
},
|
|
@@ -106,7 +111,7 @@ const STATIC_CHECKS: ReadonlyArray<GateCheck> = [
|
|
|
106
111
|
// program and walks it for about 5s, and it is over well before lint and the type check. A
|
|
107
112
|
// reservation would only take a place from the four-core CI runner's fan-out and a worker from the
|
|
108
113
|
// unit suite for the whole gate.
|
|
109
|
-
{ label:
|
|
114
|
+
{ label: EXPORTS_LABEL, target: 'exports:unused', reserved_cores: 0 },
|
|
110
115
|
// **The metrics ratchet is kit's own**: it holds kit's repository-wide
|
|
111
116
|
// totals to the merge-base's. It is one in-process eslint pass with only `max-lines` enabled, over
|
|
112
117
|
// in a few seconds, so it reserves no core for the reason the unused-member check above does not.
|
|
@@ -119,13 +124,23 @@ const STATIC_CHECKS: ReadonlyArray<GateCheck> = [
|
|
|
119
124
|
memory_mb: core_budget.MEMORY_MB.eslint_scan,
|
|
120
125
|
is_kit_only: true,
|
|
121
126
|
},
|
|
127
|
+
// The lockfile policy check is network-bound and usually instant: it verifies only when the
|
|
128
|
+
// lockfile or `pnpm-workspace.yaml` moved from the merge-base (joshuafolkken/kit#4090), so it
|
|
129
|
+
// reserves no core. Kit's own until a consumer's private-registry entries are known to verify.
|
|
130
|
+
{ label: 'lockfile', target: 'lockfile:policy', reserved_cores: 0, is_kit_only: true },
|
|
122
131
|
]
|
|
123
132
|
|
|
124
133
|
// The checks, in the order their output is printed — the static set, then the unit suite last (the
|
|
125
134
|
// one check that fans out across every core, and the one the `--no-unit` split drops).
|
|
135
|
+
//
|
|
136
|
+
// **The unit check runs the tests the change can reach, not the whole suite**
|
|
137
|
+
// (joshuafolkken/kit#4065): `josh test:related` narrows through the module graph and the test-read
|
|
138
|
+
// map, and runs the whole suite — refreshing that map — whenever it cannot tell. The label stays
|
|
139
|
+
// `test:unit`, the name every ledger, reservation and record knows the check by. CI runs the whole
|
|
140
|
+
// sharded suite regardless.
|
|
126
141
|
const GATE_CHECKS: ReadonlyArray<GateCheck> = [
|
|
127
142
|
...STATIC_CHECKS,
|
|
128
|
-
{ label: UNIT_LABEL, target:
|
|
143
|
+
{ label: UNIT_LABEL, target: UNIT_TARGET, reserved_cores: 0 },
|
|
129
144
|
]
|
|
130
145
|
|
|
131
146
|
// **Selecting is not skipping, and the difference is where the unit suite runs rather than whether
|
|
@@ -151,7 +166,7 @@ function has_unit_check(checks: ReadonlyArray<GateCheck>): boolean {
|
|
|
151
166
|
return checks.some((check) => check.label === UNIT_LABEL)
|
|
152
167
|
}
|
|
153
168
|
|
|
154
|
-
// What the non-elastic checks hold between them: 2 +
|
|
169
|
+
// What the non-elastic checks hold between them: 2 + 2 + 2. Reduced over `STATIC_CHECKS`
|
|
155
170
|
// rather than over every check, because that is the set the sentence above names: `resolve_unit_worker_cap`
|
|
156
171
|
// spends this as the cores the unit suite must leave to its siblings, so summing the unit check into
|
|
157
172
|
// it would have the suite subtract its own reservation from its own budget the day that reservation
|
|
@@ -218,7 +233,7 @@ function shared_cores(available_cores: number, concurrent_runs: number): number
|
|
|
218
233
|
|
|
219
234
|
// Admit checks in declaration order while the running set's reserved cores still fit **this run's
|
|
220
235
|
// share** of the machine. On a machine running one gate that share is the machine, so this bites
|
|
221
|
-
// only below
|
|
236
|
+
// only below six cores — the three reserving checks want six between them — and there it is the
|
|
222
237
|
// difference between two checks sharing a core and four fighting over it.
|
|
223
238
|
//
|
|
224
239
|
// **Under concurrency it is the only lever there is, and that is a measurement rather than a
|
|
@@ -308,8 +323,9 @@ function solo_unit_weight(available_cores: number): number {
|
|
|
308
323
|
// once**: no second set of weights is introduced, so a change to the measured reservation moves the
|
|
309
324
|
// admission with it.
|
|
310
325
|
//
|
|
311
|
-
// **A solo gate's four weights sum to exactly the core count** — `reserved(2 +
|
|
312
|
-
// unit_cap(cores -
|
|
326
|
+
// **A solo gate's four weights sum to exactly the core count** — `reserved(2 + 2 + 2) +
|
|
327
|
+
// unit_cap(cores - 6)` is `cores` — which is what lets every check of a lone gate on a machine with room
|
|
328
|
+
// (its busy cores within what the ledger holds, `core-budget.ts`) be admitted at once,
|
|
313
329
|
// its concurrency unchanged. A machine below the measured one leaves the unit suite uncapped and reads
|
|
314
330
|
// its weight from the same identity, `cores - RESERVED_CORES` clamped at zero, so the sum is the core
|
|
315
331
|
// count there too.
|
|
@@ -338,22 +354,33 @@ function check_memory(check: GateCheck, plan: GatePlan, available_cores: number)
|
|
|
338
354
|
// and hold every later claim behind it. One weight for the suite however it is started. **Floored at one
|
|
339
355
|
// worker**: on a machine the static checks fill, a four-core CI runner among them, the gate's solo
|
|
340
356
|
// weight is zero because its siblings hold every core — a direct run has no siblings, and vitest still
|
|
341
|
-
// occupies a core.
|
|
357
|
+
// occupies a core. **Plus vitest's own process** (joshuafolkken/kit#4362): the workers are the share,
|
|
358
|
+
// and the claim holds the process that drives them on top (`unit_worker_share.cap_to_claim` takes it
|
|
359
|
+
// back off).
|
|
342
360
|
function direct_unit_weight(
|
|
343
361
|
available_cores: number = availableParallelism(),
|
|
344
362
|
live_runs: number = unit_worker_share.live_run_count(),
|
|
345
363
|
): number {
|
|
346
|
-
const
|
|
364
|
+
const workers =
|
|
347
365
|
unit_worker_share.current_share(available_cores, live_runs) ?? solo_unit_weight(available_cores)
|
|
348
366
|
|
|
349
|
-
return Math.max(unit_worker_share.MIN_WORKERS,
|
|
367
|
+
return Math.max(unit_worker_share.MIN_WORKERS, workers) + unit_worker_share.MAIN_PROCESS_CORES
|
|
350
368
|
}
|
|
351
369
|
|
|
352
|
-
// What a unit run started directly holds: one worker's peak for each
|
|
370
|
+
// What a unit run started directly holds: one worker's peak for each core `direct_unit_weight` gives
|
|
371
|
+
// it, vitest's own process counted as one more.
|
|
353
372
|
function direct_unit_memory(): number {
|
|
354
373
|
return unit_memory(direct_unit_weight())
|
|
355
374
|
}
|
|
356
375
|
|
|
376
|
+
// The claim every unit run started directly declares — `josh test:unit`, `josh test:related` and the
|
|
377
|
+
// pre-push hook — declared once so the three cannot drift apart.
|
|
378
|
+
const DIRECT_UNIT_CLAIM = {
|
|
379
|
+
core_weight: direct_unit_weight,
|
|
380
|
+
memory_mb: direct_unit_memory,
|
|
381
|
+
is_unit_claim: true,
|
|
382
|
+
} as const
|
|
383
|
+
|
|
357
384
|
function unit_cap_for(
|
|
358
385
|
checks: ReadonlyArray<GateCheck>,
|
|
359
386
|
available_cores: number,
|
|
@@ -440,6 +467,8 @@ function format_gate_plan(
|
|
|
440
467
|
}
|
|
441
468
|
|
|
442
469
|
const gate_plan = {
|
|
470
|
+
DIRECT_UNIT_CLAIM,
|
|
471
|
+
EXPORTS_LABEL,
|
|
443
472
|
GATE_CHECKS,
|
|
444
473
|
LINT_LABEL,
|
|
445
474
|
MEASURED_CORES,
|
|
@@ -448,10 +477,10 @@ const gate_plan = {
|
|
|
448
477
|
STATIC_CHECKS,
|
|
449
478
|
TYPE_CHECK_LABEL,
|
|
450
479
|
UNIT_LABEL,
|
|
480
|
+
UNIT_TARGET,
|
|
451
481
|
WARNING_CHECKER_LABELS,
|
|
452
482
|
check_memory,
|
|
453
483
|
check_weight,
|
|
454
|
-
direct_unit_memory,
|
|
455
484
|
direct_unit_weight,
|
|
456
485
|
format_gate_plan,
|
|
457
486
|
format_machine,
|
|
@@ -2,6 +2,7 @@ import { GATE_COMMAND } from '#scripts/josh/josh-command-types'
|
|
|
2
2
|
import { josh_verdict } from '#scripts/josh/josh-verdict'
|
|
3
3
|
import { buffered_process, type BufferedProcessResult } from '#scripts/lib/buffered-process'
|
|
4
4
|
import { status_icons } from '#scripts/lib/status-icons'
|
|
5
|
+
import { MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
5
6
|
import { NOT_USED_MARKER, NOTHING_TO_CHECK_MARKER } from '#scripts/test/skip-marker'
|
|
6
7
|
import { test_unit_guard } from '#scripts/test/test-unit-guard'
|
|
7
8
|
import { gate_log } from './gate-log'
|
|
@@ -28,6 +29,21 @@ interface GateStepResult extends BufferedProcessResult {
|
|
|
28
29
|
command: string
|
|
29
30
|
// Set when the check started past the machine-wide budget at the wait cap.
|
|
30
31
|
budget_note?: string | undefined
|
|
32
|
+
// Set when the check was not started because its inputs match the record taken at this time
|
|
33
|
+
// (`check-reuse.ts`).
|
|
34
|
+
reused_at?: string | undefined
|
|
35
|
+
// The CPU milliseconds the check's process tree spent, where the gate could read it (`check-cpu.ts`).
|
|
36
|
+
cpu_ms?: number | undefined
|
|
37
|
+
// The check's place in the core budget, absent on a check that claimed none (`gate-run-steps.ts`).
|
|
38
|
+
claim?: CheckClaim | undefined
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// The width a check asked the core budget for, the width it ran at and how long it waited for it, so
|
|
42
|
+
// whether a unit claim's wait for room paid off is read per run (joshuafolkken/kit#4451).
|
|
43
|
+
interface CheckClaim {
|
|
44
|
+
requested: number
|
|
45
|
+
granted: number
|
|
46
|
+
waited_ms: number
|
|
31
47
|
}
|
|
32
48
|
|
|
33
49
|
function is_gate_step_failed(result: GateStepResult): boolean {
|
|
@@ -98,6 +114,12 @@ function is_unverified_skip(result: GateStepResult): boolean {
|
|
|
98
114
|
)
|
|
99
115
|
}
|
|
100
116
|
|
|
117
|
+
// Whether a passing check said nothing a green record would hide — the condition every record the
|
|
118
|
+
// gate writes is withheld on (`verification-gate.ts` → `record_green_gate`, `check-reuse.ts`).
|
|
119
|
+
function has_nothing_to_say(result: GateStepResult): boolean {
|
|
120
|
+
return !is_unverified_skip(result) && !has_checker_warning(result)
|
|
121
|
+
}
|
|
122
|
+
|
|
101
123
|
// **A check the verdict counts as skipped said nothing but that it checked nothing.** `is_skip_notice`
|
|
102
124
|
// asks whether a check carries a skip notice, which is the right question for printing its body; it is
|
|
103
125
|
// the wrong one for a count, twice over. A check can skip half of
|
|
@@ -138,7 +160,6 @@ function should_print_body(result: GateStepResult, is_verbose: boolean): boolean
|
|
|
138
160
|
// Seconds to one decimal, which is the resolution the answer is read at: the question a gate's
|
|
139
161
|
// timing answers is "which of the four is the long pole", and no check is ever separated from
|
|
140
162
|
// another by less than a tenth of a second.
|
|
141
|
-
const MS_PER_SECOND = 1000
|
|
142
163
|
const SECONDS_DECIMALS = 1
|
|
143
164
|
|
|
144
165
|
function format_seconds(elapsed_ms: number): string {
|
|
@@ -154,8 +175,12 @@ function format_seconds(elapsed_ms: number): string {
|
|
|
154
175
|
// and the log exists precisely to be read when the console's copy has been elided.
|
|
155
176
|
function gate_step_header(result: GateStepResult): string {
|
|
156
177
|
const icon = is_gate_step_failed(result) ? FAIL_ICON : PASS_ICON
|
|
178
|
+
const timing =
|
|
179
|
+
result.reused_at === undefined
|
|
180
|
+
? format_seconds(result.elapsed_ms)
|
|
181
|
+
: `reused — inputs unchanged since it passed at ${result.reused_at}`
|
|
157
182
|
|
|
158
|
-
return `${icon} ${result.label} (pnpm ${result.command}) ${
|
|
183
|
+
return `${icon} ${result.label} (pnpm ${result.command}) ${timing}`
|
|
159
184
|
}
|
|
160
185
|
|
|
161
186
|
function print_gate_step(result: GateStepResult, is_verbose: boolean): void {
|
|
@@ -267,10 +292,10 @@ const gate_report = {
|
|
|
267
292
|
format_budget_notes,
|
|
268
293
|
format_failure_actions,
|
|
269
294
|
has_checker_warning,
|
|
295
|
+
has_nothing_to_say,
|
|
270
296
|
is_gate_step_failed,
|
|
271
|
-
is_unverified_skip,
|
|
272
297
|
report_gate_steps,
|
|
273
298
|
}
|
|
274
299
|
|
|
275
|
-
export type { GateReport, GateStep, GateStepResult }
|
|
300
|
+
export type { CheckClaim, GateReport, GateStep, GateStepResult }
|
|
276
301
|
export { gate_report }
|