@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
|
@@ -26,7 +26,7 @@ import { run_tail_rule } from './run-tail-rule'
|
|
|
26
26
|
// killed at the turn's end before any supervisor exists. Issued in the foreground it returns at
|
|
27
27
|
// `launched` within the tool timeout, and the supervisor carries the rest. A backgrounded `ship` alone
|
|
28
28
|
// is not refused but rewritten into that foreground call (`foreground_input`); one chained after
|
|
29
|
-
// another long command is refused.
|
|
29
|
+
// another long command is refused. A foreground `ship` without the cap is given it the same way.
|
|
30
30
|
//
|
|
31
31
|
// **Its stop-time half reads the same fact from the other side.** A backgrounded task the transcript
|
|
32
32
|
// launched but never saw finish is still running, and in a child the stop about to happen kills it —
|
|
@@ -35,17 +35,23 @@ import { run_tail_rule } from './run-tail-rule'
|
|
|
35
35
|
|
|
36
36
|
// The josh subcommands that run long enough to be backgrounded, as `time_shell` names them — canonical,
|
|
37
37
|
// so the `ga` / `g` / `fu` aliases are covered by the one spelling.
|
|
38
|
-
|
|
38
|
+
// `ship`, `ship:wait` and `lane:plan` are run in the foreground at the cap rather than refused: a
|
|
39
|
+
// `ship:wait` left at the two-minute default is moved aside mid-chunk and dies with the turn, its verdict
|
|
40
|
+
// unread, and a cut `lane:plan` leaves its plan recorded with the check it gates unanswered.
|
|
41
|
+
const FOREGROUND_COMMANDS: ReadonlySet<string> = new Set(
|
|
42
|
+
['ship', 'ship:wait', 'lane:plan'].map((name) => `${time_shell.JOSH_PREFIX}${name}`),
|
|
43
|
+
)
|
|
39
44
|
const LONG_RUNNING_COMMANDS: ReadonlySet<string> = new Set([
|
|
40
45
|
...['gate', 'git', 'followup'].map((name) => `${time_shell.JOSH_PREFIX}${name}`),
|
|
41
|
-
|
|
46
|
+
...FOREGROUND_COMMANDS,
|
|
42
47
|
])
|
|
43
48
|
|
|
44
49
|
const BACKGROUND_KEY = 'run_in_background'
|
|
45
50
|
const TIMEOUT_KEY = 'timeout'
|
|
46
|
-
// The longest a foreground Bash call may run. A
|
|
47
|
-
// does may exceed the foreground cap, so the rewrite sets it: left at the two-minute default, a
|
|
48
|
-
// whose scoped pair outruns it is cut before `launched
|
|
51
|
+
// The longest a foreground Bash call may run. A `ship` rarely carries a `timeout`, and a backgrounded one
|
|
52
|
+
// that does may exceed the foreground cap, so the rewrite sets it: left at the two-minute default, a
|
|
53
|
+
// preflight whose scoped pair outruns it is cut before `launched` (#3027) or moved to the background and
|
|
54
|
+
// killed with the turn (#4101).
|
|
49
55
|
const FOREGROUND_TIMEOUT_MS = 600_000
|
|
50
56
|
|
|
51
57
|
function is_backgrounded(input: unknown): boolean {
|
|
@@ -56,13 +62,13 @@ function long_commands_of(command: string): Array<string> {
|
|
|
56
62
|
return time_shell.josh_commands_of(command).filter((name) => LONG_RUNNING_COMMANDS.has(name))
|
|
57
63
|
}
|
|
58
64
|
|
|
59
|
-
// A call whose long-running work is `ship` alone. In a child a foreground `ship` already
|
|
60
|
-
// itself after its preflight (`run-ship-cli.ts` → `should_detach`), so the only fault in
|
|
61
|
-
// it is the flag — and the flag is what the hook rewrites.
|
|
65
|
+
// A call whose long-running work is `ship` or `ship:wait` alone. In a child a foreground `ship` already
|
|
66
|
+
// detaches itself after its preflight (`run-ship-cli.ts` → `should_detach`), so the only fault in
|
|
67
|
+
// backgrounding it is the flag — and the flag is what the hook rewrites.
|
|
62
68
|
function ships_alone(command: string): boolean {
|
|
63
69
|
const names = long_commands_of(command)
|
|
64
70
|
|
|
65
|
-
return names.length > 0 && names.every((name) => name
|
|
71
|
+
return names.length > 0 && names.every((name) => FOREGROUND_COMMANDS.has(name))
|
|
66
72
|
}
|
|
67
73
|
|
|
68
74
|
function backgrounded_bash_command(call: GuardedCall): string | undefined {
|
|
@@ -101,38 +107,72 @@ function is_background_long_run(
|
|
|
101
107
|
return is_candidate(call) && is_lane_child()
|
|
102
108
|
}
|
|
103
109
|
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
// The input of a Bash call whose long-running work is `ship` alone, or `undefined` for any other call.
|
|
111
|
+
function ship_alone_input(call: GuardedCall): Record<string, unknown> | undefined {
|
|
112
|
+
if (call.name !== cost_blocks.BASH_TOOL || !json_value.is_record(call.input)) return undefined
|
|
113
|
+
|
|
114
|
+
return ships_alone(time_shell.bash_command(call.input)) ? call.input : undefined
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// A foreground call that already carries the foreground cap, which the harness never moves aside.
|
|
118
|
+
function is_capped_foreground(input: Record<string, unknown>): boolean {
|
|
119
|
+
const timeout = input[TIMEOUT_KEY]
|
|
120
|
+
|
|
121
|
+
return !is_backgrounded(input) && typeof timeout === 'number' && timeout >= FOREGROUND_TIMEOUT_MS
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// **A `ship` in a child is run in the foreground at the cap, not refused**. The refusal of a
|
|
125
|
+
// backgrounded one asked for nothing but the same call in the foreground — 14 of 41 lane `ship`
|
|
126
|
+
// refusals in one measured backlogrun were that round trip, paid at the run's largest context.
|
|
127
|
+
//
|
|
128
|
+
// A foreground one at the two-minute default is moved aside once its preflight outruns it, and dies
|
|
129
|
+
// the same way (joshuafolkken/kit#4101). The input with the flag cleared and the cap set, or
|
|
130
|
+
// `undefined` for every call this does not apply to.
|
|
108
131
|
function foreground_input(
|
|
109
132
|
call: GuardedCall,
|
|
110
133
|
is_lane_child: () => boolean = () => lane_child_marker.is_child_of(process.cwd()),
|
|
111
134
|
): Record<string, unknown> | undefined {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
135
|
+
const input = ship_alone_input(call)
|
|
136
|
+
|
|
137
|
+
if (input === undefined || is_capped_foreground(input) || !is_lane_child()) return undefined
|
|
115
138
|
|
|
116
|
-
return { ...
|
|
139
|
+
return { ...input, [BACKGROUND_KEY]: false, [TIMEOUT_KEY]: FOREGROUND_TIMEOUT_MS }
|
|
117
140
|
}
|
|
118
141
|
|
|
119
142
|
const FOREGROUND_NOTE =
|
|
120
|
-
|
|
121
|
-
'
|
|
122
|
-
'after the preflight.
|
|
143
|
+
"lane background: a lane child's `josh ship`, `josh ship:wait` or `josh lane:plan` backgrounded, by its flag or by " +
|
|
144
|
+
'outrunning the Bash timeout, dies with the headless turn — so it was run in the foreground at the ' +
|
|
145
|
+
'600000 ms cap, where `ship` detaches itself after the preflight. Then follow ' +
|
|
146
|
+
'`chain-rule.md` step 0 (`josh ship:wait` on `launched`).'
|
|
147
|
+
|
|
148
|
+
type LaunchedIds = (block: TranscriptBlock) => ReadonlyArray<string>
|
|
149
|
+
|
|
150
|
+
// One line's word on each id: a launch opens it, a finish notice closes it.
|
|
151
|
+
function apply_line(open: Set<string>, line: string, launched_ids: LaunchedIds): void {
|
|
152
|
+
const parsed = time_transcript_line.parse_line(line)
|
|
153
|
+
|
|
154
|
+
if (parsed === undefined) return
|
|
155
|
+
|
|
156
|
+
const launched = parsed.blocks.flatMap((block) => launched_ids(block))
|
|
157
|
+
|
|
158
|
+
for (const id of launched) open.add(id)
|
|
159
|
+
open.delete(parsed.finished_background)
|
|
160
|
+
}
|
|
123
161
|
|
|
124
162
|
// The launches `launched_ids` reads off the transcript tail that never saw their finish. A launch is
|
|
125
|
-
// read off its own tool result and a finish off the harness notice, both by
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const
|
|
133
|
-
const launched = blocks.flatMap((block) => launched_ids(block))
|
|
163
|
+
// read off its own tool result and a finish off the harness notice or a `TaskStop` result, both by
|
|
164
|
+
// `time_transcript_line`.
|
|
165
|
+
//
|
|
166
|
+
// **Read in order, so the later word on an id wins.** A subagent resumed by `SendMessage` runs again
|
|
167
|
+
// under the id its first run's notice already named; a set of every finish ever seen would read the
|
|
168
|
+
// resumed run as finished (joshuafolkken/kit#4347).
|
|
169
|
+
function unfinished_ids(tail: string, launched_ids: LaunchedIds): ReadonlyArray<string> {
|
|
170
|
+
const open = new Set<string>()
|
|
134
171
|
|
|
135
|
-
|
|
172
|
+
for (const line of tail.split('\n')) apply_line(open, line, launched_ids)
|
|
173
|
+
open.delete('')
|
|
174
|
+
|
|
175
|
+
return [...open]
|
|
136
176
|
}
|
|
137
177
|
|
|
138
178
|
// The background tasks the tail launched and never saw finish — commands and subagents alike,
|
|
@@ -147,11 +187,17 @@ function pending_agent_ids(tail: string): ReadonlyArray<string> {
|
|
|
147
187
|
return unfinished_ids(tail, (block) => [block.agent_id])
|
|
148
188
|
}
|
|
149
189
|
|
|
190
|
+
// The backgrounded commands alone — what tells a stop with only subagents left apart from one a
|
|
191
|
+
// command still holds.
|
|
192
|
+
function pending_command_ids(tail: string): ReadonlyArray<string> {
|
|
193
|
+
return unfinished_ids(tail, (block) => [block.background_id])
|
|
194
|
+
}
|
|
195
|
+
|
|
150
196
|
const LANE_BACKGROUND_REASON =
|
|
151
197
|
'⛔ lane background: this session is a dispatched lane child (`JOSH_LANE_CHILD`), a headless ' +
|
|
152
198
|
'process whose background tasks die when the turn ends. Hand over to ' +
|
|
153
|
-
'`pnpm josh ship --detach --review "<title> #<N>"`, issued in the foreground, then
|
|
154
|
-
'`launched`
|
|
199
|
+
'`pnpm josh ship --detach --review "<title> #<N>"`, issued in the foreground, then `josh ship:wait <N>` on ' +
|
|
200
|
+
'`launched` or end the turn. It fires on every occurrence ' +
|
|
155
201
|
'(`.claude/skills/workflow-commands/chain-rule.md` step 0).'
|
|
156
202
|
|
|
157
203
|
const LANE_BACKGROUND_STOP_REASON =
|
|
@@ -159,6 +205,15 @@ const LANE_BACKGROUND_STOP_REASON =
|
|
|
159
205
|
'it launched has not finished, and ending this turn kills it. Wait for it in the foreground, or ' +
|
|
160
206
|
're-issue the work through `pnpm josh ship --detach` — do not notify, stop or repeat your reply.'
|
|
161
207
|
|
|
208
|
+
// **Only subagents left: the wait that receives their answer** (joshuafolkken/kit#4803). Their completion
|
|
209
|
+
// notice is delivered only when a tool call ends, so one long hand-written loop holds it back until the
|
|
210
|
+
// loop itself gives up; short foreground calls, one at a time, let it in at the first one to end.
|
|
211
|
+
const LANE_AGENT_STOP_REASON =
|
|
212
|
+
'⛔ lane agent stop: this is a dispatched lane child (`JOSH_LANE_CHILD`) and a subagent it launched ' +
|
|
213
|
+
'has not finished; ending this turn kills it. Its completion notice arrives only when a tool call ' +
|
|
214
|
+
'ends: wait with one short foreground call at a time (`sleep 20`) until it arrives — never a loop ' +
|
|
215
|
+
'over its `.output`. Do not notify, stop or repeat your reply.'
|
|
216
|
+
|
|
162
217
|
// The row itself, so `delivered-rules.ts` spreads one entry. It fires on every occurrence (`decide`
|
|
163
218
|
// returns true): a child must never background these, so the route is always the detached ship, never
|
|
164
219
|
// a reissue. It declares no `keeps`: the detached ship is a different command, not this call made right.
|
|
@@ -167,10 +222,24 @@ const ROW = {
|
|
|
167
222
|
is_trigger: (call: GuardedCall): boolean => is_background_long_run(call),
|
|
168
223
|
reason: LANE_BACKGROUND_REASON,
|
|
169
224
|
decide: (): boolean => true,
|
|
225
|
+
// `pretool-guard.ts` rewrites a lone `josh ship` to the foreground rather than refusing it; this is
|
|
226
|
+
// the note it attaches, so `rule-value.ts` counts that rewrite as this row's delivery.
|
|
227
|
+
rewrite_note: FOREGROUND_NOTE,
|
|
228
|
+
// The Stop hook delivers the same rule at the turn's end, for the background task or subagent the
|
|
229
|
+
// turn would kill.
|
|
230
|
+
stop_reasons: [LANE_BACKGROUND_STOP_REASON, LANE_AGENT_STOP_REASON],
|
|
231
|
+
about: {
|
|
232
|
+
title: 'Lane child background push',
|
|
233
|
+
topic: '`.claude/skills/workflow-commands/background-commands.md`',
|
|
234
|
+
fires:
|
|
235
|
+
'a dispatched lane child backgrounding `josh gate` / `git` / `followup` / `ship`; it hands over `pnpm josh ship --detach`; the Stop hook also blocks ending a turn with its background task or subagent unfinished. Every occurrence',
|
|
236
|
+
quiet: 'not a lane child, or the foreground `ship --detach`',
|
|
237
|
+
},
|
|
170
238
|
}
|
|
171
239
|
|
|
172
240
|
const lane_background = {
|
|
173
241
|
FOREGROUND_NOTE,
|
|
242
|
+
LANE_AGENT_STOP_REASON,
|
|
174
243
|
LANE_BACKGROUND_REASON,
|
|
175
244
|
LANE_BACKGROUND_STOP_REASON,
|
|
176
245
|
ROW,
|
|
@@ -178,6 +247,7 @@ const lane_background = {
|
|
|
178
247
|
is_background_long_run,
|
|
179
248
|
pending_agent_ids,
|
|
180
249
|
pending_background_ids,
|
|
250
|
+
pending_command_ids,
|
|
181
251
|
}
|
|
182
252
|
|
|
183
253
|
export { lane_background }
|
|
@@ -109,6 +109,12 @@ const ROW = {
|
|
|
109
109
|
is_trigger: bash_triggers.on_bash_command(is_carry_conflict),
|
|
110
110
|
reason: LANE_CARRY_CONFLICT_REASON,
|
|
111
111
|
decide: (): boolean => true,
|
|
112
|
+
about: {
|
|
113
|
+
title: 'Lane child carry commands',
|
|
114
|
+
topic: '`.claude/skills/workflow-commands/backlogrun-lanes.md`',
|
|
115
|
+
fires: 'a dispatched lane child running `pnpm josh run:merge` / `run:carry`. Every occurrence',
|
|
116
|
+
quiet: 'not a lane child — the parent owns the run budget',
|
|
117
|
+
},
|
|
112
118
|
}
|
|
113
119
|
|
|
114
120
|
const lane_carry_conflict = {
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import os from 'node:os'
|
|
2
|
+
import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
|
|
3
|
+
import { command_memory, type ToolCall } from '#scripts/gate/command-memory'
|
|
4
|
+
import { core_weights } from '#scripts/gate/core-weights'
|
|
5
|
+
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
6
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
7
|
+
import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
|
|
8
|
+
import { time_shell } from '#scripts/time-runtime/time-shell'
|
|
9
|
+
import { bash_triggers } from './bash-triggers'
|
|
10
|
+
import { timed_rerun } from './timed-rerun'
|
|
11
|
+
|
|
12
|
+
// A dispatched lane child is stopped from running a heavy tool directly. The core budget
|
|
13
|
+
// (`scripts/gate/core-budget.ts`) counts only what a `josh` command reserves, so an `eslint`, `vitest`,
|
|
14
|
+
// `cspell` or `tsc` a lane agent launches itself is neither refused nor counted: it overlaps the other
|
|
15
|
+
// lanes' gates and shows up only as unexplained load to whatever is admitted next.
|
|
16
|
+
//
|
|
17
|
+
// **Every spelling collapses to the tool's name.** `command_memory.tool_calls_of` skips the wrapper
|
|
18
|
+
// words (`pnpm`, `npx`, `exec`, env assignments) and reads a shell's quoted script (`sh -c '…'`,
|
|
19
|
+
// `bash -c "…"`, `eval`) as the commands it runs, so `pnpm exec eslint`, `npx vitest`, `pnpm tsc`, a
|
|
20
|
+
// bare `cspell` and any of them inside `sh -c` are all read as the program they launch. A
|
|
21
|
+
// `pnpm josh …` reads as `josh` and passes — that is the budgeted path, and the command
|
|
22
|
+
// `pnpm josh reserved-run <weight> -- <command>` wraps is read as reserved.
|
|
23
|
+
//
|
|
24
|
+
// **A multi-worker eslint is refused even when reserved** (joshuafolkken/kit#4582): typed eslint holds a
|
|
25
|
+
// TypeScript program per worker, so `--concurrency 4` or `auto` held 12 GB in one lane and swapped the
|
|
26
|
+
// machine. `--concurrency off`, `1` and no flag pass.
|
|
27
|
+
//
|
|
28
|
+
// **Lane children only.** An interactive session outside a lane keeps its direct runs; the overlap this
|
|
29
|
+
// prevents is between concurrently dispatched lanes.
|
|
30
|
+
//
|
|
31
|
+
// **The commonest direct run is rewritten rather than refused** (joshuafolkken/kit#5147): the refusal's
|
|
32
|
+
// reissue was the same line behind `pnpm josh reserved-run <weight> --`, a round trip the hook can make
|
|
33
|
+
// itself. The weight is the gate's own for that tool — `core_weights.CORE_WEIGHTS`, and for vitest the
|
|
34
|
+
// workers `command_memory.workers_of` reads — so the claim matches what the gate claims. `reserved-run`
|
|
35
|
+
// runs its command as an argv, not a shell line, so only a line that is one command is wrapped: any
|
|
36
|
+
// chain, pipe, redirection, group, substitution, comment, env prefix or timer leaves it to the refusal,
|
|
37
|
+
// as does a multi-worker eslint, which no reservation makes safe. The wrapped line runs in the directory
|
|
38
|
+
// it was typed in (`reserved-run.ts` → `command_directory`).
|
|
39
|
+
|
|
40
|
+
const ESLINT = 'eslint'
|
|
41
|
+
const VITEST = 'vitest'
|
|
42
|
+
const HEAVY_TOOLS: ReadonlySet<string> = new Set([ESLINT, VITEST, 'cspell', 'tsc'])
|
|
43
|
+
const TOOL_WEIGHTS: Readonly<Partial<Record<string, number>>> = {
|
|
44
|
+
[ESLINT]: core_weights.CORE_WEIGHTS.lint,
|
|
45
|
+
tsc: core_weights.CORE_WEIGHTS.type_check,
|
|
46
|
+
cspell: core_weights.CORE_WEIGHTS.spell_check,
|
|
47
|
+
}
|
|
48
|
+
const SINGLE_CORE = 1
|
|
49
|
+
const RESERVED_RUN = 'pnpm josh reserved-run'
|
|
50
|
+
// Read on the quote-blanked line: a quoted `;` or `|` is text. `2>&1` applies to the wrapper alike.
|
|
51
|
+
const MULTI_COMMAND_SYNTAX = /[;|&<>()`#\n]|\$\(/u
|
|
52
|
+
const KEPT_REDIRECT = /2>&1/gu
|
|
53
|
+
const ENV_ASSIGNMENT = /^[A-Za-z_]\w*=/u
|
|
54
|
+
|
|
55
|
+
const RESERVED_NOTE =
|
|
56
|
+
'↻ lane direct tool: a lane child ran a heavy tool directly, so the line was wrapped in ' +
|
|
57
|
+
'`pnpm josh reserved-run <weight> --` to claim its cores beside the other lanes. Prefer ' +
|
|
58
|
+
'`pnpm josh lint:related` / `test:related` / `cspell:dot` — `docs/josh-commands-automation.md`.'
|
|
59
|
+
|
|
60
|
+
// The heavy tools the line launches outside a `reserved-run`. The cut is quote-aware, so a tool name
|
|
61
|
+
// inside a quoted argument (`git commit -m "run eslint"`) is never read as a command; a quoted script
|
|
62
|
+
// handed to a shell is.
|
|
63
|
+
function direct_calls(command: string): Array<ToolCall> {
|
|
64
|
+
return command_memory
|
|
65
|
+
.tool_calls_of(command)
|
|
66
|
+
.filter((call) => !call.is_reserved && HEAVY_TOOLS.has(call.name))
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// True when any command on the shell line launches one of the heavy tools outside a `reserved-run`.
|
|
70
|
+
function runs_heavy_tool(command: string): boolean {
|
|
71
|
+
return direct_calls(command).length > 0
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function weight_of(call: ToolCall, cores: number): number {
|
|
75
|
+
if (call.name === VITEST) return command_memory.workers_of(call, cores)
|
|
76
|
+
|
|
77
|
+
return TOOL_WEIGHTS[call.name] ?? SINGLE_CORE
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// True when the whole line is one command, so a `reserved-run` can carry it as its argv.
|
|
81
|
+
function is_one_command(command: string): boolean {
|
|
82
|
+
const judged = time_shell.blanked(command)
|
|
83
|
+
|
|
84
|
+
if (judged === undefined) return false
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
!MULTI_COMMAND_SYNTAX.test(judged.replaceAll(KEPT_REDIRECT, ' ')) &&
|
|
88
|
+
!ENV_ASSIGNMENT.test(judged)
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// A timed line stays as typed: `timed-rerun` reads the timer at the segment start, and a wrapper in front
|
|
93
|
+
// would hide it from that row.
|
|
94
|
+
function can_wrap(line: string, cores: number): boolean {
|
|
95
|
+
if (!is_one_command(line) || timed_rerun.is_timed_run(line)) return false
|
|
96
|
+
|
|
97
|
+
return !command_memory.runs_multi_worker_eslint(line, cores)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// The line behind `reserved-run` at its largest tool's weight, or `undefined` where it must be refused.
|
|
101
|
+
function reserved_command(
|
|
102
|
+
command: string,
|
|
103
|
+
cores: number = os.availableParallelism(),
|
|
104
|
+
): string | undefined {
|
|
105
|
+
const line = command.trim()
|
|
106
|
+
const calls = direct_calls(line)
|
|
107
|
+
|
|
108
|
+
if (!can_wrap(line, cores) || calls.length === 0) return undefined
|
|
109
|
+
|
|
110
|
+
const weight = Math.max(...calls.map((call) => weight_of(call, cores)))
|
|
111
|
+
|
|
112
|
+
return `${RESERVED_RUN} ${String(weight)} -- ${line}`
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function is_lane_bash(call: GuardedCall): boolean {
|
|
116
|
+
return call.name === cost_blocks.BASH_TOOL && lane_child_marker.is_child_of(process.cwd())
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// The call's input with its line wrapped, for a lane child alone; `undefined` where nothing is rewritten.
|
|
120
|
+
function reserved_input(call: GuardedCall): Record<string, unknown> | undefined {
|
|
121
|
+
if (!is_lane_bash(call) || !json_value.is_record(call.input)) return undefined
|
|
122
|
+
|
|
123
|
+
const command = reserved_command(time_shell.bash_command(call.input))
|
|
124
|
+
|
|
125
|
+
return command === undefined ? undefined : { ...call.input, command }
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// True when this session is a dispatched lane child launching a heavy tool directly, or eslint with
|
|
129
|
+
// more than one worker by any path.
|
|
130
|
+
function is_lane_direct_tool(
|
|
131
|
+
command: string,
|
|
132
|
+
is_lane_child: boolean = lane_child_marker.is_child_of(process.cwd()),
|
|
133
|
+
): boolean {
|
|
134
|
+
if (!is_lane_child) return false
|
|
135
|
+
|
|
136
|
+
return runs_heavy_tool(command) || command_memory.runs_multi_worker_eslint(command)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const LANE_DIRECT_TOOL_REASON =
|
|
140
|
+
'⛔ lane child running `eslint` / `vitest` / `cspell` / `tsc` directly, or multi-worker eslint: ' +
|
|
141
|
+
'it overlaps the other lanes. Run `pnpm josh lint:related`, `pnpm josh test:related`, ' +
|
|
142
|
+
'`pnpm josh cspell:dot` or `pnpm josh reserved-run <weight> -- <command>`, eslint at ' +
|
|
143
|
+
'`--concurrency off`. Only a one-command line is wrapped for you. Refused on every occurrence.'
|
|
144
|
+
|
|
145
|
+
// The row itself, so `delivered-rules.ts` spreads one entry; the shape is `lane-switch-main.ts`'s.
|
|
146
|
+
const ROW = {
|
|
147
|
+
id: 'lane-direct-tool',
|
|
148
|
+
is_trigger: bash_triggers.on_bash_command(is_lane_direct_tool),
|
|
149
|
+
reason: LANE_DIRECT_TOOL_REASON,
|
|
150
|
+
decide: (): boolean => true,
|
|
151
|
+
rewrite: reserved_input,
|
|
152
|
+
rewrite_note: RESERVED_NOTE,
|
|
153
|
+
about: {
|
|
154
|
+
title: 'Lane child running a heavy tool directly',
|
|
155
|
+
topic: '`docs/josh-commands-automation.md` → `josh reserved-run`',
|
|
156
|
+
fires:
|
|
157
|
+
"a dispatched lane child launching `eslint` / `vitest` / `cspell` / `tsc` (bare, `pnpm exec`, `npx`, inside `sh -c`), or eslint with `--concurrency` other than `off` / `1` by any path, `reserved-run` included. A one-command line is rewritten behind `pnpm josh reserved-run <weight> --` at the gate's weight; a chained, piped, redirected or env-prefixed line and a multi-worker eslint are refused, every occurrence",
|
|
158
|
+
quiet: 'not a lane child, or the run goes through `pnpm josh` with single-worker eslint',
|
|
159
|
+
},
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const lane_direct_tool = {
|
|
163
|
+
LANE_DIRECT_TOOL_REASON,
|
|
164
|
+
RESERVED_NOTE,
|
|
165
|
+
ROW,
|
|
166
|
+
is_lane_direct_tool,
|
|
167
|
+
reserved_command,
|
|
168
|
+
reserved_input,
|
|
169
|
+
runs_heavy_tool,
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export { lane_direct_tool }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { interactive_ask } from '#scripts/agent/interactive-ask'
|
|
2
2
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
3
3
|
import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
|
|
4
|
+
import { stop_rules } from './stop-rules'
|
|
4
5
|
|
|
5
6
|
// A dispatched lane child's interactive ask is refused and routed to the park procedure, delivered at
|
|
6
7
|
// the call it binds on.
|
|
@@ -43,8 +44,7 @@ function is_interactive_ask(
|
|
|
43
44
|
const LANE_INTERACTIVE_ASK_REASON =
|
|
44
45
|
'⛔ lane child interactive ask: this session is a dispatched lane child and cannot ask a ' +
|
|
45
46
|
'person, so park instead: ' +
|
|
46
|
-
|
|
47
|
-
'`pnpm josh issue:comment <N> --body-file <path>`, ' +
|
|
47
|
+
'`pnpm josh run:park <N> --body-file <path>` (it applies `needs-decision`), ' +
|
|
48
48
|
'the `confirmation` Telegram, stop. It fires on every occurrence ' +
|
|
49
49
|
'(`.claude/skills/workflow-commands/pre-gate-cut.md`, `backlogrun-park.md`).'
|
|
50
50
|
|
|
@@ -56,6 +56,16 @@ const ROW = {
|
|
|
56
56
|
is_trigger: is_interactive_ask,
|
|
57
57
|
reason: LANE_INTERACTIVE_ASK_REASON,
|
|
58
58
|
decide: (): boolean => true,
|
|
59
|
+
// A reply asking a person for the git index is the same ask, delivered by the Stop hook.
|
|
60
|
+
stop_reasons: [stop_rules.LANE_INDEX_REASON],
|
|
61
|
+
about: {
|
|
62
|
+
title: 'Lane child interactive ask',
|
|
63
|
+
topic:
|
|
64
|
+
'`.claude/skills/workflow-commands/pre-gate-cut.md` → "The interactive ask is refused one call earlier"',
|
|
65
|
+
fires:
|
|
66
|
+
"a dispatched lane child's `AskUserQuestion`; it hands over the park procedure; the Stop hook also blocks a reply asking a person for the git index. Every occurrence",
|
|
67
|
+
quiet: 'not a lane child, or not an interactive tool',
|
|
68
|
+
},
|
|
59
69
|
}
|
|
60
70
|
|
|
61
71
|
const lane_interactive_ask = { LANE_INTERACTIVE_ASK_REASON, ROW, is_interactive_ask }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
|
|
2
2
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
3
3
|
import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
4
|
+
import { run_park } from '#scripts/run/park/run-park'
|
|
4
5
|
import { bash_triggers } from './bash-triggers'
|
|
5
6
|
import { shell_segments } from './shell-segments'
|
|
6
7
|
|
|
@@ -19,15 +20,12 @@ import { shell_segments } from './shell-segments'
|
|
|
19
20
|
// confirmation` is the call every lane-child stop passes through. The agent that obeys this is always
|
|
20
21
|
// a `claude -p` child, so the rule leaves residency entirely (`prompts/collaboration-workflow/rule-delivery.md`).
|
|
21
22
|
//
|
|
22
|
-
// **
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
// reappearing inside its own check. So the row carries no `already_satisfied`: it fires once per run on
|
|
29
|
-
// the stop, the reason is a checklist rather than an accusation, and a child that already parked simply
|
|
30
|
-
// reissues. One wasted round trip on the compliant path is the safe direction; a missed park is not.
|
|
23
|
+
// **A parked child is silent, read off the local park record.** The park is a label on GitHub, which a
|
|
24
|
+
// `PreToolUse` guard cannot read (it answers synchronously, network calls are out), and scanning the
|
|
25
|
+
// transcript tail for the label is unsafe: a child that merely *read* `backlogrun-park.md` would look
|
|
26
|
+
// compliant. So `pnpm josh run:park` writes a local record once the comment and the label are both on
|
|
27
|
+
// the issue, and the guard reads it synchronously, the way the pre-gate cut guard reads the cut record
|
|
28
|
+
// (joshuafolkken/kit#4132). A child with no record still gets the once-per-run checklist.
|
|
31
29
|
|
|
32
30
|
// `josh notify`, named canonically — `shell_segments.is_josh_command` expands an alias before the match.
|
|
33
31
|
const NOTIFY_COMMANDS: ReadonlySet<string> = new Set(['notify'])
|
|
@@ -85,48 +83,73 @@ function is_parking_child(directory: string = process.cwd()): boolean {
|
|
|
85
83
|
return lane_child_marker.is_child_of(directory) && !lane_handoff.is_handed_off(directory)
|
|
86
84
|
}
|
|
87
85
|
|
|
88
|
-
|
|
86
|
+
// A parking child that has not parked yet: `run:park` left no record for its issue in this repository.
|
|
87
|
+
// Kept apart from `is_parking_child`, which `run:entry` reads to leave a lane child's stop to this row
|
|
88
|
+
// whether or not it has parked.
|
|
89
|
+
function is_unparked_child(directory: string = process.cwd()): boolean {
|
|
90
|
+
if (!is_parking_child(directory)) return false
|
|
91
|
+
|
|
92
|
+
const issue = lane_child_marker.marked_issue()
|
|
93
|
+
|
|
94
|
+
return issue === undefined || !run_park.is_parked_sync(issue, directory)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function is_unparked_stop(command: string, is_child: () => boolean = is_unparked_child): boolean {
|
|
89
98
|
if (!is_confirmation_notify(command)) return false
|
|
90
99
|
|
|
91
100
|
return is_child()
|
|
92
101
|
}
|
|
93
102
|
|
|
94
103
|
// **Keeping this rule is applying `needs-decision`**, the one act the park asks for before the stop.
|
|
95
|
-
// It reads an actual `Bash` command — a label application by REST or by
|
|
96
|
-
// transcript tail, so a doc read that quotes the command is not mistaken
|
|
104
|
+
// It reads an actual `Bash` command — `josh run:park`, or a label application by REST or by
|
|
105
|
+
// `gh issue edit` — never the transcript tail, so a doc read that quotes the command is not mistaken
|
|
106
|
+
// for the run making it. `run:park --clear` takes the park off, so it is not one.
|
|
97
107
|
const APPLIES_NEEDS_DECISION = new RegExp(
|
|
98
108
|
String.raw`(?:labels\[\]=|--add-label[= ]'?)${NEEDS_DECISION_LABEL}\b`,
|
|
99
109
|
'u',
|
|
100
110
|
)
|
|
111
|
+
const PARK_COMMANDS: ReadonlySet<string> = new Set(['run:park'])
|
|
112
|
+
const CLEAR_FLAG = /(?:^|\s)--clear\b/u
|
|
113
|
+
|
|
114
|
+
function is_park_command(segment: string): boolean {
|
|
115
|
+
return shell_segments.is_josh_command(segment, PARK_COMMANDS) && !CLEAR_FLAG.test(segment)
|
|
116
|
+
}
|
|
101
117
|
|
|
102
118
|
function records_the_park(command: string): boolean {
|
|
103
|
-
|
|
119
|
+
if (APPLIES_NEEDS_DECISION.test(command)) return true
|
|
120
|
+
|
|
121
|
+
return shell_segments.segments_of(command).some((segment) => is_park_command(segment))
|
|
104
122
|
}
|
|
105
123
|
|
|
106
124
|
// The instruction in the shape a refusal can carry: what the stop must leave behind, how to record it,
|
|
107
|
-
// and the
|
|
125
|
+
// and that the park is the stop itself — no notify follows it, since the `Stop` hook sends one still owed
|
|
126
|
+
// on the hold (`stop-rules.ts` → `needs_notify`). **The park procedure is named, not restated** — the
|
|
108
127
|
// single source is `backlogrun-park.md` → "park and continue", and a second copy here would be the
|
|
109
128
|
// clone `CLAUDE.md` prohibits.
|
|
110
129
|
const LANE_PARK_REASON =
|
|
111
130
|
'⛔ lane child park: this session is a dispatched lane child, so a stop for a person parks first: ' +
|
|
112
|
-
|
|
113
|
-
'`
|
|
114
|
-
'`needs-human-review` / `already-done` stop already is.
|
|
131
|
+
'`pnpm josh run:park <N> --body-file <path>` (question, options, stash — it applies ' +
|
|
132
|
+
'`needs-decision`); a ' +
|
|
133
|
+
'`needs-human-review` / `already-done` stop already is. The park is the stop: no notify ' +
|
|
134
|
+
'after it. Refused once per run ' +
|
|
115
135
|
'(`.claude/skills/workflow-commands/pre-gate-cut.md`).'
|
|
116
136
|
|
|
117
|
-
// The row itself, so `delivered-rules.ts` spreads one entry. **Once per run rather than `decide
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
// label-application `Bash` command, never the tail, so it is not fooled the same way; `reaches` stays
|
|
123
|
-
// `is_trigger`, since a compliant run issues the same confirmation notify and belongs in the
|
|
124
|
-
// denominator.
|
|
137
|
+
// The row itself, so `delivered-rules.ts` spreads one entry. **Once per run rather than `decide`.** The
|
|
138
|
+
// stop ends the turn, so it is not the recurring act `decide` is for. A parked child is excluded in the
|
|
139
|
+
// trigger itself (`is_unparked_child`), so the park record is the satisfaction and no
|
|
140
|
+
// `already_satisfied` reads the tail. `keeps` reads an actual park `Bash` command, never the tail, so a
|
|
141
|
+
// doc read that quotes one is not mistaken for it.
|
|
125
142
|
const ROW = {
|
|
126
143
|
id: 'lane-park',
|
|
127
144
|
is_trigger: bash_triggers.on_bash_command(is_unparked_stop),
|
|
128
145
|
reason: LANE_PARK_REASON,
|
|
129
146
|
keeps: bash_triggers.on_bash_command(records_the_park),
|
|
147
|
+
about: {
|
|
148
|
+
title: 'Lane child park',
|
|
149
|
+
topic: '`.claude/skills/workflow-commands/pre-gate-cut.md`',
|
|
150
|
+
fires: 'a dispatched lane child issuing `pnpm josh notify --task-type confirmation`',
|
|
151
|
+
quiet: 'not a lane child, or not a stop notification',
|
|
152
|
+
},
|
|
130
153
|
}
|
|
131
154
|
|
|
132
155
|
const lane_park = {
|
|
@@ -135,6 +158,7 @@ const lane_park = {
|
|
|
135
158
|
ROW,
|
|
136
159
|
is_confirmation_notify,
|
|
137
160
|
is_parking_child,
|
|
161
|
+
is_unparked_child,
|
|
138
162
|
is_unparked_stop,
|
|
139
163
|
mentions_confirmation_notify,
|
|
140
164
|
records_the_park,
|