@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,12 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { cost_cli } from '#scripts/cost-runtime/cost-cli'
|
|
3
4
|
import { git_followup_pending } from '#scripts/followup/git-followup-pending'
|
|
5
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
6
|
+
import { telegram_notify } from '#scripts/notify/telegram-notify'
|
|
4
7
|
import { release_scope_cli } from '#scripts/release/release-scope-cli'
|
|
5
|
-
import {
|
|
8
|
+
import { report_labels } from '#scripts/report/report-labels'
|
|
9
|
+
import { run_carry, type CarryRead } from '#scripts/run/carry/run-carry'
|
|
6
10
|
import { run_event_scope, type EventScope } from '#scripts/run/event/run-event-scope'
|
|
7
11
|
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
8
12
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
9
13
|
import { run_report } from './run-report'
|
|
14
|
+
import { run_report_handoff, type Handoff } from './run-report-handoff'
|
|
10
15
|
|
|
11
16
|
// `josh run:report` — the session-facing report, generated from the run's event stream rather than
|
|
12
17
|
// composed by hand. It reads the events the run appended, asks `release:scope`
|
|
@@ -18,8 +23,23 @@ import { run_report } from './run-report'
|
|
|
18
23
|
// **The body it prints is the Telegram body too.** `josh notify --body-file <file>` sends exactly this
|
|
19
24
|
// output, so the summary a session shows and the message a person reads off-screen are one string from one
|
|
20
25
|
// generator, never a second wording of the same facts.
|
|
26
|
+
//
|
|
27
|
+
// `--handoff` prints the `backlogrun` hand-off report (`run-report-handoff.ts`) from the same reads —
|
|
28
|
+
// the run record and the scoped stream — and sends it itself as the `confirmation`, the resume command
|
|
29
|
+
// as its `recommended` choice (joshuafolkken/kit#4161). The body is built with plain `#N` and linked
|
|
30
|
+
// here, at the print boundary, through `session_cite.text`.
|
|
21
31
|
|
|
32
|
+
const ARGV_OFFSET = 2
|
|
22
33
|
const SUCCESS_EXIT_CODE = 0
|
|
34
|
+
const FAILURE_EXIT_CODE = 1
|
|
35
|
+
const HANDOFF_FLAG = '--handoff'
|
|
36
|
+
const USAGE = `Usage: josh run:report [${HANDOFF_FLAG}]`
|
|
37
|
+
const NO_RECORD_NOTE =
|
|
38
|
+
'No readable run record, so there is no run to hand off. Begin one with `pnpm josh run:carry --begin` first.'
|
|
39
|
+
const HANDOFF_TITLE = 'backlogrun hand-off'
|
|
40
|
+
const HANDOFF_RECOVERY = 'If this did not arrive, the session transcript holds the same report.'
|
|
41
|
+
const NO_RESUME_NOTE =
|
|
42
|
+
'The run record names no resume command, so no hand-off confirmation was sent; the report above is the hand-off.'
|
|
23
43
|
|
|
24
44
|
// An absent or unreadable stream is an empty run, the same fail-quiet direction the stream's own reader
|
|
25
45
|
// takes — a report with no events is a report, not an error.
|
|
@@ -31,40 +51,108 @@ async function read_stream(): Promise<ReadonlyArray<RunEvent>> {
|
|
|
31
51
|
return run_event_stream.read_events(target)
|
|
32
52
|
}
|
|
33
53
|
|
|
54
|
+
// The run record this checkout holds, or `undefined` when the git directory cannot be resolved.
|
|
55
|
+
async function read_record(): Promise<CarryRead | undefined> {
|
|
56
|
+
const directory = await run_carry.repository_directory()
|
|
57
|
+
|
|
58
|
+
if (directory === undefined) return undefined
|
|
59
|
+
|
|
60
|
+
return run_carry.read_carry(run_carry.carry_path(directory))
|
|
61
|
+
}
|
|
62
|
+
|
|
34
63
|
// The invocation this report covers, taken from the run record that already holds the start time.
|
|
35
64
|
// A checkout whose git directory cannot be resolved has no record to read, which is the same
|
|
36
65
|
// undetermined answer an absent record gives — and neither one falls back to the whole stream.
|
|
37
|
-
|
|
38
|
-
|
|
66
|
+
function scope_of(read: CarryRead | undefined): EventScope {
|
|
67
|
+
if (read === undefined) return run_event_scope.UNKNOWN_EVENT_SCOPE
|
|
39
68
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return run_event_scope.scope_of(run_carry.read_carry(run_carry.carry_path(directory)))
|
|
69
|
+
return run_event_scope.scope_of(read)
|
|
43
70
|
}
|
|
44
71
|
|
|
45
72
|
// The three reads are independent, so they are issued together rather than one after another — the stream, the
|
|
46
73
|
// pending-merge count and the run record share no input.
|
|
47
|
-
async function
|
|
48
|
-
const [events, pending,
|
|
74
|
+
async function run_summary(): Promise<number> {
|
|
75
|
+
const [events, pending, read] = await Promise.all([
|
|
49
76
|
read_stream(),
|
|
50
77
|
git_followup_pending.read_pending({}),
|
|
51
|
-
|
|
78
|
+
read_record(),
|
|
52
79
|
])
|
|
53
80
|
const release = release_scope_cli.decide(pending)
|
|
54
81
|
|
|
55
|
-
process.stdout.write(`${run_report.build_report({ events, release, scope })}\n`)
|
|
82
|
+
process.stdout.write(`${run_report.build_report({ events, release, scope: scope_of(read) })}\n`)
|
|
56
83
|
|
|
57
84
|
return SUCCESS_EXIT_CODE
|
|
58
85
|
}
|
|
59
86
|
|
|
60
|
-
|
|
61
|
-
|
|
87
|
+
type CarriedRead = Extract<CarryRead, { kind: 'carried' }>
|
|
88
|
+
|
|
89
|
+
// The report is the hand-off, so it succeeds once printed. The send is `confirm`'s tolerant one, which
|
|
90
|
+
// already reports its own failure with `HANDOFF_RECOVERY` — a checkout with no Telegram credentials is
|
|
91
|
+
// one, and pointing it at `josh notify` would fail the same way. A record whose invocation names no
|
|
92
|
+
// resume command has no `recommended` to send.
|
|
93
|
+
async function send_handoff(handoff: Handoff): Promise<void> {
|
|
94
|
+
if (handoff.resume === undefined) {
|
|
95
|
+
console.error(NO_RESUME_NOTE)
|
|
96
|
+
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
await telegram_notify.confirm({
|
|
101
|
+
issue_title: HANDOFF_TITLE,
|
|
102
|
+
body: handoff.body,
|
|
103
|
+
recovery: HANDOFF_RECOVERY,
|
|
104
|
+
recommended: handoff.resume,
|
|
105
|
+
alternatives: [],
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function handoff_of(read: CarriedRead, events: ReadonlyArray<RunEvent>): Handoff {
|
|
110
|
+
return run_report_handoff.build_handoff({
|
|
111
|
+
carry: read.carry,
|
|
112
|
+
events: run_event_scope.scoped_events(events, scope_of(read)) ?? [],
|
|
113
|
+
figures: cost_cli.session_figures(),
|
|
114
|
+
labels: report_labels.session_labels(),
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async function run_handoff(): Promise<number> {
|
|
119
|
+
const [events, read] = await Promise.all([read_stream(), read_record()])
|
|
120
|
+
|
|
121
|
+
if (read?.kind !== 'carried') {
|
|
122
|
+
console.error(NO_RECORD_NOTE)
|
|
123
|
+
|
|
124
|
+
return FAILURE_EXIT_CODE
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const built = handoff_of(read, events)
|
|
128
|
+
const handoff = { ...built, body: session_cite.text(built.body) }
|
|
129
|
+
|
|
130
|
+
process.stdout.write(`${handoff.body}\n`)
|
|
131
|
+
await send_handoff(handoff)
|
|
132
|
+
|
|
133
|
+
return SUCCESS_EXIT_CODE
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
async function run(argv: ReadonlyArray<string> = []): Promise<number> {
|
|
137
|
+
if (argv.length === 0) return await run_summary()
|
|
138
|
+
if (argv.length === 1 && argv[0] === HANDOFF_FLAG) return await run_handoff()
|
|
139
|
+
|
|
140
|
+
console.error(USAGE)
|
|
141
|
+
|
|
142
|
+
return FAILURE_EXIT_CODE
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
146
|
+
process.exitCode = await run(argv)
|
|
62
147
|
}
|
|
63
148
|
|
|
64
149
|
const run_report_cli = {
|
|
150
|
+
NO_RECORD_NOTE,
|
|
151
|
+
NO_RESUME_NOTE,
|
|
152
|
+
USAGE,
|
|
65
153
|
run,
|
|
66
154
|
}
|
|
67
155
|
|
|
68
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
|
|
156
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
69
157
|
|
|
70
158
|
export { run_report_cli }
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { backlog_drive_restore } from '#scripts/backlog/backlog-drive-restore'
|
|
2
|
+
import type { SessionFigures } from '#scripts/cost-runtime/cost-cli'
|
|
3
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
4
|
+
import type { HandoffLabels, ReportLabels } from '#scripts/report/report-labels'
|
|
5
|
+
import { run_carry, type RunCarry } from '#scripts/run/carry/run-carry'
|
|
6
|
+
import type { RunEvent } from '#scripts/run/event/run-event-stream'
|
|
7
|
+
import { run_invocation } from '#scripts/run/run-invocation'
|
|
8
|
+
|
|
9
|
+
// `josh run:report --handoff` — the report a `backlogrun` writes when it hands the rest of a batch to a
|
|
10
|
+
// new session, generated from the values that already answer each line rather than filled in by hand:
|
|
11
|
+
// the run record (`run:carry`) names what merged, what is left and the command that resumes the run,
|
|
12
|
+
// the invocation's events name what parked, and `cost --cut`'s figures name why it stopped. **The
|
|
13
|
+
// hand-off is a fourth kind of stop**, so it carries the hand-off labels and never the completion
|
|
14
|
+
// report's `cause` / `fix` / `result` — an unfinished epic would read as finished.
|
|
15
|
+
//
|
|
16
|
+
// **The body is the Telegram body too**, as `run:report`'s is: the CLI prints it and sends it as the
|
|
17
|
+
// `confirmation`, the resume command as its `recommended` choice.
|
|
18
|
+
|
|
19
|
+
const LINE_SEPARATOR = '\n'
|
|
20
|
+
const LIST_SEPARATOR = ', '
|
|
21
|
+
const COST_COMMAND = '`pnpm josh cost --cut`'
|
|
22
|
+
|
|
23
|
+
interface HandoffInput {
|
|
24
|
+
carry: RunCarry
|
|
25
|
+
// This invocation's events, already scoped by `run-event-scope.ts`.
|
|
26
|
+
events: ReadonlyArray<RunEvent>
|
|
27
|
+
figures: SessionFigures
|
|
28
|
+
labels: ReportLabels
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
interface Handoff {
|
|
32
|
+
body: string
|
|
33
|
+
// The command that resumes the run, or `undefined` for a record whose invocation does not parse.
|
|
34
|
+
resume: string | undefined
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function issue_list(issues: ReadonlyArray<number>, labels: HandoffLabels): string {
|
|
38
|
+
if (issues.length === 0) return labels.none
|
|
39
|
+
|
|
40
|
+
return issues.map((issue) => issue_cite.plain(issue)).join(LIST_SEPARATOR)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// The children that parked in this invocation and never merged — named apart from the remaining list,
|
|
44
|
+
// because a parked child is settled for this run but is not done.
|
|
45
|
+
function parked_of(input: HandoffInput): ReadonlyArray<number> {
|
|
46
|
+
const merged = input.carry.merged_issues ?? []
|
|
47
|
+
|
|
48
|
+
return [...backlog_drive_restore.parked_issues(input.events)].filter(
|
|
49
|
+
(issue) => !merged.includes(issue),
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// **Never omitted**: it is the one line that tells this report from a completion report. A budget-only
|
|
54
|
+
// invocation named no list, so what is left is the pool rather than a count.
|
|
55
|
+
function remaining_line(input: HandoffInput, remaining: ReadonlyArray<number> | undefined): string {
|
|
56
|
+
const labels = input.labels.handoff
|
|
57
|
+
const parked = parked_of(input)
|
|
58
|
+
const listed = remaining === undefined ? labels.pool : issue_list(remaining, labels)
|
|
59
|
+
const count = remaining === undefined ? '' : ` (${String(remaining.length)})`
|
|
60
|
+
const parked_note =
|
|
61
|
+
parked.length === 0 ? '' : ` · ${labels.parked}: ${issue_list(parked, labels)}`
|
|
62
|
+
|
|
63
|
+
return `${listed}${count}${parked_note}`
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// An unmeasurable session quotes its verdict where the cost would be, never a `0`.
|
|
67
|
+
function measurement_line(figures: SessionFigures): string {
|
|
68
|
+
const cost = figures.cost === undefined ? figures.verdict : String(figures.cost)
|
|
69
|
+
|
|
70
|
+
return `${cost} / ${String(figures.threshold)}`
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function command_line(resume: string | undefined, labels: HandoffLabels): string {
|
|
74
|
+
return resume === undefined ? labels.none : `\`${resume}\``
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function body_lines(
|
|
78
|
+
input: HandoffInput,
|
|
79
|
+
handoff_resume: string | undefined,
|
|
80
|
+
): ReadonlyArray<string> {
|
|
81
|
+
const labels = input.labels.handoff
|
|
82
|
+
const remaining = run_carry.remaining_of(input.carry)
|
|
83
|
+
|
|
84
|
+
return [
|
|
85
|
+
`**${labels.title}**`,
|
|
86
|
+
'',
|
|
87
|
+
`- **${labels.done}**: ${issue_list(input.carry.merged_issues ?? [], labels)}`,
|
|
88
|
+
`- **${labels.remaining}**: ${remaining_line(input, remaining)}`,
|
|
89
|
+
`- **${labels.why_stopped}**: ${COST_COMMAND} → ${input.figures.verdict}`,
|
|
90
|
+
`- **${labels.next_command}**: ${command_line(handoff_resume, labels)}`,
|
|
91
|
+
'',
|
|
92
|
+
`**${input.labels.details}**`,
|
|
93
|
+
'',
|
|
94
|
+
`- ${labels.measurement}: ${measurement_line(input.figures)}`,
|
|
95
|
+
`- ${labels.handover}: ${labels.handover_text}`,
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Handed the same record, events and figures it returns the same report — nothing here reads a clock,
|
|
100
|
+
// the environment or the network, which is what the tests pin. The resume command is the record's own
|
|
101
|
+
// invocation: `run:carry` resumes a record only when the invocation matches it exactly, so a command
|
|
102
|
+
// shrunk to the remaining issues would be refused and its recovery would drop the carried counts.
|
|
103
|
+
function build_handoff(input: HandoffInput): Handoff {
|
|
104
|
+
const resume = run_invocation.rebuild(input.carry.invocation)
|
|
105
|
+
|
|
106
|
+
return { body: body_lines(input, resume).join(LINE_SEPARATOR), resume }
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const run_report_handoff = {
|
|
110
|
+
build_handoff,
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export type { Handoff, HandoffInput }
|
|
114
|
+
export { run_report_handoff }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { issue_state } from '#scripts/issue/issue-state'
|
|
2
2
|
import { issue_state_cli, type StateRead } from '#scripts/issue/issue-state-cli'
|
|
3
3
|
import { run_halfrun_resume } from './run-halfrun-resume'
|
|
4
4
|
import { run_prrun_resume, type PrrunToken } from './run-prrun-resume'
|
|
@@ -23,10 +23,6 @@ function is_closed(read: StateRead): boolean {
|
|
|
23
23
|
return read.kind === 'state' && read.state.state === CLOSED
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
function is_planned(read: StateRead): boolean {
|
|
27
|
-
return read.kind === 'state' && has_label_name(read.state.labels, PLANNED_LABEL)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
26
|
// The two stops are one hold record, so at most one is present; the `prrun` one is asked only when the
|
|
31
27
|
// `halfrun` one is not, which spares its pull-request read.
|
|
32
28
|
async function read_stop(
|
|
@@ -50,7 +46,7 @@ async function read_stage(issue: string): Promise<StageRead> {
|
|
|
50
46
|
is_closed: is_closed(issue_read),
|
|
51
47
|
is_prrun_stopped: stop.prrun_token !== undefined,
|
|
52
48
|
is_halfrun_stopped: stop.is_halfrun_stopped,
|
|
53
|
-
is_planned: is_planned(issue_read),
|
|
49
|
+
is_planned: issue_state.is_planned(issue_read),
|
|
54
50
|
})
|
|
55
51
|
|
|
56
52
|
return { state, prrun_token: stop.prrun_token }
|
|
@@ -14,6 +14,7 @@ import { run_prep, type PrepParts } from './run-prep'
|
|
|
14
14
|
import { run_prep_cli } from './run-prep-cli'
|
|
15
15
|
import { run_retrospective } from './run-retrospective'
|
|
16
16
|
import { run_step, type ParentInput, type StepInput } from './run-step'
|
|
17
|
+
import { run_step_lane_plan } from './run-step-lane-plan'
|
|
17
18
|
import { run_step_section } from './run-step-section'
|
|
18
19
|
|
|
19
20
|
// `josh run:step [<N>]` — print the run's next single action, followed by the section that governs it
|
|
@@ -165,11 +166,22 @@ async function run_parent(): Promise<number> {
|
|
|
165
166
|
return FAILURE_EXIT_CODE
|
|
166
167
|
}
|
|
167
168
|
|
|
168
|
-
|
|
169
|
+
// The action line, then — under `implement` — the `lane:plan` a lane child runs before its first edit.
|
|
170
|
+
// Only `implement` reads it, so no other step pays for the plan comment's request.
|
|
171
|
+
async function action_lines(input: StepInput, line: string): Promise<ReadonlyArray<string>> {
|
|
172
|
+
if (line !== run_step.IMPLEMENT) return [line]
|
|
173
|
+
const next = await run_step_lane_plan.line_for(input.issue_number, input.is_lane_child)
|
|
174
|
+
|
|
175
|
+
return next === undefined ? [line] : [line, next]
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
async function report({ input, ship_problems }: Gathered): Promise<number> {
|
|
169
179
|
const action = run_step.next_action(input)
|
|
170
180
|
|
|
171
|
-
|
|
172
|
-
|
|
181
|
+
const lines = await action_lines(input, action.line)
|
|
182
|
+
|
|
183
|
+
for (const line of lines) console.info(line)
|
|
184
|
+
// On stderr, so stdout stays the action lines and their rule: what `josh ship` would
|
|
173
185
|
// refuse on is said at every step, while it is still cheap to meet.
|
|
174
186
|
if (ship_problems.length > 0) console.error(run_prep.ship_body(ship_problems))
|
|
175
187
|
|
|
@@ -177,7 +189,7 @@ function report({ input, ship_problems }: Gathered): number {
|
|
|
177
189
|
// same failure, so a position missing its issue state is never read as a confident next step.
|
|
178
190
|
if (input.state === undefined) return FAILURE_EXIT_CODE
|
|
179
191
|
|
|
180
|
-
return run_step_section.print_for(action)
|
|
192
|
+
return run_step_section.print_for(action, input.is_lane_child)
|
|
181
193
|
}
|
|
182
194
|
|
|
183
195
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
@@ -191,7 +203,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
191
203
|
return FAILURE_EXIT_CODE
|
|
192
204
|
}
|
|
193
205
|
|
|
194
|
-
return report(await gather(issue_number))
|
|
206
|
+
return await report(await gather(issue_number))
|
|
195
207
|
}
|
|
196
208
|
|
|
197
209
|
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { backlog_plan_comment } from '#scripts/backlog/backlog-plan-comment'
|
|
2
|
+
import { lane_plan } from '#scripts/lane/lane-plan'
|
|
3
|
+
import { shell_quote } from '#scripts/lib/shell-quote'
|
|
4
|
+
|
|
5
|
+
// The `lane:plan` command a lane child runs before its first edit — `lane-plan-guard.ts` refuses that
|
|
6
|
+
// edit until the plan is cleared. joshuafolkken/kit#4910's child retried a refused Edit eight times
|
|
7
|
+
// before it ran `lane:plan`, since nothing it read named the step first (joshuafolkken/kit#4923).
|
|
8
|
+
// The paths are its plan comment's; with none, the child names its own.
|
|
9
|
+
|
|
10
|
+
const PATH_PLACEHOLDER = '<path>...'
|
|
11
|
+
|
|
12
|
+
// The command to print under `implement`, or `undefined` when not a lane child or its plan is cleared.
|
|
13
|
+
async function line_for(issue_number: string, is_lane_child: boolean): Promise<string | undefined> {
|
|
14
|
+
const issue = Number(issue_number)
|
|
15
|
+
|
|
16
|
+
if (!is_lane_child || !lane_plan.is_uncleared(issue, process.cwd())) return undefined
|
|
17
|
+
|
|
18
|
+
const paths = await backlog_plan_comment.plan_paths(issue)
|
|
19
|
+
const named =
|
|
20
|
+
paths.length === 0 ? PATH_PLACEHOLDER : paths.map((path) => shell_quote.word(path)).join(' ')
|
|
21
|
+
|
|
22
|
+
return `pnpm josh lane:plan ${issue_number} ${named}`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const run_step_lane_plan = { line_for }
|
|
26
|
+
|
|
27
|
+
export { run_step_lane_plan }
|
|
@@ -27,7 +27,8 @@ function reference(document: string, heading: string): SectionReference {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// The gate's chain governs both the implementation it follows and a stopped ship's report.
|
|
30
|
-
const
|
|
30
|
+
const CHAIN_RULE = 'chain-rule.md'
|
|
31
|
+
const CHAIN = reference(CHAIN_RULE, 'Run the review-to-merge chain')
|
|
31
32
|
const PROGRESS = 'backlogrun-progress.md'
|
|
32
33
|
|
|
33
34
|
// Keyed on a verdict token, or on the josh subcommand a command action runs. An action with no row —
|
|
@@ -47,6 +48,17 @@ const GOVERNING_SECTIONS: ReadonlyMap<string, SectionReference> = new Map([
|
|
|
47
48
|
['run:carry', reference(PROGRESS, 'The hand-off')],
|
|
48
49
|
])
|
|
49
50
|
|
|
51
|
+
// **A lane child reads its own step of the chain, never the whole of it** (joshuafolkken/kit#5016):
|
|
52
|
+
// the chain's step 1 opens with `josh main:merge`, which a lane child leaves to ship's sync, and a
|
|
53
|
+
// child handed the whole section ran it, moving the tree its scoped pair was green on. The step is
|
|
54
|
+
// the chain's labelled step 0, cited where it stands, so it is written once; it ends at the sibling
|
|
55
|
+
// item `1.`, so a blank line inside it would cut it short. A stopped ship's report reads it too.
|
|
56
|
+
const LANE_CHILD_STEP = reference(CHAIN_RULE, 'A lane child')
|
|
57
|
+
const LANE_CHILD_SECTIONS: ReadonlyMap<string, SectionReference> = new Map([
|
|
58
|
+
[run_step.IMPLEMENT, LANE_CHILD_STEP],
|
|
59
|
+
['ship', LANE_CHILD_STEP],
|
|
60
|
+
])
|
|
61
|
+
|
|
50
62
|
function key_of(action: StepAction): string {
|
|
51
63
|
if (action.kind !== 'command') return action.line
|
|
52
64
|
|
|
@@ -55,27 +67,34 @@ function key_of(action: StepAction): string {
|
|
|
55
67
|
return subcommand
|
|
56
68
|
}
|
|
57
69
|
|
|
58
|
-
function section_for(key: string): SectionReference | undefined {
|
|
59
|
-
|
|
70
|
+
function section_for(key: string, is_lane_child: boolean): SectionReference | undefined {
|
|
71
|
+
const lane_child_section = is_lane_child ? LANE_CHILD_SECTIONS.get(key) : undefined
|
|
72
|
+
|
|
73
|
+
return lane_child_section ?? GOVERNING_SECTIONS.get(key)
|
|
60
74
|
}
|
|
61
75
|
|
|
62
76
|
// Printed through `doc:section` itself, so the extent, the Bash-cap split and the refusal of an
|
|
63
77
|
// unresolved heading are that command's, never a second copy of them.
|
|
64
|
-
function print_section(key: string, root: string = process.cwd()): number {
|
|
65
|
-
const found = section_for(key)
|
|
78
|
+
function print_section(key: string, root: string = process.cwd(), is_lane_child = false): number {
|
|
79
|
+
const found = section_for(key, is_lane_child)
|
|
66
80
|
|
|
67
81
|
if (found === undefined) return SUCCESS_EXIT_CODE
|
|
68
82
|
|
|
69
83
|
return document_section_cli.run([found.document, found.heading], root)
|
|
70
84
|
}
|
|
71
85
|
|
|
72
|
-
function print_for(
|
|
73
|
-
|
|
86
|
+
function print_for(
|
|
87
|
+
action: StepAction,
|
|
88
|
+
is_lane_child = false,
|
|
89
|
+
root: string = process.cwd(),
|
|
90
|
+
): number {
|
|
91
|
+
return print_section(key_of(action), root, is_lane_child)
|
|
74
92
|
}
|
|
75
93
|
|
|
76
94
|
const run_step_section = {
|
|
77
95
|
ENTRY,
|
|
78
96
|
GOVERNING_SECTIONS,
|
|
97
|
+
LANE_CHILD_SECTIONS,
|
|
79
98
|
key_of,
|
|
80
99
|
print_for,
|
|
81
100
|
print_section,
|
package/scripts/run/run-step.ts
CHANGED
|
@@ -156,10 +156,13 @@ const KIND = run_event_stream.EVENT_KIND
|
|
|
156
156
|
const OFFER_BACKLOG = 'pnpm josh backlog:next'
|
|
157
157
|
const EVENT_ACTIONS: Record<string, (issue_number: string) => StepAction> = {
|
|
158
158
|
[KIND.PR_OPENED]: () => command('pnpm josh followup'),
|
|
159
|
-
[KIND.REVIEW_ROUND]: () =>
|
|
159
|
+
[KIND.REVIEW_ROUND]: (issue_number) =>
|
|
160
|
+
command(`pnpm josh review:round2 --record ${issue_number}`),
|
|
160
161
|
[KIND.MERGE]: merge_command,
|
|
161
162
|
[KIND.OUTAGE]: merge_command,
|
|
162
163
|
[KIND.PARK]: () => command(OFFER_BACKLOG),
|
|
164
|
+
// The child was released; `backlog:drive` holds the next launch until the limit resets.
|
|
165
|
+
[KIND.USAGE_LIMIT]: () => command(OFFER_BACKLOG),
|
|
163
166
|
[KIND.CUT]: (issue_number) => command(`pnpm josh run:cut --resume ${issue_number}`),
|
|
164
167
|
// A stall is undispatched ready work with a free lane, so its next step is exactly a park's: offer
|
|
165
168
|
// the backlog. The detector only reports the stall; reading it here as a dispatch is what turns the
|
|
@@ -177,7 +180,7 @@ const EVENT_ACTIONS: Record<string, (issue_number: string) => StepAction> = {
|
|
|
177
180
|
// budget command — a child that ran it would read the `busy` it got back as a competing session and
|
|
178
181
|
// park its Issue unimplemented. A merge or an outage is the parent's to classify, so a child at one
|
|
179
182
|
// has nothing to run and stops rather than being handed `run:merge`.
|
|
180
|
-
const PARENT_ONLY_EVENTS: ReadonlySet<string> = new Set([KIND.MERGE, KIND.OUTAGE])
|
|
183
|
+
const PARENT_ONLY_EVENTS: ReadonlySet<string> = new Set([KIND.MERGE, KIND.OUTAGE, KIND.USAGE_LIMIT])
|
|
181
184
|
|
|
182
185
|
// A stopped run's last owed step is the end-of-run retrospective. When it is not owed the position stops
|
|
183
186
|
// with no command to run.
|
|
@@ -271,7 +274,7 @@ function closed_action(input: StepInput): StepAction {
|
|
|
271
274
|
|
|
272
275
|
return {
|
|
273
276
|
kind: 'decide',
|
|
274
|
-
line: `decide: ${session_cite.issue(input.issue_number)} is closed but this tree holds uncommitted work — keep it with \`
|
|
277
|
+
line: `decide: ${session_cite.issue(input.issue_number)} is closed but this tree holds uncommitted work — keep it with \`pnpm josh stash:push "${message}"\` | carry it into a new issue`,
|
|
275
278
|
}
|
|
276
279
|
}
|
|
277
280
|
|
|
@@ -42,6 +42,8 @@ interface DetectPorts {
|
|
|
42
42
|
notify_stranded: (body: string) => Promise<boolean>
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
type SameProcess = NonNullable<Parameters<typeof run_stranded.supervisor_liveness>[1]>
|
|
46
|
+
|
|
45
47
|
interface RecordTargets {
|
|
46
48
|
carry: string
|
|
47
49
|
wake: string
|
|
@@ -151,6 +153,16 @@ function is_stranded_at(directory: string, ports: DetectPorts = DEFAULT_PORTS):
|
|
|
151
153
|
return input !== undefined && run_stranded.is_stranded(input)
|
|
152
154
|
}
|
|
153
155
|
|
|
156
|
+
// The default ports with both liveness probes asked through `same_process` — `run:board` hands the one
|
|
157
|
+
// that reads its own `ps` snapshot (joshuafolkken/kit#4263).
|
|
158
|
+
function ports_with(same_process: SameProcess): DetectPorts {
|
|
159
|
+
return {
|
|
160
|
+
...DEFAULT_PORTS,
|
|
161
|
+
is_owner_live: (carry) => run_carry.is_owner_live(carry, new Date(), same_process),
|
|
162
|
+
supervisor_liveness: (wake) => run_stranded.supervisor_liveness(wake, same_process),
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
154
166
|
// The judgement a supervisor asks of the run it is about to stop watching. The asker is that
|
|
155
167
|
// supervisor on its way out, so it is taken as gone, and so is an owner that is the asker itself
|
|
156
168
|
// (`run_carry.is_held_by_another`) — that owner is about to be gone. A
|
|
@@ -173,6 +185,7 @@ const run_stranded_detect = {
|
|
|
173
185
|
detect_and_report,
|
|
174
186
|
is_left_stranded,
|
|
175
187
|
is_stranded_at,
|
|
188
|
+
ports_with,
|
|
176
189
|
run_stranded_check,
|
|
177
190
|
}
|
|
178
191
|
|
|
@@ -9,7 +9,7 @@ import { run_watcher_guard } from './run-watcher-guard'
|
|
|
9
9
|
// through `run-watcher-hook.ts` so every tool call is checked.
|
|
10
10
|
//
|
|
11
11
|
// **Exits 0 (ok) or 1 (stale).** A non-zero exit is what the hook mechanism treats as a refusal —
|
|
12
|
-
// the same contract `
|
|
12
|
+
// the same contract `pretool:guard` holds.
|
|
13
13
|
|
|
14
14
|
const SUCCESS_EXIT_CODE = 0
|
|
15
15
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { lane_registry } from '#scripts/lane/lane-registry'
|
|
2
|
+
import { MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
2
3
|
import { run_progress_clock } from '#scripts/run/progress/run-progress-clock'
|
|
3
4
|
import { run_headless } from './run-headless'
|
|
4
5
|
|
|
@@ -18,7 +19,6 @@ import { run_headless } from './run-headless'
|
|
|
18
19
|
|
|
19
20
|
const WATCHER_TICK_MS = 30_000
|
|
20
21
|
const TICK_MULTIPLIER = 3
|
|
21
|
-
const MS_PER_SECOND = 1000
|
|
22
22
|
|
|
23
23
|
const STALE_THRESHOLD_MS = WATCHER_TICK_MS * TICK_MULTIPLIER
|
|
24
24
|
const STALE_THRESHOLD_S = STALE_THRESHOLD_MS / MS_PER_SECOND
|