@joshuafolkken/kit 1.1471.0 → 1.1784.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/settings.json +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- package/.github/actions/setup-pnpm/action.yml +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- package/scripts/auto-ok/auto-ok-cli.ts +14 -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 +6 -7
- package/scripts/backlog/backlog-defect-priority.ts +4 -3
- 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 +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +54 -7
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -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 +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- package/scripts/backlog/backlog-occupied.ts +69 -0
- 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 +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +137 -18
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- 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/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +31 -0
- 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 +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- 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-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-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +31 -60
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +65 -129
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/gh/git-pr.ts +13 -1
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -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 +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +78 -0
- package/scripts/git/main-merge.ts +39 -14
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- 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 +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +5 -16
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- 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/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -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 +34 -78
- 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/expected-effect-lint.ts +60 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- 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 +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -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 +81 -90
- package/scripts/issue/issue-lint-cli.ts +7 -13
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -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 +111 -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.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- 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 +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +19 -25
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +19 -5
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- 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 +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- 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 +111 -71
- 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 +31 -2
- package/scripts/josh/josh-commands-issue-write.ts +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +112 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -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 +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- package/scripts/josh/process-identity.ts +13 -4
- 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 +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-preserve.ts +29 -1
- 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 +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- 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/read-file.ts +3 -1
- 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/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.ts +265 -0
- package/scripts/lint/format.ts +14 -5
- package/scripts/lint/import-graph.ts +279 -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 +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +12 -11
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- 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 +18 -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 +6 -15
- package/scripts/report/report-format-reference.ts +4 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +82 -16
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -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 +67 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +90 -3
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +76 -7
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +67 -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 +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -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 +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- 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 +118 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -0
- package/scripts/run/board/run-board-layout.ts +240 -61
- package/scripts/run/board/run-board-length.ts +52 -0
- 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 +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- 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 +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -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 +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -47
- 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 +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -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 +2 -2
- package/scripts/run/board/run-board-state.ts +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- 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.ts +9 -4
- package/scripts/run/cut/run-cut-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- 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-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- 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 +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- 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.ts +2 -1
- 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 +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- 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 +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -0
- package/scripts/run/run-step.ts +1 -1
- 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 +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- package/scripts/run/ship/run-ship.ts +30 -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-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- 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 +3 -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 +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- 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 +15 -0
- package/scripts/split/split-measure.ts +65 -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/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +55 -6
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +54 -21
- package/scripts/test/unit-count-file.ts +37 -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 +71 -137
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- 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 +10 -1
- package/scripts/time-runtime/time-shell.ts +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- 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/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -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 +10 -3
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -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-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- 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/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/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -3,8 +3,10 @@ import { lane_registry } from '#scripts/lane/lane-registry'
|
|
|
3
3
|
import { lane_relaunch } from '#scripts/lane/lane-relaunch'
|
|
4
4
|
import { run_event_scope } from '#scripts/run/event/run-event-scope'
|
|
5
5
|
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
6
|
+
import type { StallCause } from '#scripts/run/park/run-stalled'
|
|
6
7
|
import { run_ending } from '#scripts/run/run-ending'
|
|
7
8
|
import { run_ship_detach } from '#scripts/run/ship/run-ship-detach'
|
|
9
|
+
import { run_ship_stop_text } from '#scripts/run/ship/run-ship-stop-text'
|
|
8
10
|
|
|
9
11
|
// Why `run:merge` parks a child whose detached ship has already ended (joshuafolkken/kit#3808).
|
|
10
12
|
//
|
|
@@ -35,7 +37,18 @@ function since_ship_launch(events: Events, child: string): Events | undefined {
|
|
|
35
37
|
return launched_at === -1 ? undefined : own.slice(launched_at + 1)
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
// The stopped stage names the cause's short form (`review failed`); a stop text in no known shape is
|
|
41
|
+
// still a ship stop.
|
|
42
|
+
function stop_cause(stop: RunEvent): StallCause {
|
|
43
|
+
const stage = run_ship_stop_text.reason_of(stop.text)
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
short: stage === undefined ? 'ship stopped' : `${stage} failed`,
|
|
47
|
+
why: `its detached ship stopped and was not fixed: ${stop.text}.`,
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function cause_of(ending: ShipEnding, events: Events, child: string): StallCause | undefined {
|
|
39
52
|
if (ending === undefined || !ENDED_RESULTS.has(ending.result)) return undefined
|
|
40
53
|
|
|
41
54
|
const attempt = since_ship_launch(events, child)
|
|
@@ -43,14 +56,17 @@ function cause_of(ending: ShipEnding, events: Events, child: string): string | u
|
|
|
43
56
|
|
|
44
57
|
const stop = attempt.findLast((event) => event.kind === run_event_stream.EVENT_KIND.SHIP_STOP)
|
|
45
58
|
|
|
46
|
-
if (stop !== undefined) return
|
|
59
|
+
if (stop !== undefined) return stop_cause(stop)
|
|
47
60
|
|
|
48
|
-
return
|
|
61
|
+
return {
|
|
62
|
+
short: `ship ${ending.result}`,
|
|
63
|
+
why: `its detached ship ended ${ending.result} before recording a stopped stage — pnpm josh ship --log ${child}.`,
|
|
64
|
+
}
|
|
49
65
|
}
|
|
50
66
|
|
|
51
67
|
// The ship's cause for `child`'s park, read from the record and the stream this checkout's repository
|
|
52
68
|
// keys on, or `undefined` when the child handed nothing to a ship or its ship succeeded.
|
|
53
|
-
function cause(child: string, directory: string = process.cwd()):
|
|
69
|
+
function cause(child: string, directory: string = process.cwd()): StallCause | undefined {
|
|
54
70
|
const repository = git_common_directory.repository(directory)
|
|
55
71
|
if (repository === undefined) return undefined
|
|
56
72
|
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { api_auth } from '#scripts/agent/api-auth'
|
|
2
|
+
import { api_outage } from '#scripts/agent/api-outage'
|
|
3
|
+
import { issue_closing_pr } from '#scripts/issue/issue-closing-pr'
|
|
4
|
+
import { issue_merged } from '#scripts/issue/issue-merged'
|
|
5
|
+
import type { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
6
|
+
import { run_event_scope } from '#scripts/run/event/run-event-scope'
|
|
7
|
+
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
8
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
9
|
+
import { run_ending } from '#scripts/run/run-ending'
|
|
10
|
+
import { run_merge, type ChildOutcome, type EndingSignals } from './run-merge'
|
|
11
|
+
import { run_merge_restart } from './run-merge-restart'
|
|
12
|
+
import { run_merge_ship } from './run-merge-ship'
|
|
13
|
+
import { run_merge_steps, type MergeContext } from './run-merge-steps'
|
|
14
|
+
|
|
15
|
+
// What `run:merge` reads beside a returned child's GitHub state before classifying it — the exit
|
|
16
|
+
// record, the lane's cut, a merged closing pull request and a person's withdrawal — and the
|
|
17
|
+
// classification those readings and the state decide (`run_merge.classify_child`).
|
|
18
|
+
|
|
19
|
+
type IssueRead = Awaited<ReturnType<typeof issue_state_cli.read_issue>>
|
|
20
|
+
|
|
21
|
+
// Whether the child's session ended through its environment — read only when `--output` named the
|
|
22
|
+
// transcript, off otherwise: its exit record shows it could not reach the API, or the session was
|
|
23
|
+
// killed inside a turn. The path is validated inside `run_ending`, so a missing output is "no".
|
|
24
|
+
function read_is_outage(output: string | undefined): boolean {
|
|
25
|
+
if (output === undefined) return false
|
|
26
|
+
|
|
27
|
+
return api_outage.is_outage(run_ending.read_exit(output)) || run_ending.ended_mid_turn(output)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Whether the child's session ended because it could not authenticate — off without `--output`, as the
|
|
31
|
+
// outage read is. The lane's log is appended across launches, so it is read as the reviewer's is
|
|
32
|
+
// (`api_auth.is_auth_failed_transcript`).
|
|
33
|
+
function read_is_auth_failure(output: string | undefined): boolean {
|
|
34
|
+
if (output === undefined) return false
|
|
35
|
+
|
|
36
|
+
return api_auth.is_auth_failed_transcript(run_ending.read_transcript(output))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function child_outages(child: string): Promise<number> {
|
|
40
|
+
const events = await run_event_stream_emit.current_events()
|
|
41
|
+
|
|
42
|
+
return events.filter(
|
|
43
|
+
(event) =>
|
|
44
|
+
event.kind === run_event_stream.EVENT_KIND.OUTAGE &&
|
|
45
|
+
run_event_scope.issue_named(event) === child,
|
|
46
|
+
).length
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Why an unfinished child is re-dispatchable, or `undefined` when it is not. **Only an API outage adds
|
|
50
|
+
// to the run-wide streak**: a host restart is over by the time the child is read (joshuafolkken/kit#4540),
|
|
51
|
+
// and an unanswered ship stop reached the API (joshuafolkken/kit#3974).
|
|
52
|
+
async function retry_cause(
|
|
53
|
+
child: string,
|
|
54
|
+
output: string | undefined,
|
|
55
|
+
): Promise<'api' | 'exempt' | undefined> {
|
|
56
|
+
if (await run_merge_restart.is_host_restart(child, output)) return 'exempt'
|
|
57
|
+
|
|
58
|
+
if (read_is_outage(output)) return 'api'
|
|
59
|
+
|
|
60
|
+
return (await run_merge_ship.is_unanswered(child, output)) ? 'exempt' : undefined
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// An outage child is re-dispatched only so many times: one that ends the same way on every dispatch is
|
|
64
|
+
// parked, since merges in other lanes reset the run-wide outage streak and would never stop it.
|
|
65
|
+
async function read_retryable(
|
|
66
|
+
child: string,
|
|
67
|
+
output: string | undefined,
|
|
68
|
+
): Promise<{ is_outage: boolean; is_streak_exempt: boolean }> {
|
|
69
|
+
const cause = await retry_cause(child, output)
|
|
70
|
+
|
|
71
|
+
if (cause === undefined) return { is_outage: false, is_streak_exempt: false }
|
|
72
|
+
|
|
73
|
+
const is_outage = (await child_outages(child)) < run_merge.CONSECUTIVE_OUTAGE_LIMIT
|
|
74
|
+
|
|
75
|
+
return { is_outage, is_streak_exempt: is_outage && cause === 'exempt' }
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// The timeline is read only for an OPEN, unparked child — the one classification a merged closing pull
|
|
79
|
+
// request changes. A CLOSED child was closed by GitHub, so it must carry no `merged_pr` for
|
|
80
|
+
// `do_merged` to close again.
|
|
81
|
+
async function read_merged_pr(child: string, read: IssueRead): Promise<string | undefined> {
|
|
82
|
+
if (read.kind !== 'state' || run_merge.classify_child(read.state) !== 'failed') return undefined
|
|
83
|
+
|
|
84
|
+
return await issue_closing_pr.read_closing_pr(child)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// A child that merged before `lane:withdraw` stopped it is merged, not withdrawn: the withdrawal's
|
|
88
|
+
// event is already written, so only the timeline tells its merged close from the not-planned one. An
|
|
89
|
+
// unread timeline answers `undefined`, and `outcome_of` asks again rather than guessing.
|
|
90
|
+
async function read_is_withdrawn(child: string, read: IssueRead): Promise<boolean | undefined> {
|
|
91
|
+
const events = await run_event_stream_emit.current_events()
|
|
92
|
+
|
|
93
|
+
if (!run_event_scope.is_withdrawn(events, child)) return false
|
|
94
|
+
if (read.kind !== 'state' || run_merge.classify_child(read.state) !== 'merged') return true
|
|
95
|
+
const is_merged = await issue_merged.read_merge_state(child)
|
|
96
|
+
|
|
97
|
+
return is_merged === undefined ? undefined : !is_merged
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async function read_signals(ctx: MergeContext, read: IssueRead): Promise<EndingSignals> {
|
|
101
|
+
const [is_cut, merged_pr, retryable, is_withdrawn] = await Promise.all([
|
|
102
|
+
run_merge_steps.has_resumable_cut(ctx.child),
|
|
103
|
+
read_merged_pr(ctx.child, read),
|
|
104
|
+
read_retryable(ctx.child, ctx.output),
|
|
105
|
+
read_is_withdrawn(ctx.child, read),
|
|
106
|
+
])
|
|
107
|
+
|
|
108
|
+
const is_auth_failure = read_is_auth_failure(ctx.output)
|
|
109
|
+
|
|
110
|
+
return { ...retryable, is_cut, merged_pr, is_withdrawn, is_auth_failure }
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// An unread state is `unresolved` unless a withdrawal already settled the child, which is read locally;
|
|
114
|
+
// a withdrawn child whose timeline could not tell its merge (`is_withdrawn` unset) is `unresolved` too.
|
|
115
|
+
function outcome_of(read: IssueRead, signals: EndingSignals): ChildOutcome {
|
|
116
|
+
if (signals.is_withdrawn === undefined) return 'unresolved'
|
|
117
|
+
|
|
118
|
+
return run_merge.classify_child(read.kind === 'state' ? read.state : undefined, signals)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const run_merge_signals = { outcome_of, read_merged_pr, read_signals }
|
|
122
|
+
|
|
123
|
+
export { run_merge_signals }
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs'
|
|
2
2
|
import path from 'node:path'
|
|
3
|
-
import { git_followup_issue_close } from '#scripts/followup/git-followup-issue-close'
|
|
4
3
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
5
4
|
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
6
5
|
import { git_stash } from '#scripts/git/stash/git-stash'
|
|
7
6
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
8
|
-
import {
|
|
7
|
+
import { has_label_name, NOT_BEFORE_LABEL, RUN_STALLED_LABEL } from '#scripts/issue/issue-labels'
|
|
8
|
+
import { issue_not_before } from '#scripts/issue/issue-not-before'
|
|
9
|
+
import { issue_park } from '#scripts/issue/issue-park'
|
|
10
|
+
import { issue_sample_gate } from '#scripts/issue/issue-sample-gate'
|
|
11
|
+
import { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
9
12
|
import { session_cite } from '#scripts/issue/session-cite'
|
|
10
13
|
import { josh_command, type JoshResult } from '#scripts/josh/josh-run'
|
|
11
14
|
import { lane_close } from '#scripts/lane/lane-close'
|
|
@@ -23,8 +26,10 @@ import {
|
|
|
23
26
|
} from '#scripts/run/carry/run-carry'
|
|
24
27
|
import { run_carry_conversation } from '#scripts/run/carry/run-carry-conversation'
|
|
25
28
|
import { run_cut, type RunCut } from '#scripts/run/cut/run-cut'
|
|
29
|
+
import { run_stalled, type StallCause } from '#scripts/run/park/run-stalled'
|
|
26
30
|
import { run_label } from '#scripts/run/run-label'
|
|
27
31
|
import { run_merge } from './run-merge'
|
|
32
|
+
import { run_merge_close } from './run-merge-close'
|
|
28
33
|
import { run_merge_ship } from './run-merge-ship'
|
|
29
34
|
|
|
30
35
|
// The result of attempting to apply a carry change. Distinguishing `refused` from `applied` lets
|
|
@@ -48,14 +53,8 @@ const LANES = '--lanes'
|
|
|
48
53
|
const REPO_FLAG = '--repo'
|
|
49
54
|
const LANE_CLOSE_OCCASION = 'lane close'
|
|
50
55
|
const GIT_ENTRY = '.git'
|
|
51
|
-
const MERGE_CLOSER = 'pnpm josh run:merge'
|
|
52
|
-
const SINGLE_READ = { attempts: 1, interval_ms: 0 }
|
|
53
56
|
const OPEN_STATE = 'OPEN'
|
|
54
57
|
const SYNC_RETRY = { attempts: 3, interval_ms: 5000 }
|
|
55
|
-
// What the driver judged when it parks a child, stated on the issue.
|
|
56
|
-
const FAILED_CAUSE = 'the child’s session ended with its issue still open and unfinished.'
|
|
57
|
-
const CUT_RELAUNCH_CAUSE =
|
|
58
|
-
'its lane held a declared cut, but no successor could be relaunched from it (or it already was once).'
|
|
59
58
|
|
|
60
59
|
// One returned child's context, gathered from the command line by the CLI.
|
|
61
60
|
interface MergeContext {
|
|
@@ -73,6 +72,9 @@ interface MergeContext {
|
|
|
73
72
|
// The merged pull request that closes the child, when GitHub left the child OPEN after the merge —
|
|
74
73
|
// the one `merged` child whose issue this command still has to close.
|
|
75
74
|
merged_pr?: string | undefined
|
|
75
|
+
// The outage is not an API outage (`EndingSignals.is_streak_exempt`): re-dispatched, but not added
|
|
76
|
+
// to the streak.
|
|
77
|
+
is_streak_exempt?: boolean | undefined
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
interface FailedResult {
|
|
@@ -81,12 +83,16 @@ interface FailedResult {
|
|
|
81
83
|
// Set when the carry record refused the count because this session is not its owner. The caller
|
|
82
84
|
// surfaces this as a hard failure rather than continuing.
|
|
83
85
|
is_refused: boolean
|
|
84
|
-
//
|
|
85
|
-
// was parked (or refused) instead.
|
|
86
|
-
|
|
86
|
+
// What the child was released to wait on — its open `blocked-by` blockers, cited, and a start date
|
|
87
|
+
// still ahead — empty for a child that was parked (or refused) instead.
|
|
88
|
+
waits: ReadonlyArray<string>
|
|
89
|
+
// The short name of why a parked child was parked, which its park event carries.
|
|
90
|
+
cause?: string | undefined
|
|
87
91
|
}
|
|
88
92
|
|
|
89
|
-
const
|
|
93
|
+
const NO_WAITS: ReadonlyArray<string> = []
|
|
94
|
+
// The wait a `not-before` label alone records: the label carries no date, only that one is ahead.
|
|
95
|
+
const NOT_BEFORE_WAIT = 'a start date still ahead (`not-before`)'
|
|
90
96
|
|
|
91
97
|
// A captured `pnpm josh` subprocess: its output is read back rather than inherited, and a non-zero
|
|
92
98
|
// exit is a value to branch on rather than a throw. The step's stderr stays piped here — `run:merge`
|
|
@@ -165,8 +171,17 @@ async function sync_main(): Promise<void> {
|
|
|
165
171
|
if (!is_synced) throw new Error(`main:sync failed: ${error_output}`)
|
|
166
172
|
}
|
|
167
173
|
|
|
174
|
+
// `lane:close` says on stderr what it terminated — the child and whatever else ran from the checkout
|
|
175
|
+
// (joshuafolkken/kit#4304) — so that stderr is passed on rather than dropped with the capture. An
|
|
176
|
+
// `incomplete` close — a process that outlived even a SIGKILL — is logged and the run carries on: the
|
|
177
|
+
// merge cannot be undone, and the supervisor closes the lane again each pass until it ends
|
|
178
|
+
// (joshuafolkken/kit#4300).
|
|
168
179
|
async function close_lane(child: string): Promise<void> {
|
|
169
|
-
await josh(['lane:close', child])
|
|
180
|
+
const result = await josh(['lane:close', child])
|
|
181
|
+
const said = result.err?.trimEnd() ?? ''
|
|
182
|
+
|
|
183
|
+
if (said !== '') console.error(said)
|
|
184
|
+
if (result.code !== 0) console.error(`${session_cite.issue(child)}: lane:close is incomplete`)
|
|
170
185
|
}
|
|
171
186
|
|
|
172
187
|
async function stash_work(child: string, directory: string): Promise<void> {
|
|
@@ -202,22 +217,30 @@ function kept_lane_comment(directory: string): string {
|
|
|
202
217
|
return `The split left this issue's lane open: it still holds a commit, an uncommitted change or a live process — ${directory}`
|
|
203
218
|
}
|
|
204
219
|
|
|
205
|
-
// A child
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
async function
|
|
220
|
+
// A child that ended without a merge closes its lane only when the lane holds nothing — no commit, no
|
|
221
|
+
// change, no live process (`lane_vacant`); any other lane is kept for whoever resumes the issue.
|
|
222
|
+
// Returns the kept lane, `undefined` where there was none or it was closed. joshuafolkken/kit#4028:
|
|
223
|
+
// three children that ended doing nothing left lanes that filled the limit.
|
|
224
|
+
async function close_vacant_lane(child: string): Promise<LaneInfo | undefined> {
|
|
210
225
|
const lane = await lane_registry.find_open_lane(child)
|
|
211
226
|
|
|
212
|
-
if (lane === undefined) return
|
|
227
|
+
if (lane === undefined) return undefined
|
|
213
228
|
|
|
214
|
-
if (await lane_vacant.is_vacant(lane))
|
|
215
|
-
await close_lane(child)
|
|
229
|
+
if (!(await lane_vacant.is_vacant(lane))) return lane
|
|
216
230
|
|
|
217
|
-
|
|
218
|
-
|
|
231
|
+
await close_lane(child)
|
|
232
|
+
|
|
233
|
+
return undefined
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// A child promoted to an epic by a split leaves its lane holding a seat: the epic root is never
|
|
237
|
+
// dispatched again, so nothing else would ever close it. A lane it keeps is stated on the issue.
|
|
238
|
+
async function close_split_lane(child: string): Promise<void> {
|
|
239
|
+
const kept = await close_vacant_lane(child)
|
|
219
240
|
|
|
220
|
-
|
|
241
|
+
if (kept !== undefined) {
|
|
242
|
+
await git_gh_issue_write.issue_try_comment(child, kept_lane_comment(kept.directory))
|
|
243
|
+
}
|
|
221
244
|
}
|
|
222
245
|
|
|
223
246
|
// The progress comment is a human-readable mirror of the carry record, so it is best-effort and only
|
|
@@ -228,25 +251,8 @@ async function post_counters(ctx: MergeContext, carry: RunCarry | undefined): Pr
|
|
|
228
251
|
await git_gh_issue_write.issue_try_comment(ctx.epic, run_merge.counters_comment(carry))
|
|
229
252
|
}
|
|
230
253
|
|
|
231
|
-
// A child
|
|
232
|
-
//
|
|
233
|
-
// close that fails is reported with its recovery and does not undo the merge being counted.
|
|
234
|
-
async function close_merged_open(ctx: MergeContext): Promise<void> {
|
|
235
|
-
if (ctx.merged_pr === undefined) return
|
|
236
|
-
|
|
237
|
-
try {
|
|
238
|
-
await git_followup_issue_close.ensure_issue_closed(
|
|
239
|
-
{ issue_number: ctx.child, pr_url: ctx.merged_pr, closer: MERGE_CLOSER },
|
|
240
|
-
SINGLE_READ,
|
|
241
|
-
)
|
|
242
|
-
} catch {
|
|
243
|
-
console.error(
|
|
244
|
-
`${session_cite.issue(ctx.child)}: could not be closed — ${git_followup_issue_close.CLOSE_RECOVERY}`,
|
|
245
|
-
)
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// A merged child: count the merge (which resets the failure streak), return to the default branch,
|
|
254
|
+
// A merged child: close it if GitHub left it OPEN and close the epics it completed
|
|
255
|
+
// (`run-merge-close.ts`), count the merge (which resets the failure streak), return to the default branch,
|
|
250
256
|
// stash any uncommitted work the lane still holds and close it, and mirror the counters onto the epic. Returns the carry when the ownership check
|
|
251
257
|
// fails — the caller treats a non-undefined return as a hard refusal and must not offer a next child.
|
|
252
258
|
// Returns `undefined` on success.
|
|
@@ -255,7 +261,7 @@ async function do_merged(ctx: MergeContext): Promise<RunCarry | undefined> {
|
|
|
255
261
|
|
|
256
262
|
if (refused !== undefined) return refused
|
|
257
263
|
|
|
258
|
-
await
|
|
264
|
+
await run_merge_close.close_merged(ctx)
|
|
259
265
|
await sync_main()
|
|
260
266
|
const result = await apply_carry(ctx, {
|
|
261
267
|
...run_merge.change_of('merged'),
|
|
@@ -270,8 +276,17 @@ async function do_merged(ctx: MergeContext): Promise<RunCarry | undefined> {
|
|
|
270
276
|
return undefined
|
|
271
277
|
}
|
|
272
278
|
|
|
279
|
+
// A child that ended without a merge: end whatever of its process still runs, drop its stale
|
|
280
|
+
// `in-progress`, and close its lane if the child left nothing in it. The reap comes first, so the lane
|
|
281
|
+
// reads with no live process.
|
|
282
|
+
async function release_child(child: string): Promise<void> {
|
|
283
|
+
lane_reap.reap_child(await lane_registry.lane_location(child))
|
|
284
|
+
await run_label.unmark(child)
|
|
285
|
+
await close_vacant_lane(child)
|
|
286
|
+
}
|
|
287
|
+
|
|
273
288
|
function refused_result(carry: RunCarry): FailedResult {
|
|
274
|
-
return { carry, is_parked: false, is_refused: true,
|
|
289
|
+
return { carry, is_parked: false, is_refused: true, waits: NO_WAITS }
|
|
275
290
|
}
|
|
276
291
|
|
|
277
292
|
// The child's open `blocked-by` blockers, cited. A read that fails answers none, so the child is
|
|
@@ -284,66 +299,89 @@ async function open_blockers(child: string): Promise<ReadonlyArray<string>> {
|
|
|
284
299
|
.filter((blocker) => blocker.state === OPEN_STATE)
|
|
285
300
|
.map((blocker) => issue_cite.plain(blocker.number, blocker.repo))
|
|
286
301
|
} catch {
|
|
287
|
-
return
|
|
302
|
+
return NO_WAITS
|
|
288
303
|
}
|
|
289
304
|
}
|
|
290
305
|
|
|
291
|
-
//
|
|
292
|
-
// not
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
)
|
|
306
|
+
// Whether the child carries `not-before` — the body's start date copied to a label. Read only where the
|
|
307
|
+
// body could not be: the body is the source, so a label it no longer backs is never a wait.
|
|
308
|
+
async function has_not_before_label(ctx: MergeContext): Promise<boolean> {
|
|
309
|
+
const read = await issue_state_cli.read_issue(ctx.child, ctx.repo)
|
|
310
|
+
|
|
311
|
+
return read.kind === 'state' && has_label_name(read.state.labels, NOT_BEFORE_LABEL)
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// The child's declared start date while it is still ahead (joshuafolkken/kit#4076), or its `not-before`
|
|
315
|
+
// label when the body could not be read (joshuafolkken/kit#4102), or the samples it still waits on. A
|
|
316
|
+
// due date or none answers none, so the child is parked as before.
|
|
317
|
+
async function start_date_wait(ctx: MergeContext): Promise<ReadonlyArray<string>> {
|
|
318
|
+
const body = await git_gh_command.issue_get_body(ctx.child, ctx.repo)
|
|
319
|
+
|
|
320
|
+
if (body === undefined) return (await has_not_before_label(ctx)) ? [NOT_BEFORE_WAIT] : NO_WAITS
|
|
321
|
+
|
|
322
|
+
await issue_sample_gate.prime([body])
|
|
323
|
+
const reason = issue_not_before.waiting_reason(body)
|
|
324
|
+
|
|
325
|
+
return reason === undefined ? NO_WAITS : [reason]
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// A child that ended unfinished while an open blocker it records still has to land first, or while
|
|
329
|
+
// its declared start date is still ahead, is waiting, not failed: nothing is counted and
|
|
330
|
+
// `needs-decision` is not applied — when it runs is already recorded, so there is nothing for a person
|
|
331
|
+
// to decide — and its stale `in-progress` is dropped so the offer hands it back on its own once the
|
|
332
|
+
// blockers merge and the date arrives. The ownership guard is still asked, so a session that does not
|
|
333
|
+
// own the run cannot release a child it never dispatched.
|
|
334
|
+
async function do_waiting(ctx: MergeContext, waits: ReadonlyArray<string>): Promise<FailedResult> {
|
|
300
335
|
const refused = await refused_carry(ctx)
|
|
301
336
|
|
|
302
337
|
if (refused !== undefined) return refused_result(refused)
|
|
303
338
|
|
|
304
|
-
|
|
305
|
-
await
|
|
306
|
-
await git_gh_issue_write.issue_try_comment(ctx.child, run_merge.waiting_comment(blockers))
|
|
339
|
+
await release_child(ctx.child)
|
|
340
|
+
await git_gh_issue_write.issue_try_comment(ctx.child, run_merge.waiting_comment(waits))
|
|
307
341
|
|
|
308
|
-
return { carry: undefined, is_parked: false, is_refused: false,
|
|
342
|
+
return { carry: undefined, is_parked: false, is_refused: false, waits }
|
|
309
343
|
}
|
|
310
344
|
|
|
311
345
|
// A failed child: count the failure, end whatever of its process is still running (a child judged
|
|
312
346
|
// abandoned that hung on a wait loop would otherwise answer the pgrep liveness check `alive` for its
|
|
313
|
-
// issue number forever), drop the stale `in-progress`, and park it with `
|
|
314
|
-
// offer does not hand the same child straight back.
|
|
315
|
-
//
|
|
347
|
+
// issue number forever), drop the stale `in-progress`, and park it with `run:stalled` so the next
|
|
348
|
+
// offer does not hand the same child straight back. Not `needs-decision`: the failure is mechanical,
|
|
349
|
+
// and nothing is asked of a person but to fix its cause (joshuafolkken/kit#4102). Returns the record
|
|
350
|
+
// so the caller can read the streak against the guard. Returns `is_refused: true` without touching labels when the carry record
|
|
316
351
|
// rejected the count. A park is always explained on the issue — `cause` says what was judged, and the
|
|
317
352
|
// comment what was read and what a person does next.
|
|
318
|
-
async function park_failed(ctx: MergeContext, cause:
|
|
353
|
+
async function park_failed(ctx: MergeContext, cause: StallCause): Promise<FailedResult> {
|
|
319
354
|
const result = await apply_carry(ctx, run_merge.change_of('failed'))
|
|
320
355
|
|
|
321
356
|
if (result.kind === 'refused') return refused_result(result.carry)
|
|
322
357
|
|
|
323
358
|
const carry = result.kind === 'applied' ? result.carry : undefined
|
|
324
359
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
const
|
|
328
|
-
|
|
329
|
-
if (is_parked) {
|
|
330
|
-
const reason = { child: ctx.child, cause, carry, output: ctx.output }
|
|
360
|
+
await release_child(ctx.child)
|
|
361
|
+
const reason = { child: ctx.child, cause: cause.why, carry, output: ctx.output }
|
|
362
|
+
const park = await issue_park.apply(ctx.child, RUN_STALLED_LABEL, run_merge.park_comment(reason))
|
|
331
363
|
|
|
332
|
-
|
|
364
|
+
return {
|
|
365
|
+
carry,
|
|
366
|
+
is_parked: park.is_labelled,
|
|
367
|
+
is_refused: false,
|
|
368
|
+
waits: NO_WAITS,
|
|
369
|
+
cause: cause.short,
|
|
333
370
|
}
|
|
334
|
-
|
|
335
|
-
return { carry, is_parked, is_refused: false, blockers: NO_BLOCKERS }
|
|
336
371
|
}
|
|
337
372
|
|
|
338
|
-
// A child that ended unfinished: waiting when it records an open blocker
|
|
339
|
-
// otherwise (`park_failed`) —
|
|
340
|
-
// cause of the caller's, a child whose detached ship ended is parked for the ship's
|
|
341
|
-
|
|
342
|
-
|
|
373
|
+
// A child that ended unfinished: waiting when it records an open blocker or a start date still ahead
|
|
374
|
+
// (`do_waiting`), parked otherwise (`park_failed`) — a recorded order or date is never a decision for a
|
|
375
|
+
// person. Without a cause of the caller's, a child whose detached ship ended is parked for the ship's
|
|
376
|
+
// stop.
|
|
377
|
+
async function do_failed(ctx: MergeContext, cause?: StallCause): Promise<FailedResult> {
|
|
378
|
+
const waits = [...(await open_blockers(ctx.child)), ...(await start_date_wait(ctx))]
|
|
379
|
+
|
|
380
|
+
if (waits.length > 0) return await do_waiting(ctx, waits)
|
|
343
381
|
|
|
344
|
-
|
|
382
|
+
const judged = cause ?? run_merge_ship.cause(ctx.child) ?? run_stalled.SESSION_UNFINISHED
|
|
345
383
|
|
|
346
|
-
return await park_failed(ctx,
|
|
384
|
+
return await park_failed(ctx, judged)
|
|
347
385
|
}
|
|
348
386
|
|
|
349
387
|
// The outcome of counting an outage: the record to read the streak against, and whether the count was
|
|
@@ -359,13 +397,20 @@ interface OutageResult {
|
|
|
359
397
|
// the child, so it is re-dispatchable in the same run. Returns the record so the caller can read the
|
|
360
398
|
// outage streak against its guard. Returns `is_refused: true` without touching labels when the carry
|
|
361
399
|
// record rejected the count.
|
|
400
|
+
async function count_outage(ctx: MergeContext): Promise<ApplyCarryResult> {
|
|
401
|
+
if (ctx.is_streak_exempt !== true) return await apply_carry(ctx, run_merge.change_of('outage'))
|
|
402
|
+
|
|
403
|
+
const refused = await refused_carry(ctx)
|
|
404
|
+
|
|
405
|
+
return refused === undefined ? { kind: 'none' } : { kind: 'refused', carry: refused }
|
|
406
|
+
}
|
|
407
|
+
|
|
362
408
|
async function do_outage(ctx: MergeContext): Promise<OutageResult> {
|
|
363
|
-
const result = await
|
|
409
|
+
const result = await count_outage(ctx)
|
|
364
410
|
|
|
365
411
|
if (result.kind === 'refused') return { carry: result.carry, is_refused: true }
|
|
366
412
|
|
|
367
|
-
|
|
368
|
-
await run_label.unmark(ctx.child)
|
|
413
|
+
await release_child(ctx.child)
|
|
369
414
|
|
|
370
415
|
return { carry: result.kind === 'applied' ? result.carry : undefined, is_refused: false }
|
|
371
416
|
}
|
|
@@ -442,9 +487,9 @@ async function ask_next(ctx: MergeContext): Promise<string> {
|
|
|
442
487
|
}
|
|
443
488
|
|
|
444
489
|
const run_merge_steps = {
|
|
445
|
-
CUT_RELAUNCH_CAUSE,
|
|
446
490
|
ask_next,
|
|
447
491
|
close_split_lane,
|
|
492
|
+
release_child,
|
|
448
493
|
do_failed,
|
|
449
494
|
do_merged,
|
|
450
495
|
do_outage,
|