@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
|
@@ -48,10 +48,10 @@ function get_configured_max_attempts(): number {
|
|
|
48
48
|
const CHECK_MAX_ATTEMPTS = get_configured_max_attempts()
|
|
49
49
|
const DEFAULT_STABLE_READS = 2
|
|
50
50
|
|
|
51
|
-
// One authoritative gate poll is enough once `pr_checks_watch` has
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
51
|
+
// One authoritative gate poll is enough once `pr_checks_watch` has returned — every check finished, or
|
|
52
|
+
// its budget ran out on a pending read. The two reads exist for the pending→settled window a bare poll
|
|
53
|
+
// opens on, and a returned watch has either spanned that window or seen its pending side, which the
|
|
54
|
+
// poll's first settled read then closes — so a second interval merely re-proves it (#5080).
|
|
55
55
|
const WATCH_CONFIRMED_STABLE_READS = 1
|
|
56
56
|
|
|
57
57
|
// **A read that failed is not a verdict.** The loop reads every ten seconds, so a dropped connection,
|
|
@@ -314,7 +314,7 @@ async function default_fetch_pr_state(
|
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
// **`required_stable_reads` is a parameter, not a constant, so the caller can lower it** — `run_checks`
|
|
317
|
-
// passes `WATCH_CONFIRMED_STABLE_READS` when the watch
|
|
317
|
+
// passes `WATCH_CONFIRMED_STABLE_READS` when the watch returned. It defaults to
|
|
318
318
|
// `DEFAULT_STABLE_READS`, so every caller that names only the branch is exactly where it was.
|
|
319
319
|
// What a caller is shown of each poll it waits on — `followup` reports the checks to the run's event
|
|
320
320
|
// stream from it (joshuafolkken/kit#3770). It decides nothing: the wait reads the same snapshot.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { git_gh_command } from './git-gh-command'
|
|
2
|
+
import { git_pr_checks, type PrStateSnapshot } from './git-pr-checks'
|
|
3
|
+
|
|
4
|
+
// **A merge lands the head the merge gate passed, and nothing pushed after it** (#4036).
|
|
5
|
+
//
|
|
6
|
+
// The gate reads the checks of one commit, and the merge request names that commit as its `sha`. A
|
|
7
|
+
// push between the two moves the head, GitHub answers 409, and the wait starts over on the new head
|
|
8
|
+
// — so the push is merged once its own checks pass, with nobody having to re-run anything. The
|
|
9
|
+
// retries are bounded: a branch that keeps moving under every wait is not one to merge unattended.
|
|
10
|
+
|
|
11
|
+
const MAX_HEAD_MOVES = 3
|
|
12
|
+
const NO_CHECKED_HEAD_MESSAGE =
|
|
13
|
+
'The merge gate answered without the head commit it checked, so there is no commit to bind the merge to'
|
|
14
|
+
const HEAD_MOVED_NOTE =
|
|
15
|
+
'The pull request head moved after its checks passed — waiting on the new head'
|
|
16
|
+
const HEAD_KEPT_MOVING_MESSAGE = `The pull request head moved after its checks passed ${String(MAX_HEAD_MOVES)} times, so it was not merged`
|
|
17
|
+
|
|
18
|
+
type WaitForGreen = () => Promise<PrStateSnapshot>
|
|
19
|
+
|
|
20
|
+
interface CheckedMerge {
|
|
21
|
+
branch_name: string
|
|
22
|
+
// The wait to go back to when the head moved — the caller's own, so a re-wait watches what the
|
|
23
|
+
// first wait watched.
|
|
24
|
+
wait_for_green: WaitForGreen
|
|
25
|
+
// The snapshot the gate already passed. Absent, the merge waits for one first.
|
|
26
|
+
checked?: PrStateSnapshot | undefined
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function checked_head(snapshot: PrStateSnapshot): string {
|
|
30
|
+
if (snapshot.head_sha === undefined) throw new Error(NO_CHECKED_HEAD_MESSAGE)
|
|
31
|
+
|
|
32
|
+
return snapshot.head_sha
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// `false` is "the head moved"; every other failure is the caller's to see.
|
|
36
|
+
async function try_merge(branch_name: string, snapshot: PrStateSnapshot): Promise<boolean> {
|
|
37
|
+
const head_sha = checked_head(snapshot)
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
await git_gh_command.pr_merge(branch_name, head_sha)
|
|
41
|
+
|
|
42
|
+
return true
|
|
43
|
+
} catch (error) {
|
|
44
|
+
if (!git_gh_command.is_head_moved(error)) throw error
|
|
45
|
+
|
|
46
|
+
return false
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function merge_checked(input: CheckedMerge): Promise<void> {
|
|
51
|
+
let snapshot = input.checked ?? (await input.wait_for_green())
|
|
52
|
+
|
|
53
|
+
for (let move = 0; move < MAX_HEAD_MOVES; move += 1) {
|
|
54
|
+
// eslint-disable-next-line no-await-in-loop -- each merge names the head the wait before it passed
|
|
55
|
+
if (await try_merge(input.branch_name, snapshot)) return
|
|
56
|
+
|
|
57
|
+
console.info(HEAD_MOVED_NOTE)
|
|
58
|
+
// eslint-disable-next-line no-await-in-loop -- the new head has to pass before it is merged
|
|
59
|
+
snapshot = await input.wait_for_green()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
throw new Error(HEAD_KEPT_MOVING_MESSAGE)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// The merge gate's default wait, then the bound merge.
|
|
66
|
+
async function merge_when_green(branch_name: string): Promise<void> {
|
|
67
|
+
async function wait_for_green(): Promise<PrStateSnapshot> {
|
|
68
|
+
return await git_pr_checks.wait_for_pr_success(branch_name)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
await merge_checked({ branch_name, wait_for_green })
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const git_pr_merge_checked = {
|
|
75
|
+
merge_checked,
|
|
76
|
+
merge_when_green,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export type { CheckedMerge, WaitForGreen }
|
|
80
|
+
export { git_pr_merge_checked, HEAD_KEPT_MOVING_MESSAGE, MAX_HEAD_MOVES, NO_CHECKED_HEAD_MESSAGE }
|
package/scripts/git/base-tree.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { rmSync } from 'node:fs'
|
|
2
|
+
import { copyFile, mkdir, mkdtemp, rm, symlink } from 'node:fs/promises'
|
|
2
3
|
import { tmpdir } from 'node:os'
|
|
3
4
|
import path from 'node:path'
|
|
4
5
|
import { git_worktree } from './git-worktree'
|
|
@@ -13,6 +14,12 @@ import { git_worktree } from './git-worktree'
|
|
|
13
14
|
|
|
14
15
|
const TREE_NAME = 'tree'
|
|
15
16
|
const NODE_MODULES = 'node_modules'
|
|
17
|
+
const TERMINATE_SIGNAL = 'SIGTERM'
|
|
18
|
+
// 128 + SIGTERM's 15: the code the process would have exited with had no listener caught the signal.
|
|
19
|
+
const TERMINATED_EXIT_CODE = 143
|
|
20
|
+
|
|
21
|
+
// The temp directories of the trees this process holds now.
|
|
22
|
+
const live_parents = new Set<string>()
|
|
16
23
|
|
|
17
24
|
interface BaseTree {
|
|
18
25
|
// The temp directory holding the tree — a file written here sits beside the tree, never in it.
|
|
@@ -43,6 +50,26 @@ async function remove(base_tree: BaseTree): Promise<void> {
|
|
|
43
50
|
}
|
|
44
51
|
}
|
|
45
52
|
|
|
53
|
+
// **A terminated run removes its trees before it exits** (joshuafolkken/kit#4794): `josh run:review
|
|
54
|
+
// --join` stops a `test:pinned` that fell behind, and a `finally` never runs past a signal, so each
|
|
55
|
+
// tree would stay in the temp directory and in `git worktree list`. The removal is synchronous because
|
|
56
|
+
// the process exits right after it; the next `with_tree`'s prune drops the registrations.
|
|
57
|
+
function remove_live_trees(): void {
|
|
58
|
+
for (const parent of live_parents) rmSync(parent, { force: true, recursive: true })
|
|
59
|
+
|
|
60
|
+
process.exit(TERMINATED_EXIT_CODE)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function track(parent: string): void {
|
|
64
|
+
if (live_parents.size === 0) process.on(TERMINATE_SIGNAL, remove_live_trees)
|
|
65
|
+
live_parents.add(parent)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function untrack(parent: string): void {
|
|
69
|
+
live_parents.delete(parent)
|
|
70
|
+
if (live_parents.size === 0) process.off(TERMINATE_SIGNAL, remove_live_trees)
|
|
71
|
+
}
|
|
72
|
+
|
|
46
73
|
async function with_tree<T>(
|
|
47
74
|
prefix: string,
|
|
48
75
|
commit: string,
|
|
@@ -51,16 +78,36 @@ async function with_tree<T>(
|
|
|
51
78
|
const parent = await mkdtemp(path.join(tmpdir(), prefix))
|
|
52
79
|
const base_tree = { parent, tree: path.join(parent, TREE_NAME) }
|
|
53
80
|
|
|
81
|
+
track(parent)
|
|
82
|
+
|
|
54
83
|
try {
|
|
55
84
|
await prepare(base_tree.tree, commit)
|
|
56
85
|
|
|
57
86
|
return await use(base_tree)
|
|
58
87
|
} finally {
|
|
59
88
|
await remove(base_tree)
|
|
89
|
+
untrack(parent)
|
|
60
90
|
}
|
|
61
91
|
}
|
|
62
92
|
|
|
63
|
-
|
|
93
|
+
async function copy_one(tree: string, file: string): Promise<void> {
|
|
94
|
+
const target = path.join(tree, file)
|
|
95
|
+
|
|
96
|
+
await mkdir(path.dirname(target), { recursive: true })
|
|
97
|
+
await copyFile(file, target)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// The caller's working-tree files into the tree at the same relative paths. Each file has its own
|
|
101
|
+
// target, and a recursive `mkdir` tolerates a sibling creating the same parent.
|
|
102
|
+
async function copy_in(tree: string, files: ReadonlyArray<string>): Promise<void> {
|
|
103
|
+
await Promise.all(
|
|
104
|
+
files.map(async (file) => {
|
|
105
|
+
await copy_one(tree, file)
|
|
106
|
+
}),
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const base_tree = { NODE_MODULES, copy_in, with_tree }
|
|
64
111
|
|
|
65
112
|
export type { BaseTree }
|
|
66
113
|
export { base_tree }
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { git_command } from './git-command'
|
|
2
|
+
import { git_diff_reads } from './git-diff-reads'
|
|
2
3
|
import { git_spawn } from './git-spawn'
|
|
3
4
|
|
|
4
5
|
// **The change base as a commit, or nothing — never a ref name**.
|
|
@@ -22,29 +23,22 @@ async function resolved(): Promise<string | undefined> {
|
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
const MERGE_BASE_COMMAND = 'merge-base'
|
|
26
|
-
const MERGE_HEAD = 'MERGE_HEAD'
|
|
27
|
-
const LINE_BREAK = '\n'
|
|
28
|
-
|
|
29
26
|
// Where the side a merge in progress brings in left the default branch — `undefined` where no merge
|
|
30
27
|
// is in progress, which is every ordinary run.
|
|
31
28
|
async function incoming_base(): Promise<string | undefined> {
|
|
32
29
|
try {
|
|
33
30
|
const reference = await git_command.default_branch_reference()
|
|
34
31
|
|
|
35
|
-
return await git_spawn.read([
|
|
32
|
+
return await git_spawn.read([...git_diff_reads.incoming_base_arguments(reference)])
|
|
36
33
|
} catch {
|
|
37
34
|
return undefined
|
|
38
35
|
}
|
|
39
36
|
}
|
|
40
37
|
|
|
41
|
-
// `--independent` drops every commit another one listed reaches, so of two commits on the default
|
|
42
|
-
// branch's history it keeps the later.
|
|
43
38
|
async function later_of(base: string, incoming: string): Promise<string> {
|
|
44
|
-
const kept = await git_spawn.read([
|
|
45
|
-
const [later = base] = kept.split(LINE_BREAK)
|
|
39
|
+
const kept = await git_spawn.read([...git_diff_reads.later_base_arguments(base, incoming)])
|
|
46
40
|
|
|
47
|
-
return
|
|
41
|
+
return git_diff_reads.later_base_of(kept, base)
|
|
48
42
|
}
|
|
49
43
|
|
|
50
44
|
// **The base of the tree, not of `HEAD`, while a merge is in progress.** A merge of the default
|
|
@@ -11,9 +11,10 @@ import { git_command } from './git-command'
|
|
|
11
11
|
// nothing, and listing what was narrowed by — is identical, so it lives here once rather than in
|
|
12
12
|
// each command.
|
|
13
13
|
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
14
|
+
// The narrowed unit run replaces the whole suite in the gate (joshuafolkken/kit#4065), and the
|
|
15
|
+
// narrowed lint the whole-tree lint (joshuafolkken/kit#4085), each with CI's whole run behind it.
|
|
16
|
+
// Either way both fallbacks end at the whole check, and each says which of the two it was: the
|
|
17
|
+
// one thing this must never do is answer "nothing to run" quietly.
|
|
17
18
|
|
|
18
19
|
type ScopeMode = 'all' | 'related'
|
|
19
20
|
|
|
@@ -176,7 +177,7 @@ async function resolve_command_scope(request: ScopeRequest): Promise<ChangedFile
|
|
|
176
177
|
// describing a set the caller never handed over.
|
|
177
178
|
function report_unusable_arguments(
|
|
178
179
|
command_arguments: ReadonlyArray<string>,
|
|
179
|
-
scope: ChangedFileScope,
|
|
180
|
+
scope: Pick<ChangedFileScope, 'files'>,
|
|
180
181
|
label: string,
|
|
181
182
|
): void {
|
|
182
183
|
const narrowed = new Set(scope.files)
|
|
@@ -195,6 +196,7 @@ const changed_file_scope = {
|
|
|
195
196
|
UNREADABLE_REASON,
|
|
196
197
|
describe_scope,
|
|
197
198
|
flags_of,
|
|
199
|
+
format_file_list,
|
|
198
200
|
is_flag,
|
|
199
201
|
read_changed_files,
|
|
200
202
|
report_unusable_arguments,
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { changed_paths } from './changed-paths'
|
|
2
|
+
import { git_diff_reads } from './git-diff-reads'
|
|
3
|
+
import { git_location_environment } from './git-location-environment'
|
|
4
|
+
import { git_spawn_sync, type GitSyncOptions } from './git-spawn-sync'
|
|
5
|
+
|
|
6
|
+
// The synchronous counterpart of `changed_paths.read_changed_paths(false)` — the branch diff since
|
|
7
|
+
// the merge base plus the untracked files — for a `PreToolUse` hook, which cannot await. It spawns the
|
|
8
|
+
// argument lists `git-diff-reads.ts` spawns, so the two readings agree on what "changed" is — through
|
|
9
|
+
// a merge of the default branch in progress too, measured from the base `change_base.resolved_through_merge`
|
|
10
|
+
// answers (joshuafolkken/kit#5309). Any failure is the empty list.
|
|
11
|
+
|
|
12
|
+
// With an explicit `cwd`, the git location variables are cleared so that directory is what git
|
|
13
|
+
// answers for, as in `git_spawn_sync.origin_url`.
|
|
14
|
+
function options_of(cwd: string | undefined): GitSyncOptions {
|
|
15
|
+
if (cwd === undefined) return {}
|
|
16
|
+
|
|
17
|
+
return { cwd, env: git_location_environment.location_free_environment() }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function default_branch_reference(options: GitSyncOptions): string {
|
|
21
|
+
const output = git_spawn_sync.read([...git_diff_reads.DEFAULT_BRANCH_ARGUMENTS], options)
|
|
22
|
+
const default_branch = git_diff_reads.default_branch_of(output)
|
|
23
|
+
const remote_reference = git_diff_reads.remote_reference_of(default_branch)
|
|
24
|
+
const check = git_diff_reads.reference_check_arguments(remote_reference)
|
|
25
|
+
|
|
26
|
+
return git_spawn_sync.read(check, options) === undefined ? default_branch : remote_reference
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// While a merge is in progress, the later of the base of `HEAD` and the base of `MERGE_HEAD`.
|
|
30
|
+
function through_merge(base: string, reference: string, options: GitSyncOptions): string {
|
|
31
|
+
const incoming = git_spawn_sync.read(git_diff_reads.incoming_base_arguments(reference), options)
|
|
32
|
+
|
|
33
|
+
if (incoming === undefined) return base
|
|
34
|
+
|
|
35
|
+
const kept = git_spawn_sync.read(git_diff_reads.later_base_arguments(base, incoming), options)
|
|
36
|
+
|
|
37
|
+
return git_diff_reads.later_base_of(kept, base)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function change_base(options: GitSyncOptions): string {
|
|
41
|
+
const reference = default_branch_reference(options)
|
|
42
|
+
const base = git_spawn_sync.read(git_diff_reads.merge_base_arguments(reference), options)
|
|
43
|
+
|
|
44
|
+
if (base === undefined) return reference
|
|
45
|
+
|
|
46
|
+
return through_merge(base, reference, options)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Repository-root-relative paths, as the asynchronous reading returns them.
|
|
50
|
+
function read_changed_paths(cwd?: string): ReadonlyArray<string> {
|
|
51
|
+
const options = options_of(cwd)
|
|
52
|
+
const tracked = git_spawn_sync.read(
|
|
53
|
+
git_diff_reads.names_since_arguments(change_base(options)),
|
|
54
|
+
options,
|
|
55
|
+
)
|
|
56
|
+
const untracked = git_spawn_sync.read(git_diff_reads.UNTRACKED_ARGUMENTS, options)
|
|
57
|
+
|
|
58
|
+
return [tracked, untracked].flatMap((raw = '') => changed_paths.to_paths(raw))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const changed_paths_sync = { read_changed_paths }
|
|
62
|
+
|
|
63
|
+
export { changed_paths_sync }
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { change_base } from './change-base'
|
|
1
2
|
import { git_command } from './git-command'
|
|
2
3
|
|
|
3
4
|
// The set of changed paths a mechanical, path-driven decision is made from.
|
|
@@ -12,18 +13,49 @@ function to_paths(raw: string): Array<string> {
|
|
|
12
13
|
.filter((line) => line !== '')
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
// joshuafolkken/kit#5307: **the tracked half is measured from the tree's base, through a merge in
|
|
17
|
+
// progress** (`change_base.resolved_through_merge`). A merge of the default branch stopped on a
|
|
18
|
+
// conflict holds the default branch's files in the tree while `HEAD` is still the commit before it,
|
|
19
|
+
// so the diff from `HEAD`'s merge-base read everything the merge brought in as this branch's own — and
|
|
20
|
+
// the ship's `unplanned` precondition refused the re-detach it had itself told the lane to make. A
|
|
21
|
+
// base that cannot be resolved reads as before.
|
|
22
|
+
async function tracked_names(): Promise<string> {
|
|
23
|
+
const base = await change_base.resolved_through_merge()
|
|
24
|
+
|
|
25
|
+
if (base === undefined) return await git_command.diff_main_names()
|
|
26
|
+
|
|
27
|
+
return await git_command.diff_names_since(base)
|
|
28
|
+
}
|
|
29
|
+
|
|
15
30
|
// The branch diff **plus** the untracked files. `git diff` lists neither, so a change that adds a
|
|
16
31
|
// new module and edits one inert file looked like an inert-only change and was handed `low`. The
|
|
17
32
|
// staged form needs no such addition: a file staged for addition is already in the cached diff.
|
|
18
33
|
async function read_changed_paths(is_staged: boolean): Promise<Array<string>> {
|
|
19
34
|
if (is_staged) return to_paths(await git_command.diff_cached_names())
|
|
20
35
|
|
|
21
|
-
const tracked = to_paths(await
|
|
36
|
+
const tracked = to_paths(await tracked_names())
|
|
22
37
|
const untracked = to_paths(await git_command.untracked_names())
|
|
23
38
|
|
|
24
39
|
return [...tracked, ...untracked]
|
|
25
40
|
}
|
|
26
41
|
|
|
27
|
-
|
|
42
|
+
// The same reading against any commit rather than the change base — the change since the tree a
|
|
43
|
+
// test-read map was recorded on.
|
|
44
|
+
async function read_changed_since(commit: string): Promise<Array<string>> {
|
|
45
|
+
const tracked = to_paths(await git_command.diff_names_since(commit))
|
|
46
|
+
const untracked = to_paths(await git_command.untracked_names())
|
|
47
|
+
|
|
48
|
+
return [...new Set([...tracked, ...untracked])]
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// The paths among `paths` the tree of `commit` held. An empty list asks git nothing, since
|
|
52
|
+
// `ls-tree` with no path lists the whole tree.
|
|
53
|
+
async function read_held_at(commit: string, paths: ReadonlyArray<string>): Promise<Array<string>> {
|
|
54
|
+
if (paths.length === 0) return []
|
|
55
|
+
|
|
56
|
+
return to_paths(await git_command.tree_names_at(commit, paths))
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const changed_paths = { read_changed_paths, read_changed_since, read_held_at, to_paths }
|
|
28
60
|
|
|
29
61
|
export { changed_paths }
|
|
@@ -8,6 +8,9 @@ import { git_location_environment, GIT_LOCATION_VARIABLES } from './git-location
|
|
|
8
8
|
// cannot name different directories. It had been run in three places with three timeouts and no
|
|
9
9
|
// memory of the answer, though a `PreToolUse` hook may ask it several times in one call.
|
|
10
10
|
|
|
11
|
+
// josh's own per-clone state inside the common git directory, in one entry of it so nothing josh writes
|
|
12
|
+
// sits at its root beside git's own files.
|
|
13
|
+
const STATE_DIRECTORY = 'josh'
|
|
11
14
|
const OWN_GIT_DIRECTORY = 0
|
|
12
15
|
const COMMON_GIT_DIRECTORY = 1
|
|
13
16
|
// The read runs inside `PreToolUse` hooks, which hold the tool call for as long as it takes;
|
|
@@ -97,6 +100,13 @@ function resolve(cwd: string): string | undefined {
|
|
|
97
100
|
return select_linked(directories(cwd))
|
|
98
101
|
}
|
|
99
102
|
|
|
100
|
-
const git_common_directory = {
|
|
103
|
+
const git_common_directory = {
|
|
104
|
+
STATE_DIRECTORY,
|
|
105
|
+
directories,
|
|
106
|
+
own,
|
|
107
|
+
repository,
|
|
108
|
+
resolve,
|
|
109
|
+
select_linked,
|
|
110
|
+
}
|
|
101
111
|
|
|
102
112
|
export { git_common_directory }
|
|
@@ -31,6 +31,16 @@ async function get_default_branch(): Promise<string> {
|
|
|
31
31
|
|
|
32
32
|
const MERGE_BASE_COMMAND = 'merge-base'
|
|
33
33
|
|
|
34
|
+
// The argument lists below are shared with `changed-paths-sync.ts`, so the hook-side synchronous
|
|
35
|
+
// reading cannot drift from this one.
|
|
36
|
+
function reference_check_arguments(reference: string): ReadonlyArray<string> {
|
|
37
|
+
return ['rev-parse', '--verify', '--quiet', reference]
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function remote_reference_of(default_branch: string): string {
|
|
41
|
+
return `${REFS_REMOTES_ORIGIN_PREFIX}${default_branch}`
|
|
42
|
+
}
|
|
43
|
+
|
|
34
44
|
// **The ref the default branch is actually at**, which is not the same thing as its name.
|
|
35
45
|
// `get_default_branch` returns the bare name, and git resolves that to the
|
|
36
46
|
// *local* `refs/heads/<default>` — a ref nothing in this workflow advances, because merges happen on
|
|
@@ -45,7 +55,7 @@ const MERGE_BASE_COMMAND = 'merge-base'
|
|
|
45
55
|
// `prevent-main-commit.ts` exists to stop.
|
|
46
56
|
async function reference_exists(reference: string): Promise<boolean> {
|
|
47
57
|
try {
|
|
48
|
-
await git_spawn.read([
|
|
58
|
+
await git_spawn.read([...reference_check_arguments(reference)])
|
|
49
59
|
|
|
50
60
|
return true
|
|
51
61
|
} catch {
|
|
@@ -55,11 +65,33 @@ async function reference_exists(reference: string): Promise<boolean> {
|
|
|
55
65
|
|
|
56
66
|
async function default_branch_reference(): Promise<string> {
|
|
57
67
|
const default_branch = await get_default_branch()
|
|
58
|
-
const remote_reference =
|
|
68
|
+
const remote_reference = remote_reference_of(default_branch)
|
|
59
69
|
|
|
60
70
|
return (await reference_exists(remote_reference)) ? remote_reference : default_branch
|
|
61
71
|
}
|
|
62
72
|
|
|
73
|
+
function merge_base_arguments(reference: string): ReadonlyArray<string> {
|
|
74
|
+
return [MERGE_BASE_COMMAND, reference, 'HEAD']
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Where the side a merge in progress brings in left the default branch; git fails it where no merge
|
|
78
|
+
// is in progress. These three are `change_base.resolved_through_merge`'s, shared with the sync reading.
|
|
79
|
+
function incoming_base_arguments(reference: string): ReadonlyArray<string> {
|
|
80
|
+
return [MERGE_BASE_COMMAND, reference, 'MERGE_HEAD']
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// `--independent` drops every commit another one listed reaches, so of two commits on the default
|
|
84
|
+
// branch's history it keeps the later — read from its output by `later_base_of`.
|
|
85
|
+
function later_base_arguments(base: string, incoming: string): ReadonlyArray<string> {
|
|
86
|
+
return [MERGE_BASE_COMMAND, '--independent', base, incoming]
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function later_base_of(output: string | undefined, base: string): string {
|
|
90
|
+
const [later = ''] = output?.split('\n', 1) ?? []
|
|
91
|
+
|
|
92
|
+
return later === '' ? base : later
|
|
93
|
+
}
|
|
94
|
+
|
|
63
95
|
// The commit this branch was cut from — and the base every "changed" reading below measures
|
|
64
96
|
// against, in place of the default branch itself.
|
|
65
97
|
//
|
|
@@ -89,7 +121,7 @@ async function change_base(): Promise<string> {
|
|
|
89
121
|
const default_branch = await default_branch_reference()
|
|
90
122
|
|
|
91
123
|
try {
|
|
92
|
-
return await git_spawn.read([
|
|
124
|
+
return await git_spawn.read([...merge_base_arguments(default_branch)])
|
|
93
125
|
} catch {
|
|
94
126
|
return default_branch
|
|
95
127
|
}
|
|
@@ -151,18 +183,45 @@ async function change_base_commit(): Promise<string> {
|
|
|
151
183
|
return await git_spawn.read(['rev-parse', await change_base()])
|
|
152
184
|
}
|
|
153
185
|
|
|
154
|
-
|
|
155
|
-
|
|
186
|
+
// The working tree against any commit, with the same flags as the branch diff. `josh test:related`
|
|
187
|
+
// reads the change since the commit its test-read map was recorded on, which is not the merge base.
|
|
188
|
+
function names_since_arguments(commit: string): ReadonlyArray<string> {
|
|
189
|
+
return [
|
|
156
190
|
...NO_PATH_QUOTING,
|
|
157
191
|
'diff',
|
|
158
192
|
NAME_ONLY_FLAG,
|
|
159
193
|
NO_RELATIVE_PATHS,
|
|
160
194
|
NO_RENAME_DETECTION,
|
|
161
|
-
|
|
195
|
+
commit,
|
|
162
196
|
'--',
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
async function diff_names_since(commit: string): Promise<string> {
|
|
201
|
+
return await git_spawn.read([...names_since_arguments(commit)])
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Which of `paths` a commit's tree holds. `josh test:related` asks it of the tree its test-read map
|
|
205
|
+
// was recorded on: a file that tree held and no test read is one no test reads, while a file added
|
|
206
|
+
// since is one the map knows nothing about. **Callers pass at least one path** — with none, `ls-tree`
|
|
207
|
+
// lists the whole tree.
|
|
208
|
+
async function tree_names_at(commit: string, paths: ReadonlyArray<string>): Promise<string> {
|
|
209
|
+
return await git_spawn.read([
|
|
210
|
+
...NO_PATH_QUOTING,
|
|
211
|
+
'ls-tree',
|
|
212
|
+
'-r',
|
|
213
|
+
NAME_ONLY_FLAG,
|
|
214
|
+
'--full-tree',
|
|
215
|
+
commit,
|
|
216
|
+
'--',
|
|
217
|
+
...paths,
|
|
163
218
|
])
|
|
164
219
|
}
|
|
165
220
|
|
|
221
|
+
async function diff_main_names(): Promise<string> {
|
|
222
|
+
return await diff_names_since(await change_base())
|
|
223
|
+
}
|
|
224
|
+
|
|
166
225
|
async function diff_cached_names(): Promise<string> {
|
|
167
226
|
return await git_spawn.read([
|
|
168
227
|
...NO_PATH_QUOTING,
|
|
@@ -174,17 +233,17 @@ async function diff_cached_names(): Promise<string> {
|
|
|
174
233
|
])
|
|
175
234
|
}
|
|
176
235
|
|
|
177
|
-
// The
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
async function
|
|
236
|
+
// The diff since `base` as `added\tdeleted\tpath` rows — the same flags as `diff_names_since`, so the
|
|
237
|
+
// size read and the name read agree on what "changed" is. A binary file prints `-` for both counts;
|
|
238
|
+
// the parser above `josh split:assess` reads it treats those as zero changed lines.
|
|
239
|
+
async function diff_numstat_since(base: string): Promise<string> {
|
|
181
240
|
return await git_spawn.read([
|
|
182
241
|
...NO_PATH_QUOTING,
|
|
183
242
|
'diff',
|
|
184
243
|
'--numstat',
|
|
185
244
|
NO_RELATIVE_PATHS,
|
|
186
245
|
NO_RENAME_DETECTION,
|
|
187
|
-
|
|
246
|
+
base,
|
|
188
247
|
'--',
|
|
189
248
|
])
|
|
190
249
|
}
|
|
@@ -203,19 +262,22 @@ async function diff_main_numstat(): Promise<string> {
|
|
|
203
262
|
// pathspec restores the whole tree; the flag restores the root-relative spelling.
|
|
204
263
|
const WHOLE_TREE_PATHSPEC = ':/'
|
|
205
264
|
|
|
265
|
+
const UNTRACKED_ARGUMENTS: ReadonlyArray<string> = [
|
|
266
|
+
...NO_PATH_QUOTING,
|
|
267
|
+
'ls-files',
|
|
268
|
+
'--others',
|
|
269
|
+
'--exclude-standard',
|
|
270
|
+
'--full-name',
|
|
271
|
+
WHOLE_TREE_PATHSPEC,
|
|
272
|
+
]
|
|
273
|
+
|
|
206
274
|
async function untracked_names(): Promise<string> {
|
|
207
|
-
return await git_spawn.read([
|
|
208
|
-
...NO_PATH_QUOTING,
|
|
209
|
-
'ls-files',
|
|
210
|
-
'--others',
|
|
211
|
-
'--exclude-standard',
|
|
212
|
-
'--full-name',
|
|
213
|
-
WHOLE_TREE_PATHSPEC,
|
|
214
|
-
])
|
|
275
|
+
return await git_spawn.read([...UNTRACKED_ARGUMENTS])
|
|
215
276
|
}
|
|
216
277
|
|
|
217
278
|
const git_diff_reads = {
|
|
218
279
|
DEFAULT_BRANCH_ARGUMENTS,
|
|
280
|
+
UNTRACKED_ARGUMENTS,
|
|
219
281
|
change_base,
|
|
220
282
|
change_base_commit,
|
|
221
283
|
default_branch_of,
|
|
@@ -223,8 +285,17 @@ const git_diff_reads = {
|
|
|
223
285
|
diff_cached_names,
|
|
224
286
|
diff_main,
|
|
225
287
|
diff_main_names,
|
|
226
|
-
|
|
288
|
+
diff_numstat_since,
|
|
289
|
+
diff_names_since,
|
|
227
290
|
get_default_branch,
|
|
291
|
+
incoming_base_arguments,
|
|
292
|
+
later_base_arguments,
|
|
293
|
+
later_base_of,
|
|
294
|
+
merge_base_arguments,
|
|
295
|
+
names_since_arguments,
|
|
296
|
+
reference_check_arguments,
|
|
297
|
+
remote_reference_of,
|
|
298
|
+
tree_names_at,
|
|
228
299
|
untracked_names,
|
|
229
300
|
}
|
|
230
301
|
|
package/scripts/git/git-error.ts
CHANGED
|
@@ -25,13 +25,18 @@ function get_cause_message(cause: unknown): string | undefined {
|
|
|
25
25
|
return undefined
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
// The heads of the lines a failed command names the error it ended on, and that error's cause, with —
|
|
29
|
+
// read back by a stopped `josh ship` stage (joshuafolkken/kit#5052).
|
|
30
|
+
const FAILURE_PREFIX = '❌ Error:'
|
|
31
|
+
const DETAILS_PREFIX = '💡 Details:'
|
|
32
|
+
|
|
28
33
|
function display_error_details(cause: unknown): void {
|
|
29
34
|
const cause_message = get_cause_message(cause)
|
|
30
35
|
|
|
31
36
|
if (cause_message === undefined || cause_message.length === 0) return
|
|
32
37
|
|
|
33
38
|
console.error('')
|
|
34
|
-
console.error(
|
|
39
|
+
console.error(DETAILS_PREFIX, cause_message)
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -72,7 +77,7 @@ function display_failure(error: unknown): void {
|
|
|
72
77
|
const error_message = error_text.message_of(error)
|
|
73
78
|
|
|
74
79
|
console.error('')
|
|
75
|
-
console.error(
|
|
80
|
+
console.error(FAILURE_PREFIX, error_message)
|
|
76
81
|
|
|
77
82
|
if (error instanceof Error && error.cause !== undefined) {
|
|
78
83
|
display_error_details(error.cause)
|
|
@@ -118,6 +123,8 @@ function handle(error: unknown): void {
|
|
|
118
123
|
}
|
|
119
124
|
|
|
120
125
|
const git_error = {
|
|
126
|
+
DETAILS_PREFIX,
|
|
127
|
+
FAILURE_PREFIX,
|
|
121
128
|
handle,
|
|
122
129
|
}
|
|
123
130
|
|