@joshuafolkken/kit 1.1514.0 → 1.2114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +25 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +5 -4
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +62 -10
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +33 -2
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +85 -0
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +38 -179
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +56 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +114 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +213 -0
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +160 -161
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +142 -101
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +24 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +71 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +90 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +264 -258
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +54 -10
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +58 -10
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +76 -48
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +28 -7
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +6 -3
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +44 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +6 -11
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +64 -151
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +40 -8
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-O6GDRNJB.js +0 -343
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/filing-cap.ts +0 -132
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
3
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { lane_ledger_write } from '#scripts/lane/lane-ledger-write'
|
|
5
|
+
import { review_stop_log } from '#scripts/review/review-stop-log'
|
|
7
6
|
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
8
7
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
9
8
|
import { run_ship, type ShipSection } from './run-ship'
|
|
9
|
+
import { run_ship_args } from './run-ship-args'
|
|
10
|
+
import { run_ship_body_draft } from './run-ship-body-draft'
|
|
11
|
+
import { run_ship_conflict_probe } from './run-ship-conflict-probe'
|
|
10
12
|
import { run_ship_detach } from './run-ship-detach'
|
|
11
|
-
import {
|
|
13
|
+
import { run_ship_handover, type CodeCheck } from './run-ship-handover'
|
|
14
|
+
import { run_ship_infra_retry } from './run-ship-infra-retry'
|
|
15
|
+
import { run_ship_lap } from './run-ship-lap'
|
|
16
|
+
import type { PreDetachResult } from './run-ship-pre-detach'
|
|
17
|
+
import { run_ship_pre_detach_pinned } from './run-ship-pre-detach-pinned'
|
|
18
|
+
import { run_ship_pre_detach_timed } from './run-ship-pre-detach-timed'
|
|
12
19
|
import { run_ship_probe } from './run-ship-probe'
|
|
13
20
|
import { run_ship_return } from './run-ship-return'
|
|
14
21
|
import { run_ship_stage, type Phase, type ShipState, type Stage } from './run-ship-stage'
|
|
15
22
|
import { run_ship_steps, type ShipArguments, type Step } from './run-ship-steps'
|
|
23
|
+
import { run_ship_stop_cause } from './run-ship-stop-cause'
|
|
24
|
+
import type { StepResult } from './run-ship-sync'
|
|
16
25
|
|
|
17
26
|
// `josh ship "<title> #<N>"` — one call for the fixed commit-to-report region a run ships a change on.
|
|
18
27
|
// It runs `gate`, `git -y`, `followup` and `run:tail` internally, so no round trip re-bills a lane's
|
|
@@ -38,51 +47,17 @@ import { run_ship_steps, type ShipArguments, type Step } from './run-ship-steps'
|
|
|
38
47
|
// the agent ends at the hand-off instead of relaunching itself for the gate, a supervised ship that stops
|
|
39
48
|
// hands the stage back (`run-ship-return.ts`), and `--log <N>` prints the report it stopped on.
|
|
40
49
|
//
|
|
41
|
-
// The
|
|
42
|
-
// number is read off its tail for `run:tail`. Any further positionals are follow-up citations filed
|
|
43
|
-
// this run (`fullrun-steps.md` routes branch-2 filing before `ship`), forwarded to `run:tail` after the
|
|
44
|
-
// closed issue so `issue:cite` reports them too. A notify body — `--notify-message` or the
|
|
45
|
-
// shell-body-safe `--notify-message-file` — is forwarded to `followup` alone; the completion prose is
|
|
46
|
-
// composed before this command and passed straight through.
|
|
50
|
+
// The command line it takes is read in `run-ship-args.ts`.
|
|
47
51
|
|
|
48
52
|
const ARGV_OFFSET = 2
|
|
49
53
|
const SUCCESS_EXIT_CODE = 0
|
|
50
54
|
const FAILURE_EXIT_CODE = 1
|
|
51
|
-
const FIRST = 0
|
|
52
|
-
const NUMBER_GROUP = 1
|
|
53
|
-
const EXTRA_CITE_START = 1
|
|
54
|
-
// The issue reference at the tail of the title — `git -y` and `followup` read the whole string, and
|
|
55
|
-
// `run:tail` needs the number alone.
|
|
56
|
-
const TRAILING_ISSUE_PATTERN = /#([1-9]\d*)\s*$/u
|
|
57
|
-
// Both body forms `followup` documents, forwarded verbatim: the inline `--notify-message` and the
|
|
58
|
-
// shell-body-safe `--notify-message-file` a body naming a command or path must use (`followup.md`).
|
|
59
|
-
const NOTIFY_OPTIONS = ['notify-message', 'notify-message-file'] as const
|
|
60
|
-
// The PR body carrying the live-execution evidence `followup` gates the merge
|
|
61
|
-
// on, forwarded to `git -y` as a path because it holds commands and their output.
|
|
62
|
-
const BODY_FILE_OPTION = 'body-file'
|
|
63
55
|
const USAGE =
|
|
64
|
-
'Usage: josh ship "<title> #<N>" [<follow-up-N> ...] [--cite <N> ...] [--review] [--detach] [--body-file <path>] [--notify-message <text> | --notify-message-file <path>] | josh ship --log <N>'
|
|
56
|
+
'Usage: josh ship "<title> #<N>" [<follow-up-N> ...] [--cite <N> ...] [--review [--unpinned-ok "<reason>"]] [--detach] [--body-file <path>] [--notify-message <text> | --notify-message-file <path>] | josh ship --log <N>'
|
|
65
57
|
const NO_LOG_NOTE = 'no detached ship supervisor log for this issue'
|
|
66
58
|
const LANE_CHILD_DETACH_NOTE =
|
|
67
59
|
'lane child: shipping through the detached supervisor (--detach implied), so the end of this turn cannot kill it'
|
|
68
60
|
|
|
69
|
-
type NotifyValues = Partial<Record<(typeof NOTIFY_OPTIONS)[number], string>>
|
|
70
|
-
|
|
71
|
-
const OPTIONS = {
|
|
72
|
-
[NOTIFY_OPTIONS[0]]: { type: 'string' },
|
|
73
|
-
[NOTIFY_OPTIONS[1]]: { type: 'string' },
|
|
74
|
-
[BODY_FILE_OPTION]: { type: 'string' },
|
|
75
|
-
review: { type: 'boolean' },
|
|
76
|
-
// Hand the region to a detached supervisor (`run-ship-detach.ts`), print the
|
|
77
|
-
// report a stopped supervisor left, and carry follow-up citations as options so the supervisor's
|
|
78
|
-
// command line still ends with its title.
|
|
79
|
-
detach: { type: 'boolean' },
|
|
80
|
-
log: { type: 'string' },
|
|
81
|
-
cite: { type: 'string', multiple: true },
|
|
82
|
-
} as const
|
|
83
|
-
|
|
84
|
-
type ShipCommand = { kind: 'ship'; args: ShipArguments } | { kind: 'log'; number: string }
|
|
85
|
-
|
|
86
61
|
// What a resumed ship knows before its first stage: the record's path (absent outside a repository),
|
|
87
62
|
// the stages it says completed, and the repository's actual state (`run-ship-stage.ts` decides from it).
|
|
88
63
|
// `started` opens with the stages the record says this attempt started — a supervisor that ended
|
|
@@ -92,89 +67,17 @@ interface ShipContext {
|
|
|
92
67
|
done: ReadonlySet<string>
|
|
93
68
|
state: ShipState
|
|
94
69
|
started: Array<string>
|
|
70
|
+
// Whether the code this process loaded has changed since it started (`run-ship-handover.ts`).
|
|
71
|
+
is_stale: CodeCheck
|
|
95
72
|
}
|
|
96
73
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return NOTIFY_OPTIONS.flatMap((option) => {
|
|
101
|
-
const value = values[option]
|
|
102
|
-
|
|
103
|
-
return value === undefined ? [] : [`--${option}`, value]
|
|
104
|
-
})
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function body_arguments(path: string | undefined): ReadonlyArray<string> {
|
|
108
|
-
return path === undefined ? [] : [`--${BODY_FILE_OPTION}`, path]
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const { PHASE } = run_ship_stage
|
|
112
|
-
|
|
113
|
-
function issue_number(title: string): string | undefined {
|
|
114
|
-
return TRAILING_ISSUE_PATTERN.exec(title)?.[NUMBER_GROUP]
|
|
74
|
+
interface ShipOutcome {
|
|
75
|
+
sections: ReadonlyArray<ShipSection>
|
|
76
|
+
is_handed_over: boolean
|
|
115
77
|
}
|
|
116
78
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
review?: boolean
|
|
120
|
-
detach?: boolean
|
|
121
|
-
log?: string
|
|
122
|
-
cite?: Array<string>
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// A follow-up citation passed as a trailing positional is a bare issue number, so a stray flag is
|
|
126
|
-
// refused rather than forwarded to the wrong step.
|
|
127
|
-
function ship_args(
|
|
128
|
-
title: string,
|
|
129
|
-
rest: ReadonlyArray<string>,
|
|
130
|
-
values: ParsedValues,
|
|
131
|
-
): ShipArguments | undefined {
|
|
132
|
-
const number = issue_number(title)
|
|
133
|
-
const cites = [...rest, ...(values.cite ?? [])]
|
|
134
|
-
|
|
135
|
-
if (number === undefined || cites.some((token) => !issue_number_shape.is_issue_number(token))) {
|
|
136
|
-
return undefined
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return {
|
|
140
|
-
title,
|
|
141
|
-
number,
|
|
142
|
-
notify: notify_arguments(values),
|
|
143
|
-
body: body_arguments(values[BODY_FILE_OPTION]),
|
|
144
|
-
body_path: values[BODY_FILE_OPTION],
|
|
145
|
-
cites,
|
|
146
|
-
is_review: values.review === true,
|
|
147
|
-
is_detach: values.detach === true,
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// `--log <N>` stands alone: a bare issue number and nothing to ship.
|
|
152
|
-
function log_command(number: string, positionals: ReadonlyArray<string>): ShipCommand | undefined {
|
|
153
|
-
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(number) && positionals.length === 0
|
|
154
|
-
? { kind: 'log', number }
|
|
155
|
-
: undefined
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
function command_of(
|
|
159
|
-
values: ParsedValues,
|
|
160
|
-
positionals: ReadonlyArray<string>,
|
|
161
|
-
): ShipCommand | undefined {
|
|
162
|
-
if (values.log !== undefined) return log_command(values.log, positionals)
|
|
163
|
-
|
|
164
|
-
const title = positionals[FIRST]
|
|
165
|
-
const args =
|
|
166
|
-
title === undefined ? undefined : ship_args(title, positionals.slice(EXTRA_CITE_START), values)
|
|
167
|
-
|
|
168
|
-
return args === undefined ? undefined : { kind: 'ship', args }
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Numbers-only tail and a strict parse, so a title with no `#<N>` or a stray flag is refused rather
|
|
172
|
-
// than shipped past the wrong step.
|
|
173
|
-
function parse(argv: ReadonlyArray<string>): ShipCommand | undefined {
|
|
174
|
-
const parsed = cli_flags.arguments_of(argv, OPTIONS)
|
|
175
|
-
|
|
176
|
-
return parsed === undefined ? undefined : command_of(parsed.values, parsed.positionals)
|
|
177
|
-
}
|
|
79
|
+
const { PHASE, STAGE } = run_ship_stage
|
|
80
|
+
const REREAD_AFTER: ReadonlySet<Stage> = new Set([STAGE.SYNC, STAGE.REVIEW])
|
|
178
81
|
|
|
179
82
|
// Every stage that ran is timed into the lane ledger, failed ones included — a stage that stopped the
|
|
180
83
|
// ship cost the lane its time as well. The append is local and best-effort, so it adds no wait.
|
|
@@ -183,29 +86,60 @@ function parse(argv: ReadonlyArray<string>): ShipCommand | undefined {
|
|
|
183
86
|
// recorded, or a gate that reused its tree's green record would otherwise read as a run that took a
|
|
184
87
|
// second and pull the stage's median to zero.
|
|
185
88
|
async function record_timed(step: Step, issue: string, elapsed_ms: number): Promise<void> {
|
|
186
|
-
await
|
|
89
|
+
await lane_ledger_write.record_stage({ stage: step.stage, elapsed_ms, issue: Number(issue) })
|
|
187
90
|
}
|
|
188
91
|
|
|
189
|
-
async function
|
|
92
|
+
async function run_once(step: Step, args: ShipArguments, state: ShipState): Promise<ShipSection> {
|
|
190
93
|
const started_ms = performance.now()
|
|
191
|
-
const result = await
|
|
94
|
+
const result = await run_ship_lap.within(
|
|
95
|
+
args.number,
|
|
96
|
+
step.stage,
|
|
97
|
+
async () => await step.run(args, state),
|
|
98
|
+
)
|
|
192
99
|
const elapsed_ms = performance.now() - started_ms
|
|
193
100
|
|
|
194
101
|
if (result.is_skipped !== true) await record_timed(step, args.number, elapsed_ms)
|
|
195
|
-
const section = { header: step.header, body: result.out, code: result.code }
|
|
196
102
|
|
|
197
|
-
return
|
|
103
|
+
return run_ship.section_of(step.header, result)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// A stage that stopped on the infrastructure runs again in place before it stops the ship. A retry
|
|
107
|
+
// re-reads the state, as a resumed ship does: a commit whose push failed is not made a second time.
|
|
108
|
+
async function run_step(step: Step, args: ShipArguments, state: ShipState): Promise<ShipSection> {
|
|
109
|
+
const first = [state]
|
|
110
|
+
|
|
111
|
+
return await run_ship_infra_retry.retried(step.stage, async () => {
|
|
112
|
+
const current = first.pop() ?? (await run_ship_probe.read_state())
|
|
113
|
+
|
|
114
|
+
return await run_once(step, args, current)
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// One stage's line on the event stream, with why it ran or was skipped where the stage said.
|
|
119
|
+
interface StageMark {
|
|
120
|
+
stage: Stage
|
|
121
|
+
phase: Phase
|
|
122
|
+
reason?: string | undefined
|
|
198
123
|
}
|
|
199
124
|
|
|
200
125
|
async function emit_phase(
|
|
201
126
|
args: ShipArguments,
|
|
202
127
|
context: ShipContext,
|
|
203
|
-
|
|
204
|
-
phase: Phase,
|
|
128
|
+
mark: StageMark,
|
|
205
129
|
): Promise<void> {
|
|
206
|
-
const text = run_ship_stage.event_text(args.number, stage, phase, context.started)
|
|
130
|
+
const text = run_ship_stage.event_text(args.number, mark.stage, mark.phase, context.started)
|
|
207
131
|
|
|
208
|
-
await run_event_stream_emit.emit(
|
|
132
|
+
await run_event_stream_emit.emit(
|
|
133
|
+
run_event_stream.EVENT_KIND.SHIP_STAGE,
|
|
134
|
+
run_ship_stage.with_reason(text, mark.reason),
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// A green stage that found nothing to do ends `skipped` rather than `done` (joshuafolkken/kit#5296).
|
|
139
|
+
function settled_phase(section: ShipSection): Phase {
|
|
140
|
+
if (section.code !== SUCCESS_EXIT_CODE) return PHASE.FAILED
|
|
141
|
+
|
|
142
|
+
return section.is_skipped === true ? PHASE.SKIPPED : PHASE.DONE
|
|
209
143
|
}
|
|
210
144
|
|
|
211
145
|
// The record is written best-effort, as the event stream is: a record that could not be written costs
|
|
@@ -224,19 +158,25 @@ async function settle(
|
|
|
224
158
|
step: Step,
|
|
225
159
|
args: ShipArguments,
|
|
226
160
|
context: ShipContext,
|
|
227
|
-
|
|
161
|
+
section: ShipSection,
|
|
228
162
|
): Promise<void> {
|
|
229
|
-
const
|
|
163
|
+
const phase = settled_phase(section)
|
|
230
164
|
|
|
231
|
-
await emit_phase(args, context, step.stage,
|
|
165
|
+
await emit_phase(args, context, { stage: step.stage, phase, reason: section.reason })
|
|
232
166
|
|
|
233
|
-
if (
|
|
167
|
+
if (phase === PHASE.FAILED) return
|
|
234
168
|
|
|
235
169
|
record(context.target, (path) => {
|
|
236
170
|
run_ship_stage.mark_done(path, step.stage)
|
|
237
171
|
})
|
|
238
172
|
}
|
|
239
173
|
|
|
174
|
+
// A function of its own so the write does not sit after an `await`, where `require-atomic-updates`
|
|
175
|
+
// reads it as a possible race — the reason `held-mark.ts` gives `set_held_mark`.
|
|
176
|
+
function set_state(context: ShipContext, state: ShipState): void {
|
|
177
|
+
context.state = state
|
|
178
|
+
}
|
|
179
|
+
|
|
240
180
|
// One stage: passed over when the record and the state say it is done, run and recorded otherwise.
|
|
241
181
|
async function run_stage(
|
|
242
182
|
step: Step,
|
|
@@ -244,7 +184,7 @@ async function run_stage(
|
|
|
244
184
|
context: ShipContext,
|
|
245
185
|
): Promise<ShipSection> {
|
|
246
186
|
if (run_ship_stage.is_done(step.stage, context.done, context.state, args.body.length > 0)) {
|
|
247
|
-
await emit_phase(args, context, step.stage, PHASE.SKIPPED)
|
|
187
|
+
await emit_phase(args, context, { stage: step.stage, phase: PHASE.SKIPPED })
|
|
248
188
|
|
|
249
189
|
return { header: step.header, body: run_ship.SKIPPED_BODY, code: SUCCESS_EXIT_CODE }
|
|
250
190
|
}
|
|
@@ -253,36 +193,43 @@ async function run_stage(
|
|
|
253
193
|
record(context.target, (path) => {
|
|
254
194
|
run_ship_stage.mark_started(path, step.stage)
|
|
255
195
|
})
|
|
256
|
-
await emit_phase(args, context, step.stage, PHASE.START)
|
|
196
|
+
await emit_phase(args, context, { stage: step.stage, phase: PHASE.START })
|
|
257
197
|
const section = await run_step(step, args, context.state)
|
|
258
198
|
|
|
259
|
-
await settle(step, args, context, section
|
|
199
|
+
await settle(step, args, context, section)
|
|
200
|
+
// The sync commits locally and a review may fix the tree, so the stages after either read the state
|
|
201
|
+
// anew — the commit stage then pushes the sync's commit rather than making it again.
|
|
202
|
+
if (REREAD_AFTER.has(step.stage)) set_state(context, await run_ship_probe.read_state())
|
|
260
203
|
|
|
261
204
|
return section
|
|
262
205
|
}
|
|
263
206
|
|
|
264
207
|
async function open_context(args: ShipArguments): Promise<ShipContext> {
|
|
265
|
-
const [target, state] = await Promise.all([
|
|
208
|
+
const [target, state, is_stale] = await Promise.all([
|
|
266
209
|
run_ship_probe.record_target(args.number),
|
|
267
210
|
run_ship_probe.read_state(),
|
|
211
|
+
run_ship_handover.watch(),
|
|
268
212
|
])
|
|
269
213
|
|
|
270
214
|
const done = target === undefined ? new Set<string>() : run_ship_stage.read_done(target)
|
|
271
215
|
const started = target === undefined ? [] : [...run_ship_stage.read_started(target)]
|
|
272
216
|
|
|
273
|
-
|
|
217
|
+
// A supervisor that died mid-followup left its wait marked; this one waits on nothing yet.
|
|
218
|
+
record(target, (path) => {
|
|
219
|
+
run_ship_stage.clear_waits(path)
|
|
220
|
+
})
|
|
221
|
+
|
|
222
|
+
return { target, done, state, started, is_stale }
|
|
274
223
|
}
|
|
275
224
|
|
|
276
225
|
// Every stop goes to the lane ledger — supervised, in an agent's own turn, or a lane child's preflight
|
|
277
|
-
// before the hand-off — so `lane:stats` can say how long a ship stayed stopped for each reason.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
conflicts?: ReadonlyArray<string>,
|
|
282
|
-
): Promise<void> {
|
|
283
|
-
const reason = run_ship_stage.stop_reason(stage, conflicts)
|
|
226
|
+
// before the hand-off — so `lane:stats` can say how long a ship stayed stopped for each reason. A review
|
|
227
|
+
// stop's deciding findings also go, whole, to the durable stop log `review:stops` reads.
|
|
228
|
+
async function record_stop(args: ShipArguments, stage: Stage, failed?: ShipSection): Promise<void> {
|
|
229
|
+
const issue = Number(args.number)
|
|
284
230
|
|
|
285
|
-
await
|
|
231
|
+
await lane_ledger_write.record_stop(run_ship_stop_cause.record_of(issue, stage, failed))
|
|
232
|
+
review_stop_log.record({ issue, stage, findings: run_ship_stop_cause.details_of(stage, failed) })
|
|
286
233
|
}
|
|
287
234
|
|
|
288
235
|
// A detached supervisor hands the stopped stage back (`run-ship-return.ts`); a
|
|
@@ -296,7 +243,7 @@ async function stopped(
|
|
|
296
243
|
): Promise<ReadonlyArray<ShipSection>> {
|
|
297
244
|
const failed = sections.at(-1)
|
|
298
245
|
|
|
299
|
-
await record_stop(args, step.stage, failed
|
|
246
|
+
await record_stop(args, step.stage, failed)
|
|
300
247
|
|
|
301
248
|
if (run_ship_detach.is_supervised()) {
|
|
302
249
|
record(context.target, run_ship_stage.end_attempt)
|
|
@@ -306,28 +253,50 @@ async function stopped(
|
|
|
306
253
|
return sections
|
|
307
254
|
}
|
|
308
255
|
|
|
256
|
+
// One stage, and the outcome where the ship ends at it: a failure, or a sync after which a successor on
|
|
257
|
+
// the code it merged took the rest over (`run-ship-handover.ts`).
|
|
258
|
+
async function ship_stage(
|
|
259
|
+
step: Step,
|
|
260
|
+
args: ShipArguments,
|
|
261
|
+
context: ShipContext,
|
|
262
|
+
sections: Array<ShipSection>,
|
|
263
|
+
): Promise<ShipOutcome | undefined> {
|
|
264
|
+
const section = await run_stage(step, args, context)
|
|
265
|
+
|
|
266
|
+
sections.push(section)
|
|
267
|
+
|
|
268
|
+
if (section.code !== SUCCESS_EXIT_CODE) {
|
|
269
|
+
return { sections: await stopped(sections, args, step, context), is_handed_over: false }
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (step.stage !== STAGE.SYNC) return undefined
|
|
273
|
+
const handover = await run_ship_handover.hand_over(args, context.is_stale)
|
|
274
|
+
|
|
275
|
+
return handover === undefined
|
|
276
|
+
? undefined
|
|
277
|
+
: { sections: [...sections, handover], is_handed_over: true }
|
|
278
|
+
}
|
|
279
|
+
|
|
309
280
|
// Run the stages in order, stopping at the first that failed: a red gate never reaches the commit, so
|
|
310
281
|
// the returned sections end at the failure the report names. A ship that reached the end clears its
|
|
311
|
-
// record, so the next ship of the same issue starts from the preflight
|
|
312
|
-
|
|
282
|
+
// record, so the next ship of the same issue starts from the preflight; one handed over leaves it to
|
|
283
|
+
// the successor, which passes over what this one finished.
|
|
284
|
+
async function ship(args: ShipArguments): Promise<ShipOutcome> {
|
|
313
285
|
const context = await open_context(args)
|
|
314
286
|
const sections: Array<ShipSection> = []
|
|
315
287
|
|
|
316
288
|
for (const step of run_ship_steps.steps(args)) {
|
|
317
289
|
// eslint-disable-next-line no-await-in-loop -- stages run in order and the first failure stops the ship
|
|
318
|
-
const
|
|
319
|
-
|
|
320
|
-
sections.push(section)
|
|
290
|
+
const outcome = await ship_stage(step, args, context, sections)
|
|
321
291
|
|
|
322
|
-
|
|
323
|
-
if (section.code !== SUCCESS_EXIT_CODE) return await stopped(sections, args, step, context)
|
|
292
|
+
if (outcome !== undefined) return outcome
|
|
324
293
|
}
|
|
325
294
|
|
|
326
295
|
record(context.target, (path) => {
|
|
327
296
|
run_ship_stage.clear(path)
|
|
328
297
|
})
|
|
329
298
|
|
|
330
|
-
return sections
|
|
299
|
+
return { sections, is_handed_over: false }
|
|
331
300
|
}
|
|
332
301
|
|
|
333
302
|
async function print_log(number: string): Promise<number> {
|
|
@@ -372,23 +341,66 @@ function should_detach(args: ShipArguments): boolean {
|
|
|
372
341
|
return !run_ship_detach.is_supervised() && lane_child_marker.is_child_of(process.cwd())
|
|
373
342
|
}
|
|
374
343
|
|
|
344
|
+
// The preflight stop's unmet kinds, with the red pre-detach checks' own kinds added beside them
|
|
345
|
+
// (`run-ship-pre-detach.ts`).
|
|
346
|
+
function with_checks(stop: ShipSection, checks: PreDetachResult): ShipSection {
|
|
347
|
+
if (checks.code === SUCCESS_EXIT_CODE) return stop
|
|
348
|
+
|
|
349
|
+
return {
|
|
350
|
+
...stop,
|
|
351
|
+
preconditions: [...(stop.preconditions ?? []), ...(checks.preconditions ?? [])],
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// The stop is the sync stage's, so it is recorded and resumed as that stage's `conflict` is; the
|
|
356
|
+
// preflight's refusal, if any, still prints last.
|
|
357
|
+
async function conflict_sections(
|
|
358
|
+
args: ShipArguments,
|
|
359
|
+
conflict: StepResult,
|
|
360
|
+
preflight: ShipSection,
|
|
361
|
+
): Promise<ReadonlyArray<ShipSection>> {
|
|
362
|
+
const section = run_ship.section_of(run_ship.SYNC_HEADER, conflict)
|
|
363
|
+
|
|
364
|
+
await record_stop(args, STAGE.SYNC, section)
|
|
365
|
+
|
|
366
|
+
return [section, preflight]
|
|
367
|
+
}
|
|
368
|
+
|
|
375
369
|
// The preflight is deterministic and fast, so it runs here, in the agent's own turn, before the
|
|
376
370
|
// hand-off — a stop it finds is fixed by the same session instead of relaunching one from the
|
|
377
371
|
// supervisor. Only the slow stages go to the supervisor, which re-asks the preflight itself. The fast
|
|
378
372
|
// checks (`run-ship-pre-detach.ts`) follow it here for the same reason; they are not a stage, so the
|
|
379
|
-
// supervisor's gate runs them again rather than passing over them.
|
|
373
|
+
// supervisor's gate runs them again rather than passing over them. They run even when the preflight
|
|
374
|
+
// refused, so one ship reports every failure there is to fix (joshuafolkken/kit#4305); the preflight's
|
|
375
|
+
// refusal still comes before its own scoped pair, the one heavy check here beside a `--review` ship's
|
|
376
|
+
// `test:pinned`.
|
|
377
|
+
//
|
|
378
|
+
// **The refusal is printed last**: a lane child reading the report through `tail` saw only the red
|
|
379
|
+
// metrics or type check after it, fixed those, and shipped into the same refusal again — every repeated
|
|
380
|
+
// preflight stop of joshuafolkken/kit#4478. The stop records the pre-detach checks' red beside the
|
|
381
|
+
// unmet kinds, so the ledger shows which refusals came with one. **Red checks behind a passed preflight
|
|
382
|
+
// are a stop too** (joshuafolkken/kit#5228): recorded under the preflight with their kinds, an
|
|
383
|
+
// `unpinned` place among them.
|
|
384
|
+
//
|
|
385
|
+
// **A conflict with origin/main stops before the checks** (joshuafolkken/kit#5018): the supervisor's
|
|
386
|
+
// sync would stop on it after them, so they would only be run again once it is resolved.
|
|
380
387
|
async function pre_detach_sections(args: ShipArguments): Promise<ReadonlyArray<ShipSection>> {
|
|
381
388
|
const preflight = await run_stage(run_ship_steps.PREFLIGHT_STEP, args, await open_context(args))
|
|
389
|
+
const conflict = await run_ship_conflict_probe.probe()
|
|
382
390
|
|
|
383
|
-
if (
|
|
384
|
-
await record_stop(args, run_ship_steps.PREFLIGHT_STEP.stage)
|
|
391
|
+
if (conflict !== undefined) return await conflict_sections(args, conflict, preflight)
|
|
385
392
|
|
|
386
|
-
|
|
387
|
-
|
|
393
|
+
const result = await run_ship_pre_detach_timed.checks(
|
|
394
|
+
args.number,
|
|
395
|
+
run_ship_pre_detach_pinned.checks_for(args),
|
|
396
|
+
)
|
|
397
|
+
const checks = { header: run_ship.PRE_DETACH_HEADER, body: result.out, code: result.code }
|
|
388
398
|
|
|
389
|
-
|
|
399
|
+
if (run_ship.exit_code([checks, preflight]) !== SUCCESS_EXIT_CODE) {
|
|
400
|
+
await record_stop(args, run_ship_steps.PREFLIGHT_STEP.stage, with_checks(preflight, result))
|
|
401
|
+
}
|
|
390
402
|
|
|
391
|
-
return [
|
|
403
|
+
return [checks, preflight]
|
|
392
404
|
}
|
|
393
405
|
|
|
394
406
|
async function detach_after_preflight(args: ShipArguments): Promise<number> {
|
|
@@ -420,7 +432,9 @@ async function record_supervised_result(
|
|
|
420
432
|
await run_ship_detach.mark_result(repository, args.number, run_ship.exit_code(sections))
|
|
421
433
|
}
|
|
422
434
|
|
|
423
|
-
async function run_ship_command(
|
|
435
|
+
async function run_ship_command(given: ShipArguments): Promise<number> {
|
|
436
|
+
const args = await run_ship_pre_detach_pinned.with_recorded_reason(given)
|
|
437
|
+
|
|
424
438
|
if (should_detach(args)) {
|
|
425
439
|
if (!args.is_detach) console.error(LANE_CHILD_DETACH_NOTE)
|
|
426
440
|
|
|
@@ -428,16 +442,17 @@ async function run_ship_command(args: ShipArguments): Promise<number> {
|
|
|
428
442
|
}
|
|
429
443
|
|
|
430
444
|
await claim_supervised_identity(args)
|
|
431
|
-
const sections = await ship(args)
|
|
445
|
+
const { sections, is_handed_over } = await ship(args)
|
|
432
446
|
|
|
433
|
-
|
|
447
|
+
// The successor carries the same launch record, so its result is the one written there.
|
|
448
|
+
if (!is_handed_over) await record_supervised_result(args, sections)
|
|
434
449
|
console.info(run_ship.format_report(sections))
|
|
435
450
|
|
|
436
451
|
return run_ship.exit_code(sections)
|
|
437
452
|
}
|
|
438
453
|
|
|
439
454
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
440
|
-
const command = parse(argv)
|
|
455
|
+
const command = run_ship_args.parse(argv)
|
|
441
456
|
|
|
442
457
|
if (command === undefined) {
|
|
443
458
|
console.error(USAGE)
|
|
@@ -447,7 +462,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
447
462
|
|
|
448
463
|
return command.kind === 'log'
|
|
449
464
|
? await print_log(command.number)
|
|
450
|
-
: await run_ship_command(command.args)
|
|
465
|
+
: await run_ship_command(await run_ship_body_draft.with_draft(command.args))
|
|
451
466
|
}
|
|
452
467
|
|
|
453
468
|
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { changed_paths } from '#scripts/git/changed-paths'
|
|
2
|
+
import { git_command } from '#scripts/git/git-command'
|
|
3
|
+
import { git_merge_conflicts } from '#scripts/git/git-merge-conflicts'
|
|
4
|
+
import { main_merge_guard } from '#scripts/git/main-merge-guard'
|
|
5
|
+
import { main_merge_regenerate } from '#scripts/git/main-merge-regenerate'
|
|
6
|
+
import type { StepResult } from './run-ship-sync'
|
|
7
|
+
|
|
8
|
+
// Before `josh ship --detach` runs its pre-detach checks, whether merging origin/main would stop on a
|
|
9
|
+
// conflict (joshuafolkken/kit#5018). The supervisor's sync stage is the first to merge, so a branch
|
|
10
|
+
// main had moved under ran the whole pre-detach first and then stopped there, its checks thrown away.
|
|
11
|
+
// The reading touches neither the working tree nor the index (`git-merge-conflicts.ts`); only the
|
|
12
|
+
// remote-tracking ref of the default branch moves with the fetch. A probe that cannot answer — a fetch
|
|
13
|
+
// that failed, a merge base it cannot read — leaves the question to the sync stage, as the sync itself
|
|
14
|
+
// leaves a failed fetch to the followup; the ship then runs exactly as it did before the probe.
|
|
15
|
+
|
|
16
|
+
const FAILURE_EXIT_CODE = 1
|
|
17
|
+
const CONFLICT_NOTE = 'merging origin/main would stop on a conflict in:'
|
|
18
|
+
|
|
19
|
+
// The sync's own order: `main:merge` refuses uncommitted work origin/main also changed, so the commit
|
|
20
|
+
// comes first (`main-merge-guard.ts`).
|
|
21
|
+
function fix_note(): string {
|
|
22
|
+
return `The pre-detach checks did not run. Commit the work with ${main_merge_guard.commit_command()}, run \`pnpm josh main:merge\`, resolve the conflict in those files, then run the ship again.`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function conflicting_paths(): Promise<ReadonlyArray<string>> {
|
|
26
|
+
const default_branch = await git_command.get_default_branch()
|
|
27
|
+
|
|
28
|
+
await git_command.fetch_branch(default_branch)
|
|
29
|
+
|
|
30
|
+
const paths = await changed_paths.read_changed_paths(false)
|
|
31
|
+
const root = await git_command.repository_root()
|
|
32
|
+
|
|
33
|
+
return git_merge_conflicts.working_tree_conflicts(`origin/${default_branch}`, paths, root) ?? []
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function answered_paths(): Promise<ReadonlyArray<string>> {
|
|
37
|
+
try {
|
|
38
|
+
return await conflicting_paths()
|
|
39
|
+
} catch {
|
|
40
|
+
return []
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// The stop, carrying the paths as the sync stage's conflict does, so the stop is recorded as
|
|
45
|
+
// `conflict`; `undefined` when the merge would go through, the sync's merge would resolve every
|
|
46
|
+
// conflict itself (`main-merge-regenerate.ts`), or the probe could not tell.
|
|
47
|
+
async function probe(): Promise<StepResult | undefined> {
|
|
48
|
+
const conflicts = await answered_paths()
|
|
49
|
+
|
|
50
|
+
if (conflicts.length === 0 || main_merge_regenerate.is_resolvable(conflicts)) return undefined
|
|
51
|
+
|
|
52
|
+
const out = [CONFLICT_NOTE, ...conflicts, fix_note()].join('\n')
|
|
53
|
+
|
|
54
|
+
return { code: FAILURE_EXIT_CODE, out, conflicts }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const run_ship_conflict_probe = { CONFLICT_NOTE, probe }
|
|
58
|
+
|
|
59
|
+
export { run_ship_conflict_probe }
|