@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
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { gate_skip } from '#scripts/gate/gate-skip'
|
|
2
|
-
import { gate_tree } from '#scripts/gate/gate-tree'
|
|
2
|
+
import { gate_tree, type GateTree } from '#scripts/gate/gate-tree'
|
|
3
|
+
import { metrics_totals } from '#scripts/gate/metrics-totals'
|
|
3
4
|
import { scoped_green } from '#scripts/gate/scoped-green'
|
|
4
5
|
import { josh_command, type JoshResult } from '#scripts/josh/josh-run'
|
|
6
|
+
import { run_ship_lap } from './run-ship-lap'
|
|
7
|
+
import { run_ship_synced_scope } from './run-ship-synced-scope'
|
|
5
8
|
|
|
6
9
|
// The scoped pair `josh ship` meets itself rather than stops on, shared by every stage that needs a
|
|
7
10
|
// green record for this tree: the preflight stage at the start, the review rounds, and the gate
|
|
@@ -25,13 +28,30 @@ async function run_phases(phases: ReadonlyArray<Phase>): Promise<JoshResult> {
|
|
|
25
28
|
return last
|
|
26
29
|
}
|
|
27
30
|
|
|
31
|
+
// The tree after the branch's metrics approval is re-recorded (`metrics-totals.ts`): every review fix
|
|
32
|
+
// and the gate stage meet the pair here, so a rewrite lands before any record is written for the tree.
|
|
33
|
+
async function rerecorded_tree(): Promise<GateTree> {
|
|
34
|
+
const tree = await gate_tree.read_gate_tree()
|
|
35
|
+
const is_rerecorded = await metrics_totals.rerecord(process.cwd(), tree.files)
|
|
36
|
+
|
|
37
|
+
return is_rerecorded ? await gate_tree.read_gate_tree() : tree
|
|
38
|
+
}
|
|
39
|
+
|
|
28
40
|
// Only the checks with no green record for this tree run — the same question `review:brief` and the
|
|
29
41
|
// local gate refuse on — so a fresh record costs nothing and a stale or absent one costs a scoped run
|
|
30
42
|
// instead of a stop and a relaunched session. A check that genuinely fails still stops the ship, its
|
|
31
|
-
// output forwarded to the ship log.
|
|
32
|
-
|
|
33
|
-
|
|
43
|
+
// output forwarded to the ship log. A pair stale only because a merge with the default branch moved the
|
|
44
|
+
// base runs nothing when the merge shares nothing with the branch (`run-ship-synced-scope.ts`).
|
|
45
|
+
async function settled_pair(): Promise<JoshResult> {
|
|
46
|
+
const tree = await rerecorded_tree()
|
|
34
47
|
const scripts = scoped_green.missing_scripts(tree.files, tree.base)
|
|
48
|
+
const settled = await run_ship_synced_scope.settle(tree, scripts)
|
|
49
|
+
|
|
50
|
+
if (settled !== undefined) {
|
|
51
|
+
process.stdout.write(`${settled}\n`)
|
|
52
|
+
|
|
53
|
+
return { code: SUCCESS_EXIT_CODE, out: settled }
|
|
54
|
+
}
|
|
35
55
|
|
|
36
56
|
return await run_phases(
|
|
37
57
|
scripts.map(
|
|
@@ -40,13 +60,22 @@ async function scoped_pair(): Promise<JoshResult> {
|
|
|
40
60
|
)
|
|
41
61
|
}
|
|
42
62
|
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
63
|
+
// Timed as one lap in whichever ship stage asked for it (`run-ship-lap.ts`).
|
|
64
|
+
async function scoped_pair(): Promise<JoshResult> {
|
|
65
|
+
return await run_ship_lap.timed(run_ship_lap.STEP.SCOPED_PAIR, settled_pair)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function gate(): Promise<JoshResult> {
|
|
69
|
+
return await run_ship_lap.timed(
|
|
70
|
+
run_ship_lap.STEP.GATE,
|
|
48
71
|
async () => await josh_command.josh_run(['gate'], should_forward_stderr),
|
|
49
|
-
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// The scoped pair and then `josh gate` — the gate stage, and the commit stage's and the followup's gate
|
|
76
|
+
// over a merged tree before their push, so each leaves the record the pre-push hook reuses.
|
|
77
|
+
async function scoped_gate(): Promise<JoshResult> {
|
|
78
|
+
return await run_phases([scoped_pair, gate])
|
|
50
79
|
}
|
|
51
80
|
|
|
52
81
|
// Whether `josh gate` would only reuse this tree's green record: the gate's own reuse test rather than
|
|
@@ -14,7 +14,7 @@ import { z } from 'zod'
|
|
|
14
14
|
// the state, and a stale one is overruled by it. Neither can produce a second commit, push or merge.
|
|
15
15
|
//
|
|
16
16
|
// **The gate is never skipped on the record's word.** It is passed over only once its output — a
|
|
17
|
-
// commit — exists; otherwise it runs, and `josh gate`'s own tree-keyed green record is what makes a
|
|
17
|
+
// pushed commit — exists; otherwise it runs, and `josh gate`'s own tree-keyed green record is what makes a
|
|
18
18
|
// re-run on an unchanged tree a reuse rather than a second execution. No quality gate is folded away.
|
|
19
19
|
|
|
20
20
|
const STAGE = {
|
|
@@ -44,6 +44,11 @@ interface ShipState {
|
|
|
44
44
|
is_committed: boolean
|
|
45
45
|
is_pushed: boolean
|
|
46
46
|
is_merged: boolean
|
|
47
|
+
// The issue changed after the recorded review's brief (`issue-watch-gate.ts`), so the review re-runs
|
|
48
|
+
// even on a committed tree (joshuafolkken/kit#4221).
|
|
49
|
+
is_review_stale?: boolean
|
|
50
|
+
// The tree holds uncommitted work, which the sync stage commits locally before it merges.
|
|
51
|
+
is_dirty?: boolean
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
const RECORD_PREFIX = 'josh-ship-stages-'
|
|
@@ -54,17 +59,29 @@ const WORD_SEPARATOR = ' '
|
|
|
54
59
|
const STARTED_SEPARATOR = ','
|
|
55
60
|
const STARTED_INDEX = 3
|
|
56
61
|
const WORD_COUNT = STARTED_INDEX + 1
|
|
62
|
+
// The reason a stage ran or was skipped follows the words, behind a separator no word holds, so the
|
|
63
|
+
// word readers below read the line as before.
|
|
64
|
+
const REASON_SEPARATOR = ' | '
|
|
57
65
|
|
|
58
66
|
// `started` lists the stages the current attempt started, kept across a supervisor that ended without a
|
|
59
|
-
// stop so its successor's lines still carry them.
|
|
67
|
+
// stop so its successor's lines still carry them. `is_merge_waiting` is set only while `josh followup`
|
|
68
|
+
// itself runs, `is_place_waiting` only while a followup stop waits for a lane place
|
|
69
|
+
// (`run-ship-place.ts`) (joshuafolkken/kit#4466).
|
|
60
70
|
const record_schema = z.object({
|
|
61
71
|
done: z.array(z.string()),
|
|
62
72
|
started: z.array(z.string()).default([]),
|
|
73
|
+
is_merge_waiting: z.boolean().default(false),
|
|
74
|
+
is_place_waiting: z.boolean().default(false),
|
|
63
75
|
})
|
|
64
76
|
|
|
65
77
|
type ShipRecord = z.infer<typeof record_schema>
|
|
66
78
|
|
|
67
|
-
const EMPTY_RECORD: ShipRecord = {
|
|
79
|
+
const EMPTY_RECORD: ShipRecord = {
|
|
80
|
+
done: [],
|
|
81
|
+
started: [],
|
|
82
|
+
is_merge_waiting: false,
|
|
83
|
+
is_place_waiting: false,
|
|
84
|
+
}
|
|
68
85
|
|
|
69
86
|
// Keyed on the repository and the issue: every lane of one repository shares the common git directory,
|
|
70
87
|
// and two issues shipping from two lanes keep two records.
|
|
@@ -109,7 +126,36 @@ function mark_started(target: string, stage: Stage): void {
|
|
|
109
126
|
// A `ship-stop` ends the attempt on the board (`run-board-phase.ts`), so the next attempt lists afresh
|
|
110
127
|
// while the completed stages stay recorded.
|
|
111
128
|
function end_attempt(target: string): void {
|
|
112
|
-
stamp_file.replace_stamp(target, { ...read_record(target), started: [] })
|
|
129
|
+
stamp_file.replace_stamp(target, { ...read_record(target), started: [], is_merge_waiting: false })
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Whether the ship waits on CI, CodeRabbit and the merge alone: its lane then holds no place under the
|
|
133
|
+
// lane limit (`backlog-occupied.ts`). Cleared before any gate the followup stage runs, at a stop, and
|
|
134
|
+
// when a successor supervisor opens the record, so a dead supervisor's flag frees nothing.
|
|
135
|
+
function read_merge_waiting(target: string): boolean {
|
|
136
|
+
return read_record(target).is_merge_waiting
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function mark_merge_waiting(target: string, is_merge_waiting: boolean): void {
|
|
140
|
+
stamp_file.replace_stamp(target, { ...read_record(target), is_merge_waiting })
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Whether a followup stop waits for a place before it relaunches its child (`run-ship-place.ts`).
|
|
144
|
+
function read_place_waiting(target: string): boolean {
|
|
145
|
+
return read_record(target).is_place_waiting
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function mark_place_waiting(target: string, is_place_waiting: boolean): void {
|
|
149
|
+
stamp_file.replace_stamp(target, { ...read_record(target), is_place_waiting })
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// A supervisor that died mid-wait left its wait marked; its successor waits on nothing yet.
|
|
153
|
+
function clear_waits(target: string): void {
|
|
154
|
+
stamp_file.replace_stamp(target, {
|
|
155
|
+
...read_record(target),
|
|
156
|
+
is_merge_waiting: false,
|
|
157
|
+
is_place_waiting: false,
|
|
158
|
+
})
|
|
113
159
|
}
|
|
114
160
|
|
|
115
161
|
// Removed once the report stage completes, so a later ship of the same issue starts from the preflight.
|
|
@@ -123,18 +169,23 @@ function is_shipped(state: ShipState): boolean {
|
|
|
123
169
|
return state.is_committed && state.is_pushed
|
|
124
170
|
}
|
|
125
171
|
|
|
172
|
+
// A lane child's `run:review` commits and pushes before the ship runs (joshuafolkken/kit#4907), so a
|
|
173
|
+
// commit or a push is a stage's output only beside the ship's own record of that stage.
|
|
126
174
|
const DONE_BY: Record<Stage, (done: ReadonlySet<string>, state: ShipState) => boolean> = {
|
|
127
175
|
// The preflight asks what the commit stage would refuse on, so a commit is
|
|
128
|
-
// its output
|
|
129
|
-
[STAGE.PREFLIGHT]: (
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
[STAGE.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
[STAGE.
|
|
176
|
+
// its output; a resumed commit stage still asks `git -y`'s own preflight.
|
|
177
|
+
[STAGE.PREFLIGHT]: (done, state) =>
|
|
178
|
+
state.is_merged || (done.has(STAGE.PREFLIGHT) && state.is_committed),
|
|
179
|
+
// The sync stage commits locally before the review round and the gate, without pushing
|
|
180
|
+
// (`run-ship-sync.ts`), so a commit is neither's output: a pushed one on a clean tree is, as only the
|
|
181
|
+
// commit stage after the gate pushes — unless the issue changed since.
|
|
182
|
+
[STAGE.REVIEW]: (done, state) =>
|
|
183
|
+
state.is_merged ||
|
|
184
|
+
(done.has(STAGE.REVIEW) && is_shipped(state) && state.is_review_stale !== true),
|
|
185
|
+
[STAGE.GATE]: (done, state) => state.is_merged || (done.has(STAGE.GATE) && is_shipped(state)),
|
|
186
|
+
// The merge of the default branch before the gate: once pushed, a default branch that
|
|
187
|
+
// moved is the followup's to merge again.
|
|
188
|
+
[STAGE.SYNC]: (done, state) => state.is_merged || (done.has(STAGE.SYNC) && is_shipped(state)),
|
|
138
189
|
[STAGE.COMMIT]: (done, state) => state.is_merged || (done.has(STAGE.COMMIT) && is_shipped(state)),
|
|
139
190
|
// The round-2 pass reads the pushed fix delta, so its record is honored only
|
|
140
191
|
// while that push still stands — new work pushed on top reruns it.
|
|
@@ -173,9 +224,11 @@ function commit_flags(state: ShipState): ReadonlyArray<string> {
|
|
|
173
224
|
// **The newest line carries the attempt's history**: a fourth word lists every
|
|
174
225
|
// stage the attempt has started, so the one line per issue a stream full of positions keeps still
|
|
175
226
|
// draws the whole track. A line with no started stage keeps the three-word form.
|
|
227
|
+
// The stage is a word rather than a `Stage`: the pre-detach checks, which are not one, are written in
|
|
228
|
+
// the same form (`run-ship-pre-detach-timed.ts`).
|
|
176
229
|
function event_text(
|
|
177
230
|
issue: string,
|
|
178
|
-
stage:
|
|
231
|
+
stage: string,
|
|
179
232
|
phase: Phase,
|
|
180
233
|
started: ReadonlyArray<string> = [],
|
|
181
234
|
): string {
|
|
@@ -187,9 +240,32 @@ function event_text(
|
|
|
187
240
|
return full.join(WORD_SEPARATOR)
|
|
188
241
|
}
|
|
189
242
|
|
|
243
|
+
// A line `event_text` wrote, with why its stage ran or was skipped after it (joshuafolkken/kit#5296).
|
|
244
|
+
function with_reason(text: string, reason: string | undefined): string {
|
|
245
|
+
return reason === undefined ? text : `${text}${REASON_SEPARATOR}${reason}`
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function words_part(text: string): string {
|
|
249
|
+
return text.split(REASON_SEPARATOR, 1)[0] ?? ''
|
|
250
|
+
}
|
|
251
|
+
|
|
190
252
|
// The stages a line says its attempt has started, `undefined` for a three-word line.
|
|
191
253
|
function started_of(text: string): ReadonlyArray<string> | undefined {
|
|
192
|
-
return text.split(WORD_SEPARATOR, WORD_COUNT)[STARTED_INDEX]?.split(STARTED_SEPARATOR)
|
|
254
|
+
return words_part(text).split(WORD_SEPARATOR, WORD_COUNT)[STARTED_INDEX]?.split(STARTED_SEPARATOR)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// The stage word and the phase word of a line `event_text` wrote, `''` where the line has none.
|
|
258
|
+
function words_of(text: string): { stage: string; phase: string } {
|
|
259
|
+
const [, stage = '', phase = ''] = words_part(text).split(WORD_SEPARATOR, WORD_COUNT)
|
|
260
|
+
|
|
261
|
+
return { stage, phase }
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Why the stage ran or was skipped, `undefined` for a line that carries no reason.
|
|
265
|
+
function reason_of(text: string): string | undefined {
|
|
266
|
+
const at = text.indexOf(REASON_SEPARATOR)
|
|
267
|
+
|
|
268
|
+
return at === -1 ? undefined : text.slice(at + REASON_SEPARATOR.length)
|
|
193
269
|
}
|
|
194
270
|
|
|
195
271
|
// A stop on a merge git could not finish is named `conflict` rather than by the stage it happened in,
|
|
@@ -205,16 +281,25 @@ const run_ship_stage = {
|
|
|
205
281
|
PHASE,
|
|
206
282
|
STAGE,
|
|
207
283
|
clear,
|
|
284
|
+
clear_waits,
|
|
208
285
|
commit_flags,
|
|
209
286
|
end_attempt,
|
|
210
287
|
event_text,
|
|
211
288
|
is_done,
|
|
289
|
+
is_shipped,
|
|
212
290
|
mark_done,
|
|
291
|
+
mark_merge_waiting,
|
|
292
|
+
mark_place_waiting,
|
|
213
293
|
mark_started,
|
|
214
294
|
read_done,
|
|
295
|
+
read_merge_waiting,
|
|
296
|
+
read_place_waiting,
|
|
215
297
|
read_started,
|
|
298
|
+
reason_of,
|
|
216
299
|
record_path,
|
|
217
300
|
started_of,
|
|
301
|
+
with_reason,
|
|
302
|
+
words_of,
|
|
218
303
|
stop_reason,
|
|
219
304
|
}
|
|
220
305
|
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { josh_command, type JoshResult } from '#scripts/josh/josh-run'
|
|
2
2
|
import { run_ship } from './run-ship'
|
|
3
|
+
import { run_ship_body_draft } from './run-ship-body-draft'
|
|
4
|
+
import { run_ship_lap } from './run-ship-lap'
|
|
3
5
|
import { run_ship_preflight } from './run-ship-preflight'
|
|
6
|
+
import { run_ship_probe } from './run-ship-probe'
|
|
4
7
|
import { run_ship_review_steps } from './run-ship-review-steps'
|
|
5
8
|
import { run_ship_scoped } from './run-ship-scoped'
|
|
6
9
|
import { run_ship_stage, type ShipState, type Stage } from './run-ship-stage'
|
|
7
|
-
import { run_ship_sync, type StepResult } from './run-ship-sync'
|
|
10
|
+
import { run_ship_sync, type StepResult, type WaitMark } from './run-ship-sync'
|
|
8
11
|
|
|
9
12
|
// The stages `josh ship` runs, in the order a change ships, kept apart from the chaining
|
|
10
13
|
// CLI so the order is read in one place.
|
|
11
14
|
|
|
12
15
|
const should_forward_stderr = true
|
|
16
|
+
const SUCCESS_EXIT_CODE = 0
|
|
13
17
|
|
|
14
18
|
interface ShipArguments {
|
|
15
19
|
title: string
|
|
@@ -20,6 +24,8 @@ interface ShipArguments {
|
|
|
20
24
|
cites: ReadonlyArray<string>
|
|
21
25
|
is_review: boolean
|
|
22
26
|
is_detach: boolean
|
|
27
|
+
// `--unpinned-ok "<reason>"` as given, forwarded to round 1's `run:review` alone; empty when absent.
|
|
28
|
+
unpinned_ok: ReadonlyArray<string>
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
interface Step {
|
|
@@ -54,19 +60,36 @@ async function gate_stage(): Promise<StepResult> {
|
|
|
54
60
|
return { ...result, is_skipped }
|
|
55
61
|
}
|
|
56
62
|
|
|
63
|
+
// The default branch is merged before the gate, so the pull request opens on a branch that is current;
|
|
64
|
+
// a clean merge goes on without waking anyone. A merge after the gate would move the merge base the
|
|
65
|
+
// gate's record pins, so the pre-push hook could not reuse that record. **With `--review` it runs before
|
|
66
|
+
// round 1 too**: the gate round 1 launches then reads the base the commit carries, so a clean round
|
|
67
|
+
// leaves the gate stage a reuse rather than a whole second gate over a moved base (joshuafolkken/kit#4442).
|
|
68
|
+
const SYNC_STEP: Step = {
|
|
69
|
+
stage: STAGE.SYNC,
|
|
70
|
+
header: run_ship.SYNC_HEADER,
|
|
71
|
+
run: async (args, state) =>
|
|
72
|
+
await run_ship_sync.sync_stage(args.number, args.title, state.is_dirty === true),
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// A default branch that moved since the sync stage is merged and gated again before the push
|
|
76
|
+
// (`run_ship_sync.catch_up`, joshuafolkken/kit#4825). A resumed ship with nothing left to push leaves
|
|
77
|
+
// that to the followup, which pushes what it merges; a pushed branch with new work still catches up.
|
|
78
|
+
async function commit_stage(args: ShipArguments, state: ShipState): Promise<StepResult> {
|
|
79
|
+
const stop = run_ship_stage.is_shipped(state) ? undefined : await run_ship_sync.catch_up()
|
|
80
|
+
|
|
81
|
+
if (stop !== undefined) return stop
|
|
82
|
+
|
|
83
|
+
const argv = ['git', '-y', ...run_ship_stage.commit_flags(state), ...args.body, args.title]
|
|
84
|
+
|
|
85
|
+
return await run_ship_lap.timed(run_ship_lap.STEP.COMMIT, async () => await josh(argv))
|
|
86
|
+
}
|
|
87
|
+
|
|
57
88
|
// The gate before the commit, the commit/push/PR before the merge. The gate meets the scoped pair
|
|
58
89
|
// first: a round-1 reviewer may have edited the tree since the preflight, and `josh gate` refuses a tree
|
|
59
90
|
// with no green record. The commit step carries the `--skip-*` flags a resumed ship needs, so an
|
|
60
91
|
// existing commit or push is never made twice.
|
|
61
92
|
const COMMIT_STEPS: ReadonlyArray<Step> = [
|
|
62
|
-
// The default branch is merged again before the commit, so the pull request opens on a branch that
|
|
63
|
-
// is current; a clean merge goes on without waking anyone. It runs before the gate: a merge after it
|
|
64
|
-
// would move the merge base the gate's record pins, so the pre-push hook could not reuse that record.
|
|
65
|
-
{
|
|
66
|
-
stage: STAGE.SYNC,
|
|
67
|
-
header: run_ship.SYNC_HEADER,
|
|
68
|
-
run: async (args) => await run_ship_sync.sync_stage(args.number),
|
|
69
|
-
},
|
|
70
93
|
{
|
|
71
94
|
stage: STAGE.GATE,
|
|
72
95
|
header: run_ship.GATE_HEADER,
|
|
@@ -75,17 +98,40 @@ const COMMIT_STEPS: ReadonlyArray<Step> = [
|
|
|
75
98
|
{
|
|
76
99
|
stage: STAGE.COMMIT,
|
|
77
100
|
header: run_ship.COMMIT_HEADER,
|
|
78
|
-
run: async (args, state) =>
|
|
79
|
-
await josh(['git', '-y', ...run_ship_stage.commit_flags(state), ...args.body, args.title]),
|
|
101
|
+
run: async (args, state) => await commit_stage(args, state),
|
|
80
102
|
},
|
|
81
103
|
]
|
|
82
104
|
|
|
105
|
+
// The followup's merge wait on the stage record, written best-effort as the stages are
|
|
106
|
+
// (`run-ship-cli.ts`): a lost mark only keeps the lane counted (joshuafolkken/kit#4466).
|
|
107
|
+
function wait_mark(target: string | undefined): WaitMark {
|
|
108
|
+
return function mark(is_merge_waiting: boolean): void {
|
|
109
|
+
if (target === undefined) return
|
|
110
|
+
|
|
111
|
+
try {
|
|
112
|
+
run_ship_stage.mark_merge_waiting(target, is_merge_waiting)
|
|
113
|
+
} catch {
|
|
114
|
+
// Best-effort: an unmarked wait holds the lane's place, the safe direction.
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// The merge, then the ship body draft goes with it (`run-ship-body-draft.ts`).
|
|
120
|
+
async function followup_stage(args: ShipArguments): Promise<StepResult> {
|
|
121
|
+
const mark = wait_mark(await run_ship_probe.record_target(args.number))
|
|
122
|
+
const result = await run_ship_sync.followup_stage(args.title, args.notify, mark)
|
|
123
|
+
|
|
124
|
+
if (result.code === SUCCESS_EXIT_CODE) await run_ship_body_draft.remove(args.number)
|
|
125
|
+
|
|
126
|
+
return result
|
|
127
|
+
}
|
|
128
|
+
|
|
83
129
|
// The merge before the report bookkeeping.
|
|
84
130
|
const MERGE_STEPS: ReadonlyArray<Step> = [
|
|
85
131
|
{
|
|
86
132
|
stage: STAGE.FOLLOWUP,
|
|
87
133
|
header: run_ship.FOLLOWUP_HEADER,
|
|
88
|
-
run: async (args) => await
|
|
134
|
+
run: async (args) => await followup_stage(args),
|
|
89
135
|
},
|
|
90
136
|
{
|
|
91
137
|
stage: STAGE.REPORT,
|
|
@@ -95,14 +141,19 @@ const MERGE_STEPS: ReadonlyArray<Step> = [
|
|
|
95
141
|
]
|
|
96
142
|
|
|
97
143
|
// `--review` puts the supervised round-1 review in front of the gate: it launches the gate itself, so
|
|
98
|
-
// the gate stage that follows reuses that tree's green record unless the
|
|
99
|
-
//
|
|
144
|
+
// the gate stage that follows reuses that tree's green record unless the round changed the tree. It
|
|
145
|
+
// also puts the round-2 pass between the commit
|
|
100
146
|
// and the followup, so the PR opens between the rounds and round 2 runs beside CI — a no-op when
|
|
101
147
|
// round 1 left no fix delta.
|
|
102
148
|
const REVIEW_STEP: Step = {
|
|
103
149
|
stage: STAGE.REVIEW,
|
|
104
150
|
header: run_ship.REVIEW_HEADER,
|
|
105
|
-
run: async (args) =>
|
|
151
|
+
run: async (args, state) =>
|
|
152
|
+
await run_ship_review_steps.review_stage(
|
|
153
|
+
args.number,
|
|
154
|
+
state.is_review_stale === true,
|
|
155
|
+
args.unpinned_ok,
|
|
156
|
+
),
|
|
106
157
|
}
|
|
107
158
|
const ROUND_TWO_STEP: Step = {
|
|
108
159
|
stage: STAGE.ROUND_TWO,
|
|
@@ -111,9 +162,9 @@ const ROUND_TWO_STEP: Step = {
|
|
|
111
162
|
}
|
|
112
163
|
|
|
113
164
|
function steps(args: ShipArguments): ReadonlyArray<Step> {
|
|
114
|
-
if (!args.is_review) return [PREFLIGHT_STEP, ...COMMIT_STEPS, ...MERGE_STEPS]
|
|
165
|
+
if (!args.is_review) return [PREFLIGHT_STEP, SYNC_STEP, ...COMMIT_STEPS, ...MERGE_STEPS]
|
|
115
166
|
|
|
116
|
-
return [PREFLIGHT_STEP, REVIEW_STEP, ...COMMIT_STEPS, ROUND_TWO_STEP, ...MERGE_STEPS]
|
|
167
|
+
return [PREFLIGHT_STEP, SYNC_STEP, REVIEW_STEP, ...COMMIT_STEPS, ROUND_TWO_STEP, ...MERGE_STEPS]
|
|
117
168
|
}
|
|
118
169
|
|
|
119
170
|
const run_ship_steps = { PREFLIGHT_STEP, steps }
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { api_auth } from '#scripts/agent/api-auth'
|
|
2
|
+
import { UNREADABLE_COMMENTS_STOP } from '#scripts/gh/git-gh-comments-unreadable'
|
|
3
|
+
import { gh_retry } from '#scripts/gh/git-gh-retry'
|
|
4
|
+
import { NO_CHECKS_MESSAGE } from '#scripts/gh/git-pr-checks-watch'
|
|
5
|
+
import { git_error } from '#scripts/git/git-error'
|
|
6
|
+
import type { StopRecord } from '#scripts/lane/lane-ledger-schema'
|
|
7
|
+
import { run_ship_review, type StopFinding } from './run-ship-review'
|
|
8
|
+
import { run_ship_stage, type Stage } from './run-ship-stage'
|
|
9
|
+
|
|
10
|
+
// Why a `josh ship` stage stopped, beside the stage it stopped at: a review that found something, a
|
|
11
|
+
// merge git could not finish, a check that went red, or the infrastructure — a rate limit, a check list
|
|
12
|
+
// GitHub did not return, a network blip — that a re-run clears (joshuafolkken/kit#3998).
|
|
13
|
+
//
|
|
14
|
+
// **Only a stage whose output is the tooling's own is read for infrastructure**: a gate's or a review's
|
|
15
|
+
// output carries test titles and findings, which may name a rate limit without being one, and their
|
|
16
|
+
// stops are the quality gate's own verdict — never retried, never relabelled.
|
|
17
|
+
//
|
|
18
|
+
// **A review round names its own cause**: the step of the round that stopped tags its result — a red
|
|
19
|
+
// join or scoped pair `check`, a reviewer that did not finish `infra`, a refused attestation `attest` —
|
|
20
|
+
// so only a stop on a recorded finding counts as one (joshuafolkken/kit#4431). An untagged review stop
|
|
21
|
+
// stays a finding.
|
|
22
|
+
|
|
23
|
+
const CAUSE = {
|
|
24
|
+
FINDING: 'finding',
|
|
25
|
+
INFRA: 'infra',
|
|
26
|
+
CONFLICT: 'conflict',
|
|
27
|
+
CHECK: 'check',
|
|
28
|
+
AUTH: 'auth',
|
|
29
|
+
ATTEST: 'attest',
|
|
30
|
+
} as const
|
|
31
|
+
|
|
32
|
+
type Cause = (typeof CAUSE)[keyof typeof CAUSE]
|
|
33
|
+
|
|
34
|
+
const { STAGE } = run_ship_stage
|
|
35
|
+
const REVIEW_STAGES: ReadonlySet<Stage> = new Set([STAGE.REVIEW, STAGE.ROUND_TWO])
|
|
36
|
+
const INFRA_STAGES: ReadonlySet<Stage> = new Set([
|
|
37
|
+
STAGE.SYNC,
|
|
38
|
+
STAGE.COMMIT,
|
|
39
|
+
STAGE.FOLLOWUP,
|
|
40
|
+
STAGE.REPORT,
|
|
41
|
+
])
|
|
42
|
+
const INFRA_PATTERNS: ReadonlyArray<RegExp> = [
|
|
43
|
+
/rate limit/iu,
|
|
44
|
+
new RegExp(NO_CHECKS_MESSAGE, 'u'),
|
|
45
|
+
new RegExp(UNREADABLE_COMMENTS_STOP, 'u'),
|
|
46
|
+
/\b(?:ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|ENOTFOUND)\b/u,
|
|
47
|
+
/socket hang up/iu,
|
|
48
|
+
/could not resolve host/iu,
|
|
49
|
+
/\bHTTP 50[234]\b/u,
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
function is_infra(output: string): boolean {
|
|
53
|
+
return INFRA_PATTERNS.some((pattern) => pattern.test(output))
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// A reviewer that could not authenticate is no finding: the review steps put `AUTH_FAILURE_NOTE` at the
|
|
57
|
+
// head of a stop line (`isolated reviewer failed: <note>` or `<note>`), and only there is it read — a
|
|
58
|
+
// finding that quotes the note mid-line stays a finding (joshuafolkken/kit#4216).
|
|
59
|
+
const AUTH_LINE = new RegExp(
|
|
60
|
+
`^(?:isolated reviewer failed: (?:the broker answered a failure: )?)?${api_auth.AUTH_FAILURE_NOTE}`,
|
|
61
|
+
'mu',
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
function is_review(stage: Stage): boolean {
|
|
65
|
+
return REVIEW_STAGES.has(stage)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function review_cause(output: string, tagged: Cause = CAUSE.FINDING): Cause {
|
|
69
|
+
return AUTH_LINE.test(output) ? CAUSE.AUTH : tagged
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// What a stopped stage handed back: its output, the paths a stopped merge left unmerged, the kinds
|
|
73
|
+
// of the preconditions a stopped preflight found unmet, and the cause a review round tagged its stop with.
|
|
74
|
+
interface StoppedOutput {
|
|
75
|
+
body: string
|
|
76
|
+
// The standard output alone, read for the infrastructure in place of the body when present.
|
|
77
|
+
out?: string
|
|
78
|
+
conflicts?: ReadonlyArray<string>
|
|
79
|
+
preconditions?: ReadonlyArray<string>
|
|
80
|
+
cause?: Cause
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const NO_OUTPUT: StoppedOutput = { body: '' }
|
|
84
|
+
|
|
85
|
+
// A failed stage's body also carries its stderr, where a poll warns of a transient rate limit it then
|
|
86
|
+
// recovered from — so the infrastructure is read on the standard output alone wherever the stage kept it.
|
|
87
|
+
function infra_text({ body, out = body }: StoppedOutput): string {
|
|
88
|
+
return out
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const FAILURE_LINE = new RegExp(`^${git_error.FAILURE_PREFIX} `, 'gmu')
|
|
92
|
+
const REPORTED_LINE = new RegExp(
|
|
93
|
+
`^(?:${git_error.FAILURE_PREFIX}|${git_error.DETAILS_PREFIX}) (?<message>.*)$`,
|
|
94
|
+
'gmu',
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
// The failure the stage ended on — the last `❌ Error:` line — and the cause logged under it: a caller
|
|
98
|
+
// that wraps a spent request (a merge whose read-back failed too, a timed-out exec) ends on its own
|
|
99
|
+
// message, with the request's beneath.
|
|
100
|
+
function final_failures(body: string): ReadonlyArray<string> {
|
|
101
|
+
const last = [...body.matchAll(FAILURE_LINE)].at(-1)
|
|
102
|
+
if (last === undefined) return []
|
|
103
|
+
|
|
104
|
+
return [...body.slice(last.index).matchAll(REPORTED_LINE)].map(
|
|
105
|
+
({ groups }) => groups?.['message'] ?? '',
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// A gh request transient to its last attempt notes so on stderr — gh's own transient verdict, never a
|
|
110
|
+
// second list of its errors (joshuafolkken/kit#5052). A caller may catch it and stop later on a red
|
|
111
|
+
// check, so the note counts only when it names the failure the stage ended on, or that failure's cause.
|
|
112
|
+
function is_spent_stop(body: string): boolean {
|
|
113
|
+
return final_failures(body).some((message) => body.includes(gh_retry.spent_note(message)))
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function is_infra_stop(failed: StoppedOutput): boolean {
|
|
117
|
+
return is_infra(infra_text(failed)) || is_spent_stop(failed.body)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// A gate an infrastructure stage ran itself tags its red as a check: its output is test output, where
|
|
121
|
+
// a title naming a rate limit is no outage (joshuafolkken/kit#4825).
|
|
122
|
+
function stage_cause(stage: Stage, failed: StoppedOutput): Cause {
|
|
123
|
+
if (failed.cause === CAUSE.CHECK || !INFRA_STAGES.has(stage)) return CAUSE.CHECK
|
|
124
|
+
|
|
125
|
+
return is_infra_stop(failed) ? CAUSE.INFRA : CAUSE.CHECK
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function cause_of(stage: Stage, failed: StoppedOutput): Cause {
|
|
129
|
+
const { body, conflicts, cause } = failed
|
|
130
|
+
const reason = run_ship_stage.stop_reason(stage, conflicts)
|
|
131
|
+
|
|
132
|
+
if (reason === run_ship_stage.CONFLICT) return CAUSE.CONFLICT
|
|
133
|
+
if (is_review(stage)) return review_cause(body, cause)
|
|
134
|
+
|
|
135
|
+
return stage_cause(stage, failed)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Whether a finding decided the stop — false on any other stop, and on a review stop no finding decided
|
|
139
|
+
// (a red gate at the join, a reviewer that never answered).
|
|
140
|
+
function is_finding_stop(stage: Stage, cause: Cause): boolean {
|
|
141
|
+
return is_review(stage) && cause === CAUSE.FINDING
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// The kind of every blocking finding a review stop's output lists.
|
|
145
|
+
function findings_of(stage: Stage, cause: Cause, body: string): ReadonlyArray<string> {
|
|
146
|
+
return is_finding_stop(stage, cause) ? run_ship_review.blocking_kinds(body) : []
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Each finding that decided a review stop, whole, for the durable stop log (joshuafolkken/kit#4519).
|
|
150
|
+
function details_of(stage: Stage, failed: StoppedOutput = NO_OUTPUT): ReadonlyArray<StopFinding> {
|
|
151
|
+
if (!is_finding_stop(stage, cause_of(stage, failed))) return []
|
|
152
|
+
|
|
153
|
+
return run_ship_review.blocking_details(failed.body)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// The lane ledger's record of one stop — the stage, its cause and, for a preflight, which
|
|
157
|
+
// preconditions were unmet, so `lane:stats` counts the one worth meeting before a ship
|
|
158
|
+
// (joshuafolkken/kit#4166); for a review, which kinds of finding stopped it (joshuafolkken/kit#4426).
|
|
159
|
+
function record_of(issue: number, stage: Stage, failed: StoppedOutput = NO_OUTPUT): StopRecord {
|
|
160
|
+
const { body, conflicts, preconditions } = failed
|
|
161
|
+
const cause = cause_of(stage, failed)
|
|
162
|
+
const findings = findings_of(stage, cause, body)
|
|
163
|
+
|
|
164
|
+
return {
|
|
165
|
+
issue,
|
|
166
|
+
reason: run_ship_stage.stop_reason(stage, conflicts),
|
|
167
|
+
cause,
|
|
168
|
+
...(preconditions !== undefined && { preconditions: [...preconditions] }),
|
|
169
|
+
...(findings.length > 0 && { findings: [...findings] }),
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const run_ship_stop_cause = { CAUSE, cause_of, details_of, is_review, record_of }
|
|
174
|
+
|
|
175
|
+
export type { Cause }
|
|
176
|
+
export { run_ship_stop_cause }
|