@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
|
@@ -31,17 +31,32 @@ interface RecordRequest {
|
|
|
31
31
|
now: Date
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
34
|
+
interface Refusal {
|
|
35
|
+
verdict: typeof REFUSED_VERDICT
|
|
36
|
+
reason: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface Assessment {
|
|
40
|
+
verdict: typeof FILE_VERDICT | typeof LEDGER_VERDICT
|
|
41
|
+
earlier: ReadonlyArray<string>
|
|
42
|
+
line: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
type AssessResult = Refusal | Assessment
|
|
46
|
+
|
|
47
|
+
type RecordResult = Refusal | (Assessment & { target: string })
|
|
48
|
+
|
|
49
|
+
// Prettier's markdown pass collapses a whitespace run in a list item (only the whitespace is settled
|
|
50
|
+
// here; emphasis markers in a field are not), so a line keeping one (vitest's
|
|
51
|
+
// padded test names, joshuafolkken/kit#5303) fails a later gate's style check on a file it never wrote.
|
|
52
|
+
// Collapsed before the grammar check, so whitespace around a `|` that Prettier would turn into a
|
|
53
|
+
// separator is refused like a `|` already standing as one.
|
|
54
|
+
function collapsed(field: string): string {
|
|
55
|
+
return field.replaceAll(/\s+/gu, ' ').trim()
|
|
56
|
+
}
|
|
42
57
|
|
|
43
58
|
function entry_line(entry: ObservationEntry, date: string): string {
|
|
44
|
-
return `- k:${entry.slug} | ${entry.depth} | ${date} | ${entry.where} | ${entry.what}`
|
|
59
|
+
return `- k:${entry.slug} | ${entry.depth} | ${date} | ${collapsed(entry.where)} | ${collapsed(entry.what)}`
|
|
45
60
|
}
|
|
46
61
|
|
|
47
62
|
function refusal_of(entry: ObservationEntry, line: string): string | undefined {
|
|
@@ -58,8 +73,9 @@ function sightings(ledger: string | undefined, slug: string): ReadonlyArray<stri
|
|
|
58
73
|
return (ledger ?? '').split('\n').filter((line) => line.startsWith(prefix))
|
|
59
74
|
}
|
|
60
75
|
|
|
61
|
-
// The
|
|
62
|
-
|
|
76
|
+
// The line, the earlier sightings and the verdict, with nothing appended — for a caller that keeps the
|
|
77
|
+
// line somewhere other than the tree (`followup-failed-tests.ts` posts it on the issue).
|
|
78
|
+
async function assess(request: RecordRequest): Promise<AssessResult> {
|
|
63
79
|
const date = observation_ledger_home.ledger_date(request.now)
|
|
64
80
|
const line = entry_line(request.entry, date)
|
|
65
81
|
const reason = refusal_of(request.entry, line)
|
|
@@ -70,22 +86,32 @@ async function record(request: RecordRequest): Promise<RecordResult> {
|
|
|
70
86
|
await observation_ledger_home.read(request.checkout),
|
|
71
87
|
request.entry.slug,
|
|
72
88
|
)
|
|
73
|
-
const
|
|
89
|
+
const verdict = earlier.length === PROMOTING_COUNT ? FILE_VERDICT : LEDGER_VERDICT
|
|
74
90
|
|
|
75
|
-
|
|
91
|
+
return { verdict, earlier, line }
|
|
92
|
+
}
|
|
76
93
|
|
|
77
|
-
|
|
94
|
+
// The count is read before the append, so it is the sightings *before* this one.
|
|
95
|
+
async function record(request: RecordRequest): Promise<RecordResult> {
|
|
96
|
+
const assessment = await assess(request)
|
|
97
|
+
|
|
98
|
+
if (assessment.verdict === REFUSED_VERDICT) return assessment
|
|
99
|
+
|
|
100
|
+
const target = await observation_ledger_home.writer_path(request.now, request.checkout)
|
|
101
|
+
|
|
102
|
+
await observation_ledger_home.append(target, [assessment.line])
|
|
78
103
|
|
|
79
|
-
return {
|
|
104
|
+
return { ...assessment, target }
|
|
80
105
|
}
|
|
81
106
|
|
|
82
|
-
const observation_record = { record }
|
|
107
|
+
const observation_record = { assess, record }
|
|
83
108
|
|
|
84
109
|
export {
|
|
85
110
|
FILE_VERDICT,
|
|
86
111
|
LEDGER_VERDICT,
|
|
87
112
|
observation_record,
|
|
88
113
|
REFUSED_VERDICT,
|
|
114
|
+
type AssessResult,
|
|
89
115
|
type ObservationEntry,
|
|
90
116
|
type RecordResult,
|
|
91
117
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import type { OpenPull } from '#scripts/gh/git-gh-pr-auto-merge'
|
|
3
3
|
import { git_pr_checks } from '#scripts/gh/git-pr-checks'
|
|
4
|
+
import { git_pr_merge_checked } from '#scripts/gh/git-pr-merge-checked'
|
|
5
|
+
import { git_command } from '#scripts/git/git-command'
|
|
4
6
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
5
7
|
import { error_text } from '#scripts/lib/error-message'
|
|
6
8
|
|
|
@@ -21,9 +23,10 @@ const MERGE_FAILED_REASON =
|
|
|
21
23
|
// **Best-effort, and the answer says which wait to use.** GraphQL — the only way to enable auto-merge
|
|
22
24
|
// — can be refused in a cloud session, and that loses the safety net rather
|
|
23
25
|
// than the flush: the in-process wait-and-merge still runs, exactly as before auto-merge existed.
|
|
26
|
+
// The checkout's head is the commit this flush just pushed, so that is the one auto-merge may land.
|
|
24
27
|
async function request_auto_merge(branch_name: string): Promise<boolean> {
|
|
25
28
|
try {
|
|
26
|
-
await git_gh_command.pr_enable_auto_merge(branch_name)
|
|
29
|
+
await git_gh_command.pr_enable_auto_merge(branch_name, await git_command.head_commit())
|
|
27
30
|
|
|
28
31
|
return true
|
|
29
32
|
} catch (error) {
|
|
@@ -37,8 +40,7 @@ async function request_auto_merge(branch_name: string): Promise<boolean> {
|
|
|
37
40
|
// the merge gate's wait would run out its budget on a pull request that is already merged.
|
|
38
41
|
async function wait_for_landing(branch_name: string, is_auto_merge: boolean): Promise<void> {
|
|
39
42
|
if (!is_auto_merge) {
|
|
40
|
-
await
|
|
41
|
-
await git_gh_command.pr_merge(branch_name)
|
|
43
|
+
await git_pr_merge_checked.merge_when_green(branch_name)
|
|
42
44
|
|
|
43
45
|
return
|
|
44
46
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import { git_command } from '#scripts/git/git-command'
|
|
3
3
|
import { main_sync } from '#scripts/git/main-sync'
|
|
4
|
+
import { IGNORE_FOR_RELEASE_LABEL } from '#scripts/issue/issue-labels'
|
|
4
5
|
import { error_text } from '#scripts/lib/error-message'
|
|
6
|
+
import { review_comment_carry } from '#scripts/review/review-comment-carry'
|
|
5
7
|
import { observation_ledger, OBSERVATION_LEDGER_DIRECTORY } from './observation-ledger'
|
|
6
8
|
import type { BrokenLine } from './observation-ledger-line'
|
|
7
9
|
import { observation_ledger_prepare } from './observation-ledger-prepare'
|
|
@@ -11,7 +13,8 @@ import { observations_flush_landing } from './observations-flush-landing'
|
|
|
11
13
|
// a lane's included — commits its appended lines with its own pull request (`scripts/git/
|
|
12
14
|
// git-staging.ts`), and `pnpm josh followup` commits a
|
|
13
15
|
// line appended after that commit before it merges, so what is left here is a line written on the
|
|
14
|
-
// default branch outside any issue's run — the date-named file `observation-ledger-home.ts` resolves
|
|
16
|
+
// default branch outside any issue's run — the date-named file `observation-ledger-home.ts` resolves —
|
|
17
|
+
// and the closed issues' comment rounds no lane carries (`flush` below).
|
|
15
18
|
//
|
|
16
19
|
// **The shape is `scripts/release/release-publish.ts`'s, deliberately.** Both open a pull request of
|
|
17
20
|
// their own over one path, wait on the same required checks every other pull request waits on, and
|
|
@@ -258,7 +261,11 @@ async function push_and_open(branch_name: string): Promise<string> {
|
|
|
258
261
|
try {
|
|
259
262
|
await git_command.push()
|
|
260
263
|
|
|
261
|
-
return await git_gh_command.pr_create(
|
|
264
|
+
return await git_gh_command.pr_create(
|
|
265
|
+
COMMIT_MESSAGE,
|
|
266
|
+
pull_request_body(),
|
|
267
|
+
IGNORE_FOR_RELEASE_LABEL,
|
|
268
|
+
)
|
|
262
269
|
} catch (error) {
|
|
263
270
|
throw new Error(stranded_branch_message(branch_name, error_text.message_of(error)), {
|
|
264
271
|
cause: error,
|
|
@@ -388,6 +395,27 @@ async function prepare_ledger(): Promise<void> {
|
|
|
388
395
|
if (broken.length > 0) throw new Error(broken_lines_message(broken))
|
|
389
396
|
}
|
|
390
397
|
|
|
398
|
+
// The checkout made safe and caught up: a carried file an earlier flush left uncommitted is discarded
|
|
399
|
+
// first, since it would make git refuse the fast-forward (`review-comment-carry.ts`).
|
|
400
|
+
async function ready_default_branch(status_output: string): Promise<string> {
|
|
401
|
+
const default_branch = await refuse_unsafe_flush(status_output)
|
|
402
|
+
|
|
403
|
+
review_comment_carry.discard_uncommitted(status_output, process.cwd())
|
|
404
|
+
await catch_up_default(default_branch)
|
|
405
|
+
|
|
406
|
+
return default_branch
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// **The closed issues' comment rounds are carried only once a flush will go ahead**
|
|
410
|
+
// (joshuafolkken/kit#5326): a lane child leaves them to this flush, so the carried files ride its pull
|
|
411
|
+
// request, and the status is read again so a carry alone is a change to flush. A carry left behind by
|
|
412
|
+
// a later stop is discarded by the next flush's `ready_default_branch`.
|
|
413
|
+
async function carried_status(): Promise<string> {
|
|
414
|
+
await review_comment_carry.carry_reported(process.cwd())
|
|
415
|
+
|
|
416
|
+
return await git_command.status()
|
|
417
|
+
}
|
|
418
|
+
|
|
391
419
|
// **Nothing pulls in front of the branch, and that is deliberate.** The ledger is dirty by
|
|
392
420
|
// definition at this point, so `git pull --ff-only` aborts on it in exactly the case a pull would
|
|
393
421
|
// have been for — an upstream flush that already advanced the ledger — and reports a failure about
|
|
@@ -396,19 +424,19 @@ async function prepare_ledger(): Promise<void> {
|
|
|
396
424
|
// only where git can do it without touching the ledger: a default branch
|
|
397
425
|
// that predates another merged flush still stops here — before a branch is cut — rather than opening
|
|
398
426
|
// a pull request that cannot merge. An earlier flush pull request still open is checked for the same
|
|
399
|
-
// reason: a branch cut beside it conflicts with it at the ledger's tail.
|
|
427
|
+
// reason: a branch cut beside it conflicts with it at the ledger's tail. So the order is: ready the
|
|
428
|
+
// default branch, defer to an open flush, carry, then check, prepare and land.
|
|
400
429
|
async function flush(now: Date): Promise<string> {
|
|
401
|
-
const
|
|
402
|
-
const default_branch = await refuse_unsafe_flush(status_output)
|
|
403
|
-
|
|
404
|
-
if (!has_ledger_change(status_output)) return CLEAN_MESSAGE
|
|
405
|
-
|
|
406
|
-
await prepare_ledger()
|
|
430
|
+
const default_branch = await ready_default_branch(await git_command.status())
|
|
407
431
|
|
|
408
432
|
const deferred = await observations_flush_landing.refuse_open_flush(BRANCH_PREFIX)
|
|
409
433
|
if (deferred !== undefined) return deferred
|
|
410
434
|
|
|
411
|
-
await
|
|
435
|
+
const status_output = await carried_status()
|
|
436
|
+
|
|
437
|
+
if (!has_ledger_change(status_output)) return CLEAN_MESSAGE
|
|
438
|
+
|
|
439
|
+
await prepare_ledger()
|
|
412
440
|
|
|
413
441
|
const branch_name = branch_name_for(timestamp_for(now))
|
|
414
442
|
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
import { readFileSync, writeFileSync } from 'node:fs'
|
|
12
12
|
import { fileURLToPath } from 'node:url'
|
|
13
13
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
14
|
+
import { file_reader } from '#scripts/lib/read-file'
|
|
14
15
|
import { overrides_snapshot_schema } from '#scripts/lib/schemas'
|
|
16
|
+
import { development_engines_verdict } from '#scripts/version/development-engines-verdict'
|
|
15
17
|
import { overrides_files } from './overrides-files'
|
|
16
18
|
import { overrides_check, type OverridesDiff } from './overrides-logic'
|
|
17
19
|
|
|
@@ -19,17 +21,13 @@ const ARGV_OFFSET = 2
|
|
|
19
21
|
const OPTIONS = { save: { type: 'boolean', default: false } } as const
|
|
20
22
|
const USAGE = cli_flags.usage_line(['--save'], 'overrides')
|
|
21
23
|
|
|
22
|
-
function is_file_not_found(error: unknown): boolean {
|
|
23
|
-
return error instanceof Error && 'code' in error && error.code === 'ENOENT'
|
|
24
|
-
}
|
|
25
|
-
|
|
26
24
|
function load_snapshot(): Record<string, string> {
|
|
27
25
|
try {
|
|
28
26
|
return overrides_snapshot_schema.parse(
|
|
29
27
|
JSON.parse(readFileSync(overrides_check.SNAPSHOT_PATH, 'utf8')),
|
|
30
28
|
)
|
|
31
29
|
} catch (error) {
|
|
32
|
-
if (
|
|
30
|
+
if (file_reader.is_absent(error)) {
|
|
33
31
|
console.error(`✖ Snapshot not found: ${overrides_check.SNAPSHOT_PATH}`)
|
|
34
32
|
console.error(' Run with --save first to create a snapshot.')
|
|
35
33
|
} else {
|
|
@@ -74,6 +72,13 @@ function run_overrides_check(should_save: boolean): void {
|
|
|
74
72
|
console.info(`✔ overrides unchanged (${summary}).`)
|
|
75
73
|
}
|
|
76
74
|
|
|
75
|
+
// The `devEngines` verdict rides on every check, whatever the overrides answer, so it is printed
|
|
76
|
+
// before the overrides comparison can exit.
|
|
77
|
+
function run_check(should_save: boolean): void {
|
|
78
|
+
development_engines_verdict.report()
|
|
79
|
+
run_overrides_check(should_save)
|
|
80
|
+
}
|
|
81
|
+
|
|
77
82
|
// A line nobody can read is refused before the snapshot is read or written: a misspelled `--save` that
|
|
78
83
|
// fell through would compare against the record the caller meant to replace.
|
|
79
84
|
function refuse_usage(): never {
|
|
@@ -86,7 +91,7 @@ function main(argv: ReadonlyArray<string>): void {
|
|
|
86
91
|
const values = cli_flags.values_of(argv, OPTIONS)
|
|
87
92
|
|
|
88
93
|
if (values === undefined) refuse_usage()
|
|
89
|
-
|
|
94
|
+
run_check(values.save)
|
|
90
95
|
}
|
|
91
96
|
|
|
92
97
|
if (process.argv[1] === fileURLToPath(import.meta.url)) main(process.argv.slice(ARGV_OFFSET))
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
1
2
|
import { file_reader } from '#scripts/lib/read-file'
|
|
2
3
|
import { overrides_check, type OverridesSources } from './overrides-logic'
|
|
3
4
|
|
|
@@ -5,7 +6,7 @@ import { overrides_check, type OverridesSources } from './overrides-logic'
|
|
|
5
6
|
// field at all — so a missing file reads as an empty document rather than aborting the check.
|
|
6
7
|
function read_current_sources(): OverridesSources {
|
|
7
8
|
return {
|
|
8
|
-
package_json: file_reader.read_file_or_empty(
|
|
9
|
+
package_json: file_reader.read_file_or_empty(PACKAGE_JSON),
|
|
9
10
|
workspace_yaml: file_reader.read_file_or_empty(overrides_check.WORKSPACE_YAML_PATH),
|
|
10
11
|
}
|
|
11
12
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
1
2
|
import { yaml_document } from '#scripts/lib/yaml-document'
|
|
2
3
|
import {
|
|
3
4
|
package_pnpm_schema,
|
|
@@ -68,7 +69,6 @@ function compare(snapshot: Record<string, string>, current: Record<string, strin
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
const SNAPSHOT_PATH = '.overrides-snapshot.json'
|
|
71
|
-
const PACKAGE_JSON_PATH = 'package.json'
|
|
72
72
|
const WORKSPACE_YAML_PATH = 'pnpm-workspace.yaml'
|
|
73
73
|
|
|
74
74
|
// Both source files are optional and either may be absent from a project entirely, so an empty
|
|
@@ -109,14 +109,12 @@ function count_entry(path: string, overrides: Record<string, string>): Array<str
|
|
|
109
109
|
function describe_sources(sources: OverridesSources): string {
|
|
110
110
|
const counts = [
|
|
111
111
|
...count_entry(WORKSPACE_YAML_PATH, read_overrides_from_workspace(sources.workspace_yaml)),
|
|
112
|
-
...count_entry(
|
|
112
|
+
...count_entry(PACKAGE_JSON, read_overrides_from_package(sources.package_json)).map(
|
|
113
113
|
(entry) => `${entry} (ignored by pnpm)`,
|
|
114
114
|
),
|
|
115
115
|
]
|
|
116
116
|
|
|
117
|
-
if (counts.length === 0) {
|
|
118
|
-
return `no overrides found in ${WORKSPACE_YAML_PATH} or ${PACKAGE_JSON_PATH}`
|
|
119
|
-
}
|
|
117
|
+
if (counts.length === 0) return `no overrides found in ${WORKSPACE_YAML_PATH} or ${PACKAGE_JSON}`
|
|
120
118
|
|
|
121
119
|
return counts.join(', ')
|
|
122
120
|
}
|
|
@@ -202,7 +200,6 @@ const overrides_check = {
|
|
|
202
200
|
list_excluded_package_names,
|
|
203
201
|
read_dependency_names,
|
|
204
202
|
build_update_command,
|
|
205
|
-
PACKAGE_JSON_PATH,
|
|
206
203
|
WORKSPACE_YAML_PATH,
|
|
207
204
|
SNAPSHOT_PATH,
|
|
208
205
|
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { mkdtempSync,
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
|
|
2
2
|
import os from 'node:os'
|
|
3
3
|
import path from 'node:path'
|
|
4
|
+
import { PACKAGE_JSON, package_manifest } from '#scripts/lib/package-manifest'
|
|
4
5
|
import { execaSync } from 'execa'
|
|
6
|
+
import { z } from 'zod'
|
|
5
7
|
|
|
6
8
|
const root = process.cwd()
|
|
7
9
|
const scratch = mkdtempSync(path.join(os.tmpdir(), 'kit-eslint-install-'))
|
|
8
|
-
const PACKAGE_JSON = 'package.json'
|
|
9
10
|
const IGNORE_SCRIPTS = '--ignore-scripts'
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
11
|
+
const version_map_schema = z.record(z.string(), z.string())
|
|
12
|
+
const manifest = package_manifest.read_manifest(
|
|
13
|
+
root,
|
|
14
|
+
z.object({ devDependencies: version_map_schema, peerDependencies: version_map_schema }),
|
|
15
|
+
)
|
|
14
16
|
const eslint_peers = Object.keys(manifest.peerDependencies).filter((name) =>
|
|
15
17
|
/^(?:@eslint\/|@stylistic\/|eslint|globals$|typescript)/u.test(name),
|
|
16
18
|
)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
2
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
2
3
|
import { poll } from '#scripts/lib/poll'
|
|
3
4
|
import { GH_API_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
4
5
|
import { with_page_size } from '#scripts/version/version-remote'
|
|
@@ -63,13 +64,7 @@ function fetch_published_versions(versions_endpoint: string): Array<string> | un
|
|
|
63
64
|
})
|
|
64
65
|
if (stdout === undefined) return undefined
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
const parsed: unknown = JSON.parse(stdout)
|
|
68
|
-
|
|
69
|
-
return Array.isArray(parsed) ? parsed.filter((name) => typeof name === 'string') : undefined
|
|
70
|
-
} catch {
|
|
71
|
-
return undefined
|
|
72
|
-
}
|
|
67
|
+
return json_value.parse_array(stdout)?.filter((name) => typeof name === 'string')
|
|
73
68
|
}
|
|
74
69
|
|
|
75
70
|
// The knobs the wait exposes. Every one of them is injectable so the unit suite can drive the loop
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
3
|
import type { RepoMap } from '#scripts/discovery/repo-map-logic'
|
|
4
|
-
import {
|
|
4
|
+
import { package_manifest } from '#scripts/lib/package-manifest'
|
|
5
5
|
import { z } from 'zod'
|
|
6
6
|
|
|
7
7
|
// Deciding which repositories a published release should be carried into.
|
|
@@ -16,7 +16,6 @@ import { z } from 'zod'
|
|
|
16
16
|
// us rather than a roster, so a new consumer needs no edit here — and it covers a consumer that is
|
|
17
17
|
// not a published package at all, which a list of downstream package names cannot.
|
|
18
18
|
|
|
19
|
-
const MANIFEST_NAME = 'package.json'
|
|
20
19
|
const NODE_MODULES = 'node_modules'
|
|
21
20
|
|
|
22
21
|
// Why a candidate is not going to be processed, or that it is. `not_selected` is the one state set
|
|
@@ -64,14 +63,7 @@ function has_checkout(repository_path: string): boolean {
|
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
function read_manifest(repository_path: string): Manifest | undefined {
|
|
67
|
-
|
|
68
|
-
if (!existsSync(manifest_path)) return undefined
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
return json_value.parse_with(readFileSync(manifest_path, 'utf8'), manifest_schema)
|
|
72
|
-
} catch {
|
|
73
|
-
return undefined
|
|
74
|
-
}
|
|
66
|
+
return package_manifest.read_manifest_if_valid(repository_path, manifest_schema)
|
|
75
67
|
}
|
|
76
68
|
|
|
77
69
|
// The range a manifest declares for `package_name`, from either dependency field. Undefined when the
|
|
@@ -95,7 +87,7 @@ function installed_version(repository_path: string, package_name: string): strin
|
|
|
95
87
|
// the parent directory), which is an ordinary "not downstream" rather than damage.
|
|
96
88
|
function classify_manifest_absence(repository_path: string): TargetState | undefined {
|
|
97
89
|
if (!has_checkout(repository_path)) return 'missing_checkout'
|
|
98
|
-
if (!existsSync(
|
|
90
|
+
if (!existsSync(package_manifest.manifest_path(repository_path))) return 'not_downstream'
|
|
99
91
|
|
|
100
92
|
return undefined
|
|
101
93
|
}
|
|
@@ -12,10 +12,12 @@ import { file_reader } from '#scripts/lib/read-file'
|
|
|
12
12
|
const FROM_PATTERN = /\bfrom[ \t]*['"]([^'"\n]+)['"]/gu
|
|
13
13
|
// A side-effect import carries no `from`: `import './register'`.
|
|
14
14
|
const BARE_IMPORT_PATTERN = /^[ \t]*import[ \t]+['"]([^'"\n]+)['"]/gmu
|
|
15
|
-
// The subpath
|
|
16
|
-
// to `
|
|
17
|
-
const
|
|
18
|
-
|
|
15
|
+
// The subpath imports this package uses for cross-directory imports; `#scripts/x` resolves to
|
|
16
|
+
// `scripts/x` and `#tools/x` to `tools/x`. Relative specifiers resolve against the importer's directory.
|
|
17
|
+
const SUBPATH_DIRECTORIES: ReadonlyArray<readonly [string, string]> = [
|
|
18
|
+
['#scripts/', 'scripts'],
|
|
19
|
+
['#tools/', 'tools'],
|
|
20
|
+
]
|
|
19
21
|
const RELATIVE_PREFIX = '.'
|
|
20
22
|
// A specifier omits its extension, so a resolved base is tried against the real files these suffixes
|
|
21
23
|
// would produce — a sibling module or a directory's index, in the order a resolver would.
|
|
@@ -38,9 +40,9 @@ function parse_imports(source: string): ReadonlyArray<string> {
|
|
|
38
40
|
// Where a local specifier points before extension resolution, or `undefined` for a package import
|
|
39
41
|
// this graph does not follow.
|
|
40
42
|
function specifier_base(spec: string, importer: string, root: string): string | undefined {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
const subpath = SUBPATH_DIRECTORIES.find(([prefix]) => spec.startsWith(prefix))
|
|
44
|
+
|
|
45
|
+
if (subpath !== undefined) return path.resolve(root, subpath[1], spec.slice(subpath[0].length))
|
|
44
46
|
|
|
45
47
|
if (spec.startsWith(RELATIVE_PREFIX)) return path.resolve(path.dirname(importer), spec)
|
|
46
48
|
|
|
@@ -96,20 +96,31 @@ async function is_release_lost(source: RunSource, tag: string): Promise<boolean>
|
|
|
96
96
|
return run.status === 'completed' && (await is_release_over(source, tag))
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
+
async function publish_run(
|
|
100
|
+
source: RunSource,
|
|
101
|
+
workflow: string,
|
|
102
|
+
tag: string,
|
|
103
|
+
): Promise<Run | undefined> {
|
|
104
|
+
return await find_run(source, workflow, `Publish ${tag}`)
|
|
105
|
+
}
|
|
106
|
+
|
|
99
107
|
// A run not listed yet is pending too: the announcement that starts this release also starts the
|
|
100
108
|
// publication, so the release can ask before GitHub has queued that run.
|
|
109
|
+
function run_state(run: Run | undefined): PollState {
|
|
110
|
+
if (run?.status !== 'completed') return 'pending'
|
|
111
|
+
|
|
112
|
+
return run.conclusion === 'success' ? 'ready' : 'failed'
|
|
113
|
+
}
|
|
114
|
+
|
|
101
115
|
async function publication_state(
|
|
102
116
|
source: RunSource,
|
|
103
117
|
workflow: string,
|
|
104
118
|
tag: string,
|
|
105
119
|
): Promise<PollState> {
|
|
106
|
-
|
|
107
|
-
if (run?.status !== 'completed') return 'pending'
|
|
108
|
-
|
|
109
|
-
return run.conclusion === 'success' ? 'ready' : 'failed'
|
|
120
|
+
return run_state(await publish_run(source, workflow, tag))
|
|
110
121
|
}
|
|
111
122
|
|
|
112
|
-
const github_release_runs = { is_release_lost, publication_state }
|
|
123
|
+
const github_release_runs = { is_release_lost, publication_state, publish_run, run_state }
|
|
113
124
|
|
|
114
|
-
export type { PollState, RunSource }
|
|
125
|
+
export type { PollState, Run, RunSource }
|
|
115
126
|
export { github_release_runs }
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { git_spawn } from '#scripts/git/git-spawn'
|
|
2
|
+
|
|
3
|
+
// **A release drops every `josh metrics` approval the default branch holds** (joshuafolkken/kit#4187).
|
|
4
|
+
// The release work tree is cut from `origin/<default>`, so every file it holds under the directory
|
|
5
|
+
// belongs to an issue that already merged. Such a file is read only to tell it apart from a branch's
|
|
6
|
+
// new one (`tools/metrics/metrics-ratchet.ts` → `fresh_approvals`): a branch's merge-base still holds
|
|
7
|
+
// it unchanged, and a branch that merges the release in loses it on both sides, so removing it changes
|
|
8
|
+
// no verdict. `--ignore-unmatch` makes a repository with no approvals a no-op.
|
|
9
|
+
|
|
10
|
+
const APPROVAL_DIRECTORY = '.josh/metrics-accepted'
|
|
11
|
+
const APPROVAL_PREFIX = `${APPROVAL_DIRECTORY}/`
|
|
12
|
+
|
|
13
|
+
async function prune(): Promise<void> {
|
|
14
|
+
await git_spawn.read(['rm', '-r', '-q', '--ignore-unmatch', '--', APPROVAL_DIRECTORY])
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// A repository-relative path under the approval directory.
|
|
18
|
+
function is_approval(file: string): boolean {
|
|
19
|
+
return file.startsWith(APPROVAL_PREFIX)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const release_approval_prune = { APPROVAL_DIRECTORY, is_approval, prune }
|
|
23
|
+
|
|
24
|
+
export { release_approval_prune }
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { git_command } from '#scripts/git/git-command'
|
|
2
2
|
import { json_value } from '#scripts/lib/json-value'
|
|
3
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
3
4
|
import { package_with_version_schema } from '#scripts/lib/schemas'
|
|
4
|
-
import { version_targets } from '#scripts/version/version-targets'
|
|
5
5
|
import { release_plan, type ReleasePlan, type VersionedCommit } from './release-plan'
|
|
6
6
|
|
|
7
7
|
// Reading main's history for the two numbers a release is made of: where the version last changed,
|
|
8
8
|
// and how many merges have landed since.
|
|
9
9
|
|
|
10
|
-
const { PACKAGE_JSON } = version_targets
|
|
11
|
-
|
|
12
10
|
// How far back the search for "the commit that last changed the version" goes, counted in commits
|
|
13
11
|
// that touched `package.json`. Once children stop bumping that file still
|
|
14
12
|
// changes for every dependency update, so the base can sit several entries down — but a repository
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import path from 'node:path'
|
|
2
1
|
import { git_gh_api_path } from '#scripts/gh/git-gh-api-path'
|
|
3
2
|
import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
4
|
-
import {
|
|
3
|
+
import { PACKAGE_JSON, package_manifest } from '#scripts/lib/package-manifest'
|
|
5
4
|
import { poll } from '#scripts/lib/poll'
|
|
6
|
-
import { file_reader } from '#scripts/lib/read-file'
|
|
7
5
|
import { npm_registry } from '#scripts/version/npm-registry'
|
|
8
|
-
import { version_targets } from '#scripts/version/version-targets'
|
|
9
6
|
import { z } from 'zod'
|
|
7
|
+
import { release_publish_run } from './release-publish-run'
|
|
10
8
|
import { release_tag } from './release-tag'
|
|
11
9
|
|
|
12
10
|
// The stage lines `pnpm josh release` prints, and the two stages it waits for after the tag.
|
|
@@ -15,9 +13,9 @@ import { release_tag } from './release-tag'
|
|
|
15
13
|
// `publish-npm` puts the version on npm and `create-release` opens the GitHub Release once the
|
|
16
14
|
// publishing jobs pass. Stopping at the tag would call the release published ahead of both, so the
|
|
17
15
|
// command waits for each, prints one line per stage reached, and prints the completion line only
|
|
18
|
-
// when every stage has — a stage that times out
|
|
16
|
+
// when every stage has — a stage that times out, or whose Publish run fails first, is named with ❌
|
|
17
|
+
// and the run exits non-zero.
|
|
19
18
|
|
|
20
|
-
const { PACKAGE_JSON } = version_targets
|
|
21
19
|
const SUCCESS_EXIT_CODE = 0
|
|
22
20
|
const FAILURE_EXIT_CODE = 1
|
|
23
21
|
const NPM_TIMEOUT_ENV = 'JOSH_RELEASE_NPM_TIMEOUT_SECONDS'
|
|
@@ -35,16 +33,10 @@ const manifest_schema = z.looseObject({
|
|
|
35
33
|
})
|
|
36
34
|
|
|
37
35
|
type ReleaseManifest = { is_private: true } | { is_private: false; name: string }
|
|
38
|
-
|
|
39
|
-
function parse_manifest(cwd: string): z.infer<typeof manifest_schema> {
|
|
40
|
-
const raw = file_reader.read_optional(path.join(cwd, PACKAGE_JSON)) ?? ''
|
|
41
|
-
const parsed = manifest_schema.safeParse(json_value.parse_or_undefined(raw))
|
|
42
|
-
|
|
43
|
-
return parsed.success ? parsed.data : {}
|
|
44
|
-
}
|
|
36
|
+
type NpmState = { kind: 'published' } | { kind: 'failed'; run_id: number } | { kind: 'pending' }
|
|
45
37
|
|
|
46
38
|
function read_manifest(cwd: string): ReleaseManifest {
|
|
47
|
-
const manifest =
|
|
39
|
+
const manifest = package_manifest.read_manifest_if_valid(cwd, manifest_schema) ?? {}
|
|
48
40
|
|
|
49
41
|
if (manifest.private === true) return { is_private: true }
|
|
50
42
|
if (manifest.name === undefined) throw new Error(`${PACKAGE_JSON} in ${cwd} has no package name.`)
|
|
@@ -85,6 +77,18 @@ function missed_npm_line(package_name: string, version: string): string {
|
|
|
85
77
|
].join('\n')
|
|
86
78
|
}
|
|
87
79
|
|
|
80
|
+
// The run's own failure is known, so the line names the run rather than a stage that never came. It
|
|
81
|
+
// claims no more than the last registry read: a job beside `publish-npm` can fail the run after npm
|
|
82
|
+
// took the version.
|
|
83
|
+
function failed_publish_line(version: string, run_id: number): string {
|
|
84
|
+
const tag = release_tag.tag_name(version)
|
|
85
|
+
|
|
86
|
+
return [
|
|
87
|
+
`❌ Publish ${tag} failed (run ${String(run_id)}) before npm listed ${tag}.`,
|
|
88
|
+
` Inspect it with: gh run view ${String(run_id)} --log-failed`,
|
|
89
|
+
].join('\n')
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
function missed_release_line(version: string): string {
|
|
89
93
|
return [
|
|
90
94
|
`❌ No GitHub Release: ${release_tag.tag_name(version)} never got one.`,
|
|
@@ -109,18 +113,34 @@ async function read_release_url(version: string): Promise<string | undefined> {
|
|
|
109
113
|
}
|
|
110
114
|
}
|
|
111
115
|
|
|
116
|
+
function npm_outcome_line(package_name: string, version: string, state: NpmState): string {
|
|
117
|
+
if (state.kind === 'published') return npm_line(package_name, version)
|
|
118
|
+
if (state.kind === 'failed') return failed_publish_line(version, state.run_id)
|
|
119
|
+
|
|
120
|
+
return missed_npm_line(package_name, version)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async function npm_state(package_name: string, version: string): Promise<NpmState> {
|
|
124
|
+
if (npm_registry.has_public_version(package_name, version)) return { kind: 'published' }
|
|
125
|
+
const run_id = await release_publish_run.failed_run_id(version)
|
|
126
|
+
|
|
127
|
+
return run_id === undefined ? { kind: 'pending' } : { kind: 'failed', run_id }
|
|
128
|
+
}
|
|
129
|
+
|
|
112
130
|
async function wait_for_npm(manifest: ReleaseManifest, version: string): Promise<boolean> {
|
|
113
131
|
if (manifest.is_private) return true
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
release_tag.poll_options_for(NPM_TIMEOUT_ENV),
|
|
117
|
-
)
|
|
132
|
+
// `poll_until` answers only whether it stopped, so the state the last read found is kept here.
|
|
133
|
+
const seen: { state: NpmState } = { state: { kind: 'pending' } }
|
|
118
134
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
135
|
+
await poll.poll_until(async () => {
|
|
136
|
+
seen.state = await npm_state(manifest.name, version)
|
|
137
|
+
|
|
138
|
+
return seen.state.kind !== 'pending'
|
|
139
|
+
}, release_tag.poll_options_for(NPM_TIMEOUT_ENV))
|
|
140
|
+
|
|
141
|
+
console.info(npm_outcome_line(manifest.name, version, seen.state))
|
|
122
142
|
|
|
123
|
-
return
|
|
143
|
+
return seen.state.kind === 'published'
|
|
124
144
|
}
|
|
125
145
|
|
|
126
146
|
async function wait_for_github_release(version: string): Promise<boolean> {
|