@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
|
@@ -38,6 +38,7 @@ const UNKNOWN_VERDICT = 'unknown'
|
|
|
38
38
|
// The asking session is over the shared context-cut threshold, so an implementation cut was not
|
|
39
39
|
// resumed into it — the same refusal `run:carry` answers `over` with.
|
|
40
40
|
const OVER_VERDICT = 'over'
|
|
41
|
+
const SPLIT_UNRESOLVED_VERDICT = 'split-unresolved'
|
|
41
42
|
|
|
42
43
|
function report(verdict: string, code: number): number {
|
|
43
44
|
console.info(verdict)
|
|
@@ -127,12 +128,13 @@ function report_under_threshold(): number {
|
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
// **A ship reviewer takes no cut, of either phase** (joshuafolkken/kit#3623). Its supervisor is waiting
|
|
130
|
-
// on the findings
|
|
131
|
+
// on the findings it has yet to submit, so a relaunch would stand a second child in the lane beside
|
|
131
132
|
// the one the supervisor repairs with. Answered `not-a-lane`, the verdict that already means "nothing
|
|
132
|
-
// was cut and this process carries on".
|
|
133
|
+
// was cut and this process carries on". The message names no sink: its review prompt says whether it
|
|
134
|
+
// submits through `review:submit` or, on a lane that predates it, writes a path (joshuafolkken/kit#4799).
|
|
133
135
|
function report_reviewer(): number {
|
|
134
136
|
console.error(
|
|
135
|
-
'This session is a ship reviewer, which its supervisor is waiting on, so nothing was cut and nothing was relaunched.
|
|
137
|
+
'This session is a ship reviewer, which its supervisor is waiting on, so nothing was cut and nothing was relaunched. Finish the review in this process and submit its findings the way your review prompt says.',
|
|
136
138
|
)
|
|
137
139
|
|
|
138
140
|
return report(NOT_A_LANE_VERDICT, SUCCESS_EXIT_CODE)
|
|
@@ -174,6 +176,22 @@ function report_over(): number {
|
|
|
174
176
|
return report(OVER_VERDICT, FAILURE_EXIT_CODE)
|
|
175
177
|
}
|
|
176
178
|
|
|
179
|
+
function report_missing_supervisor(issue: string): number {
|
|
180
|
+
console.error(
|
|
181
|
+
`The OpenAI supervisor for ${session_cite.issue(issue)} is not live, so this nested process was not cut and can continue. Re-dispatch the lane to recover the supervisor.`,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
return report(FAILED_VERDICT, FAILURE_EXIT_CODE)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// The lane got the split notice and has answered it neither way, so nothing was cut and the run does
|
|
188
|
+
// not go on to the gate until it does (joshuafolkken/kit#4695). `note` says which answers it takes.
|
|
189
|
+
function report_split_unresolved(note: string): number {
|
|
190
|
+
console.error(note)
|
|
191
|
+
|
|
192
|
+
return report(SPLIT_UNRESOLVED_VERDICT, FAILURE_EXIT_CODE)
|
|
193
|
+
}
|
|
194
|
+
|
|
177
195
|
const run_cut_report = {
|
|
178
196
|
BAD_HANDOFF_VERDICT,
|
|
179
197
|
BUSY_VERDICT,
|
|
@@ -191,6 +209,7 @@ const run_cut_report = {
|
|
|
191
209
|
RELAUNCHED_CUT_MARKER,
|
|
192
210
|
RESUME_IMPL_VERDICT,
|
|
193
211
|
RESUME_VERDICT,
|
|
212
|
+
SPLIT_UNRESOLVED_VERDICT,
|
|
194
213
|
STALE_VERDICT,
|
|
195
214
|
SUCCESS_EXIT_CODE,
|
|
196
215
|
UNDER_THRESHOLD_VERDICT,
|
|
@@ -205,9 +224,11 @@ const run_cut_report = {
|
|
|
205
224
|
report_handed_off,
|
|
206
225
|
report_held_cut,
|
|
207
226
|
report_incomplete,
|
|
227
|
+
report_missing_supervisor,
|
|
208
228
|
report_over,
|
|
209
229
|
report_relaunched_cut,
|
|
210
230
|
report_reviewer,
|
|
231
|
+
report_split_unresolved,
|
|
211
232
|
report_stale,
|
|
212
233
|
report_under_threshold,
|
|
213
234
|
report_unknown,
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { cost_cli } from '#scripts/cost-runtime/cost-cli'
|
|
2
|
+
import { cost_verdict } from '#scripts/cost-runtime/cost-verdict'
|
|
3
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
4
|
+
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
5
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
6
|
+
import { run_cut, type RunCut } from './run-cut'
|
|
7
|
+
import { run_cut_report } from './run-cut-report'
|
|
8
|
+
import { run_cut_review } from './run-cut-review'
|
|
9
|
+
|
|
10
|
+
// `josh run:cut --resume <N>` — a fresh process asking whether it resumes a cut: it verifies the tree
|
|
11
|
+
// against the record and adopts it, answering which phase it resumes into. Taking a cut is
|
|
12
|
+
// `run-cut-cli.ts`'s.
|
|
13
|
+
|
|
14
|
+
const {
|
|
15
|
+
FRESH_VERDICT,
|
|
16
|
+
HANDED_OFF_VERDICT,
|
|
17
|
+
INCOMPLETE_VERDICT,
|
|
18
|
+
RESUME_IMPL_VERDICT,
|
|
19
|
+
RESUME_VERDICT,
|
|
20
|
+
SUCCESS_EXIT_CODE,
|
|
21
|
+
report,
|
|
22
|
+
report_busy,
|
|
23
|
+
report_handed_off,
|
|
24
|
+
report_incomplete,
|
|
25
|
+
report_over,
|
|
26
|
+
report_stale,
|
|
27
|
+
report_unreadable,
|
|
28
|
+
} = run_cut_report
|
|
29
|
+
|
|
30
|
+
// **The adoption is the resume-uniqueness guarantee**: it removes and creates exclusively, so of two
|
|
31
|
+
// racing resumes only one wins the create and the loser is answered `busy`.
|
|
32
|
+
// An implementation cut resumes back into implementation; a pre-gate one into the gate. The resuming
|
|
33
|
+
// child is told which by the verdict rather than reconstructing it from the record.
|
|
34
|
+
function resume_verdict_for(cut_record: RunCut): string {
|
|
35
|
+
return run_cut.resumes_into_implementation(cut_record.phase)
|
|
36
|
+
? RESUME_IMPL_VERDICT
|
|
37
|
+
: RESUME_VERDICT
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// **An implementation resume removes the record; a pre-gate one marks it handed off**.
|
|
41
|
+
// The cuts have different multiplicities sharing one record: the pre-gate cut fires once per lane, so
|
|
42
|
+
// its record must survive to answer a second resume `handed-off`; the implementation cut is guarded by the run's
|
|
43
|
+
// event stream rather than the cut record, so its record is cleared on resume — a lingering record
|
|
44
|
+
// would keep the pre-gate guard, which reads `carried_cut_sync`, silent for the rest of the run. A double
|
|
45
|
+
// cut stays impossible either way: `begin_cut`'s exclusive create is what prevents it.
|
|
46
|
+
function take_over(target: string, cut_record: RunCut): RunCut | undefined {
|
|
47
|
+
if (!run_cut.resumes_into_implementation(cut_record.phase)) {
|
|
48
|
+
return run_cut.adopt_cut(target, cut_record)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
run_cut.end_cut(target)
|
|
52
|
+
|
|
53
|
+
return cut_record
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// **An implementation resume appends a `resume` event**. It clears the record
|
|
57
|
+
// the `cut` event stood for, so the stream is what moves `run:step` back to implementation; a pre-gate
|
|
58
|
+
// resume keeps its record and appends nothing. Best-effort, as the cut's own append is.
|
|
59
|
+
async function emit_resume_event(issue: string, verdict: string): Promise<void> {
|
|
60
|
+
if (verdict !== RESUME_IMPL_VERDICT) return
|
|
61
|
+
|
|
62
|
+
await run_event_stream_emit.emit(
|
|
63
|
+
run_event_stream.EVENT_KIND.RESUME,
|
|
64
|
+
`${issue_cite.plain(issue)} resumed`,
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function adopt(target: string, cut_record: RunCut): Promise<number> {
|
|
69
|
+
const taken = take_over(target, cut_record)
|
|
70
|
+
|
|
71
|
+
if (taken === undefined) return report_busy(cut_record)
|
|
72
|
+
|
|
73
|
+
const verdict = resume_verdict_for(cut_record)
|
|
74
|
+
|
|
75
|
+
await run_cut_review.announce_resume(cut_record, verdict === RESUME_IMPL_VERDICT)
|
|
76
|
+
await emit_resume_event(cut_record.issue, verdict)
|
|
77
|
+
|
|
78
|
+
return report(verdict, SUCCESS_EXIT_CODE)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// A relaunched lane child and a fresh session both measure `under`, so only the session that took an
|
|
82
|
+
// implementation cut resumes over the threshold; unmeasurable is not refused.
|
|
83
|
+
function is_over_threshold_resume(cut_record: RunCut): boolean {
|
|
84
|
+
if (!run_cut.resumes_into_implementation(cut_record.phase)) return false
|
|
85
|
+
|
|
86
|
+
return cost_cli.session_verdict() === cost_verdict.OVER_VERDICT
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async function verify_and_adopt(
|
|
90
|
+
target: string,
|
|
91
|
+
cut_record: RunCut,
|
|
92
|
+
issue: string,
|
|
93
|
+
): Promise<number> {
|
|
94
|
+
const state = await run_cut.current_state()
|
|
95
|
+
const verdict = run_cut.classify_resume(cut_record, {
|
|
96
|
+
issue,
|
|
97
|
+
current_branch: state.branch,
|
|
98
|
+
is_dirty: state.is_dirty,
|
|
99
|
+
is_held: state.is_held,
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
if (verdict === HANDED_OFF_VERDICT) return report_handed_off(cut_record)
|
|
103
|
+
|
|
104
|
+
if (verdict === 'stale') return report_stale(cut_record)
|
|
105
|
+
|
|
106
|
+
if (verdict === INCOMPLETE_VERDICT) return report_incomplete(cut_record)
|
|
107
|
+
|
|
108
|
+
if (is_over_threshold_resume(cut_record)) return report_over()
|
|
109
|
+
|
|
110
|
+
return await adopt(target, cut_record)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async function resume(target: string, issue: string): Promise<number> {
|
|
114
|
+
const read = run_cut.read_cut(target)
|
|
115
|
+
|
|
116
|
+
if (read.kind === 'none') return report(FRESH_VERDICT, SUCCESS_EXIT_CODE)
|
|
117
|
+
|
|
118
|
+
if (read.kind === 'unreadable') return report_unreadable()
|
|
119
|
+
|
|
120
|
+
if (read.kind === 'expired') return report_stale(read.cut)
|
|
121
|
+
|
|
122
|
+
return await verify_and_adopt(target, read.cut, issue)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const run_cut_resume = {
|
|
126
|
+
resume,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export { run_cut_resume }
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { git_command } from '#scripts/git/git-command'
|
|
2
|
+
import { review_attest } from '#scripts/review/review-attest'
|
|
3
|
+
import { review_prior_findings } from '#scripts/review/review-prior-findings'
|
|
4
|
+
import { review_record } from '#scripts/review/review-record'
|
|
5
|
+
import { run_cut, type RunCut } from './run-cut'
|
|
6
|
+
import { run_cut_digest } from './run-cut-digest'
|
|
7
|
+
import { run_cut_handoff, type Handoff } from './run-cut-handoff'
|
|
8
|
+
|
|
9
|
+
// The review round an implementation cut has to carry across the process boundary
|
|
10
|
+
// (joshuafolkken/kit#4868). A lane child's in-session reviewer returns its findings into the
|
|
11
|
+
// conversation, and `review:record` is run after the fixes — so a cut between the two dropped the
|
|
12
|
+
// findings with the conversation, and the resumed child reran round 1 in full. The cut is refused
|
|
13
|
+
// until the round is recorded or its findings ride in the handoff, and the resume prints a recorded
|
|
14
|
+
// round back so it is continued, not rerun.
|
|
15
|
+
|
|
16
|
+
function unrecorded_note(issue: string): string {
|
|
17
|
+
return (
|
|
18
|
+
'a review round is attested on this branch but not recorded, and the handoff carries no ' +
|
|
19
|
+
`"findings" — run \`pnpm josh review:record --issue ${issue} [<finding> ...]\` before the cut, ` +
|
|
20
|
+
'or list the round\'s findings under "findings" in the handoff, so the resumed run does not ' +
|
|
21
|
+
'rerun round 1'
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const RECORDED_ROUND_HEADING =
|
|
26
|
+
'Round 1 is recorded for this issue — do not rerun it; continue the fixes, then the ship, ' +
|
|
27
|
+
'which reviews only what moved since:'
|
|
28
|
+
|
|
29
|
+
interface CutScope {
|
|
30
|
+
issue: string
|
|
31
|
+
branch: string
|
|
32
|
+
phase: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Attested on this branch, with no `review:record` line for the issue — the round the cut would lose.
|
|
36
|
+
async function has_unrecorded_round(issue: string, branch: string): Promise<boolean> {
|
|
37
|
+
const root = await git_command.repository_root()
|
|
38
|
+
|
|
39
|
+
if (!review_attest.is_attested_on({ branch }, root)) return false
|
|
40
|
+
|
|
41
|
+
const recorded = await review_record.check(Number(issue))
|
|
42
|
+
|
|
43
|
+
return recorded.status === 'missing'
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Only an implementation cut without carried findings can lose a round: a pre-gate cut is taken
|
|
47
|
+
// before any review.
|
|
48
|
+
function may_drop_round(scope: CutScope, handoff: Handoff | undefined): boolean {
|
|
49
|
+
if (!run_cut.resumes_into_implementation(scope.phase)) return false
|
|
50
|
+
|
|
51
|
+
return run_cut_handoff.carried_findings(handoff).length === 0
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// The note an implementation cut is refused with when it would drop an unrecorded round, else
|
|
55
|
+
// `undefined`.
|
|
56
|
+
async function unrecorded_refusal(
|
|
57
|
+
scope: CutScope,
|
|
58
|
+
handoff: Handoff | undefined,
|
|
59
|
+
): Promise<string | undefined> {
|
|
60
|
+
if (!may_drop_round(scope, handoff)) return undefined
|
|
61
|
+
|
|
62
|
+
const is_unrecorded = await has_unrecorded_round(scope.issue, scope.branch)
|
|
63
|
+
|
|
64
|
+
return is_unrecorded ? unrecorded_note(scope.issue) : undefined
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// What an implementation resume prints about a round recorded before the cut: the heading and the
|
|
68
|
+
// findings the stop log kept with their reasons; nothing when no round is recorded.
|
|
69
|
+
async function recorded_round_lines(issue: string): Promise<ReadonlyArray<string>> {
|
|
70
|
+
const recorded = await review_record.check(Number(issue))
|
|
71
|
+
|
|
72
|
+
if (recorded.status !== 'ok') return []
|
|
73
|
+
|
|
74
|
+
const findings = review_prior_findings.latest(issue, () => true)
|
|
75
|
+
|
|
76
|
+
return [RECORDED_ROUND_HEADING, ...findings.map((finding) => ` - ${finding}`)]
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// The carried instruction and work state, printed to standard error so the resumed session continues
|
|
80
|
+
// on what the run was told to do rather than on the tree alone — and, for an implementation resume,
|
|
81
|
+
// the round recorded before the cut. The record is cleared on adoption, so this is where it reaches
|
|
82
|
+
// the fresh process.
|
|
83
|
+
async function announce_resume(cut_record: RunCut, is_implementation: boolean): Promise<void> {
|
|
84
|
+
if (cut_record.handoff !== undefined) {
|
|
85
|
+
console.error(run_cut_handoff.describe_handoff(cut_record.handoff))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const digest = run_cut_digest.describe_digest(cut_record.digest)
|
|
89
|
+
|
|
90
|
+
if (digest !== undefined) console.error(digest)
|
|
91
|
+
|
|
92
|
+
if (!is_implementation) return
|
|
93
|
+
|
|
94
|
+
const lines = await recorded_round_lines(cut_record.issue)
|
|
95
|
+
|
|
96
|
+
if (lines.length > 0) console.error(lines.join('\n'))
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const run_cut_review = {
|
|
100
|
+
RECORDED_ROUND_HEADING,
|
|
101
|
+
announce_resume,
|
|
102
|
+
unrecorded_refusal,
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export { run_cut_review }
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { agent_role_profile } from '#scripts/agent/agent-role-profile'
|
|
2
2
|
import { backlog_budget } from '#scripts/backlog/backlog-budget'
|
|
3
|
-
import { CONTEXT_CUT_THRESHOLD } from '#scripts/cost-runtime/context-cut-threshold'
|
|
4
3
|
import { git_command } from '#scripts/git/git-command'
|
|
5
4
|
import { git_common_directory } from '#scripts/git/git-common-directory'
|
|
6
5
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
@@ -9,6 +8,7 @@ import { lane_child_invocation } from '#scripts/lane/lane-child-invocation'
|
|
|
9
8
|
import { json_value } from '#scripts/lib/json-value'
|
|
10
9
|
import { run_hold, type RunHold } from '#scripts/run/hold/run-hold'
|
|
11
10
|
import { z } from 'zod'
|
|
11
|
+
import { run_cut_digest, type SessionDigest } from './run-cut-digest'
|
|
12
12
|
import { run_cut_handoff, type Handoff } from './run-cut-handoff'
|
|
13
13
|
|
|
14
14
|
// A lane child is a detached `fullrun #<N>` process, and the thinking it accumulates while
|
|
@@ -45,11 +45,6 @@ const CUT_PREFIX = 'josh-run-cut-'
|
|
|
45
45
|
// `IMPLEMENTATION_PHASE` drops the thinking accumulated *during* implementation and resumes back into
|
|
46
46
|
// implementation (`resumes_into_implementation`); only the pre-gate cut resumes into the gate.
|
|
47
47
|
const { PRE_GATE_PHASE, IMPLEMENTATION_PHASE } = agent_role_profile
|
|
48
|
-
// **The measurement is the parent hand-off's, never a second one.** The lane child decides whether
|
|
49
|
-
// to take this cut with `pnpm josh cost --cut` — the same per-request billed-input measurement (`cost_verdict.per_request_cost`) the parent's
|
|
50
|
-
// `pnpm josh cost --cut` hand-off uses (`backlogrun-progress.md` → "The hand-off"). The shared
|
|
51
|
-
// threshold prevents the scheduler and worker boundaries from drifting apart.
|
|
52
|
-
const IMPLEMENTATION_CONTEXT_THRESHOLD = CONTEXT_CUT_THRESHOLD
|
|
53
48
|
// **The bound is `backlog-budget.ts`'s idle wait, imported rather than restated**, so the eight hours
|
|
54
49
|
// stay written once. A resume is expected within seconds of the cut, so this age is only a backstop
|
|
55
50
|
// against a fresh process that never started; an expired record is cleared and replaced by the next
|
|
@@ -92,6 +87,8 @@ interface RunCut {
|
|
|
92
87
|
// record of the scalar fields alone parses, while a resume into implementation refuses to continue without it (`classify_resume`
|
|
93
88
|
// → `incomplete`), so a session is never silently continued lacking the instruction it needs.
|
|
94
89
|
handoff?: Handoff | undefined
|
|
90
|
+
// What the cut session read and decided, printed on the resume (joshuafolkken/kit#5040).
|
|
91
|
+
digest?: SessionDigest | undefined
|
|
95
92
|
// Set when `run:merge` found this cut still unadopted after every process of the lane had gone and
|
|
96
93
|
// relaunched its successor itself. The fallback fires once per cut: a
|
|
97
94
|
// successor that dies again before adopting is not relaunched a second time, so a lane that keeps
|
|
@@ -121,6 +118,8 @@ interface CutSpec {
|
|
|
121
118
|
// The instruction and work state to carry, absent for a pre-gate cut that resumes into the gate
|
|
122
119
|
// rather than into implementation.
|
|
123
120
|
handoff?: Handoff | undefined
|
|
121
|
+
// What the cut session read and decided, derived from its transcript (`run-cut-digest.ts`).
|
|
122
|
+
digest?: SessionDigest | undefined
|
|
124
123
|
}
|
|
125
124
|
|
|
126
125
|
// What the resume classifier is asked about, gathered from the fresh process's own git state so the
|
|
@@ -155,6 +154,7 @@ const run_cut_schema = z.object({
|
|
|
155
154
|
cut_at: z.string(),
|
|
156
155
|
is_handed_off: z.boolean().optional(),
|
|
157
156
|
handoff: run_cut_handoff.handoff_schema.optional(),
|
|
157
|
+
digest: run_cut_digest.session_digest_schema.optional(),
|
|
158
158
|
is_merge_relaunched: z.boolean().optional(),
|
|
159
159
|
})
|
|
160
160
|
|
|
@@ -261,6 +261,7 @@ function fresh_cut(spec: CutSpec, now: Date): RunCut {
|
|
|
261
261
|
cut_at: now.toISOString(),
|
|
262
262
|
is_handed_off: true,
|
|
263
263
|
handoff: spec.handoff,
|
|
264
|
+
digest: spec.digest,
|
|
264
265
|
}
|
|
265
266
|
}
|
|
266
267
|
|
|
@@ -285,6 +286,16 @@ function record_within_bound(spec: CutSpec, now: Date = new Date()): boolean {
|
|
|
285
286
|
return within_handoff_bound(fresh_cut(spec, now))
|
|
286
287
|
}
|
|
287
288
|
|
|
289
|
+
// An implementation cut carries what the session read and decided (`run-cut-digest.ts`); a digest the
|
|
290
|
+
// bound cannot hold is dropped, so a cut is never refused for it, and a pre-gate cut never derives one.
|
|
291
|
+
function with_digest(spec: CutSpec, digest_of: () => SessionDigest | undefined): CutSpec {
|
|
292
|
+
if (spec.handoff === undefined) return spec
|
|
293
|
+
|
|
294
|
+
const digested = { ...spec, digest: digest_of() }
|
|
295
|
+
|
|
296
|
+
return record_within_bound(digested) ? digested : spec
|
|
297
|
+
}
|
|
298
|
+
|
|
288
299
|
// **Create-exclusively, exactly as `run-hold.ts` claims a tree.** A record already here means a cut is
|
|
289
300
|
// already in flight for this tree, so `undefined` is "do not launch a second one" rather than an
|
|
290
301
|
// error — the exclusive create is what makes a double cut, and so a double relaunch, impossible. A
|
|
@@ -455,7 +466,6 @@ const run_cut = {
|
|
|
455
466
|
CUT_MAX_AGE_HOURS,
|
|
456
467
|
CUT_MAX_AGE_MS,
|
|
457
468
|
END_COMMAND,
|
|
458
|
-
IMPLEMENTATION_CONTEXT_THRESHOLD,
|
|
459
469
|
IMPLEMENTATION_PHASE,
|
|
460
470
|
MAX_HANDOFF_BYTES,
|
|
461
471
|
PRE_GATE_PHASE,
|
|
@@ -466,6 +476,7 @@ const run_cut = {
|
|
|
466
476
|
classify,
|
|
467
477
|
classify_resume,
|
|
468
478
|
current_state,
|
|
479
|
+
with_digest,
|
|
469
480
|
cut_path,
|
|
470
481
|
describe_cut,
|
|
471
482
|
end_cut,
|
|
@@ -21,7 +21,7 @@ import { launch_priority } from '#scripts/run/launch-priority'
|
|
|
21
21
|
|
|
22
22
|
const NO_PID_NOTE = 'the process started without a pid'
|
|
23
23
|
const UNSAFE_NOTE =
|
|
24
|
-
'the wake command or its arguments contain characters that are not safe to execute'
|
|
24
|
+
'the wake command or its arguments are empty, over length, or contain characters that are not safe to execute'
|
|
25
25
|
|
|
26
26
|
// Provider-specific commands and flags are composed before this boundary. This module accepts only
|
|
27
27
|
// an argv vector and never infers policy from it; role/model/effort arrive separately as log metadata.
|
|
@@ -5,13 +5,14 @@ import { issue_watch } from '#scripts/issue/issue-watch'
|
|
|
5
5
|
import { session_cite } from '#scripts/issue/session-cite'
|
|
6
6
|
import { josh_command } from '#scripts/josh/josh-run'
|
|
7
7
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
8
|
+
import { lane_plan_check } from '#scripts/lane/lane-plan-check'
|
|
8
9
|
import { run_cut_report } from '#scripts/run/cut/run-cut-report'
|
|
9
10
|
import { run_event_plan } from '#scripts/run/event/run-event-plan'
|
|
10
11
|
import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
|
|
11
12
|
import { run_halfrun_resume } from '#scripts/run/run-halfrun-resume'
|
|
12
13
|
import { run_label } from '#scripts/run/run-label'
|
|
13
14
|
import { run_next } from '#scripts/run/run-next'
|
|
14
|
-
import {
|
|
15
|
+
import type { PrepParts } from '#scripts/run/run-prep'
|
|
15
16
|
import { run_prep_cli } from '#scripts/run/run-prep-cli'
|
|
16
17
|
import { run_prrun_resume } from '#scripts/run/run-prrun-resume'
|
|
17
18
|
import {
|
|
@@ -24,7 +25,9 @@ import { run_stage_read, type StageRead } from '#scripts/run/run-stage-read'
|
|
|
24
25
|
import { run_step } from '#scripts/run/run-step'
|
|
25
26
|
import { run_step_section } from '#scripts/run/run-step-section'
|
|
26
27
|
import { run_entry, type EntryParts } from './run-entry'
|
|
28
|
+
import { run_entry_spill } from './run-entry-spill'
|
|
27
29
|
import { run_entry_stop } from './run-entry-stop'
|
|
30
|
+
import { run_entry_trust, type TrustStop } from './run-entry-trust'
|
|
28
31
|
|
|
29
32
|
// `josh run:entry <N>` — one call for the fixed entry sequence a lane opens on. Rather than a round
|
|
30
33
|
// trip each on `run:hold`, `cost --cut`, `run:prep` and `run:step`, re-billing a lane's full context
|
|
@@ -50,6 +53,8 @@ const NEWLINE = '\n'
|
|
|
50
53
|
const HOLD_STOP_NOTE =
|
|
51
54
|
'(tree not held — see the reason above; clean up and retry, or release with `pnpm josh run:release`)'
|
|
52
55
|
const COST_STOP_NOTE = '(session budget spent — see the figure above; resume in a fresh session)'
|
|
56
|
+
const YIELD_NOTE =
|
|
57
|
+
'(lane given back at the entry — see the overlap above; end the session now, with no edit)'
|
|
53
58
|
const { BUDGET_REASON, HOLD_REASON } = run_entry_stop
|
|
54
59
|
const HALFRUN_RESUME_TOKEN = 'halfrun'
|
|
55
60
|
|
|
@@ -123,8 +128,9 @@ async function check_cost(): Promise<string> {
|
|
|
123
128
|
}
|
|
124
129
|
|
|
125
130
|
interface Reads {
|
|
126
|
-
|
|
131
|
+
prep: PrepParts
|
|
127
132
|
verdict: string
|
|
133
|
+
trust_stop: TrustStop | undefined
|
|
128
134
|
}
|
|
129
135
|
|
|
130
136
|
// The issue reads and the pre-implementation verdict, from the one gather `run:prep` and `run:next`
|
|
@@ -132,20 +138,33 @@ interface Reads {
|
|
|
132
138
|
// formatter, the verdict is `run:step`'s `pre_verdict` over the same parts.
|
|
133
139
|
async function gather_reads(issue_number: string): Promise<Reads> {
|
|
134
140
|
const reads = await run_prep_cli.gather(issue_number)
|
|
135
|
-
const
|
|
136
|
-
const verdict = run_step.pre_verdict(run_next.to_input(
|
|
141
|
+
const prep = run_prep_cli.to_parts(issue_number, reads)
|
|
142
|
+
const verdict = run_step.pre_verdict(run_next.to_input(prep))
|
|
143
|
+
const trust_stop = run_entry_trust.stop_of(reads.content, reads.state, issue_number)
|
|
137
144
|
|
|
138
|
-
return {
|
|
145
|
+
return { prep, verdict, trust_stop }
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function entry_text(parts: EntryParts): string {
|
|
149
|
+
return session_cite.text(run_entry.format_report(parts))
|
|
139
150
|
}
|
|
140
151
|
|
|
141
152
|
function emit(parts: EntryParts): number {
|
|
142
|
-
console.info(
|
|
153
|
+
console.info(entry_text(parts))
|
|
143
154
|
|
|
144
155
|
return run_entry.exit_code(parts)
|
|
145
156
|
}
|
|
146
157
|
|
|
147
|
-
// The
|
|
148
|
-
|
|
158
|
+
// The bundle emitted as it fits the Bash result, measured on the composite `emit` prints.
|
|
159
|
+
function emit_fitted(entry: Omit<EntryParts, 'report'>, prep: PrepParts): number {
|
|
160
|
+
const report = run_entry_spill.fit(prep, (text) => entry_text({ ...entry, report: text }))
|
|
161
|
+
|
|
162
|
+
return emit({ ...entry, report })
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// The summary of a run that stopped without a report — before it read the issue, or after reading an
|
|
166
|
+
// issue it will not run: the token that stopped it, no verdict, and the note that stands in for the
|
|
167
|
+
// report body.
|
|
149
168
|
function stop_report(issue_number: string, hold: string, cost: string, report: string): number {
|
|
150
169
|
return emit({ issue_number, hold, cost, verdict: run_entry.NO_VERDICT, report })
|
|
151
170
|
}
|
|
@@ -157,16 +176,37 @@ interface StopCall {
|
|
|
157
176
|
command: StageCommand
|
|
158
177
|
reason: string
|
|
159
178
|
should_release: boolean
|
|
179
|
+
recommended?: string
|
|
160
180
|
}
|
|
161
181
|
|
|
162
|
-
async function stop_run({ parts, command,
|
|
182
|
+
async function stop_run({ parts, command, ...notice }: StopCall): Promise<number> {
|
|
163
183
|
const code = stop_report(parts.issue_number, parts.hold, parts.cost, parts.report)
|
|
164
184
|
|
|
165
|
-
await run_entry_stop.stop({ issue_number: parts.issue_number, command,
|
|
185
|
+
await run_entry_stop.stop({ issue_number: parts.issue_number, command, ...notice })
|
|
166
186
|
|
|
167
187
|
return code
|
|
168
188
|
}
|
|
169
189
|
|
|
190
|
+
// **An untrusted author's issue stops after the reads, not before the claim** — the trust is decided
|
|
191
|
+
// by the read `run:prep` already makes, so the gate adds no call; the hold this call claimed is
|
|
192
|
+
// released. It exits non-zero though the hold and the budget both allowed the run. A trust read that
|
|
193
|
+
// failed stops here too, under its own reason (`run-entry-trust.ts`).
|
|
194
|
+
async function stop_untrusted(
|
|
195
|
+
{ issue_number, command }: EntryRequest,
|
|
196
|
+
{ hold, cost }: Pick<EntryParts, 'hold' | 'cost'>,
|
|
197
|
+
{ reason, report, recommended }: TrustStop,
|
|
198
|
+
): Promise<number> {
|
|
199
|
+
await stop_run({
|
|
200
|
+
parts: { issue_number, hold, cost, report },
|
|
201
|
+
command,
|
|
202
|
+
reason,
|
|
203
|
+
should_release: true,
|
|
204
|
+
recommended,
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
return FAILURE_EXIT_CODE
|
|
208
|
+
}
|
|
209
|
+
|
|
170
210
|
interface Resume {
|
|
171
211
|
token: string
|
|
172
212
|
code: number
|
|
@@ -250,17 +290,50 @@ async function mark_planned(issue_number: string, state: StageState): Promise<vo
|
|
|
250
290
|
if (state === run_stage.PLANNED) await run_event_plan.emit_plan(issue_number)
|
|
251
291
|
}
|
|
252
292
|
|
|
293
|
+
// **A lane child probes its declared paths before the investigation** (joshuafolkken/kit#5211): a running
|
|
294
|
+
// lane that planned one of them since dispatch takes the lane back here, at the cost of the entry
|
|
295
|
+
// alone, rather than after the investigation `lane:plan` would otherwise yield on. `lane:plan` has
|
|
296
|
+
// already released the hold and noted the yield, so this only reports it — no stop notice, as for
|
|
297
|
+
// any yield.
|
|
298
|
+
async function yields_at_entry(issue_number: string): Promise<boolean> {
|
|
299
|
+
if (!lane_child_marker.is_child_of(process.cwd())) return false
|
|
300
|
+
|
|
301
|
+
return await lane_plan_check.yield_at_entry(Number(issue_number))
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// The report of a lane given back at the entry, exiting as `lane:plan` does on a yield.
|
|
305
|
+
function yield_report(
|
|
306
|
+
issue_number: string,
|
|
307
|
+
{ hold, cost }: Pick<EntryParts, 'hold' | 'cost'>,
|
|
308
|
+
): number {
|
|
309
|
+
stop_report(issue_number, hold, cost, YIELD_NOTE)
|
|
310
|
+
|
|
311
|
+
return lane_plan_check.YIELD_EXIT_CODE
|
|
312
|
+
}
|
|
313
|
+
|
|
253
314
|
// The tree is held and the budget allows the run, so the issue is marked as running before its reads
|
|
254
315
|
// — the label then shows in the `labels:` line the report below carries.
|
|
255
|
-
|
|
316
|
+
// The plan event is written only once the run passed the trust gate.
|
|
317
|
+
async function proceed(
|
|
318
|
+
request: EntryRequest,
|
|
319
|
+
{ hold, cost }: Pick<EntryParts, 'hold' | 'cost'>,
|
|
320
|
+
state: StageState,
|
|
321
|
+
): Promise<number> {
|
|
322
|
+
const { issue_number } = request
|
|
323
|
+
|
|
256
324
|
await run_label.mark(issue_number)
|
|
257
325
|
const reads = await gather_reads(issue_number)
|
|
258
326
|
|
|
327
|
+
if (reads.trust_stop) return await stop_untrusted(request, { hold, cost }, reads.trust_stop)
|
|
328
|
+
if (await yields_at_entry(issue_number)) return yield_report(issue_number, { hold, cost })
|
|
329
|
+
|
|
330
|
+
await mark_planned(issue_number, state)
|
|
331
|
+
|
|
259
332
|
// The issue the report prints is the one the run has read, so it is the baseline a person's later
|
|
260
333
|
// update is measured against (`issue-watch.ts`).
|
|
261
334
|
await issue_watch.record_baseline_here(issue_number)
|
|
262
335
|
|
|
263
|
-
const code =
|
|
336
|
+
const code = emit_fitted({ issue_number, hold, cost, verdict: reads.verdict }, reads.prep)
|
|
264
337
|
|
|
265
338
|
// The entry's own read — the split assessment every run answers before its work — printed here so
|
|
266
339
|
// the reader does not spend a turn fetching it.
|
|
@@ -269,10 +342,8 @@ async function proceed(issue_number: string, hold: string, cost: string): Promis
|
|
|
269
342
|
return run_step_section.print_section(run_step_section.ENTRY)
|
|
270
343
|
}
|
|
271
344
|
|
|
272
|
-
async function claim_run(
|
|
273
|
-
{ issue_number, command }
|
|
274
|
-
state: StageState,
|
|
275
|
-
): Promise<number> {
|
|
345
|
+
async function claim_run(request: EntryRequest, state: StageState): Promise<number> {
|
|
346
|
+
const { issue_number, command } = request
|
|
276
347
|
const hold = await claim_hold(issue_number, command)
|
|
277
348
|
|
|
278
349
|
if (hold !== run_hold_cli.HOLD_VERDICT) {
|
|
@@ -289,9 +360,7 @@ async function claim_run(
|
|
|
289
360
|
return await stop_run({ parts, command, reason: BUDGET_REASON, should_release: true })
|
|
290
361
|
}
|
|
291
362
|
|
|
292
|
-
await
|
|
293
|
-
|
|
294
|
-
return await proceed(issue_number, hold, cost)
|
|
363
|
+
return await proceed(request, { hold, cost }, state)
|
|
295
364
|
}
|
|
296
365
|
|
|
297
366
|
// A carried cut is asked first, before anything is read (`run:cut --resume`); `kickoff` claims and cuts
|