@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,17 +1,33 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
|
+
import { check_reuse, type CheckRecords } from '#scripts/gate/check-reuse'
|
|
4
|
+
import { gate_labels } from '#scripts/gate/gate-labels'
|
|
5
|
+
import type { GateStepResult } from '#scripts/gate/gate-report'
|
|
6
|
+
import { gate_tree } from '#scripts/gate/gate-tree'
|
|
7
|
+
import { metrics_totals } from '#scripts/gate/metrics-totals'
|
|
3
8
|
import { project_checks } from '#scripts/gate/project-checks'
|
|
9
|
+
import { structural_checks } from '#scripts/gate/structural-checks'
|
|
4
10
|
import { type_check_step } from '#scripts/gate/type-check-step'
|
|
5
11
|
import type { JoshResult } from '#scripts/josh/josh-run'
|
|
12
|
+
import { lane_ledger_write } from '#scripts/lane/lane-ledger-write'
|
|
6
13
|
import { buffered_process, type BufferedProcessResult } from '#scripts/lib/buffered-process'
|
|
7
14
|
|
|
8
|
-
// The fast checks a detached `josh ship` runs in the agent's own turn, after the preflight
|
|
9
|
-
// the hand-off: a type error in a file the related-only checks never touched, an export nothing reads,
|
|
15
|
+
// The fast checks a detached `josh ship` runs in the agent's own turn, after the preflight (whatever it
|
|
16
|
+
// answered) and before the hand-off: a type error in a file the related-only checks never touched, an export nothing reads,
|
|
10
17
|
// an unknown word, or a guard test (a SKILL.md pointer, a byte budget, the command list, a source with
|
|
11
18
|
// no colocated test, a bare issue citation) that only the full suite runs, would otherwise first
|
|
12
19
|
// surface after the detach and cost a relaunched session. They answer in seconds, so the same session
|
|
13
|
-
// fixes what they find and ships again.
|
|
14
|
-
//
|
|
20
|
+
// fixes what they find and ships again. A `--review` ship adds `test:pinned`, which probes the hunks
|
|
21
|
+
// its verdict cache does not hold (`run-ship-pre-detach-pinned.ts`).
|
|
22
|
+
//
|
|
23
|
+
// **Nothing moves out of the gate, and the gate reuses what these already answered**: a check that is
|
|
24
|
+
// the gate's own check passed silently here is recorded with the gate's per-check record
|
|
25
|
+
// (`check-reuse.ts`), so the supervised gate stage reuses it while its declared inputs have not moved
|
|
26
|
+
// and runs it again when they have. The record, its judgment and its inputs are the gate's; only the
|
|
27
|
+
// type check (`check`) and `exports:unused` (`exports`) carry a gate label. The rest stay unrecorded:
|
|
28
|
+
// `cspell:dot` declares no inputs and runs every gate (`verification-inputs.ts`), the guard tests are a
|
|
29
|
+
// slice of the unit suite and do not answer for the gate's `test:unit`, and the metrics totals leave
|
|
30
|
+
// out the durations the gate's `metrics` holds.
|
|
15
31
|
//
|
|
16
32
|
// joshuafolkken/kit#3924: nine of ten ship gate stops were `exports:unused`, `cspell:dot` or a
|
|
17
33
|
// repository-wide guard test failing on the child's own code — none a check `test:related` selects,
|
|
@@ -21,80 +37,175 @@ import { buffered_process, type BufferedProcessResult } from '#scripts/lib/buffe
|
|
|
21
37
|
// present run, and a consumer meets the static checks alone.
|
|
22
38
|
//
|
|
23
39
|
// In kit the metrics ratchet's totals join them: a feature grows a total almost every time, and here
|
|
24
|
-
// the session that grew the total writes the reason itself rather than a relaunched one
|
|
40
|
+
// the session that grew the total writes the reason itself rather than a relaunched one —
|
|
41
|
+
// `josh lint:related` has already reported the growth in the loop (`metrics-totals.ts`), so this is
|
|
42
|
+
// the stop for a growth that notice did not settle. A total the branch's approval already names is
|
|
43
|
+
// re-recorded at its growth here rather than stopped (`--rerecord`, joshuafolkken/kit#4716). The
|
|
25
44
|
// durations are left out: they read the gate ledger, stale before the detach, so they stay with the
|
|
26
45
|
// supervised gate.
|
|
27
46
|
|
|
47
|
+
interface PreDetachCheck {
|
|
48
|
+
list: ReadonlyArray<string>
|
|
49
|
+
// The gate check this one answers for, absent where it answers for none.
|
|
50
|
+
label?: string | undefined
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
interface PreDetachRun {
|
|
54
|
+
check: PreDetachCheck
|
|
55
|
+
result: BufferedProcessResult
|
|
56
|
+
elapsed_ms: number
|
|
57
|
+
}
|
|
58
|
+
|
|
28
59
|
const SUCCESS_EXIT_CODE = 0
|
|
29
60
|
const FAILURE_EXIT_CODE = 1
|
|
30
61
|
const SECTION_SEPARATOR = '\n\n'
|
|
31
62
|
const PASSED = 'pre-detach checks passed'
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
['josh', '
|
|
63
|
+
const UNPINNED = 'unpinned'
|
|
64
|
+
const { METRICS_RERECORD_COMMAND } = metrics_totals
|
|
65
|
+
const STATIC_CHECKS: ReadonlyArray<PreDetachCheck> = [
|
|
66
|
+
{ list: ['josh', 'exports:unused'], label: gate_labels.EXPORTS_LABEL },
|
|
67
|
+
{ list: ['josh', 'cspell:dot'] },
|
|
36
68
|
]
|
|
37
69
|
const GUARD_TEST_TARGETS: ReadonlyArray<string> = [
|
|
38
70
|
'scripts/document',
|
|
39
71
|
'scripts/claude',
|
|
40
72
|
'scripts/rules',
|
|
41
73
|
'scripts/josh/josh-command-map.test.ts',
|
|
42
|
-
|
|
43
|
-
'
|
|
44
|
-
'scripts/test/pure-files.test.ts',
|
|
74
|
+
...structural_checks.STRUCTURAL_GUARD_TARGETS,
|
|
75
|
+
'tools/test/pure-files.test.ts',
|
|
45
76
|
]
|
|
46
|
-
|
|
47
|
-
// `scripts/claude` of shell helpers, say — and a filter that matches nothing would stop every ship.
|
|
48
|
-
const GUARD_TEST_COMMAND: ReadonlyArray<string> = ['josh', 'test:unit', '--passWithNoTests']
|
|
77
|
+
const { GUARD_TEST_COMMAND, failure_prefix, failure_section } = structural_checks
|
|
49
78
|
|
|
50
79
|
function present_targets(directory: string): ReadonlyArray<string> {
|
|
51
80
|
return GUARD_TEST_TARGETS.filter((target) => existsSync(path.join(directory, target)))
|
|
52
81
|
}
|
|
53
82
|
|
|
54
|
-
function guard_tests(directory: string): Array<
|
|
83
|
+
function guard_tests(directory: string): Array<PreDetachCheck> {
|
|
55
84
|
const targets = present_targets(directory)
|
|
56
85
|
|
|
57
|
-
return targets.length === 0 ? [] : [[...GUARD_TEST_COMMAND, ...targets]]
|
|
86
|
+
return targets.length === 0 ? [] : [{ list: [...GUARD_TEST_COMMAND, ...targets] }]
|
|
58
87
|
}
|
|
59
88
|
|
|
60
89
|
// The same kit-only rule as the gate's `is_kit_only` step: a consumer's kit has no `josh metrics`.
|
|
61
|
-
function kit_only(directory: string): Array<
|
|
62
|
-
return project_checks.is_kit_repository(directory) ? [
|
|
90
|
+
function kit_only(directory: string): Array<PreDetachCheck> {
|
|
91
|
+
return project_checks.is_kit_repository(directory) ? [{ list: METRICS_RERECORD_COMMAND }] : []
|
|
63
92
|
}
|
|
64
93
|
|
|
65
|
-
async function command_lists(directory: string): Promise<Array<
|
|
94
|
+
async function command_lists(directory: string): Promise<Array<PreDetachCheck>> {
|
|
66
95
|
const type_check = await type_check_step.resolve_type_check_args(directory)
|
|
67
96
|
|
|
68
|
-
return [
|
|
97
|
+
return [
|
|
98
|
+
{ list: type_check, label: gate_labels.TYPE_CHECK_LABEL },
|
|
99
|
+
...STATIC_CHECKS,
|
|
100
|
+
...guard_tests(directory),
|
|
101
|
+
]
|
|
69
102
|
}
|
|
70
103
|
|
|
71
|
-
async function run_in(
|
|
72
|
-
|
|
73
|
-
list:
|
|
74
|
-
|
|
75
|
-
return
|
|
104
|
+
async function run_in(directory: string, check: PreDetachCheck): Promise<PreDetachRun> {
|
|
105
|
+
const started = performance.now()
|
|
106
|
+
const result = await buffered_process.run_buffered_process(check.list, { cwd: directory })
|
|
107
|
+
|
|
108
|
+
return { check, result, elapsed_ms: performance.now() - started }
|
|
76
109
|
}
|
|
77
110
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
111
|
+
interface GateRun extends PreDetachRun {
|
|
112
|
+
check: { list: ReadonlyArray<string>; label: string }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function is_gate_run(run: PreDetachRun): run is GateRun {
|
|
116
|
+
return run.check.label !== undefined
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function gate_results(runs: ReadonlyArray<PreDetachRun>): Array<GateStepResult> {
|
|
120
|
+
return runs
|
|
121
|
+
.filter((run) => is_gate_run(run))
|
|
122
|
+
.map(({ check, result, elapsed_ms }) => {
|
|
123
|
+
return { ...result, label: check.label, command: check.list.join(' '), elapsed_ms }
|
|
124
|
+
})
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function verdict(runs: ReadonlyArray<PreDetachRun>): JoshResult {
|
|
128
|
+
const failed = runs.filter(({ result }) => buffered_process.is_process_failed(result))
|
|
83
129
|
|
|
84
130
|
if (failed.length === 0) return { code: SUCCESS_EXIT_CODE, out: PASSED }
|
|
85
131
|
|
|
86
132
|
return {
|
|
87
133
|
code: FAILURE_EXIT_CODE,
|
|
88
|
-
out: failed
|
|
134
|
+
out: failed
|
|
135
|
+
.map(({ check, result }) => failure_section(check.list, result))
|
|
136
|
+
.join(SECTION_SEPARATOR),
|
|
89
137
|
}
|
|
90
138
|
}
|
|
91
139
|
|
|
140
|
+
// The `test:pinned` check a `--review` ship adds (`run-ship-pre-detach-pinned.ts`); none is asked by default.
|
|
141
|
+
type PinnedCheck = () => Promise<JoshResult>
|
|
142
|
+
|
|
143
|
+
async function not_asked(): Promise<JoshResult> {
|
|
144
|
+
return { code: SUCCESS_EXIT_CODE, out: PASSED }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// The checks' answer, with the kinds a `stop` record names its red by: `pre-detach` for the static
|
|
148
|
+
// checks, `unpinned` for `test:pinned`, so `lane:stats` tells an unpinned stop apart
|
|
149
|
+
// (joshuafolkken/kit#5228).
|
|
150
|
+
interface PreDetachResult extends JoshResult {
|
|
151
|
+
preconditions?: ReadonlyArray<string>
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function joined(result: JoshResult, pinned: JoshResult): JoshResult {
|
|
155
|
+
if (pinned.code === SUCCESS_EXIT_CODE) return result
|
|
156
|
+
if (result.code === SUCCESS_EXIT_CODE) return pinned
|
|
157
|
+
|
|
158
|
+
return { code: FAILURE_EXIT_CODE, out: [result.out, pinned.out].join(SECTION_SEPARATOR) }
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function red_kinds(result: JoshResult, pinned: JoshResult): ReadonlyArray<string> {
|
|
162
|
+
return [
|
|
163
|
+
...(result.code === SUCCESS_EXIT_CODE ? [] : [lane_ledger_write.PRE_DETACH_STAGE]),
|
|
164
|
+
...(pinned.code === SUCCESS_EXIT_CODE ? [] : [UNPINNED]),
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// The pinned check's stop joins the others' rather than hiding them.
|
|
169
|
+
function with_pinned(result: JoshResult, pinned: JoshResult): PreDetachResult {
|
|
170
|
+
const preconditions = red_kinds(result, pinned)
|
|
171
|
+
const answer = joined(result, pinned)
|
|
172
|
+
|
|
173
|
+
return preconditions.length === 0 ? answer : { ...answer, preconditions }
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// All run at once, buffered, and every failure is reported, so one ship shows all there is to fix.
|
|
177
|
+
// The tree is read before they start, so a record is written only for the tree they read. **The
|
|
178
|
+
// metrics totals run first, alone**: they may re-record the branch's approval file
|
|
179
|
+
// (`metrics-command.ts`), and a file written under the others would move the tree and leave the gate
|
|
180
|
+
// nothing to reuse (joshuafolkken/kit#4716).
|
|
181
|
+
async function checks(
|
|
182
|
+
directory: string = process.cwd(),
|
|
183
|
+
records: CheckRecords = check_reuse.DEFAULT_RECORDS,
|
|
184
|
+
pinned: PinnedCheck = not_asked,
|
|
185
|
+
): Promise<PreDetachResult> {
|
|
186
|
+
const metrics = await Promise.all(
|
|
187
|
+
kit_only(directory).map(async (check) => await run_in(directory, check)),
|
|
188
|
+
)
|
|
189
|
+
const [lists, tree] = await Promise.all([command_lists(directory), gate_tree.read_gate_tree()])
|
|
190
|
+
const [runs, pinned_result] = await Promise.all([
|
|
191
|
+
Promise.all(lists.map(async (check) => await run_in(directory, check))),
|
|
192
|
+
pinned(),
|
|
193
|
+
])
|
|
194
|
+
|
|
195
|
+
await check_reuse.record_green_checks(gate_results(runs), tree, records)
|
|
196
|
+
|
|
197
|
+
return with_pinned(verdict([...runs, ...metrics]), pinned_result)
|
|
198
|
+
}
|
|
199
|
+
|
|
92
200
|
const run_ship_pre_detach = {
|
|
93
201
|
GUARD_TEST_TARGETS,
|
|
94
|
-
|
|
202
|
+
METRICS_RERECORD_COMMAND,
|
|
95
203
|
PASSED,
|
|
96
204
|
STATIC_CHECKS,
|
|
205
|
+
UNPINNED,
|
|
97
206
|
checks,
|
|
207
|
+
failure_prefix,
|
|
98
208
|
}
|
|
99
209
|
|
|
210
|
+
export type { PinnedCheck, PreDetachCheck, PreDetachResult }
|
|
100
211
|
export { run_ship_pre_detach }
|
|
@@ -4,12 +4,18 @@ import { git_pr } from '#scripts/gh/git-pr'
|
|
|
4
4
|
import { changed_paths } from '#scripts/git/changed-paths'
|
|
5
5
|
import { git_branch } from '#scripts/git/git-branch'
|
|
6
6
|
import { git_issue } from '#scripts/git/git-issue'
|
|
7
|
-
import { git_preflight } from '#scripts/git/git-preflight'
|
|
7
|
+
import { git_preflight, type Unmet } from '#scripts/git/git-preflight'
|
|
8
8
|
import type { JoshResult } from '#scripts/josh/josh-run'
|
|
9
9
|
import { error_text } from '#scripts/lib/error-message'
|
|
10
|
+
import { report_format_reference } from '#scripts/report/report-format-reference'
|
|
11
|
+
import { acceptance_map } from '#scripts/review/acceptance-map'
|
|
10
12
|
import { acceptance_map_check } from '#scripts/review/acceptance-map-check'
|
|
11
13
|
import { live_evidence } from '#scripts/review/live-evidence'
|
|
14
|
+
import { removed_tests_check } from '#scripts/review/removed-tests-check'
|
|
15
|
+
import { run_ship_body_draft } from './run-ship-body-draft'
|
|
16
|
+
import { run_ship_lap } from './run-ship-lap'
|
|
12
17
|
import { run_ship_lock } from './run-ship-lock'
|
|
18
|
+
import { run_ship_planned } from './run-ship-planned'
|
|
13
19
|
import { run_ship_scoped } from './run-ship-scoped'
|
|
14
20
|
|
|
15
21
|
// `josh ship`'s first stage. The commit stage (`git -y`'s preflight) and the merge (`followup`'s
|
|
@@ -17,26 +23,60 @@ import { run_ship_scoped } from './run-ship-scoped'
|
|
|
17
23
|
// **Every precondition decidable before the review is asked here, and all of them are reported at
|
|
18
24
|
// once.** No check is new: the classification, issue and branch answers
|
|
19
25
|
// are `git_preflight.problems_of`, and the evidence answer is `live_evidence.verdict_for` over the same
|
|
20
|
-
// changed paths and the body this ship will deliver — `--body-file` when given, else the
|
|
26
|
+
// changed paths and the body this ship will deliver — `--body-file` when given, else the ship body
|
|
27
|
+
// draft, else the open PR's. The `unplanned` answer is the branch's code files the lane's `lane:plan`
|
|
28
|
+
// record never listed (`run-ship-planned.ts`).
|
|
21
29
|
//
|
|
22
30
|
// The scoped pair runs last, met rather than stopped on (`run-ship-scoped.ts`), so the review and the
|
|
23
31
|
// gate start on a tree both checks are green on.
|
|
32
|
+
//
|
|
33
|
+
// A stop names the kinds of the preconditions it found unmet, beside the git preflight's own, so the
|
|
34
|
+
// lane ledger can count which one stops ships (joshuafolkken/kit#4166).
|
|
24
35
|
|
|
25
36
|
const SUCCESS_EXIT_CODE = 0
|
|
26
37
|
const FAILURE_EXIT_CODE = 1
|
|
27
38
|
const UNREADABLE = Symbol('unreadable body')
|
|
28
|
-
const
|
|
29
|
-
|
|
39
|
+
const PRECONDITION = {
|
|
40
|
+
LIVE_EVIDENCE: 'live-evidence',
|
|
41
|
+
ACCEPTANCE_MAP: 'acceptance-map',
|
|
42
|
+
REMOVED_TESTS: 'removed-tests',
|
|
43
|
+
LOCK: 'lock',
|
|
44
|
+
SCOPED: 'scoped',
|
|
45
|
+
UNPLANNED: run_ship_planned.PRECONDITION,
|
|
46
|
+
UNREADABLE: 'unreadable',
|
|
47
|
+
} as const
|
|
48
|
+
const EVIDENCE_PROBLEM = `This change touches runtime code, but the body this ship delivers has no ${live_evidence.EVIDENCE_HEADING} section: run the acceptance criteria for real and write it into the ship body draft run:prep wrote (josh ship reads it when --body-file is omitted), or pass the body with --body-file <path>. Write it ${live_evidence.EVIDENCE_FORMAT}`
|
|
49
|
+
const EVIDENCE_PENDING = `This change touches runtime code and no PR is open yet: write the ${live_evidence.EVIDENCE_HEADING} section into the ship body draft run:prep wrote (or a file handed to josh ship with --body-file <path>), or the ship refuses. Write it ${live_evidence.EVIDENCE_FORMAT}`
|
|
50
|
+
|
|
51
|
+
// The draft `josh ship` reads when `--body-file` is omitted, named so the run fills that file in.
|
|
52
|
+
function acceptance_pending_text(draft_path: string): string {
|
|
53
|
+
return `Fill in this ${acceptance_map.MAP_HEADING} section in the ship body draft ${draft_path} — josh ship reads it when --body-file is omitted — replacing each pending row's ending with what met or deferred it (format: ${report_format_reference.pointer(report_format_reference.ACCEPTANCE_MAP_HEADING)}), and write ${live_evidence.EVIDENCE_HEADING} there before the ship, or the ship refuses:`
|
|
54
|
+
}
|
|
30
55
|
|
|
31
56
|
interface PreflightRequest {
|
|
32
57
|
title: string
|
|
33
58
|
body_path: string | undefined
|
|
34
59
|
}
|
|
35
60
|
|
|
61
|
+
// `preconditions` names the kinds a stopped stage found unmet, each once, in the order they were asked.
|
|
62
|
+
interface PreflightResult extends JoshResult {
|
|
63
|
+
preconditions?: ReadonlyArray<string>
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// The body the next ship delivers: `--body-file`, else the run's ship body draft, else the open PR's.
|
|
36
67
|
async function body_text(body_path: string | undefined): Promise<string | undefined> {
|
|
37
68
|
if (body_path !== undefined) return await readFile(body_path, 'utf8')
|
|
69
|
+
const branch = await git_branch.current()
|
|
70
|
+
const issue = git_issue.branch_number(branch)
|
|
71
|
+
const draft = issue === undefined ? undefined : await run_ship_body_draft.existing(issue)
|
|
38
72
|
|
|
39
|
-
return await
|
|
73
|
+
if (draft !== undefined) return await readFile(draft, 'utf8')
|
|
74
|
+
|
|
75
|
+
return await git_gh_command.pr_get_body(branch)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function of_kind(kind: string, problems: ReadonlyArray<string>): Array<Unmet> {
|
|
79
|
+
return problems.map((problem) => ({ kind, problem }))
|
|
40
80
|
}
|
|
41
81
|
|
|
42
82
|
// `no_body_problem` answers a runtime change with no body to read at all — no `--body-file` and no open
|
|
@@ -44,7 +84,7 @@ async function body_text(body_path: string | undefined): Promise<string | undefi
|
|
|
44
84
|
async function evidence_problems(
|
|
45
85
|
body_path: string | undefined,
|
|
46
86
|
no_body_problem: string = EVIDENCE_PROBLEM,
|
|
47
|
-
): Promise<Array<
|
|
87
|
+
): Promise<Array<Unmet>> {
|
|
48
88
|
const [paths, body] = await Promise.all([
|
|
49
89
|
changed_paths.read_changed_paths(false),
|
|
50
90
|
body_text(body_path),
|
|
@@ -52,25 +92,28 @@ async function evidence_problems(
|
|
|
52
92
|
|
|
53
93
|
if (live_evidence.verdict_for(paths, body) !== 'required') return []
|
|
54
94
|
|
|
55
|
-
return [
|
|
95
|
+
return of_kind(PRECONDITION.LIVE_EVIDENCE, [
|
|
96
|
+
body === undefined ? no_body_problem : EVIDENCE_PROBLEM,
|
|
97
|
+
])
|
|
56
98
|
}
|
|
57
99
|
|
|
58
|
-
function refusal(problems: ReadonlyArray<
|
|
59
|
-
const lines = problems.map((problem) => ` - ${problem}`)
|
|
100
|
+
function refusal(problems: ReadonlyArray<Unmet>): PreflightResult {
|
|
101
|
+
const lines = problems.map(({ problem }) => ` - ${problem}`)
|
|
60
102
|
const head = `${String(problems.length)} pull-request precondition(s) unmet before the review and the gate:`
|
|
103
|
+
const preconditions = [...new Set(problems.map(({ kind }) => kind))]
|
|
61
104
|
|
|
62
|
-
return { code: FAILURE_EXIT_CODE, out: [head, ...lines].join('\n') }
|
|
105
|
+
return { code: FAILURE_EXIT_CODE, out: [head, ...lines].join('\n'), preconditions }
|
|
63
106
|
}
|
|
64
107
|
|
|
65
108
|
// The reads here run in the ship's own process, where the commit stage's ran in a `git -y` child: a
|
|
66
109
|
// throw — a `--body-file` path that does not exist, a git read that failed — would escape `ship()`
|
|
67
110
|
// past the stop a supervised ship hands back on, so it is reported as one more unmet precondition.
|
|
68
111
|
// Each side is caught on its own, so one side's failed read never hides what the other side found.
|
|
69
|
-
async function caught(problems: Promise<Array<
|
|
112
|
+
async function caught(problems: Promise<Array<Unmet>>): Promise<Array<Unmet>> {
|
|
70
113
|
try {
|
|
71
114
|
return await problems
|
|
72
115
|
} catch (error) {
|
|
73
|
-
return [error_text.message_of(error)]
|
|
116
|
+
return of_kind(PRECONDITION.UNREADABLE, [error_text.message_of(error)])
|
|
74
117
|
}
|
|
75
118
|
}
|
|
76
119
|
|
|
@@ -86,62 +129,136 @@ async function readable_body(
|
|
|
86
129
|
|
|
87
130
|
// `followup`'s acceptance-map refusal, asked of the body this ship will deliver. A branch with no issue
|
|
88
131
|
// number is `git_preflight`'s problem to name, and an unreadable body the evidence side's.
|
|
89
|
-
async function acceptance_problems(body_path: string | undefined): Promise<Array<
|
|
132
|
+
async function acceptance_problems(body_path: string | undefined): Promise<Array<Unmet>> {
|
|
90
133
|
const issue = git_issue.branch_number(await git_branch.current())
|
|
91
134
|
const body = await readable_body(body_path)
|
|
92
135
|
|
|
93
136
|
if (issue === undefined || body === UNREADABLE) return []
|
|
94
137
|
const problem = await acceptance_map_check.body_refusal(issue, body)
|
|
95
138
|
|
|
96
|
-
return problem === undefined ? [] : [problem]
|
|
139
|
+
return problem === undefined ? [] : of_kind(PRECONDITION.ACCEPTANCE_MAP, [problem])
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// `followup`'s removed-test refusal, asked of the body this ship will deliver.
|
|
143
|
+
async function removed_test_problems(body_path: string | undefined): Promise<Array<Unmet>> {
|
|
144
|
+
const body = await readable_body(body_path)
|
|
145
|
+
|
|
146
|
+
if (body === UNREADABLE) return []
|
|
147
|
+
const problem = await removed_tests_check.body_refusal(body)
|
|
148
|
+
|
|
149
|
+
return problem === undefined ? [] : of_kind(PRECONDITION.REMOVED_TESTS, [problem])
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
async function lock_problems(): Promise<Array<Unmet>> {
|
|
153
|
+
return of_kind(PRECONDITION.LOCK, await run_ship_lock.lock_problems())
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async function planned_problems(): Promise<Array<Unmet>> {
|
|
157
|
+
return of_kind(PRECONDITION.UNPLANNED, await run_ship_planned.problems())
|
|
97
158
|
}
|
|
98
159
|
|
|
99
160
|
// The lock file is asked here too, so a drift stops the ship before the gate
|
|
100
161
|
// rather than being rewritten by the pre-push hook's install under the push.
|
|
101
|
-
async function asked_problems(request: PreflightRequest): Promise<Array<
|
|
102
|
-
const [preflight, evidence, acceptance, lock] = await Promise.all([
|
|
162
|
+
async function asked_problems(request: PreflightRequest): Promise<Array<Unmet>> {
|
|
163
|
+
const [preflight, evidence, acceptance, removed, lock, planned] = await Promise.all([
|
|
103
164
|
caught(git_preflight.problems_of({ cli_input: request.title, will_open_pr: true })),
|
|
104
165
|
caught(evidence_problems(request.body_path)),
|
|
105
166
|
caught(acceptance_problems(request.body_path)),
|
|
106
|
-
caught(
|
|
167
|
+
caught(removed_test_problems(request.body_path)),
|
|
168
|
+
caught(lock_problems()),
|
|
169
|
+
caught(planned_problems()),
|
|
107
170
|
])
|
|
108
171
|
|
|
109
|
-
return [...preflight, ...evidence, ...acceptance, ...lock]
|
|
172
|
+
return [...preflight, ...evidence, ...acceptance, ...removed, ...lock, ...planned]
|
|
110
173
|
}
|
|
111
174
|
|
|
112
|
-
async function stage(request: PreflightRequest): Promise<
|
|
113
|
-
const problems = await
|
|
175
|
+
async function stage(request: PreflightRequest): Promise<PreflightResult> {
|
|
176
|
+
const problems = await run_ship_lap.timed(
|
|
177
|
+
run_ship_lap.STEP.PRECONDITIONS,
|
|
178
|
+
async () => await asked_problems(request),
|
|
179
|
+
)
|
|
114
180
|
|
|
115
181
|
if (problems.length > 0) return refusal(problems)
|
|
116
182
|
|
|
117
183
|
const scoped = await run_ship_scoped.scoped_pair()
|
|
118
184
|
|
|
119
|
-
|
|
185
|
+
if (scoped.code === SUCCESS_EXIT_CODE) return { code: SUCCESS_EXIT_CODE, out: 'ready' }
|
|
186
|
+
|
|
187
|
+
return { ...scoped, preconditions: [PRECONDITION.SCOPED] }
|
|
120
188
|
}
|
|
121
189
|
|
|
122
|
-
async function classification_problems(issue_number: string): Promise<Array<
|
|
190
|
+
async function classification_problems(issue_number: string): Promise<Array<Unmet>> {
|
|
123
191
|
await git_pr.release_classification(issue_number, await git_branch.current())
|
|
124
192
|
|
|
125
193
|
return []
|
|
126
194
|
}
|
|
127
195
|
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
196
|
+
// Only a body still to be written is handed every row as pending: a draft or an open PR's body keeps
|
|
197
|
+
// the refusal, which names just the rows missing, stale or deferred to an issue that does not exist.
|
|
198
|
+
async function pending_map(
|
|
199
|
+
issue_number: string,
|
|
200
|
+
body: string | undefined,
|
|
201
|
+
): Promise<string | undefined> {
|
|
202
|
+
if (body !== undefined) return undefined
|
|
203
|
+
|
|
204
|
+
return acceptance_map.skeleton(await git_gh_command.issue_get_body(issue_number))
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// The rows land in the ship body draft as well as in the report (joshuafolkken/kit#4168).
|
|
208
|
+
async function pending_text(issue_number: string, map: string): Promise<string> {
|
|
209
|
+
const draft = await run_ship_body_draft.prepare(issue_number, map)
|
|
210
|
+
|
|
211
|
+
return `${acceptance_pending_text(draft)}\n${map}`
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// A refusal of a draft already written names it again, so a later `run:step` still points at the file.
|
|
215
|
+
async function draft_refusal_text(issue_number: string, problem: string): Promise<string> {
|
|
216
|
+
const draft = await run_ship_body_draft.existing(issue_number)
|
|
217
|
+
|
|
218
|
+
return draft === undefined ? problem : `${acceptance_pending_text(draft)}\n${problem}`
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// The acceptance-map refusal asked early carries the rows to write, identifiers included, built by
|
|
222
|
+
// `acceptance_map.skeleton` — the one builder `josh pr` uses too (joshuafolkken/kit#4244). An Issue
|
|
223
|
+
// with no criteria to build rows from keeps the refusal's own wording.
|
|
224
|
+
async function acceptance_pending(issue_number: string): Promise<Array<Unmet>> {
|
|
225
|
+
const body = await body_text(undefined)
|
|
226
|
+
const problem = await acceptance_map_check.body_refusal(issue_number, body)
|
|
227
|
+
|
|
228
|
+
if (problem === undefined) return []
|
|
229
|
+
const map = await pending_map(issue_number, body)
|
|
230
|
+
const pending =
|
|
231
|
+
map === undefined
|
|
232
|
+
? await draft_refusal_text(issue_number, problem)
|
|
233
|
+
: await pending_text(issue_number, map)
|
|
234
|
+
|
|
235
|
+
return of_kind(PRECONDITION.ACCEPTANCE_MAP, [pending])
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// **The same refusals, asked before the ship rather than by it**: a missing classification, missing
|
|
239
|
+
// evidence or an unmapped acceptance criterion is known long before the ship, yet refused there at the
|
|
240
|
+
// run's largest context. `run:prep` (and so `run:entry`)
|
|
241
|
+
// and `run:step` print this, so the Issue body and the PR body are met while they are cheap. Nothing
|
|
242
|
+
// here replaces `stage`: the ship and `followup` still refuse on all of them. Before the PR exists the
|
|
243
|
+
// evidence can only live in the file the ship will be handed, so it is asked for as that file, not
|
|
244
|
+
// reported as a body that already failed.
|
|
135
245
|
async function ahead(issue_number: string): Promise<Array<string>> {
|
|
136
|
-
const [classification, evidence] = await Promise.all([
|
|
246
|
+
const [classification, evidence, acceptance] = await Promise.all([
|
|
137
247
|
caught(classification_problems(issue_number)),
|
|
138
248
|
caught(evidence_problems(undefined, EVIDENCE_PENDING)),
|
|
249
|
+
caught(acceptance_pending(issue_number)),
|
|
139
250
|
])
|
|
140
251
|
|
|
141
|
-
return [...classification, ...evidence]
|
|
252
|
+
return [...classification, ...evidence, ...acceptance].map(({ problem }) => problem)
|
|
142
253
|
}
|
|
143
254
|
|
|
144
|
-
const run_ship_preflight = {
|
|
255
|
+
const run_ship_preflight = {
|
|
256
|
+
EVIDENCE_PENDING,
|
|
257
|
+
EVIDENCE_PROBLEM,
|
|
258
|
+
acceptance_pending_text,
|
|
259
|
+
ahead,
|
|
260
|
+
stage,
|
|
261
|
+
}
|
|
145
262
|
|
|
146
|
-
export type { PreflightRequest }
|
|
263
|
+
export type { PreflightRequest, PreflightResult }
|
|
147
264
|
export { run_ship_preflight }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { git_command } from '#scripts/git/git-command'
|
|
2
2
|
import { git_worktree } from '#scripts/git/git-worktree'
|
|
3
3
|
import { error_text } from '#scripts/lib/error-message'
|
|
4
|
+
import { review_round_reuse } from '#scripts/review/review-round-reuse'
|
|
4
5
|
import { run_hold } from '#scripts/run/hold/run-hold'
|
|
5
6
|
import { run_preflight } from '#scripts/run/run-preflight'
|
|
6
7
|
import { run_ship_stage, type ShipState } from './run-ship-stage'
|
|
@@ -30,8 +31,8 @@ async function or_false(is_true: () => Promise<boolean>): Promise<boolean> {
|
|
|
30
31
|
|
|
31
32
|
// A clean tree whose branch holds commits the default branch does not: the commit stage's output. A
|
|
32
33
|
// dirty tree is uncommitted work, whatever is already committed beneath it.
|
|
33
|
-
async function read_committed(): Promise<boolean> {
|
|
34
|
-
if (
|
|
34
|
+
async function read_committed(is_dirty: boolean): Promise<boolean> {
|
|
35
|
+
if (is_dirty) return false
|
|
35
36
|
|
|
36
37
|
const base = await git_command.default_branch_reference()
|
|
37
38
|
|
|
@@ -60,16 +61,31 @@ async function read_merged(branch_name: string): Promise<boolean> {
|
|
|
60
61
|
return (await git_command.commit_count_beyond(base, HEAD_REFERENCE)) === 0
|
|
61
62
|
}
|
|
62
63
|
|
|
64
|
+
// A stale review re-runs the review stage instead of the followup failing again.
|
|
65
|
+
async function read_review_stale(): Promise<boolean> {
|
|
66
|
+
return await review_round_reuse.is_stale_here()
|
|
67
|
+
}
|
|
68
|
+
|
|
63
69
|
const NOTHING_DONE: ShipState = { is_committed: false, is_pushed: false, is_merged: false }
|
|
64
70
|
|
|
65
71
|
async function read_branch_state(branch_name: string): Promise<ShipState> {
|
|
66
|
-
const
|
|
67
|
-
|
|
72
|
+
const is_dirty = await run_hold.is_tree_dirty()
|
|
73
|
+
const [is_committed, is_pushed, is_merged, is_review_stale] = await Promise.all([
|
|
74
|
+
or_false(async () => await read_committed(is_dirty)),
|
|
68
75
|
or_false(async () => await read_pushed(branch_name)),
|
|
69
76
|
or_false(async () => await read_merged(branch_name)),
|
|
77
|
+
read_review_stale(),
|
|
70
78
|
])
|
|
71
79
|
|
|
72
|
-
return { is_committed, is_pushed, is_merged }
|
|
80
|
+
return { is_committed, is_pushed, is_merged, is_review_stale, is_dirty }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Origin holds `HEAD` and nothing is left uncommitted: a line written to the tree now has no commit of
|
|
84
|
+
// the run's own to ride, so pushing it would restart the pull request's CI (joshuafolkken/kit#4907).
|
|
85
|
+
async function is_pushed_clean(): Promise<boolean> {
|
|
86
|
+
if (await run_hold.is_tree_dirty()) return false
|
|
87
|
+
|
|
88
|
+
return await or_false(async () => await read_pushed(await git_command.branch()))
|
|
73
89
|
}
|
|
74
90
|
|
|
75
91
|
// A branch that cannot be named leaves nothing to ask about, so it reads as nothing done.
|
|
@@ -101,6 +117,12 @@ async function record_target(issue: string): Promise<string | undefined> {
|
|
|
101
117
|
return repository === undefined ? undefined : run_ship_stage.record_path(repository, issue)
|
|
102
118
|
}
|
|
103
119
|
|
|
104
|
-
const run_ship_probe = {
|
|
120
|
+
const run_ship_probe = {
|
|
121
|
+
is_pushed_clean,
|
|
122
|
+
read_review_stale,
|
|
123
|
+
read_state,
|
|
124
|
+
record_target,
|
|
125
|
+
repository_directory,
|
|
126
|
+
}
|
|
105
127
|
|
|
106
128
|
export { run_ship_probe }
|