@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
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
|
|
2
|
+
import { git_gh_pr_read } from '#scripts/gh/git-gh-pr-read'
|
|
3
|
+
import { git_gh_repo } from '#scripts/gh/git-gh-repo'
|
|
4
|
+
import { git_command } from '#scripts/git/git-command'
|
|
5
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
6
|
+
import { shell_quote } from '#scripts/lib/shell-quote'
|
|
7
|
+
import { stdout_on_stderr } from '#scripts/lib/stdout-on-stderr'
|
|
8
|
+
import { telegram_test } from '#scripts/notify/telegram-test'
|
|
9
|
+
import type { CliValues } from '#scripts/notify/telegram-test-logic'
|
|
10
|
+
import { run_stage } from '#scripts/run/run-stage'
|
|
11
|
+
import { run_hold_session } from './run-hold-session'
|
|
12
|
+
|
|
13
|
+
// The `confirmation` a `halfrun`, `needs-human-review` or `prrun` stop sends from `josh run:hold
|
|
14
|
+
// --halfrun-stop` / `--human-review-stop` / `--prrun-stop` (joshuafolkken/kit#4135, #4156): every line is fixed once the Issue, its title and the pull
|
|
15
|
+
// request are known, so it is composed here rather than copied from prose. The send goes through
|
|
16
|
+
// `josh notify`'s own call and is stamped on the hold, so the `Stop` hook's own confirmation
|
|
17
|
+
// (`stop-actions.ts`) finds the pause announced and does not send it again.
|
|
18
|
+
//
|
|
19
|
+
// **A failed send does not fail the stop**: the mark is written, and an unstamped hold is exactly what
|
|
20
|
+
// lets the `Stop` hook send the confirmation in its place.
|
|
21
|
+
|
|
22
|
+
const TITLE_PLACEHOLDER = '<title>'
|
|
23
|
+
const PR_PLACEHOLDER = '<pr-url>'
|
|
24
|
+
const HALFRUN = 'halfrun'
|
|
25
|
+
const PRRUN = 'prrun'
|
|
26
|
+
|
|
27
|
+
interface StopFacts {
|
|
28
|
+
issue: string
|
|
29
|
+
title: string | undefined
|
|
30
|
+
issue_url: string | undefined
|
|
31
|
+
pr_url?: string | undefined
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface Composed {
|
|
35
|
+
values: CliValues
|
|
36
|
+
title: string | undefined
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Plain, not linked: every line is a command a person copies out of the Telegram.
|
|
40
|
+
function reference_of(facts: StopFacts): string {
|
|
41
|
+
return issue_cite.plain(facts.issue)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function commit_title(facts: StopFacts): string {
|
|
45
|
+
// Single quotes expand nothing, so a title stays one argument whatever it carries.
|
|
46
|
+
return shell_quote.single_quoted(`${facts.title ?? TITLE_PLACEHOLDER} ${reference_of(facts)}`)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function with_urls(values: CliValues, facts: StopFacts): CliValues {
|
|
50
|
+
const with_issue =
|
|
51
|
+
facts.issue_url === undefined ? values : { ...values, 'issue-url': facts.issue_url }
|
|
52
|
+
|
|
53
|
+
return facts.pr_url === undefined ? with_issue : { ...with_issue, 'pr-url': facts.pr_url }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function halfrun_values(facts: StopFacts): CliValues {
|
|
57
|
+
const title = commit_title(facts)
|
|
58
|
+
const body = [
|
|
59
|
+
'halfrun ready for manual verification',
|
|
60
|
+
run_stage.next_line(HALFRUN, facts.issue),
|
|
61
|
+
`Without an agent: pnpm josh git -y ${title} && pnpm josh followup ${title}`,
|
|
62
|
+
].join('\n')
|
|
63
|
+
const values: CliValues = {
|
|
64
|
+
'task-type': 'confirmation',
|
|
65
|
+
body,
|
|
66
|
+
recommended: `Verify by hand, then prrun ${reference_of(facts)}`,
|
|
67
|
+
alternative: [`fullrun ${reference_of(facts)}`],
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return with_urls(values, facts)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// A `needs-human-review` stop resumes as `halfrun`'s does, so its next line is `halfrun`'s; the lane
|
|
74
|
+
// directory is named because the uncommitted work a person must look at lives only there.
|
|
75
|
+
function human_review_values(facts: StopFacts, directory: string): CliValues {
|
|
76
|
+
const body = [
|
|
77
|
+
'needs-human-review: implemented and gated, stopped before the commit',
|
|
78
|
+
run_stage.next_line(HALFRUN, facts.issue),
|
|
79
|
+
`Working tree: ${directory}`,
|
|
80
|
+
].join('\n')
|
|
81
|
+
const values: CliValues = {
|
|
82
|
+
'task-type': 'confirmation',
|
|
83
|
+
body,
|
|
84
|
+
recommended: `Review the working tree, then prrun ${reference_of(facts)}`,
|
|
85
|
+
alternative: [`fullrun ${reference_of(facts)}`],
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return with_urls(values, facts)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function prrun_values(facts: StopFacts): CliValues {
|
|
92
|
+
const body = [
|
|
93
|
+
`prrun ready to merge: ${facts.pr_url ?? PR_PLACEHOLDER}`,
|
|
94
|
+
run_stage.next_line(PRRUN, facts.issue),
|
|
95
|
+
`After a manual merge, without an agent: pnpm josh followup ${commit_title(facts)}`,
|
|
96
|
+
].join('\n')
|
|
97
|
+
const values: CliValues = {
|
|
98
|
+
'task-type': 'confirmation',
|
|
99
|
+
body,
|
|
100
|
+
recommended: `fullrun ${reference_of(facts)}`,
|
|
101
|
+
alternative: ['Merge by hand, then pnpm josh followup'],
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return with_urls(values, facts)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async function issue_facts(issue: string): Promise<StopFacts> {
|
|
108
|
+
const slug = await git_gh_repo.repo_get_name_with_owner()
|
|
109
|
+
const title = await git_gh_issue_read.issue_get_title(issue)
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
issue,
|
|
113
|
+
title,
|
|
114
|
+
issue_url: slug === undefined ? undefined : issue_cite.issue_url(slug, issue),
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async function prrun_facts(issue: string): Promise<StopFacts> {
|
|
119
|
+
const pr_url = await git_gh_pr_read.pr_get_url(await git_command.branch())
|
|
120
|
+
|
|
121
|
+
return { ...(await issue_facts(issue)), pr_url }
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// The title is passed with the values, so the send does not read it a second time.
|
|
125
|
+
async function send_composed(target: string, compose: () => Promise<Composed>): Promise<void> {
|
|
126
|
+
const { values, title } = await compose()
|
|
127
|
+
const titled = title === undefined ? values : { ...values, 'issue-title': title }
|
|
128
|
+
|
|
129
|
+
await stdout_on_stderr.run(async () => {
|
|
130
|
+
await telegram_test.send_values(titled)
|
|
131
|
+
})
|
|
132
|
+
run_hold_session.mark_notified(target)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// A `gh` read that fails is a send that did not happen, never a failed stop: the mark is already written.
|
|
136
|
+
async function send(target: string, compose: () => Promise<Composed>): Promise<void> {
|
|
137
|
+
try {
|
|
138
|
+
await send_composed(target, compose)
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.error(`⚠️ run:hold could not send the stop confirmation: ${String(error)}`)
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
async function send_halfrun(target: string, issue: string): Promise<void> {
|
|
145
|
+
await send(target, async () => {
|
|
146
|
+
const facts = await issue_facts(issue)
|
|
147
|
+
|
|
148
|
+
return { values: halfrun_values(facts), title: facts.title }
|
|
149
|
+
})
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
async function send_prrun(target: string, issue: string): Promise<void> {
|
|
153
|
+
await send(target, async () => {
|
|
154
|
+
const facts = await prrun_facts(issue)
|
|
155
|
+
|
|
156
|
+
return { values: prrun_values(facts), title: facts.title }
|
|
157
|
+
})
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
async function send_human_review(target: string, issue: string): Promise<void> {
|
|
161
|
+
await send(target, async () => {
|
|
162
|
+
const facts = await issue_facts(issue)
|
|
163
|
+
const directory = await git_command.repository_root()
|
|
164
|
+
|
|
165
|
+
return { values: human_review_values(facts, directory), title: facts.title }
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const run_stop_notify = {
|
|
170
|
+
halfrun_values,
|
|
171
|
+
human_review_values,
|
|
172
|
+
prrun_values,
|
|
173
|
+
send_halfrun,
|
|
174
|
+
send_human_review,
|
|
175
|
+
send_prrun,
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export { run_stop_notify }
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { telegram_notify } from '#scripts/notify/telegram-notify'
|
|
3
|
+
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
4
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
5
|
+
|
|
6
|
+
// A returned child whose session could not authenticate (joshuafolkken/kit#4216). Nothing is counted
|
|
7
|
+
// and no label is touched — the child keeps `in-progress`, so it resumes once a person runs `/login` —
|
|
8
|
+
// and the run stops, since every child dispatched before that fails the same way. The stop is pushed
|
|
9
|
+
// as a `confirmation`: `/login` is a person's to run, and the driver's own stop notice names no cause.
|
|
10
|
+
// Script-emitted, so English.
|
|
11
|
+
|
|
12
|
+
const RECOVERY =
|
|
13
|
+
'If this did not arrive, `pnpm josh run:wake --list` relays the last progress line.'
|
|
14
|
+
|
|
15
|
+
async function stop(child: string): Promise<void> {
|
|
16
|
+
const cite = issue_cite.plain(child)
|
|
17
|
+
const text = `${cite} could not authenticate — run /login, then resume it`
|
|
18
|
+
|
|
19
|
+
await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.OUTAGE, text)
|
|
20
|
+
await telegram_notify.confirm({
|
|
21
|
+
issue_title: 'backlogrun stopped: Claude authentication failed',
|
|
22
|
+
body: `${text}. The child stays in-progress and was neither parked nor counted as a failure.`,
|
|
23
|
+
recovery: RECOVERY,
|
|
24
|
+
recommended: `Run /login, then run backlogrun again to resume ${cite}`,
|
|
25
|
+
alternatives: ['Leave the backlog stopped until a later session'],
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const run_merge_auth = { stop }
|
|
30
|
+
|
|
31
|
+
export { run_merge_auth }
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { run_event_scope } from '#scripts/run/event/run-event-scope'
|
|
2
|
+
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
3
|
+
import { run_stalled, type StallCause } from '#scripts/run/park/run-stalled'
|
|
4
|
+
import { run_merge_ship } from './run-merge-ship'
|
|
5
|
+
|
|
6
|
+
// Why a child the per-child re-dispatch cap stopped is parked (joshuafolkken/kit#4765). The cap turns a
|
|
7
|
+
// re-dispatchable ending into `failed`, and the park then named only the ship's stop — never that the cap
|
|
8
|
+
// was reached, how often the child was re-dispatched, or why its last relaunch started nothing.
|
|
9
|
+
|
|
10
|
+
type Events = ReadonlyArray<RunEvent>
|
|
11
|
+
|
|
12
|
+
const NO_RELAUNCH_FAILURE = 'none was recorded'
|
|
13
|
+
|
|
14
|
+
function is_own(event: RunEvent, kind: string, child: string): boolean {
|
|
15
|
+
return event.kind === kind && run_event_scope.issue_named(event) === child
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Every re-dispatch `child` was counted for, across the run.
|
|
19
|
+
function outages(events: Events, child: string): number {
|
|
20
|
+
return events.filter((event) => is_own(event, run_event_stream.EVENT_KIND.OUTAGE, child)).length
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function last_relaunch_failure(events: Events, child: string): string {
|
|
24
|
+
const kind = run_event_stream.EVENT_KIND.RELAUNCH_FAILED
|
|
25
|
+
const failed = events.findLast((event) => is_own(event, kind, child))
|
|
26
|
+
|
|
27
|
+
return failed === undefined ? NO_RELAUNCH_FAILURE : failed.text
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// The cap's line, put before what the park judged.
|
|
31
|
+
function note_of(events: Events, child: string, limit: number): string {
|
|
32
|
+
const count = outages(events, child)
|
|
33
|
+
const failure = last_relaunch_failure(events, child)
|
|
34
|
+
|
|
35
|
+
return `it reached the re-dispatch cap (${String(limit)}) after ${String(count)} re-dispatches; the last failed relaunch: ${failure}.`
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// What a failed child is parked for: the caller's cause, else its ended ship's, else the unfinished
|
|
39
|
+
// session — led by the cap's line where the cap stopped its re-dispatch. A caller's cause parked the
|
|
40
|
+
// child on its own path, so the cap's line stays off it.
|
|
41
|
+
function park_cause(
|
|
42
|
+
child: string,
|
|
43
|
+
cause: StallCause | undefined,
|
|
44
|
+
note: string | undefined,
|
|
45
|
+
): StallCause {
|
|
46
|
+
if (cause !== undefined) return cause
|
|
47
|
+
|
|
48
|
+
const judged = run_merge_ship.cause(child) ?? run_stalled.SESSION_UNFINISHED
|
|
49
|
+
|
|
50
|
+
if (note === undefined) return judged
|
|
51
|
+
|
|
52
|
+
return { short: judged.short, why: `${note} ${judged.why}` }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const run_merge_cap = { note_of, outages, park_cause }
|
|
56
|
+
|
|
57
|
+
export { run_merge_cap }
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { CONTEXT_CUT_THRESHOLD } from '#scripts/cost-runtime/context-cut-threshold'
|
|
4
1
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { RUN_STALLED_LABEL } from '#scripts/issue/issue-labels'
|
|
5
3
|
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
6
4
|
import { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
5
|
+
import { lane_baseline } from '#scripts/lane/lane-baseline'
|
|
7
6
|
import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
8
|
-
import {
|
|
7
|
+
import { lane_ledger_write } from '#scripts/lane/lane-ledger-write'
|
|
8
|
+
import { lane_overrun } from '#scripts/lane/lane-overrun'
|
|
9
9
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
10
10
|
import { run_carry, type CarryOwner, type RunCarry } from '#scripts/run/carry/run-carry'
|
|
11
11
|
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
12
12
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
13
|
-
import {
|
|
13
|
+
import { run_stalled, type StallCause } from '#scripts/run/park/run-stalled'
|
|
14
14
|
import { run_merge, type ChildOutcome } from './run-merge'
|
|
15
|
+
import { run_merge_auth } from './run-merge-auth'
|
|
16
|
+
import { run_merge_driver } from './run-merge-driver'
|
|
15
17
|
import { run_merge_signals } from './run-merge-signals'
|
|
16
18
|
import { run_merge_steps, type FailedResult, type MergeContext } from './run-merge-steps'
|
|
17
19
|
import { run_merge_token, type MergeToken } from './run-merge-token'
|
|
20
|
+
import { run_merge_usage_limit } from './run-merge-usage-limit'
|
|
21
|
+
import { run_merge_withdrawn, type Collected } from './run-merge-withdrawn'
|
|
18
22
|
|
|
19
23
|
// `josh run:merge <N>` — one composite command for a `backlogrun` merge event. The parent's context is
|
|
20
24
|
// the largest and its per-turn cost the highest, so it calls this once at a child's return and reads
|
|
@@ -26,15 +30,12 @@ import { run_merge_token, type MergeToken } from './run-merge-token'
|
|
|
26
30
|
// (stop — the child's own ending), `stop` (the consecutive-failure guard tripped, or a failed child could not be parked) and `retry` (the
|
|
27
31
|
// child's state could not be read; re-read before deciding).
|
|
28
32
|
|
|
29
|
-
const ARGV_OFFSET = 2
|
|
30
33
|
const SUCCESS_EXIT_CODE = 0
|
|
31
34
|
const FAILURE_EXIT_CODE = 1
|
|
32
35
|
const FIRST = 0
|
|
33
36
|
const MIN_PID = 1
|
|
34
37
|
const { MERGE_TOKEN } = run_merge_token
|
|
35
|
-
const PARK_FAILURE_NOTE =
|
|
36
|
-
// The same digit shape `run-carry-args.ts` reads an owner pid under; a count is a bare run of digits.
|
|
37
|
-
const DIGITS = /^\d+$/u
|
|
38
|
+
const PARK_FAILURE_NOTE = `The failed child could not be parked with ${RUN_STALLED_LABEL}; stopping.`
|
|
38
39
|
// A GitHub `owner/repo` slug: an owner and a repository name around a single slash, each starting with
|
|
39
40
|
// an alphanumeric so neither half can begin with `-`. `epic` and `repo` flow into `pnpm josh`
|
|
40
41
|
// subprocess arguments, so a value shaped like an option (`--foo`, or `--evil/x`) would be read as a
|
|
@@ -43,9 +44,10 @@ const DIGITS = /^\d+$/u
|
|
|
43
44
|
// itself forbids (names cannot start with a hyphen) and which the taint analyzer keeps flagging.
|
|
44
45
|
const REPO_PATTERN = /^[A-Za-z0-9][\w.-]*\/[A-Za-z0-9][\w.-]*$/u
|
|
45
46
|
const USAGE =
|
|
46
|
-
'Usage: josh run:merge <issue> [--over <deprecated>] [--epic <E> --repo <owner/repo>] [--owner <pid>] [--output <path>]'
|
|
47
|
+
'Usage: josh run:merge <issue> [--over <deprecated>] [--epic <E> --repo <owner/repo>] [--owner <pid>] [--output <path>] [--driver]'
|
|
47
48
|
|
|
48
49
|
const OPTIONS = {
|
|
50
|
+
driver: { type: 'boolean' },
|
|
49
51
|
epic: { type: 'string' },
|
|
50
52
|
output: { type: 'string' },
|
|
51
53
|
over: { type: 'string' },
|
|
@@ -55,7 +57,9 @@ const OPTIONS = {
|
|
|
55
57
|
|
|
56
58
|
interface ParsedArguments {
|
|
57
59
|
positionals: ReadonlyArray<string>
|
|
58
|
-
values: Partial<Record<'epic' | 'output' | 'over' | 'owner' | 'repo', string>>
|
|
60
|
+
values: Partial<Record<'epic' | 'output' | 'over' | 'owner' | 'repo', string>> & {
|
|
61
|
+
driver?: boolean
|
|
62
|
+
}
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
// Absent owner is "no owner declared", which the carry guard reads as not provably foreign; a present
|
|
@@ -63,11 +67,10 @@ interface ParsedArguments {
|
|
|
63
67
|
function to_owner(raw: string | undefined): CarryOwner | undefined {
|
|
64
68
|
if (raw === undefined) return run_carry.NO_OWNER
|
|
65
69
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const pid = Number(raw)
|
|
70
|
+
// The same count shape `run-carry-args.ts` reads an owner pid under.
|
|
71
|
+
const pid = cli_flags.to_count(raw)
|
|
69
72
|
|
|
70
|
-
return pid < MIN_PID ? undefined : run_carry.owner_of(pid)
|
|
73
|
+
return pid === undefined || pid < MIN_PID ? undefined : run_carry.owner_of(pid)
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
// The epic form needs a repository (`epic:next --lanes` refuses without one), so an epic named with
|
|
@@ -116,7 +119,7 @@ function has_invalid_offer(values: ParsedArguments['values']): boolean {
|
|
|
116
119
|
function has_invalid_legacy_over(raw: string | undefined): boolean {
|
|
117
120
|
if (raw === undefined) return false
|
|
118
121
|
|
|
119
|
-
return
|
|
122
|
+
return cli_flags.to_count(raw) === undefined
|
|
120
123
|
}
|
|
121
124
|
|
|
122
125
|
function valid_child(parsed: ParsedArguments): string | undefined {
|
|
@@ -127,6 +130,11 @@ function valid_child(parsed: ParsedArguments): string | undefined {
|
|
|
127
130
|
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(child) ? child : undefined
|
|
128
131
|
}
|
|
129
132
|
|
|
133
|
+
// `backlog:drive` has no context to cut, so its merge is never handed back `over`.
|
|
134
|
+
function cut_check_of(values: ParsedArguments['values']): true | undefined {
|
|
135
|
+
return values.driver === true ? undefined : true
|
|
136
|
+
}
|
|
137
|
+
|
|
130
138
|
function to_context(parsed: ParsedArguments): MergeContext | undefined {
|
|
131
139
|
if (has_invalid_offer(parsed.values) || has_invalid_legacy_over(parsed.values.over)) {
|
|
132
140
|
return undefined
|
|
@@ -144,7 +152,7 @@ function to_context(parsed: ParsedArguments): MergeContext | undefined {
|
|
|
144
152
|
child,
|
|
145
153
|
epic: valid_epic(parsed.values.epic),
|
|
146
154
|
repo: valid_repo(parsed.values.repo),
|
|
147
|
-
over:
|
|
155
|
+
over: cut_check_of(parsed.values),
|
|
148
156
|
owner,
|
|
149
157
|
output: parsed.values.output,
|
|
150
158
|
}
|
|
@@ -156,8 +164,8 @@ function parse(argv: ReadonlyArray<string>): MergeContext | undefined {
|
|
|
156
164
|
return parsed === undefined ? undefined : to_context(parsed)
|
|
157
165
|
}
|
|
158
166
|
|
|
159
|
-
// One handled return: the stdout token and the exit code. Returned rather than printed, so
|
|
160
|
-
//
|
|
167
|
+
// One handled return: the stdout token and the exit code. Returned rather than printed, so
|
|
168
|
+
// `merge_child` carries the verdict to `run_merge_driver.printed`, which prints it.
|
|
161
169
|
interface ControlVerdict {
|
|
162
170
|
token: MergeToken
|
|
163
171
|
code: number
|
|
@@ -183,8 +191,13 @@ function emit(token: MergeToken, code: number): ControlVerdict {
|
|
|
183
191
|
return { token, code, is_offer: false }
|
|
184
192
|
}
|
|
185
193
|
|
|
194
|
+
// No threshold is `backlog:drive`, which asks `backlog:offer` itself in the pass that collected the
|
|
195
|
+
// child: `backlog:next` here would only hold back its next launch (joshuafolkken/kit#4406).
|
|
186
196
|
async function offered(ctx: MergeContext): Promise<OfferVerdict> {
|
|
187
|
-
|
|
197
|
+
const token =
|
|
198
|
+
ctx.over === undefined ? run_merge_driver.DEFERRED_OFFER : await run_merge_steps.ask_next(ctx)
|
|
199
|
+
|
|
200
|
+
return { token, code: SUCCESS_EXIT_CODE, is_offer: true }
|
|
188
201
|
}
|
|
189
202
|
|
|
190
203
|
// A refused count means this session is not the carry record's owner, so the whole operation is
|
|
@@ -195,21 +208,32 @@ function report_count_refused(carry: RunCarry | undefined): MergeVerdict {
|
|
|
195
208
|
return emit(MERGE_TOKEN.BUSY, FAILURE_EXIT_CODE)
|
|
196
209
|
}
|
|
197
210
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
// merges a run ended with through it too (`run-merge-collect.ts`).
|
|
201
|
-
async function record_merged(ctx: MergeContext): Promise<RunCarry | undefined> {
|
|
202
|
-
const refused = await run_merge_steps.do_merged(ctx)
|
|
211
|
+
async function is_on_record(text: string): Promise<boolean> {
|
|
212
|
+
const events = await run_event_stream_emit.invocation_or_all_events()
|
|
203
213
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
await run_event_stream_emit.emit(
|
|
207
|
-
run_event_stream.EVENT_KIND.MERGE,
|
|
208
|
-
`${issue_cite.plain(ctx.child)} merged`,
|
|
214
|
+
return events.some(
|
|
215
|
+
(event) => event.kind === run_event_stream.EVENT_KIND.MERGE && event.text === text,
|
|
209
216
|
)
|
|
210
|
-
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// **Put on record once, dated to the merge's confirmation**: a pass that collects a child already on
|
|
220
|
+
// record — `run:carry --end` after `run:merge` — writes neither again.
|
|
221
|
+
async function put_merge_on_record(child: string, at: Date): Promise<void> {
|
|
222
|
+
const text = `${issue_cite.plain(child)} merged`
|
|
223
|
+
|
|
224
|
+
if (await is_on_record(text)) return
|
|
211
225
|
|
|
212
|
-
|
|
226
|
+
await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.MERGE, text, at)
|
|
227
|
+
await lane_ledger_write.record_merge(Number(child), at)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// A merged child counted and its lane closed, the merge put on the stream and in the ledger ahead of the
|
|
231
|
+
// lane close, dated to the ownership check rather than to the end of the sync (joshuafolkken/kit#4734). Returns the
|
|
232
|
+
// carry when the ownership check refused it, `undefined` once recorded. `run:carry --end` records the
|
|
233
|
+
// merges a run ended with through it too (`run-merge-collect.ts`). The lane's `ended` record is
|
|
234
|
+
// `lane:close`'s alone: an `incomplete` close leaves the lane open on it (joshuafolkken/kit#4300).
|
|
235
|
+
async function record_merged(ctx: MergeContext): Promise<RunCarry | undefined> {
|
|
236
|
+
return await run_merge_steps.do_merged(ctx, put_merge_on_record)
|
|
213
237
|
}
|
|
214
238
|
|
|
215
239
|
// A merge is the only outcome that asks the hand-off check, because it is the only one that returned
|
|
@@ -219,6 +243,9 @@ async function on_merged(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
219
243
|
|
|
220
244
|
if (refused !== undefined) return report_count_refused(refused)
|
|
221
245
|
|
|
246
|
+
await lane_overrun.investigate(Number(ctx.child))
|
|
247
|
+
await lane_baseline.investigate(Number(ctx.child))
|
|
248
|
+
|
|
222
249
|
if (await run_merge_steps.is_over_budget(ctx.over)) {
|
|
223
250
|
return emit(MERGE_TOKEN.OVER, SUCCESS_EXIT_CODE)
|
|
224
251
|
}
|
|
@@ -226,16 +253,13 @@ async function on_merged(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
226
253
|
return await offered(ctx)
|
|
227
254
|
}
|
|
228
255
|
|
|
229
|
-
// A child released to wait on its open blockers: settled for this run like a parked
|
|
230
|
-
// the stream the same way, but nothing was counted — the failure guard is not read,
|
|
231
|
-
// is offered.
|
|
232
|
-
async function on_waiting(
|
|
233
|
-
ctx: MergeContext,
|
|
234
|
-
blockers: ReadonlyArray<string>,
|
|
235
|
-
): Promise<MergeVerdict> {
|
|
256
|
+
// A child released to wait on its open blockers or its start date: settled for this run like a parked
|
|
257
|
+
// one, so it goes on the stream the same way, but nothing was counted — the failure guard is not read,
|
|
258
|
+
// and the next child is offered.
|
|
259
|
+
async function on_waiting(ctx: MergeContext, waits: ReadonlyArray<string>): Promise<MergeVerdict> {
|
|
236
260
|
await run_event_stream_emit.emit(
|
|
237
261
|
run_event_stream.EVENT_KIND.PARK,
|
|
238
|
-
`${issue_cite.plain(ctx.child)} waiting on ${
|
|
262
|
+
`${issue_cite.plain(ctx.child)} waiting on ${waits.join(', ')}`,
|
|
239
263
|
)
|
|
240
264
|
|
|
241
265
|
return await offered(ctx)
|
|
@@ -248,9 +272,11 @@ async function on_parked_failure(ctx: MergeContext, result: FailedResult): Promi
|
|
|
248
272
|
return emit(MERGE_TOKEN.STOP, FAILURE_EXIT_CODE)
|
|
249
273
|
}
|
|
250
274
|
|
|
275
|
+
const cause = result.cause ?? run_stalled.SESSION_UNFINISHED.short
|
|
276
|
+
|
|
251
277
|
await run_event_stream_emit.emit(
|
|
252
278
|
run_event_stream.EVENT_KIND.PARK,
|
|
253
|
-
|
|
279
|
+
run_stalled.park_event(ctx.child, cause),
|
|
254
280
|
)
|
|
255
281
|
|
|
256
282
|
if (result.carry !== undefined && run_merge.is_guard_tripped(result.carry.failures)) {
|
|
@@ -260,12 +286,12 @@ async function on_parked_failure(ctx: MergeContext, result: FailedResult): Promi
|
|
|
260
286
|
return await offered(ctx)
|
|
261
287
|
}
|
|
262
288
|
|
|
263
|
-
async function on_failed(ctx: MergeContext, cause?:
|
|
289
|
+
async function on_failed(ctx: MergeContext, cause?: StallCause): Promise<MergeVerdict> {
|
|
264
290
|
const result = await run_merge_steps.do_failed(ctx, cause)
|
|
265
291
|
|
|
266
292
|
if (result.is_refused) return report_count_refused(result.carry)
|
|
267
293
|
|
|
268
|
-
if (result.
|
|
294
|
+
if (result.waits.length > 0) return await on_waiting(ctx, result.waits)
|
|
269
295
|
|
|
270
296
|
return await on_parked_failure(ctx, result)
|
|
271
297
|
}
|
|
@@ -290,6 +316,22 @@ async function on_outage(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
290
316
|
return await offered(ctx)
|
|
291
317
|
}
|
|
292
318
|
|
|
319
|
+
// A child whose session could not authenticate: the run stops with nothing counted or parked
|
|
320
|
+
// (`run-merge-auth.ts`).
|
|
321
|
+
async function on_unauthenticated(ctx: MergeContext): Promise<MergeVerdict> {
|
|
322
|
+
await run_merge_auth.stop(ctx.child)
|
|
323
|
+
|
|
324
|
+
return emit(MERGE_TOKEN.ENVIRONMENT, SUCCESS_EXIT_CODE)
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// A child a usage limit stopped: released uncounted, its reset recorded (`run-merge-usage-limit.ts`).
|
|
328
|
+
async function on_usage_limit(ctx: MergeContext): Promise<MergeVerdict> {
|
|
329
|
+
await run_merge_steps.release_child(ctx.child)
|
|
330
|
+
await run_merge_usage_limit.record(ctx.child, ctx.resume_ms ?? Date.now())
|
|
331
|
+
|
|
332
|
+
return await offered(ctx)
|
|
333
|
+
}
|
|
334
|
+
|
|
293
335
|
// A child that ended its session with a cut no successor adopted: its successor is relaunched,
|
|
294
336
|
// nothing is counted and nothing is parked, and `resumed` tells the parent to await the same lane
|
|
295
337
|
// again rather than dispatch into it. A successor that could not be started — or a cut the
|
|
@@ -301,7 +343,7 @@ async function on_cut(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
301
343
|
if (refused !== undefined) return report_count_refused(refused)
|
|
302
344
|
|
|
303
345
|
if (!(await run_merge_steps.resume_cut(ctx.child))) {
|
|
304
|
-
return await on_failed(ctx,
|
|
346
|
+
return await on_failed(ctx, run_stalled.CUT_NOT_RELAUNCHED)
|
|
305
347
|
}
|
|
306
348
|
|
|
307
349
|
await run_event_stream_emit.emit(
|
|
@@ -314,10 +356,10 @@ async function on_cut(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
314
356
|
|
|
315
357
|
// A child that parked itself: nothing is counted, but the park is written to the stream as a failed
|
|
316
358
|
// child's is, so a reader restoring the run from its events sees the child settled. Its `in-progress`
|
|
317
|
-
// is dropped as a failed child's is: left on, it would outlive the
|
|
318
|
-
// lifts, and a `run:solo` child would then hold the whole backlog.
|
|
359
|
+
// is dropped as a failed child's is: left on, it would outlive the park label a person later
|
|
360
|
+
// lifts, and a `run:solo` child would then hold the whole backlog. A lane it left empty is closed.
|
|
319
361
|
async function on_parked(ctx: MergeContext): Promise<MergeVerdict> {
|
|
320
|
-
await
|
|
362
|
+
await run_merge_steps.release_child(ctx.child)
|
|
321
363
|
await run_event_stream_emit.emit(
|
|
322
364
|
run_event_stream.EVENT_KIND.PARK,
|
|
323
365
|
`${issue_cite.plain(ctx.child)} parked`,
|
|
@@ -338,13 +380,29 @@ async function on_skipped(ctx: MergeContext): Promise<MergeVerdict> {
|
|
|
338
380
|
return await offered(ctx)
|
|
339
381
|
}
|
|
340
382
|
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
|
|
344
|
-
|
|
383
|
+
// The seat of a child whose lane was collected goes to the next child — or a retry, where the
|
|
384
|
+
// withdrawal could not read the child.
|
|
385
|
+
async function on_collected(ctx: MergeContext, collected: Collected): Promise<MergeVerdict> {
|
|
386
|
+
if (collected.note !== undefined) console.error(collected.note)
|
|
387
|
+
if (collected.is_retry) return emit(MERGE_TOKEN.RETRY, FAILURE_EXIT_CODE)
|
|
388
|
+
|
|
345
389
|
return await offered(ctx)
|
|
346
390
|
}
|
|
347
391
|
|
|
392
|
+
// A child a person withdrew with `lane:withdraw`, or whose issue closed without a merge: nothing is
|
|
393
|
+
// counted and no merge is put on record, and its lane is withdrawn unless a person already did
|
|
394
|
+
// (`run-merge-withdrawn.ts`).
|
|
395
|
+
async function on_withdrawn(ctx: MergeContext): Promise<MergeVerdict> {
|
|
396
|
+
return await on_collected(ctx, await run_merge_withdrawn.collect(ctx.child))
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// A child that gave its lane back on its `lane:plan` (`lane-yield.ts`): its lane is closed the same way,
|
|
400
|
+
// but the issue stays in the run — `backlog:drive` does not exclude a `yielded` child, and its kept
|
|
401
|
+
// plan holds it back until the holder ends.
|
|
402
|
+
async function on_yielded(ctx: MergeContext): Promise<MergeVerdict> {
|
|
403
|
+
return await on_collected(ctx, await run_merge_withdrawn.collect_yield(ctx.child))
|
|
404
|
+
}
|
|
405
|
+
|
|
348
406
|
// The child's own ending: it stopped before its commit for a person to look at, so nothing is counted
|
|
349
407
|
// and no next child is offered.
|
|
350
408
|
async function on_human_review(): Promise<MergeVerdict> {
|
|
@@ -366,15 +424,19 @@ const HANDLERS: Readonly<Record<ChildOutcome, (ctx: MergeContext) => Promise<Mer
|
|
|
366
424
|
'human-review': on_human_review,
|
|
367
425
|
merged: on_merged,
|
|
368
426
|
outage: on_outage,
|
|
427
|
+
unauthenticated: on_unauthenticated,
|
|
428
|
+
'usage-limit': on_usage_limit,
|
|
369
429
|
parked: on_parked,
|
|
370
430
|
split: on_skipped,
|
|
371
431
|
unresolved: on_unresolved,
|
|
372
432
|
shipping: on_shipping,
|
|
373
433
|
withdrawn: on_withdrawn,
|
|
434
|
+
yielded: on_yielded,
|
|
374
435
|
}
|
|
375
436
|
|
|
376
|
-
// The whole merge event for one returned child
|
|
377
|
-
//
|
|
437
|
+
// The whole merge event for one returned child: read its state, classify it, and run the handler.
|
|
438
|
+
// The CLI prints the token and the outcome; `backlog:drive` runs it as a child process
|
|
439
|
+
// (`run-merge-driver.ts`) and branches on the printed outcome.
|
|
378
440
|
async function merge_child(ctx: MergeContext): Promise<MergeResult> {
|
|
379
441
|
if (lane_handoff.is_ship_running(ctx.child, process.cwd())) {
|
|
380
442
|
return { outcome: 'shipping', ...(await on_shipping()) }
|
|
@@ -384,9 +446,10 @@ async function merge_child(ctx: MergeContext): Promise<MergeResult> {
|
|
|
384
446
|
const signals = await run_merge_signals.read_signals(ctx, read)
|
|
385
447
|
const outcome = run_merge_signals.outcome_of(read, signals)
|
|
386
448
|
|
|
387
|
-
const { merged_pr,
|
|
449
|
+
const { merged_pr, is_streak_exempt, capped_note, resume_ms } = signals
|
|
450
|
+
const handled = { ...ctx, merged_pr, is_streak_exempt, capped_note, resume_ms }
|
|
388
451
|
|
|
389
|
-
return { outcome, ...(await HANDLERS[outcome](
|
|
452
|
+
return { outcome, ...(await HANDLERS[outcome](handled)) }
|
|
390
453
|
}
|
|
391
454
|
|
|
392
455
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
@@ -400,15 +463,11 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
400
463
|
|
|
401
464
|
const result = await merge_child(ctx)
|
|
402
465
|
|
|
403
|
-
console.info(result
|
|
466
|
+
console.info(run_merge_driver.printed(argv, result))
|
|
404
467
|
|
|
405
468
|
return result.code
|
|
406
469
|
}
|
|
407
470
|
|
|
408
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
409
|
-
process.exitCode = await run(argv)
|
|
410
|
-
}
|
|
411
|
-
|
|
412
471
|
const run_merge_cli = {
|
|
413
472
|
merge_child,
|
|
414
473
|
parse,
|
|
@@ -417,7 +476,5 @@ const run_merge_cli = {
|
|
|
417
476
|
run,
|
|
418
477
|
}
|
|
419
478
|
|
|
420
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
421
|
-
|
|
422
479
|
export type { MergeResult }
|
|
423
480
|
export { run_merge_cli }
|