@joshuafolkken/kit 1.1514.0 → 1.2114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -1
- package/.claude/agents/reviewer-verification.md +19 -0
- package/.claude/agents/reviewer.md +19 -0
- package/.claude/settings.json +5 -6
- package/.claude/skills/dependency-update/SKILL.md +9 -10
- package/.claude/skills/epic-commands/SKILL.md +26 -65
- package/.claude/skills/epic-commands/epic-bundle.md +3 -1
- package/.claude/skills/workflow-commands/SKILL.md +11 -11
- package/.claude/skills/workflow-commands/background-commands.md +13 -10
- package/.claude/skills/workflow-commands/backlogrun-child.md +12 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +18 -14
- package/.claude/skills/workflow-commands/backlogrun-park.md +18 -24
- package/.claude/skills/workflow-commands/backlogrun-progress.md +4 -5
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +6 -6
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -11
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +43 -28
- package/.claude/skills/workflow-commands/delegation.md +11 -10
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -10
- package/.claude/skills/workflow-commands/followup.md +16 -36
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -47
- package/.claude/skills/workflow-commands/fullrun.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +25 -16
- package/.claude/skills/workflow-commands/issue-fold-existing.md +2 -1
- package/.claude/skills/workflow-commands/issue-scout.md +2 -2
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +7 -12
- package/.claude/skills/workflow-commands/needs-human-review.md +9 -14
- package/.claude/skills/workflow-commands/observation-filing.md +4 -36
- package/.claude/skills/workflow-commands/observation-ledger.md +6 -4
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -37
- package/.claude/skills/workflow-commands/prerequisite.md +11 -16
- package/.claude/skills/workflow-commands/progress-watcher.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +3 -7
- package/.claude/skills/workflow-commands/retrospective.md +2 -2
- package/.claude/skills/workflow-commands/split-assessment.md +15 -1
- package/.claude/skills/workflow-commands/working-tree-hold.md +9 -9
- package/.codex/hooks.json +5 -5
- package/.github/actions/setup-node/action.yml +9 -0
- package/.github/actions/setup-pnpm/action.yml +10 -17
- package/.github/dependabot.yml +32 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/auto-tag.yml +45 -0
- package/.github/workflows/ci.yml +267 -17
- package/.github/workflows/dependabot-auto-merge.yml +63 -4
- package/.github/workflows/production.yml +8 -0
- package/.github/workflows/publish.yml +67 -46
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/settings.json +19 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +7 -18
- package/README.md +4 -2
- package/SECURITY.md +3 -3
- package/dist/CLAUDE.md +7 -18
- package/dist/commands/document-read-cli.js +883 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +81 -38
- package/dist/commands/read-set-cli.js +1927 -0
- package/dist/commands/run-prep-main.js +21174 -0
- package/dist/commands/run-step-cli.js +27733 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +39 -36
- package/dist/hooks/chunk-3GKE653K.js +6204 -0
- package/dist/hooks/chunk-45CJJOO7.js +1243 -0
- package/dist/hooks/chunk-5PM2JRGV.js +7780 -0
- package/dist/hooks/chunk-7SIUNQXK.js +3591 -0
- package/dist/hooks/chunk-CQD4LJE6.js +4858 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-OPSRGWFU.js} +1 -1
- package/dist/hooks/chunk-UJ3FPMMM.js +628 -0
- package/dist/hooks/chunk-VVNYJWEI.js +30 -0
- package/dist/hooks/chunk-Z6DQJKH3.js +2806 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +4 -6
- package/dist/hooks/inputs.json +460 -308
- package/dist/hooks/pretool-guard.js +8 -25
- package/dist/hooks/session-lang.js +135 -299
- package/dist/hooks/stop-guard.js +6496 -1799
- package/dist/josh.js +7412 -4228
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +276 -407
- package/eslint/base.js +1 -1
- package/eslint/rules/comment-why-only.js +108 -0
- package/lefthook/base.yml +3 -1
- package/package.json +23 -54
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +2 -2
- package/prompts/collaboration-workflow/file-edits.md +14 -17
- package/prompts/collaboration-workflow/issue-citation.md +0 -4
- package/prompts/collaboration-workflow/issue-template.md +54 -18
- package/prompts/collaboration-workflow/lane-instructions.md +3 -2
- package/prompts/collaboration-workflow/measurement.md +44 -0
- package/prompts/collaboration-workflow/operating-rules.md +15 -8
- package/prompts/collaboration-workflow/output-bounds.md +6 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +14 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +3 -2
- package/prompts/collaboration-workflow/rule-delivery.md +13 -1
- package/prompts/collaboration-workflow/shell-body.md +6 -16
- package/prompts/collaboration-workflow/turn-batching.md +0 -2
- package/prompts/collaboration-workflow/upstream-interrupt.md +15 -5
- package/prompts/collaboration-workflow/wip-cap.md +4 -2
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +9 -2
- package/prompts/review.md +65 -36
- package/prompts/testing-guide.md +9 -43
- package/scripts/agent/agent-argv.ts +14 -16
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-provider.ts +138 -0
- package/scripts/agent/agent-role-profile.ts +108 -156
- package/scripts/agent/agent-safe-text.ts +20 -5
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/api-usage-limit.ts +65 -0
- package/scripts/agent/claude-agent-argv.ts +19 -9
- package/scripts/agent/codex-agent-argv.ts +118 -22
- package/scripts/agent/usage-limit-reset.ts +179 -0
- package/scripts/auth/claude-token-output.ts +2 -2
- package/scripts/auto-ok/auto-ok-author.ts +53 -0
- package/scripts/auto-ok/auto-ok-cli.ts +25 -16
- package/scripts/auto-ok/auto-ok-judge-read.ts +12 -3
- package/scripts/auto-ok/auto-ok-judge-write.ts +46 -19
- package/scripts/auto-ok/auto-ok-judge.ts +13 -2
- package/scripts/auto-ok/auto-ok-main.ts +17 -0
- package/scripts/backlog/backlog-arrival.ts +14 -3
- package/scripts/backlog/backlog-budget-cli.ts +7 -33
- package/scripts/backlog/backlog-budget-main.ts +16 -0
- package/scripts/backlog/backlog-budget.ts +2 -3
- package/scripts/backlog/backlog-defect-priority.ts +5 -4
- package/scripts/backlog/backlog-drive-adopt.ts +67 -0
- package/scripts/backlog/backlog-drive-args.ts +4 -5
- package/scripts/backlog/backlog-drive-cli.ts +118 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +161 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-launch-pass.ts +90 -0
- package/scripts/backlog/backlog-drive-launch.ts +8 -2
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +73 -35
- package/scripts/backlog/backlog-drive-named.ts +81 -13
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +170 -0
- package/scripts/backlog/backlog-drive-restore.ts +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +96 -131
- package/scripts/backlog/backlog-gate-scope.ts +61 -0
- package/scripts/backlog/backlog-measure-close.ts +112 -0
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +78 -56
- package/scripts/backlog/backlog-occupied.ts +52 -39
- package/scripts/backlog/backlog-offer-cli.ts +6 -21
- package/scripts/backlog/backlog-offer-exclude.ts +15 -0
- package/scripts/backlog/backlog-offer-main.ts +12 -0
- package/scripts/backlog/backlog-offer.ts +36 -3
- package/scripts/backlog/backlog-overlap.ts +62 -10
- package/scripts/backlog/backlog-plan-cli.ts +4 -1
- package/scripts/backlog/backlog-plan-comment.ts +81 -0
- package/scripts/backlog/backlog-plan-read.ts +22 -5
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +60 -22
- package/scripts/backlog/backlog-rank.ts +70 -15
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +110 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +56 -15
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +13 -4
- package/scripts/backlog/backlogrun-restart.ts +97 -0
- package/scripts/backlog/backlogrun-stop.ts +79 -7
- package/scripts/behavior/behavior-cli.ts +2 -2
- package/scripts/behavior/behavior-rules.ts +47 -24
- package/scripts/build/build-bin.ts +2 -16
- package/scripts/build/build-claude-md.ts +0 -7
- package/scripts/build/build-commands.ts +0 -13
- package/scripts/build/build-hooks.ts +49 -48
- package/scripts/build/hook-bundle-stamp.ts +29 -11
- package/scripts/build/local-bin.ts +1 -1
- package/scripts/cases/cases-cli.ts +25 -13
- package/scripts/cases/cases-interaction-scan.ts +134 -0
- package/scripts/cases/cases-interaction.ts +183 -0
- package/scripts/cases/cases-logic.ts +39 -6
- package/scripts/ci/pr-classification-main.ts +18 -0
- package/scripts/ci/pr-classification.ts +10 -17
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +27 -25
- package/scripts/cost-runtime/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +67 -29
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-pricing.ts +9 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/cost-runtime/cost-verdict.ts +4 -1
- package/scripts/delegation/delegation-policy.ts +18 -5
- package/scripts/delegation/duplicate-read-guard.ts +1 -8
- package/scripts/delegation/investigation-guard.ts +12 -8
- package/scripts/delegation/investigation-reads.ts +48 -27
- package/scripts/dependabot/dependabot-cooldown.ts +195 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/discovery/repo-party.ts +80 -20
- package/scripts/discovery/session-owner-pin.ts +51 -0
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/command-reference-line-budget.ts +42 -0
- package/scripts/document/document-byte-budget.ts +18 -6
- package/scripts/document/document-checks.ts +20 -0
- package/scripts/document/document-ratchet-check.ts +101 -0
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +0 -8
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/document-section.ts +1 -0
- package/scripts/document/entry-read-budget.ts +7 -3
- package/scripts/document/issue-citation-budget.ts +94 -0
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-busy.ts +5 -12
- package/scripts/epic/epic-classify.ts +24 -15
- package/scripts/epic/epic-cli-argv.ts +33 -2
- package/scripts/epic/epic-cli-decide.ts +42 -0
- package/scripts/epic/epic-cli.ts +6 -38
- package/scripts/epic/epic-close.ts +112 -55
- package/scripts/epic/epic-cross-repo.ts +4 -7
- package/scripts/epic/epic-decide.ts +119 -0
- package/scripts/epic/epic-decision.ts +9 -0
- package/scripts/epic/epic-fetch.ts +6 -0
- package/scripts/epic/epic-graph.ts +8 -1
- package/scripts/epic/epic-issue.ts +8 -2
- package/scripts/epic/epic-label-age.ts +1 -1
- package/scripts/epic/epic-lane-offer.ts +39 -4
- package/scripts/epic/epic-next-main.ts +24 -0
- package/scripts/epic/epic-next.ts +6 -24
- package/scripts/epic/epic-outside-blocker.ts +6 -2
- package/scripts/epic/epic-parse.ts +9 -3
- package/scripts/epic/epic-rank.ts +5 -0
- package/scripts/epic/epic-read.ts +1 -0
- package/scripts/epic/epic-reconcile.ts +39 -0
- package/scripts/epic/epic-run.ts +10 -1
- package/scripts/epic/epic-solo.ts +50 -14
- package/scripts/epic/epic.ts +41 -7
- package/scripts/exports/unused-members-check.ts +62 -0
- package/scripts/exports/unused-members-cli.ts +6 -51
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-ci-path.ts +67 -0
- package/scripts/followup/followup-coderabbit-retrigger.ts +261 -0
- package/scripts/followup/followup-coderabbit-wait.ts +85 -0
- package/scripts/followup/followup-failed-tests.ts +160 -0
- package/scripts/followup/followup-job-needs.ts +100 -0
- package/scripts/followup/followup-job-rerun.ts +303 -0
- package/scripts/followup/followup-main-move.ts +113 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-finish.ts +43 -11
- package/scripts/followup/git-followup-pending.ts +3 -3
- package/scripts/followup/git-followup-stages.ts +52 -12
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-checks.ts +55 -16
- package/scripts/followup/git-pr-followup-wrapup.ts +32 -18
- package/scripts/followup/git-pr-followup.ts +96 -33
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/fresh-machine-script.ts +5 -9
- package/scripts/fresh-machine/specs/kit-test-backlogrun-python.json +2 -2
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +3 -3
- package/scripts/gate/busy-average.ts +90 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-related-pinned.ts +43 -0
- package/scripts/gate/check-related-reuse.ts +64 -0
- package/scripts/gate/check-related-section.ts +57 -0
- package/scripts/gate/check-related-unplanned.ts +34 -0
- package/scripts/gate/check-related.ts +265 -0
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +236 -28
- package/scripts/gate/core-budget-timing.ts +51 -0
- package/scripts/gate/core-budget.ts +111 -100
- package/scripts/gate/core-wait-record.ts +49 -0
- package/scripts/gate/core-wait.ts +62 -7
- package/scripts/gate/core-weights.ts +94 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-labels.ts +46 -0
- package/scripts/gate/gate-ledger.ts +44 -8
- package/scripts/gate/gate-plan.ts +130 -78
- package/scripts/gate/gate-report.ts +23 -9
- package/scripts/gate/gate-run-steps.ts +77 -9
- package/scripts/gate/gate-skip.ts +57 -8
- package/scripts/gate/gate-static-group.ts +60 -0
- package/scripts/gate/gate-steps.ts +14 -2
- package/scripts/gate/gate-tree.ts +4 -2
- package/scripts/gate/hook-gate-reuse.ts +19 -2
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/metrics-totals.ts +59 -0
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +76 -19
- package/scripts/gate/since-green.ts +70 -0
- package/scripts/gate/structural-checks.ts +96 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +70 -32
- package/scripts/gate/verification-inputs.ts +265 -0
- package/scripts/gate/verification-tail.ts +52 -0
- package/scripts/gh/gh-author-association.ts +117 -9
- package/scripts/gh/git-ai-review-scan.ts +5 -3
- package/scripts/gh/git-gh-api-path.ts +26 -2
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-comments-unreadable.ts +36 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-exec.ts +32 -2
- package/scripts/gh/git-gh-issue-read.ts +7 -1
- package/scripts/gh/git-gh-issue-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +75 -31
- package/scripts/gh/git-gh-issue.ts +19 -8
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +21 -9
- package/scripts/gh/git-gh-pr-graphql-state.ts +56 -0
- package/scripts/gh/git-gh-pr-read.ts +74 -13
- package/scripts/gh/git-gh-pr-rest.ts +4 -2
- package/scripts/gh/git-gh-pr-snapshot.ts +48 -20
- package/scripts/gh/git-gh-pr-too-large.ts +20 -0
- package/scripts/gh/git-gh-pr.ts +48 -22
- package/scripts/gh/git-gh-retry.ts +141 -0
- package/scripts/gh/git-pr-ai-review.ts +15 -6
- package/scripts/gh/git-pr-checks-eval.ts +42 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-checks.ts +5 -5
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +49 -2
- package/scripts/git/change-base.ts +4 -10
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths-sync.ts +63 -0
- package/scripts/git/changed-paths.ts +34 -2
- package/scripts/git/git-common-directory.ts +11 -1
- package/scripts/git/git-diff-reads.ts +91 -20
- package/scripts/git/git-error.ts +9 -2
- package/scripts/git/git-grep-hits.ts +85 -0
- package/scripts/git/git-location-environment.ts +1 -1
- package/scripts/git/git-merge-conflicts.ts +83 -0
- package/scripts/git/git-preflight.ts +37 -12
- package/scripts/git/git-push-transport.ts +1 -2
- package/scripts/git/git-schemas.ts +30 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/git-worktree.ts +13 -0
- package/scripts/git/gone-branch.ts +4 -1
- package/scripts/git/main-merge-budget-conflict.ts +89 -0
- package/scripts/git/main-merge-guard.ts +55 -18
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +59 -25
- package/scripts/git/main-merge.ts +77 -13
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/no-base-checkout.ts +127 -0
- package/scripts/git/stash/git-stash.ts +38 -6
- package/scripts/git/stash/{stash-pop-args.ts → stash-args.ts} +13 -10
- package/scripts/git/stash/stash-pop-cli.ts +6 -12
- package/scripts/git/stash/stash-pop-main.ts +12 -0
- package/scripts/git/stash/stash-push-cli.ts +86 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +38 -27
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/edited-cspell.ts +37 -11
- package/scripts/hooks/format-edited-file.ts +29 -25
- package/scripts/hooks/lane-plan-guard.ts +50 -0
- package/scripts/hooks/pre-commit-lint-switch.ts +9 -0
- package/scripts/hooks/pre-commit-lint.ts +44 -4
- package/scripts/hooks/pre-push-related-switch.ts +10 -0
- package/scripts/hooks/pre-push-unit.ts +77 -9
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +34 -19
- package/scripts/hooks/reserved-run.ts +81 -10
- package/scripts/hooks/run-hook.sh +30 -6
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/step-zero-notice.ts +6 -1
- package/scripts/hooks/stop-actions.ts +5 -36
- package/scripts/hooks/stop-guard.ts +20 -15
- package/scripts/init/distributed-paths.ts +1 -0
- package/scripts/init/hook-command-rewrite.ts +23 -5
- package/scripts/init/hook-launch.ts +17 -17
- package/scripts/init/init-actions.ts +0 -6
- package/scripts/init/init-ai-copy.ts +10 -36
- package/scripts/init/init-bootstrap.ts +9 -8
- package/scripts/init/init-dry-run-report.ts +1 -1
- package/scripts/init/init-dry-run.ts +1 -1
- package/scripts/init/init-file-action.ts +7 -9
- package/scripts/init/init-logic-json-merge.ts +2 -2
- package/scripts/init/init-logic-migrate.ts +9 -82
- package/scripts/init/init-logic.ts +3 -2
- package/scripts/init/init-main.ts +12 -0
- package/scripts/init/init.ts +5 -12
- package/scripts/init/kit-development-versions.ts +3 -7
- package/scripts/init/kit-written-paths.ts +2 -2
- package/scripts/init/project-profile.ts +5 -4
- package/scripts/init/tsconfig-preset-migration.ts +2 -1
- package/scripts/init/vscode-tasks.ts +1 -1
- package/scripts/issue/aggregation-split.ts +52 -0
- package/scripts/issue/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +78 -0
- package/scripts/issue/defect-origin-main.ts +11 -0
- package/scripts/issue/defect-origin.ts +114 -0
- package/scripts/issue/defect-rate-cli.ts +38 -179
- package/scripts/issue/defect-rate.ts +0 -16
- package/scripts/issue/defect-report-cli.ts +128 -0
- package/scripts/issue/defect-report-format.ts +56 -0
- package/scripts/issue/defect-report-main.ts +11 -0
- package/scripts/issue/defect-report.ts +160 -0
- package/scripts/issue/effect-audit-cli.ts +178 -0
- package/scripts/issue/effect-audit.ts +185 -0
- package/scripts/issue/expected-effect-lint.ts +65 -9
- package/scripts/issue/git-next-issues.ts +5 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +74 -0
- package/scripts/issue/issue-cite-cli.ts +1 -12
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -7
- package/scripts/issue/issue-closing-pr.ts +8 -1
- package/scripts/issue/issue-comment-cli.ts +10 -24
- package/scripts/issue/issue-comment-main.ts +12 -0
- package/scripts/issue/issue-evidence-exit.ts +102 -0
- package/scripts/issue/issue-file-cap.ts +58 -0
- package/scripts/issue/issue-file-cli.ts +131 -36
- package/scripts/issue/issue-file-deferral.ts +52 -0
- package/scripts/issue/issue-file-fold.ts +29 -10
- package/scripts/issue/issue-file-interrupt.ts +85 -0
- package/scripts/issue/issue-file-lane-hint.ts +30 -0
- package/scripts/issue/issue-file.ts +56 -19
- package/scripts/issue/issue-fold-cli.ts +2 -11
- package/scripts/issue/issue-fold-main.ts +12 -0
- package/scripts/issue/issue-labels.ts +97 -89
- package/scripts/issue/issue-lint-cli.ts +29 -12
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +34 -0
- package/scripts/issue/issue-measured-close.ts +58 -0
- package/scripts/issue/issue-merged.ts +19 -2
- package/scripts/issue/issue-not-before-label.ts +135 -0
- package/scripts/issue/issue-not-before.ts +114 -0
- package/scripts/issue/issue-number-shape.ts +15 -1
- package/scripts/issue/issue-park.ts +28 -0
- package/scripts/issue/issue-plan-cli.ts +151 -0
- package/scripts/issue/issue-priority-cli.ts +60 -0
- package/scripts/issue/issue-priority-raise.ts +55 -0
- package/scripts/issue/issue-priority.ts +282 -0
- package/scripts/issue/issue-rank.ts +27 -4
- package/scripts/issue/issue-read-cli.ts +35 -16
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +62 -13
- package/scripts/issue/issue-release-cli.ts +0 -10
- package/scripts/issue/issue-release-main.ts +13 -0
- package/scripts/issue/issue-release.ts +7 -12
- package/scripts/issue/issue-sample-gate.ts +213 -0
- package/scripts/issue/issue-sample-prime.ts +127 -0
- package/scripts/issue/issue-sample-required.ts +57 -0
- package/scripts/issue/issue-sample-source.ts +77 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-search.ts +124 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-state.ts +13 -1
- package/scripts/issue/issue-template-section.ts +43 -0
- package/scripts/issue/issue-watch-diff.ts +87 -16
- package/scripts/issue/issue-watch-hook.ts +11 -2
- package/scripts/issue/issue-watch.ts +55 -11
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/markdown-section.ts +1 -0
- package/scripts/issue/measure-declaration.ts +121 -0
- package/scripts/issue/measure-rerun-cli.ts +7 -65
- package/scripts/issue/plan-consumers-cli.ts +39 -0
- package/scripts/issue/plan-consumers-main.ts +11 -0
- package/scripts/issue/plan-consumers-section.ts +76 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/issue/reproduction-measure.ts +3 -1
- package/scripts/issue/size-estimate.ts +90 -0
- package/scripts/issue/trusted-measure.ts +84 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +17 -44
- package/scripts/josh/durable-state-migrate.ts +105 -0
- package/scripts/josh/durable-state.ts +112 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-aliases.ts +95 -0
- package/scripts/josh/josh-command-map.ts +1 -79
- package/scripts/josh/josh-command-types.ts +12 -6
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +160 -161
- package/scripts/josh/josh-commands-backlog.ts +82 -16
- package/scripts/josh/josh-commands-clone.ts +1 -0
- package/scripts/josh/josh-commands-development.ts +142 -101
- package/scripts/josh/josh-commands-document.ts +43 -1
- package/scripts/josh/josh-commands-epic.ts +171 -0
- package/scripts/josh/josh-commands-hooks.ts +25 -2
- package/scripts/josh/josh-commands-issue-write.ts +200 -0
- package/scripts/josh/josh-commands-issue.ts +156 -24
- package/scripts/josh/josh-commands-lane.ts +187 -3
- package/scripts/josh/josh-commands-lint.ts +34 -10
- package/scripts/josh/josh-commands-maintenance.ts +127 -4
- package/scripts/josh/josh-commands-pause.ts +29 -0
- package/scripts/josh/josh-commands-progress.ts +87 -0
- package/scripts/josh/josh-commands-project.ts +138 -9
- package/scripts/josh/josh-commands-review.ts +159 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +217 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-test-check.ts +80 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-environment-file.ts +43 -3
- package/scripts/josh/josh-in-process.ts +2 -2
- package/scripts/josh/josh-logic.ts +11 -16
- package/scripts/josh/josh-run.ts +19 -1
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- package/scripts/josh/run-record-path.ts +15 -0
- package/scripts/josh/session-language-cli.ts +4 -8
- package/scripts/josh/session-language-main.ts +13 -0
- package/scripts/josh/session-language.ts +6 -1
- package/scripts/josh/shared-cache.ts +90 -0
- package/scripts/josh/stamp-file.ts +20 -17
- package/scripts/lane/lane-adopt-cli.ts +98 -0
- package/scripts/lane/lane-adopt.ts +208 -0
- package/scripts/lane/lane-await.ts +56 -20
- package/scripts/lane/lane-baseline.ts +123 -0
- package/scripts/lane/lane-breakdown-cli.ts +64 -0
- package/scripts/lane/lane-breakdown-implement.ts +170 -0
- package/scripts/lane/lane-breakdown-laps.ts +107 -0
- package/scripts/lane/lane-breakdown-pinned.ts +76 -0
- package/scripts/lane/lane-breakdown-text.ts +145 -0
- package/scripts/lane/lane-breakdown.ts +239 -0
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +84 -22
- package/scripts/lane/lane-child-invocation.ts +17 -2
- package/scripts/lane/lane-child-mark-keys.ts +12 -0
- package/scripts/lane/lane-child-marker.ts +20 -1
- package/scripts/lane/lane-ci-path-stats.ts +73 -0
- package/scripts/lane/lane-claim-stats.ts +84 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +91 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch-log.ts +3 -3
- package/scripts/lane/lane-dispatch.ts +26 -5
- package/scripts/lane/lane-gap-stats.ts +157 -0
- package/scripts/lane/lane-guard-policy.ts +7 -1
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-implement-stats.ts +207 -0
- package/scripts/lane/lane-implement-subagents.ts +90 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-investigation-switch.ts +16 -0
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-kind.ts +31 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +49 -0
- package/scripts/lane/lane-ledger-schema.ts +349 -0
- package/scripts/lane/lane-ledger-write.ts +257 -0
- package/scripts/lane/lane-ledger.ts +56 -233
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-load.ts +1 -1
- package/scripts/lane/lane-measure-cli.ts +193 -30
- package/scripts/lane/lane-net-read.ts +44 -0
- package/scripts/lane/lane-net-time.ts +212 -0
- package/scripts/lane/lane-open.ts +25 -8
- package/scripts/lane/lane-output.ts +2 -4
- package/scripts/lane/lane-overrun-prompt.ts +147 -0
- package/scripts/lane/lane-overrun.ts +274 -0
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-paths.ts +24 -1
- package/scripts/lane/lane-pause-cli.ts +133 -0
- package/scripts/lane/lane-pause.ts +158 -0
- package/scripts/lane/lane-paused-spans.ts +97 -0
- package/scripts/lane/lane-plan-check.ts +207 -0
- package/scripts/lane/lane-plan-cli.ts +41 -0
- package/scripts/lane/lane-plan.ts +144 -0
- package/scripts/lane/lane-process-table.ts +166 -0
- package/scripts/lane/lane-reap-settle.ts +124 -0
- package/scripts/lane/lane-reap.ts +50 -15
- package/scripts/lane/lane-registry.ts +38 -4
- package/scripts/lane/lane-relaunch.ts +1 -1
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-one-stats.ts +51 -0
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +26 -3
- package/scripts/lane/lane-session-action.ts +112 -23
- package/scripts/lane/lane-session-broker.ts +146 -37
- package/scripts/lane/lane-session-reread-main.ts +14 -0
- package/scripts/lane/lane-session-reread.ts +51 -0
- package/scripts/lane/lane-ship-lap-stats.ts +74 -0
- package/scripts/lane/lane-sleep.ts +58 -0
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +7 -4
- package/scripts/lane/lane-split-stats.ts +28 -0
- package/scripts/lane/lane-stage-stats.ts +20 -3
- package/scripts/lane/lane-state.ts +334 -0
- package/scripts/lane/lane-stats-tables.ts +58 -0
- package/scripts/lane/lane-stats.ts +74 -4
- package/scripts/lane/lane-stop-stats.ts +145 -37
- package/scripts/lane/lane-tail-stats.ts +32 -0
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +202 -0
- package/scripts/lane/lane-transcript-stats.ts +200 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-value-cell.ts +72 -0
- package/scripts/lane/lane-value.ts +118 -0
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw-closed.ts +124 -0
- package/scripts/lane/lane-withdraw.ts +149 -71
- package/scripts/lane/lane-yield.ts +85 -0
- package/scripts/lane/openai-lane-ship.ts +12 -11
- package/scripts/lane/openai-lane-supervisor-decision.ts +6 -8
- package/scripts/lane/openai-lane-supervisor-owner.ts +5 -8
- package/scripts/lane/openai-lane-supervisor.ts +5 -4
- package/scripts/lane/process-directories.ts +70 -0
- package/scripts/lane/process-lane-marks.ts +94 -0
- package/scripts/lib/atomic-write.ts +62 -0
- package/scripts/lib/buffered-process.ts +12 -5
- package/scripts/lib/cli-flags.ts +53 -0
- package/scripts/lib/figure-format.ts +63 -0
- package/scripts/lib/json-value.ts +9 -1
- package/scripts/lib/package-manifest.ts +35 -0
- package/scripts/lib/poll.ts +38 -9
- package/scripts/lib/read-file.ts +3 -1
- package/scripts/lib/settled-together.ts +10 -0
- package/scripts/lib/shell-quote.ts +21 -0
- package/scripts/lib/stamped-memo.ts +63 -0
- package/scripts/lib/stdout-on-stderr.ts +24 -0
- package/scripts/lib/timeouts.ts +9 -0
- package/scripts/lib/token-shape.ts +111 -0
- package/scripts/lib/transcript-record.ts +91 -0
- package/scripts/lines/effective-limit.ts +1 -1
- package/scripts/lint/eslint-cache-dependencies.ts +145 -0
- package/scripts/lint/eslint-daemon-sources.ts +79 -0
- package/scripts/lint/eslint-daemon.ts +304 -0
- package/scripts/lint/eslint-warm-cli.ts +7 -0
- package/scripts/lint/eslint-warm.ts +66 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +409 -0
- package/scripts/lint/lint-gate-scope.ts +102 -0
- package/scripts/lint/lint-parallel-main.ts +19 -0
- package/scripts/lint/lint-parallel.ts +113 -33
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +183 -30
- package/scripts/lint/rename-cli.ts +179 -0
- package/scripts/lint/rename-identifier.ts +192 -0
- package/scripts/lint/type-only-imports.ts +58 -0
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +32 -23
- package/scripts/notify/telegram-test-logic.ts +0 -1
- package/scripts/notify/telegram-test-main.ts +8 -0
- package/scripts/notify/telegram-test.ts +2 -6
- package/scripts/observations/observation-ledger.ts +13 -0
- package/scripts/observations/observation-record.ts +42 -16
- package/scripts/observations/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +38 -10
- package/scripts/overrides/overrides-check.ts +11 -6
- package/scripts/overrides/overrides-files.ts +2 -1
- package/scripts/overrides/overrides-logic.ts +3 -6
- package/scripts/package/verify-optional-eslint-install.ts +8 -6
- package/scripts/propagate/propagate-publish.ts +2 -7
- package/scripts/propagate/propagate-targets.ts +4 -12
- package/scripts/refactor/import-graph.ts +9 -7
- package/scripts/release/github-release-runs.ts +17 -6
- package/scripts/release/release-approval-prune.ts +24 -0
- package/scripts/release/release-history.ts +1 -3
- package/scripts/release/release-progress.ts +42 -22
- package/scripts/release/release-publish-run.ts +39 -0
- package/scripts/release/release-publish.ts +6 -6
- package/scripts/release/release-scope-cli.ts +0 -10
- package/scripts/release/release-scope-main.ts +12 -0
- package/scripts/repo/repo-setting.ts +3 -6
- package/scripts/repo/required-checks-logic.ts +10 -16
- package/scripts/repo/ruleset-check.ts +4 -3
- package/scripts/report/markdown-shape.ts +28 -0
- package/scripts/report/report-format-reference.ts +17 -1
- package/scripts/report/report-labels.ts +166 -0
- package/scripts/report/report-lint-child-summary.ts +94 -0
- package/scripts/report/report-lint-cli.ts +29 -7
- package/scripts/report/report-lint.ts +85 -128
- package/scripts/report/report-template-cli.ts +59 -0
- package/scripts/report/report-template.ts +112 -0
- package/scripts/review/acceptance-map.ts +1 -0
- package/scripts/review/prose-stale-cli.ts +88 -0
- package/scripts/review/prose-stale-scan.ts +152 -0
- package/scripts/review/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-attest.ts +73 -23
- package/scripts/review/review-brief-cli.ts +138 -23
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief-paths.ts +22 -0
- package/scripts/review/review-brief.ts +45 -10
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-carry.ts +47 -0
- package/scripts/review/review-comment-round.ts +111 -30
- package/scripts/review/review-finding-ledger.ts +135 -18
- package/scripts/review/review-finding-text.ts +43 -0
- package/scripts/review/review-interaction.ts +105 -0
- package/scripts/review/review-lane-handover.ts +68 -0
- package/scripts/review/review-lint-cli.ts +57 -0
- package/scripts/review/review-lint-findings.ts +92 -0
- package/scripts/review/review-lint-sections.ts +80 -0
- package/scripts/review/review-lint.ts +221 -0
- package/scripts/review/review-prior-findings.ts +102 -0
- package/scripts/review/review-readers-scan.ts +165 -0
- package/scripts/review/review-record-cli.ts +236 -74
- package/scripts/review/review-record-code-round.ts +55 -0
- package/scripts/review/review-record-comment.ts +60 -0
- package/scripts/review/review-record-interaction.ts +35 -0
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-record-pinned.ts +108 -0
- package/scripts/review/review-record.ts +25 -1
- package/scripts/review/review-reviewed-tree.ts +307 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round-one-closure.ts +62 -0
- package/scripts/review/review-round-reuse.ts +106 -0
- package/scripts/review/review-round2-cli.ts +135 -36
- package/scripts/review/review-round2-skip-comment.ts +55 -0
- package/scripts/review/review-round2.ts +103 -19
- package/scripts/review/review-stamps.ts +23 -1
- package/scripts/review/review-stop-log.ts +110 -0
- package/scripts/review/review-stops-cli.ts +86 -0
- package/scripts/review/review-submit-cli.ts +101 -0
- package/scripts/review/review-tree.ts +6 -17
- package/scripts/review/review-untouched-readers.ts +146 -0
- package/scripts/review/test-titles.ts +118 -0
- package/scripts/rules/agent-model.ts +9 -1
- package/scripts/rules/bash-triggers.ts +49 -6
- package/scripts/rules/concise-reply.ts +88 -0
- package/scripts/rules/credential-body.ts +77 -0
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +3 -3
- package/scripts/rules/delivered-rules.ts +115 -18
- package/scripts/rules/destructive-command.ts +11 -12
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +139 -0
- package/scripts/rules/direct-issue-read.ts +191 -0
- package/scripts/rules/direct-pr-create.ts +72 -26
- package/scripts/rules/early-heartbeat.ts +4 -1
- package/scripts/rules/edit-tool.ts +27 -0
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/file-edit-rows.ts +17 -0
- package/scripts/rules/file-rewrite.ts +146 -0
- package/scripts/rules/firing-point.ts +3 -2
- package/scripts/rules/gh-api.ts +128 -7
- package/scripts/rules/gh-repo-selector.ts +84 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +14 -4
- package/scripts/rules/guard-remedy.ts +17 -4
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +68 -27
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/investigator-foreground.ts +231 -0
- package/scripts/rules/issue-citation.ts +15 -60
- package/scripts/rules/issue-comments.ts +18 -5
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +103 -33
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +172 -0
- package/scripts/rules/lane-interactive-ask.ts +12 -2
- package/scripts/rules/lane-park.ts +49 -25
- package/scripts/rules/lane-spilled-read.ts +90 -0
- package/scripts/rules/lane-split-park.ts +11 -3
- package/scripts/rules/lane-switch-main.ts +11 -4
- package/scripts/rules/last-prompt.ts +20 -47
- package/scripts/rules/oracle-consulted.ts +11 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +7 -0
- package/scripts/rules/piped-verification-shapes.ts +110 -0
- package/scripts/rules/piped-verification.ts +68 -18
- package/scripts/rules/poll-loop.ts +78 -8
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/pre-gate-cut.ts +3 -3
- package/scripts/rules/protected-files.ts +113 -22
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/reply-language.ts +3 -17
- package/scripts/rules/reply-prose.ts +34 -0
- package/scripts/rules/repo-admin.ts +132 -0
- package/scripts/rules/reviewer-foreground.ts +88 -0
- package/scripts/rules/round-one-check-related.ts +120 -0
- package/scripts/rules/rule-body-guard.ts +13 -15
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +57 -14
- package/scripts/rules/rule-value-candidates.ts +84 -0
- package/scripts/rules/rule-value-cli.ts +106 -39
- package/scripts/rules/rule-value.ts +18 -5
- package/scripts/rules/run-tail-rule.ts +1 -1
- package/scripts/rules/sed-in-place.ts +196 -0
- package/scripts/rules/shell-segments.ts +43 -0
- package/scripts/rules/stop-rule-rows.ts +52 -0
- package/scripts/rules/stop-rules.ts +36 -62
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +115 -21
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/turn-filings.ts +90 -0
- package/scripts/rules/worktree-guard.ts +32 -7
- package/scripts/run/board/run-board-app-name.ts +23 -0
- package/scripts/run/board/run-board-cli.ts +65 -32
- package/scripts/run/board/run-board-earlier.ts +94 -0
- package/scripts/run/board/run-board-ending-reason.ts +71 -0
- package/scripts/run/board/run-board-estimate-schedule.ts +103 -0
- package/scripts/run/board/run-board-estimate.ts +98 -0
- package/scripts/run/board/run-board-fit.ts +177 -37
- package/scripts/run/board/run-board-fold.ts +123 -0
- package/scripts/run/board/run-board-found.ts +134 -0
- package/scripts/run/board/run-board-fresh.ts +2 -2
- package/scripts/run/board/run-board-gather-live.ts +29 -0
- package/scripts/run/board/run-board-gather-thread.ts +189 -0
- package/scripts/run/board/run-board-gather-worker.ts +29 -0
- package/scripts/run/board/run-board-gather.ts +187 -0
- package/scripts/run/board/run-board-github.ts +118 -38
- package/scripts/run/board/run-board-header.ts +90 -20
- package/scripts/run/board/run-board-keys.ts +58 -0
- package/scripts/run/board/run-board-kind.ts +20 -6
- package/scripts/run/board/run-board-labels.ts +126 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +123 -0
- package/scripts/run/board/run-board-layout.ts +239 -60
- package/scripts/run/board/run-board-length.ts +52 -0
- package/scripts/run/board/run-board-link.ts +15 -2
- package/scripts/run/board/run-board-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +59 -32
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +19 -35
- package/scripts/run/board/run-board-phase.ts +3 -6
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +56 -4
- package/scripts/run/board/run-board-planning.ts +45 -0
- package/scripts/run/board/run-board-priority.ts +44 -0
- package/scripts/run/board/run-board-process-groups.ts +195 -0
- package/scripts/run/board/run-board-read.ts +197 -28
- package/scripts/run/board/run-board-reason.ts +247 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +42 -7
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +78 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -0
- package/scripts/run/board/run-board-render-found.ts +157 -0
- package/scripts/run/board/run-board-render-icon.ts +35 -0
- package/scripts/run/board/run-board-render-lanes.ts +145 -0
- package/scripts/run/board/run-board-render-lead.ts +89 -0
- package/scripts/run/board/run-board-render-legend.ts +136 -48
- package/scripts/run/board/run-board-render-notes.ts +156 -29
- package/scripts/run/board/run-board-render-processes.ts +196 -0
- package/scripts/run/board/run-board-render-section.ts +119 -0
- package/scripts/run/board/run-board-render-slot.ts +3 -36
- package/scripts/run/board/run-board-render-tail.ts +115 -48
- package/scripts/run/board/run-board-render-time.ts +56 -0
- package/scripts/run/board/run-board-render-title.ts +117 -24
- package/scripts/run/board/run-board-render-waits.ts +104 -20
- package/scripts/run/board/run-board-render.ts +264 -258
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +9 -4
- package/scripts/run/board/run-board-setup.ts +1 -12
- package/scripts/run/board/run-board-snapshot.ts +111 -0
- package/scripts/run/board/run-board-spin.ts +3 -5
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +149 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +158 -114
- package/scripts/run/board/run-board-usage-board.ts +78 -0
- package/scripts/run/board/run-board-usage-lanes.ts +113 -0
- package/scripts/run/board/run-board-usage-listing.ts +93 -0
- package/scripts/run/board/run-board-usage-read.ts +120 -150
- package/scripts/run/board/run-board-usage-rusage.ts +19 -7
- package/scripts/run/board/run-board-usage-text.ts +139 -51
- package/scripts/run/board/run-board-usage-top.ts +102 -0
- package/scripts/run/board/run-board-usage.ts +89 -72
- package/scripts/run/board/run-board-usual.ts +20 -9
- package/scripts/run/carry/run-carry-args.ts +4 -7
- package/scripts/run/carry/run-carry-conversation.ts +1 -1
- package/scripts/run/carry/run-carry-ended.ts +3 -2
- package/scripts/run/carry/run-carry.ts +12 -6
- package/scripts/run/cut/run-cut-cli.ts +33 -133
- package/scripts/run/cut/run-cut-digest.ts +152 -0
- package/scripts/run/cut/run-cut-handoff.ts +54 -10
- package/scripts/run/cut/run-cut-report.ts +24 -3
- package/scripts/run/cut/run-cut-resume.ts +129 -0
- package/scripts/run/cut/run-cut-review.ts +105 -0
- package/scripts/run/cut/run-cut.ts +18 -7
- package/scripts/run/detached-launch.ts +1 -1
- package/scripts/run/entry/run-entry-cli.ts +88 -19
- package/scripts/run/entry/run-entry-spill.ts +83 -0
- package/scripts/run/entry/run-entry-stop.ts +5 -1
- package/scripts/run/entry/run-entry-trust.ts +91 -0
- package/scripts/run/event/run-event-baseline.ts +56 -0
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +18 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-overrun.ts +197 -0
- package/scripts/run/event/run-event-render.ts +10 -10
- package/scripts/run/event/run-event-scope.ts +2 -2
- package/scripts/run/event/run-event-stream-emit.ts +82 -22
- package/scripts/run/event/run-event-stream.ts +58 -10
- package/scripts/run/hold/run-hold-adopt.ts +65 -0
- package/scripts/run/hold/run-hold-cli.ts +93 -22
- package/scripts/run/hold/run-hold-main.ts +12 -0
- package/scripts/run/hold/run-hold-member.ts +37 -0
- package/scripts/run/hold/run-stop-notify.ts +178 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cap.ts +57 -0
- package/scripts/run/merge/run-merge-cli.ts +119 -62
- package/scripts/run/merge/run-merge-close.ts +74 -0
- package/scripts/run/merge/run-merge-collect.ts +6 -13
- package/scripts/run/merge/run-merge-driver.ts +71 -0
- package/scripts/run/merge/run-merge-main.ts +12 -0
- package/scripts/run/merge/run-merge-outcome.ts +25 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +33 -7
- package/scripts/run/merge/run-merge-signals.ts +66 -25
- package/scripts/run/merge/run-merge-steps.ts +162 -107
- package/scripts/run/merge/run-merge-usage-limit.ts +53 -0
- package/scripts/run/merge/run-merge-withdrawn.ts +53 -0
- package/scripts/run/merge/run-merge.ts +76 -48
- package/scripts/run/park/run-park-cli.ts +91 -0
- package/scripts/run/park/run-park.ts +88 -0
- package/scripts/run/park/run-stalled.ts +68 -0
- package/scripts/run/pause/run-pause-cli.ts +73 -0
- package/scripts/run/pause/run-pause.ts +251 -0
- package/scripts/run/progress/run-progress-cli.ts +4 -12
- package/scripts/run/progress/run-progress-clock.ts +1 -1
- package/scripts/run/progress/run-progress-config.ts +6 -14
- package/scripts/run/progress/run-progress-main.ts +12 -0
- package/scripts/run/progress/run-progress.ts +1 -4
- package/scripts/run/review/run-review-cli.ts +306 -20
- package/scripts/run/review/run-review-early-push.ts +121 -0
- package/scripts/run/review/run-review-join-read.ts +94 -0
- package/scripts/run/review/run-review-pinned-accepted.ts +126 -0
- package/scripts/run/review/run-review-pinned-join.ts +216 -0
- package/scripts/run/review/run-review-pinned-steps.ts +383 -0
- package/scripts/run/review/run-review-pinned-tree.ts +37 -0
- package/scripts/run/review/run-review-pinned.ts +53 -0
- package/scripts/run/review/run-review-steps.ts +70 -34
- package/scripts/run/review/run-review.ts +28 -7
- package/scripts/run/run-ending.ts +1 -0
- package/scripts/run/run-invocation.ts +5 -6
- package/scripts/run/run-liveness-cli.ts +6 -8
- package/scripts/run/run-liveness.ts +60 -29
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +3 -4
- package/scripts/run/run-preflight.ts +18 -3
- package/scripts/run/run-prep-cli.ts +1 -10
- package/scripts/run/run-prep-locate.ts +7 -50
- package/scripts/run/run-prep-main.ts +12 -0
- package/scripts/run/run-prep.ts +7 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-stage-read.ts +2 -6
- package/scripts/run/run-step-cli.ts +17 -5
- package/scripts/run/run-step-lane-plan.ts +27 -0
- package/scripts/run/run-step-section.ts +26 -7
- package/scripts/run/run-step.ts +6 -3
- package/scripts/run/run-stranded-detect.ts +13 -0
- package/scripts/run/run-watcher-guard-cli.ts +1 -1
- package/scripts/run/run-watcher-guard.ts +1 -1
- package/scripts/run/ship/run-ship-args.ts +140 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-brokered-review.ts +106 -0
- package/scripts/run/ship/run-ship-cli.ts +181 -166
- package/scripts/run/ship/run-ship-conflict-probe.ts +59 -0
- package/scripts/run/ship/run-ship-detach.ts +29 -12
- package/scripts/run/ship/run-ship-handover.ts +106 -0
- package/scripts/run/ship/run-ship-infra-retry.ts +74 -0
- package/scripts/run/ship/run-ship-lap.ts +63 -0
- package/scripts/run/ship/run-ship-next.ts +44 -27
- package/scripts/run/ship/run-ship-overlap.ts +49 -7
- package/scripts/run/ship/run-ship-place.ts +103 -0
- package/scripts/run/ship/run-ship-planned.ts +92 -0
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +197 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +42 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +144 -33
- package/scripts/run/ship/run-ship-preflight.ts +150 -33
- package/scripts/run/ship/run-ship-probe.ts +28 -6
- package/scripts/run/ship/run-ship-relaunch-cap.ts +106 -0
- package/scripts/run/ship/run-ship-relaunch.ts +51 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +183 -25
- package/scripts/run/ship/run-ship-review-reason.ts +24 -0
- package/scripts/run/ship/run-ship-review-steps.ts +296 -171
- package/scripts/run/ship/run-ship-review.ts +222 -35
- package/scripts/run/ship/run-ship-reviewer.ts +303 -0
- package/scripts/run/ship/run-ship-scoped.ts +39 -10
- package/scripts/run/ship/run-ship-stage.ts +101 -16
- package/scripts/run/ship/run-ship-steps.ts +68 -17
- package/scripts/run/ship/run-ship-stop-cause.ts +176 -0
- package/scripts/run/ship/run-ship-stop-context.ts +50 -13
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +212 -34
- package/scripts/run/ship/run-ship-synced-scope.ts +178 -0
- package/scripts/run/ship/run-ship-wait-cli.ts +145 -0
- package/scripts/run/ship/run-ship-waiter.ts +114 -0
- package/scripts/run/ship/run-ship.ts +44 -2
- package/scripts/run/tidy/run-tidy-cli.ts +0 -4
- package/scripts/run/tidy/run-tidy-lanes.ts +3 -0
- package/scripts/run/tidy/run-tidy-main.ts +8 -0
- package/scripts/run/wake/run-wake-caffeinate.ts +48 -0
- package/scripts/run/wake/run-wake-cli.ts +121 -209
- package/scripts/run/wake/run-wake-code.ts +125 -0
- package/scripts/run/wake/run-wake-driver.ts +22 -9
- package/scripts/run/wake/run-wake-finish.ts +137 -0
- package/scripts/run/wake/run-wake-loop.ts +36 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +98 -0
- package/scripts/run/wake/run-wake-session.ts +2 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +5 -3
- package/scripts/safe-chain/ci-installer-pin.ts +49 -8
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -1
- package/scripts/safe-chain/project-config.ts +6 -11
- package/scripts/security/secretlint-scan.ts +42 -9
- package/scripts/security/security-audit-main.ts +8 -0
- package/scripts/security/security-audit-provision-logic.ts +0 -11
- package/scripts/security/security-audit-provision-main.ts +20 -0
- package/scripts/security/security-audit-provision.ts +12 -27
- package/scripts/security/security-audit.ts +27 -8
- package/scripts/security/sonar-file.ts +10 -5
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +6 -13
- package/scripts/split/split-assess-cli.ts +2 -2
- package/scripts/split/split-assess.ts +25 -1
- package/scripts/split/split-early-notice.ts +116 -0
- package/scripts/split/split-measure.ts +83 -0
- package/scripts/split/split-resolution.ts +107 -0
- package/scripts/sync/claude-settings-merge.ts +8 -15
- package/scripts/sync/directory-copy-guard.ts +4 -9
- package/scripts/sync/file-content.ts +78 -8
- package/scripts/sync/sync-ai-files.ts +3 -5
- package/scripts/sync/sync-configs.ts +11 -23
- package/scripts/sync/sync-hook-safety.ts +4 -10
- package/scripts/sync/sync-main.ts +11 -0
- package/scripts/sync/sync.ts +25 -37
- package/scripts/test/direct-importers.ts +185 -0
- package/scripts/test/pure-files-entries.ts +83 -0
- package/scripts/test/related-heavy-tests.ts +81 -0
- package/scripts/test/test-declared-changed.ts +2 -2
- package/scripts/test/test-declared.ts +1 -1
- package/scripts/test/test-e2e-guard.ts +25 -1
- package/scripts/test/test-e2e-stamp.ts +38 -0
- package/scripts/test/test-no-base.ts +88 -0
- package/scripts/test/test-pinned-cache-logic.ts +363 -0
- package/scripts/test/test-pinned-cache.ts +337 -0
- package/scripts/test/test-pinned-emit.ts +49 -0
- package/scripts/test/test-pinned-functions.ts +116 -0
- package/scripts/test/test-pinned-ledger.ts +80 -0
- package/scripts/test/test-pinned-logic.ts +333 -0
- package/scripts/test/test-pinned-main.ts +144 -0
- package/scripts/test/test-pinned-pool.ts +73 -0
- package/scripts/test/test-pinned-probe.ts +254 -0
- package/scripts/test/test-pinned-prune-logic.ts +118 -0
- package/scripts/test/test-pinned-reach.ts +194 -0
- package/scripts/test/test-pinned-record.ts +196 -0
- package/scripts/test/test-pinned-rewire.ts +148 -0
- package/scripts/test/test-pinned-spawn.ts +81 -0
- package/scripts/test/test-pinned-stage.ts +70 -0
- package/scripts/test/test-pinned.ts +311 -0
- package/scripts/test/test-reach-cli.ts +61 -0
- package/scripts/test/test-read-map.ts +288 -0
- package/scripts/test/test-read-recording.ts +103 -0
- package/scripts/test/test-read-trace.ts +166 -0
- package/scripts/test/test-red-logic.ts +46 -7
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +39 -37
- package/scripts/test/test-related-claim.ts +37 -0
- package/scripts/test/test-related-main.ts +21 -0
- package/scripts/test/test-related-moved.ts +91 -0
- package/scripts/test/test-related-record.ts +139 -0
- package/scripts/test/test-related-scope.ts +292 -41
- package/scripts/test/test-related-synced.ts +135 -0
- package/scripts/test/test-related-touched.ts +84 -0
- package/scripts/test/test-related.ts +381 -19
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +66 -25
- package/scripts/test/unit-count-file.ts +37 -0
- package/scripts/test/unit-durations.ts +41 -0
- package/scripts/test/unit-run-marker.ts +162 -0
- package/scripts/test/unit-setup-files.ts +51 -0
- package/scripts/test/unit-worker-share.ts +64 -151
- package/scripts/test/vitest-cache-directory.ts +19 -0
- package/scripts/test/vitest-cli-excludes.ts +14 -0
- package/scripts/test/vitest-failure-summary.ts +111 -0
- package/scripts/test/whole-suite-files.ts +74 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-batch-guard.ts +42 -4
- package/scripts/time-runtime/time-bundle-call.ts +1 -1
- package/scripts/time-runtime/time-bundles.ts +40 -8
- package/scripts/time-runtime/time-density-hook.ts +8 -6
- package/scripts/time-runtime/time-followup-stage.ts +1 -3
- package/scripts/time-runtime/time-format.ts +5 -28
- package/scripts/time-runtime/time-markers.ts +12 -3
- package/scripts/time-runtime/time-search-call.ts +38 -0
- package/scripts/time-runtime/time-shell.ts +98 -11
- package/scripts/time-runtime/time-transcript-line.ts +65 -66
- package/scripts/uninstall/uninstall.ts +1 -1
- package/scripts/version/bump-version-main.ts +12 -0
- package/scripts/version/bump-version.ts +25 -25
- package/scripts/version/development-engines-verdict.ts +124 -0
- package/scripts/version/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +19 -32
- package/scripts/version/latest-if-required-cli.ts +93 -0
- package/scripts/version/latest-lane-guard-main.ts +8 -0
- package/scripts/version/latest-lane-guard.ts +0 -4
- package/scripts/version/latest-scope-cli.ts +0 -9
- package/scripts/version/latest-scope-main.ts +12 -0
- package/scripts/version/latest-update.ts +5 -5
- package/scripts/version/npm-registry.ts +44 -6
- package/scripts/version/publishable-range-check.ts +5 -16
- package/scripts/version/release-age.ts +1 -1
- package/scripts/version/release-hold.ts +1 -1
- package/scripts/version/release-window.ts +38 -0
- package/scripts/version/running-binary.ts +1 -1
- package/scripts/version/safe-chain-version-update.ts +3 -8
- package/scripts/version/version-targets.ts +6 -28
- package/templates/dependabot.yml +29 -0
- package/templates/gitignore +6 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +53 -4
- package/templates/workflows/github-release.yml +4 -0
- package/tsconfig.sonar.json +1 -1
- package/.ncurc.json +0 -3
- package/dist/hooks/batch-guard.js +0 -29
- package/dist/hooks/chunk-4KKD2UTK.js +0 -66
- package/dist/hooks/chunk-6TS2JD6D.js +0 -237
- package/dist/hooks/chunk-7DSBJVFH.js +0 -50
- package/dist/hooks/chunk-A65Y4YOR.js +0 -79
- package/dist/hooks/chunk-APUO6U4J.js +0 -2451
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-DGT54IH5.js +0 -161
- package/dist/hooks/chunk-EFXE6C37.js +0 -81
- package/dist/hooks/chunk-GP4IEC4O.js +0 -20
- package/dist/hooks/chunk-JP45SOCJ.js +0 -56
- package/dist/hooks/chunk-LAOV7NLM.js +0 -45
- package/dist/hooks/chunk-M4HGZV7U.js +0 -83
- package/dist/hooks/chunk-O6GDRNJB.js +0 -343
- package/dist/hooks/chunk-PF2NZL2A.js +0 -131
- package/dist/hooks/chunk-PTICX4OL.js +0 -358
- package/dist/hooks/chunk-RT27QRJW.js +0 -6247
- package/dist/hooks/chunk-SYOTDYCI.js +0 -3533
- package/dist/hooks/chunk-TNUMY6NL.js +0 -4838
- package/dist/hooks/chunk-UPUZF3AN.js +0 -279
- package/dist/hooks/chunk-WK6SMBIC.js +0 -3180
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -29
- package/scripts/backlog/backlog-stalled-cli.ts +0 -30
- package/scripts/cost-runtime/context-cut-threshold.ts +0 -11
- package/scripts/cost-runtime/cost-format.ts +0 -29
- package/scripts/init/basic-path-migration.ts +0 -24
- package/scripts/issue/issue-backlinks-cli.ts +0 -93
- package/scripts/josh/josh-commands-guard.ts +0 -38
- package/scripts/josh/josh-usage-automation.ts +0 -121
- package/scripts/josh/josh-usage-backlog.ts +0 -180
- package/scripts/josh/josh-usage-developer.ts +0 -230
- package/scripts/josh/josh-usage-hooks.ts +0 -38
- package/scripts/josh/josh-usage-issue.ts +0 -205
- package/scripts/josh/josh-usage-review.ts +0 -101
- package/scripts/josh/josh-usage-run.ts +0 -252
- package/scripts/josh/josh-usage-session.ts +0 -238
- package/scripts/josh/josh-usage-workflow.ts +0 -212
- package/scripts/lint/cross-file-recheck.ts +0 -155
- package/scripts/registry-migration/migrate-logic.ts +0 -237
- package/scripts/registry-migration/migrate.ts +0 -292
- package/scripts/registry-migration/user-npmrc.ts +0 -15
- package/scripts/rules/filing-cap.ts +0 -132
- package/scripts/rules/rule-guard.ts +0 -23
- package/scripts/rules/rule-registry-rows.ts +0 -292
- package/scripts/rules/rule-registry.ts +0 -112
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { review_attest, type ReviewSlot } from '#scripts/review/review-attest'
|
|
2
3
|
import { review_finding_ledger } from '#scripts/review/review-finding-ledger'
|
|
4
|
+
import { review_finding_text } from '#scripts/review/review-finding-text'
|
|
5
|
+
import { review_prior_findings } from '#scripts/review/review-prior-findings'
|
|
3
6
|
import { review_record_cli } from '#scripts/review/review-record-cli'
|
|
4
7
|
|
|
5
8
|
// The pure half of `josh ship --review`: the one-line prompts the supervised reviewers are launched
|
|
@@ -23,12 +26,15 @@ const LINE_SEPARATOR = /\r?\n/u
|
|
|
23
26
|
const HIGH = 'high'
|
|
24
27
|
const MEDIUM = 'medium'
|
|
25
28
|
const FIXED_PREFIX = 'fixed '
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const KIND_FIELDS = 2
|
|
30
|
+
// `findings_path` is set only for a lane whose josh predates `review:submit`
|
|
31
|
+
// (`lane-session-action.ts`).
|
|
32
|
+
type PromptOf = (
|
|
33
|
+
brief_path: string,
|
|
34
|
+
slot: ReviewSlot,
|
|
35
|
+
issue: string,
|
|
36
|
+
findings_path?: string,
|
|
37
|
+
) => string
|
|
32
38
|
|
|
33
39
|
const VERDICT = {
|
|
34
40
|
CLEAN: 'clean',
|
|
@@ -57,30 +63,83 @@ interface Finding {
|
|
|
57
63
|
spec: string
|
|
58
64
|
is_fixed: boolean
|
|
59
65
|
line: string
|
|
66
|
+
description: string
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// One finding that decided a stopped review, as the durable stop log keeps it: its kind, the
|
|
70
|
+
// `<file>[:<line>]` it cites and the first sentence of what it said (joshuafolkken/kit#4519).
|
|
71
|
+
interface StopFinding {
|
|
72
|
+
kind: string
|
|
73
|
+
location: string
|
|
74
|
+
sentence: string
|
|
60
75
|
}
|
|
61
76
|
|
|
62
77
|
const MISSING_NOTE = 'the reviewer wrote no findings file — the review did not complete'
|
|
63
78
|
const CLEAN_NOTE = 'review clean or Low-only — recorded; shipping on.'
|
|
64
79
|
const FIXED_NOTE =
|
|
65
80
|
'review fixes applied in place — recorded; the gate re-runs on the fixed tree and round 2 follows the commit.'
|
|
66
|
-
|
|
67
|
-
|
|
81
|
+
// Every stop that hands findings back for a fix: a fix of only the cited line left the same pattern
|
|
82
|
+
// beside it for the next round to stop on again (joshuafolkken/kit#4673).
|
|
83
|
+
const SWEEP_INSTRUCTION = [
|
|
84
|
+
'Before fixing, sweep each finding for its other sites — the same file, the callers of the same',
|
|
85
|
+
'function and a grep of the pattern — fix every site in one pass, and list each range searched on its',
|
|
86
|
+
'own line in the Issue fix comment.',
|
|
87
|
+
].join(' ')
|
|
88
|
+
const BLOCKING_NOTE = `review found High/Medium it did not fix — recorded. ${SWEEP_INSTRUCTION} Then take the round-2 route (\`chain-rule.md\`).`
|
|
68
89
|
const UNVERIFIED_OUTCOME: RoundOutcome = {
|
|
69
90
|
is_passing: false,
|
|
70
|
-
note:
|
|
91
|
+
note: `review fixes did not pass the scoped checks — recorded as unfixed. ${SWEEP_INSTRUCTION} Then take the round-2 route (\`chain-rule.md\`).`,
|
|
71
92
|
}
|
|
93
|
+
// The findings line is all a stopped ship hands the lane, so the other sites the rubric asks the
|
|
94
|
+
// reviewer to cite ride on it rather than in its prose report (joshuafolkken/kit#4673).
|
|
95
|
+
const OTHER_SITES_CLAUSE = '"other sites: <file>:<line>, …" for each other site of the same pattern'
|
|
72
96
|
const ROUND_TWO_CLEAN_NOTE = 'round 2 clean or Low-only — recorded; shipping on.'
|
|
73
|
-
const
|
|
74
|
-
|
|
97
|
+
const SUBMIT_COMMAND = 'pnpm josh review:submit'
|
|
98
|
+
const ROUND_TWO_BLOCKING_NOTE = `round 2 found High/Medium or edited the tree — recorded; round 2 is final. ${SWEEP_INSTRUCTION} Then push and gate it, and run followup (\`chain-rule.md\` step 4).`
|
|
99
|
+
|
|
100
|
+
// **The reviewer hands its findings to a command, never to a path it copies** (joshuafolkken/kit#4799):
|
|
101
|
+
// a reviewer that copied the findings path matched the `josh-review-*` files beside it and dropped
|
|
102
|
+
// `ship-`, so the supervisor never read a review it had finished. `review:submit` knows the slot's path.
|
|
103
|
+
function submit_command(slot: ReviewSlot): string {
|
|
104
|
+
return slot === review_attest.REVIEW_SLOT.CODE
|
|
105
|
+
? SUBMIT_COMMAND
|
|
106
|
+
: `${SUBMIT_COMMAND} --interaction`
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// **A lane whose josh predates `review:submit` is handed the path**: the supervisor reloads onto main
|
|
110
|
+
// at its pass boundary (`run-wake-code.ts`), so it meets lanes branched before the command existed.
|
|
111
|
+
function sink_clauses(
|
|
112
|
+
slot: ReviewSlot,
|
|
113
|
+
findings_path: string | undefined,
|
|
114
|
+
): readonly [string, string] {
|
|
115
|
+
if (findings_path !== undefined) {
|
|
116
|
+
return [
|
|
117
|
+
`Then write every finding to ${findings_path},`,
|
|
118
|
+
'and an empty file when there is none.',
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return [
|
|
123
|
+
`Then pipe every finding on stdin to \`${submit_command(slot)}\` — never write a findings file yourself —`,
|
|
124
|
+
'or run it with `--none` and no stdin when there is none; if it refuses a line, fix that line and run it again.',
|
|
125
|
+
]
|
|
126
|
+
}
|
|
75
127
|
|
|
76
|
-
function findings_instruction(
|
|
128
|
+
function findings_instruction(
|
|
129
|
+
slot: ReviewSlot,
|
|
130
|
+
fixed_clause: string,
|
|
131
|
+
findings_path: string | undefined,
|
|
132
|
+
): string {
|
|
77
133
|
const categories = review_finding_ledger.CATEGORIES.join(', ')
|
|
134
|
+
const [opening, closing] = sink_clauses(slot, findings_path)
|
|
78
135
|
|
|
79
136
|
return [
|
|
80
|
-
|
|
81
|
-
|
|
137
|
+
opening,
|
|
138
|
+
'one per line as',
|
|
139
|
+
`<category>:<severity>:<file>[:<line>]${review_finding_text.DESCRIPTION_SEPARATOR}<one sentence: what is wrong and why>`,
|
|
82
140
|
`(category one of ${categories}; severity high, medium or low)${fixed_clause},`,
|
|
83
|
-
|
|
141
|
+
`a high or medium line ending with ${OTHER_SITES_CLAUSE},`,
|
|
142
|
+
closing,
|
|
84
143
|
].join(' ')
|
|
85
144
|
}
|
|
86
145
|
|
|
@@ -94,43 +153,99 @@ function issue_read_instruction(issue: string): string {
|
|
|
94
153
|
].join(' ')
|
|
95
154
|
}
|
|
96
155
|
|
|
156
|
+
// **The review runs in this session itself** (joshuafolkken/kit#4715): a reviewer that invoked the
|
|
157
|
+
// `/code-review` skill forked a second agent that read the same diff and brief again. The session is
|
|
158
|
+
// launched without the `Skill` and `Agent` tools (`claude-agent-argv.ts`), and the prompt says so.
|
|
159
|
+
const IN_SESSION_CLAUSE =
|
|
160
|
+
'Review it yourself in this session — you carry no Skill or Agent tool, so never launch a second reviewer.'
|
|
161
|
+
|
|
162
|
+
function round_one_opening(brief_path: string): string {
|
|
163
|
+
return [
|
|
164
|
+
`Review this checkout as a /code-review: read the review brief at ${brief_path} and follow it exactly —`,
|
|
165
|
+
'the level on its first line, the rubric it names, the checkout it pins and its review:attest step.',
|
|
166
|
+
IN_SESSION_CLAUSE,
|
|
167
|
+
].join(' ')
|
|
168
|
+
}
|
|
169
|
+
|
|
97
170
|
// One line, because `detached_launch` refuses an argument carrying a control character: the multi-line
|
|
98
171
|
// brief travels by path, never inline.
|
|
99
|
-
function reviewer_prompt(
|
|
172
|
+
function reviewer_prompt(
|
|
173
|
+
brief_path: string,
|
|
174
|
+
slot: ReviewSlot,
|
|
175
|
+
issue: string,
|
|
176
|
+
findings_path?: string,
|
|
177
|
+
): string {
|
|
100
178
|
return [
|
|
101
|
-
|
|
102
|
-
'the level on its first line, the rubric it names, the checkout it pins and its review:attest step.',
|
|
179
|
+
round_one_opening(brief_path),
|
|
103
180
|
issue_read_instruction(issue),
|
|
181
|
+
...review_prior_findings.prompt_clauses(issue),
|
|
104
182
|
'Apply a fix only for a Medium finding whose fix is small and local — a one-function refactor, an',
|
|
105
183
|
'added test, an added guard; never fix a High or a change that reaches beyond one place, and never',
|
|
106
184
|
'commit, stage or push. After any fix, run `pnpm josh lint:related && pnpm josh test:related` and',
|
|
107
185
|
'return only once both are green; revert a fix you cannot get green and report that finding unfixed.',
|
|
108
|
-
findings_instruction(
|
|
186
|
+
findings_instruction(
|
|
187
|
+
slot,
|
|
188
|
+
`, prefixing a finding you fixed with "${FIXED_PREFIX}"`,
|
|
189
|
+
findings_path,
|
|
190
|
+
),
|
|
109
191
|
].join(' ')
|
|
110
192
|
}
|
|
111
193
|
|
|
112
|
-
// The round-
|
|
113
|
-
|
|
194
|
+
// The round-1 review run beside the code review: it reads only, so the two sessions never fix, verify
|
|
195
|
+
// and revert in the one shared checkout at once; its findings go to the lane's one fix pass.
|
|
196
|
+
function report_prompt(
|
|
197
|
+
brief_path: string,
|
|
198
|
+
slot: ReviewSlot,
|
|
199
|
+
issue: string,
|
|
200
|
+
findings_path?: string,
|
|
201
|
+
): string {
|
|
114
202
|
return [
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
'names, the checkout it pins and its review:attest step. Do not edit any file.',
|
|
203
|
+
round_one_opening(brief_path),
|
|
204
|
+
'Do not edit any file: the code review running beside this one fixes in this checkout.',
|
|
118
205
|
issue_read_instruction(issue),
|
|
119
|
-
|
|
206
|
+
...review_prior_findings.prompt_clauses(issue),
|
|
207
|
+
findings_instruction(slot, '', findings_path),
|
|
120
208
|
].join(' ')
|
|
121
209
|
}
|
|
122
210
|
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
|
|
211
|
+
// **One reviewer edits the checkout** (joshuafolkken/kit#4672): a slot reviewed beside the code slot
|
|
212
|
+
// reads only, and a slot reviewed alone takes the round's own prompt.
|
|
213
|
+
function slot_prompt(
|
|
214
|
+
round_prompt: PromptOf,
|
|
215
|
+
slot: ReviewSlot,
|
|
216
|
+
slots: ReadonlyArray<ReviewSlot>,
|
|
217
|
+
): PromptOf {
|
|
218
|
+
if (slot === review_attest.REVIEW_SLOT.CODE || slots.length === 1) return round_prompt
|
|
126
219
|
|
|
127
|
-
return
|
|
220
|
+
return report_prompt
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// The round-2 verification pass: a fresh session over the round-1 fix delta, reading only.
|
|
224
|
+
function verification_prompt(
|
|
225
|
+
brief_path: string,
|
|
226
|
+
slot: ReviewSlot,
|
|
227
|
+
issue: string,
|
|
228
|
+
findings_path?: string,
|
|
229
|
+
): string {
|
|
230
|
+
return [
|
|
231
|
+
`Review this checkout as a /code-review — the round-2 verification pass over the round-1 fixes: read the`,
|
|
232
|
+
`review brief at ${brief_path} and follow it exactly — the level on its first line, the rubric it`,
|
|
233
|
+
'names, the checkout it pins and its review:attest step. Do not edit any file.',
|
|
234
|
+
IN_SESSION_CLAUSE,
|
|
235
|
+
issue_read_instruction(issue),
|
|
236
|
+
...review_prior_findings.prompt_clauses(issue),
|
|
237
|
+
findings_instruction(slot, '', findings_path),
|
|
238
|
+
].join(' ')
|
|
128
239
|
}
|
|
129
240
|
|
|
241
|
+
// The spec is what `review:record` reads; the description after it travels in the stage output and,
|
|
242
|
+
// for a finding that stopped the ship, its first sentence in the durable stop log.
|
|
130
243
|
function finding_of(line: string): Finding {
|
|
131
244
|
const is_fixed = line.startsWith(FIXED_PREFIX)
|
|
132
245
|
|
|
133
|
-
|
|
246
|
+
const unmarked = is_fixed ? line.slice(FIXED_PREFIX.length) : line
|
|
247
|
+
|
|
248
|
+
return { ...review_finding_text.split_description(unmarked), is_fixed, line }
|
|
134
249
|
}
|
|
135
250
|
|
|
136
251
|
function spec_findings(text: string): ReadonlyArray<Finding> {
|
|
@@ -153,6 +268,55 @@ function is_blocking(finding: Finding): boolean {
|
|
|
153
268
|
return severity === HIGH || (severity === MEDIUM && !finding.is_fixed)
|
|
154
269
|
}
|
|
155
270
|
|
|
271
|
+
function kind_of(finding: Finding): string {
|
|
272
|
+
return finding.spec.split(':', KIND_FIELDS).join(':')
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function kinds_of(findings: ReadonlyArray<Finding>): ReadonlyArray<string> {
|
|
276
|
+
return [...new Set(findings.map((finding) => kind_of(finding)))]
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function stop_finding_of(finding: Finding): StopFinding {
|
|
280
|
+
const location = review_record_cli.parse_finding(finding.spec)?.file ?? ''
|
|
281
|
+
|
|
282
|
+
return {
|
|
283
|
+
kind: kind_of(finding),
|
|
284
|
+
location,
|
|
285
|
+
sentence: review_finding_text.first_sentence(finding.description),
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// `bug-risks:medium` — each kind of finding that decided a stopped stage, once per kind (the stop
|
|
290
|
+
// counts once under each in `lane:stats`), so the lane ledger records which kinds of finding stop a
|
|
291
|
+
// lane rather than only that one did (joshuafolkken/kit#4426). The blocking findings decide it where
|
|
292
|
+
// there are any; otherwise the stop was decided by the fixes — round-1 fixes red on the scoped pair, or
|
|
293
|
+
// a round 2 that edited the tree — so the fixed findings do. A line outside the grammar is the stage's
|
|
294
|
+
// own prose and never counts.
|
|
295
|
+
function deciding_findings(text: string): ReadonlyArray<Finding> {
|
|
296
|
+
const findings = spec_findings(text).filter((finding) => is_recordable(finding))
|
|
297
|
+
const blocking = findings.filter((finding) => is_blocking(finding))
|
|
298
|
+
|
|
299
|
+
return blocking.length > 0 ? blocking : findings.filter((finding) => finding.is_fixed)
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function blocking_kinds(text: string): ReadonlyArray<string> {
|
|
303
|
+
return kinds_of(deciding_findings(text))
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// The same findings `blocking_kinds` counts, each one whole — every finding, not once per kind — so a
|
|
307
|
+
// stop can be classified by what was found where, not only by its kind (joshuafolkken/kit#4519).
|
|
308
|
+
function blocking_details(text: string): ReadonlyArray<StopFinding> {
|
|
309
|
+
return deciding_findings(text).map((finding) => stop_finding_of(finding))
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// The findings a passing round 1 fixed in place — the stop log's only chance to see them, since no stop
|
|
313
|
+
// follows (joshuafolkken/kit#4780); none for any other round.
|
|
314
|
+
function passing_fixes(verdict: ScoredVerdict, outcome: RoundOutcome): ReadonlyArray<StopFinding> {
|
|
315
|
+
if (!outcome.is_passing || verdict.kind !== VERDICT.FIXED) return []
|
|
316
|
+
|
|
317
|
+
return blocking_details(verdict.report.join('\n'))
|
|
318
|
+
}
|
|
319
|
+
|
|
156
320
|
function scored_kind(findings: ReadonlyArray<Finding>): ScoredVerdict['kind'] {
|
|
157
321
|
if (findings.some((finding) => is_blocking(finding))) return VERDICT.BLOCKING
|
|
158
322
|
|
|
@@ -160,9 +324,10 @@ function scored_kind(findings: ReadonlyArray<Finding>): ScoredVerdict['kind'] {
|
|
|
160
324
|
}
|
|
161
325
|
|
|
162
326
|
// Absent means the reviewer never finished; a line outside the grammar means its verdict cannot be
|
|
163
|
-
// recorded — both stop the ship rather than read as clean.
|
|
164
|
-
//
|
|
165
|
-
//
|
|
327
|
+
// recorded — both stop the ship rather than read as clean. A fixed finding is recorded with its
|
|
328
|
+
// `fixed` mark, the disposition `review:record` keeps in the ledger and `review:round2` reads round 1's
|
|
329
|
+
// closure from (joshuafolkken/kit#5286). The report keeps each line whole — mark and description — for
|
|
330
|
+
// the stage output a resumed lane child reads.
|
|
166
331
|
function read_verdict(text: string | undefined): ReviewVerdict {
|
|
167
332
|
if (text === undefined) return { kind: VERDICT.INVALID, note: MISSING_NOTE }
|
|
168
333
|
|
|
@@ -175,11 +340,23 @@ function read_verdict(text: string | undefined): ReviewVerdict {
|
|
|
175
340
|
|
|
176
341
|
return {
|
|
177
342
|
kind: scored_kind(findings),
|
|
178
|
-
specs: findings.map((finding) =>
|
|
343
|
+
specs: findings.map((finding) =>
|
|
344
|
+
finding.is_fixed ? `${FIXED_PREFIX}${finding.spec}` : finding.spec,
|
|
345
|
+
),
|
|
179
346
|
report: findings.map((finding) => finding.line),
|
|
180
347
|
}
|
|
181
348
|
}
|
|
182
349
|
|
|
350
|
+
// The specs `review:record` is given: a stopped round's `fixed` marks are dropped, since a fix the scoped
|
|
351
|
+
// pair turned down, or one beside a finding still blocking, has not closed what it marks.
|
|
352
|
+
function recorded_specs(verdict: ScoredVerdict, outcome: RoundOutcome): ReadonlyArray<string> {
|
|
353
|
+
if (outcome.is_passing) return verdict.specs
|
|
354
|
+
|
|
355
|
+
return verdict.specs.map((spec) =>
|
|
356
|
+
spec.startsWith(FIXED_PREFIX) ? spec.slice(FIXED_PREFIX.length) : spec,
|
|
357
|
+
)
|
|
358
|
+
}
|
|
359
|
+
|
|
183
360
|
// Round 1 passes clean or with every blocking finding fixed in place; round 2 follows the commit.
|
|
184
361
|
function round_one_outcome(verdict: ScoredVerdict): RoundOutcome {
|
|
185
362
|
if (verdict.kind === VERDICT.BLOCKING) return { is_passing: false, note: BLOCKING_NOTE }
|
|
@@ -214,16 +391,26 @@ function round_two_outcome(verdict: ScoredVerdict): RoundOutcome {
|
|
|
214
391
|
|
|
215
392
|
const run_ship_review = {
|
|
216
393
|
FIXED_PREFIX,
|
|
394
|
+
OTHER_SITES_CLAUSE,
|
|
395
|
+
SWEEP_INSTRUCTION,
|
|
217
396
|
UNVERIFIED_OUTCOME,
|
|
218
397
|
VERDICT,
|
|
398
|
+
blocking_details,
|
|
399
|
+
blocking_kinds,
|
|
219
400
|
has_fixes,
|
|
220
401
|
is_clean_round_one,
|
|
402
|
+
passing_fixes,
|
|
221
403
|
read_verdict,
|
|
404
|
+
recorded_specs,
|
|
405
|
+
report_prompt,
|
|
222
406
|
reviewer_prompt,
|
|
407
|
+
round_one_opening,
|
|
223
408
|
round_one_outcome,
|
|
224
409
|
round_two_outcome,
|
|
410
|
+
slot_prompt,
|
|
411
|
+
submit_command,
|
|
225
412
|
verification_prompt,
|
|
226
413
|
}
|
|
227
414
|
|
|
228
|
-
export type { ReviewVerdict, RoundOutcome, ScoredVerdict }
|
|
415
|
+
export type { PromptOf, ReviewVerdict, RoundOutcome, ScoredVerdict, StopFinding }
|
|
229
416
|
export { run_ship_review }
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { agent_argv, type AgentArgv, type AgentArgvResult } from '#scripts/agent/agent-argv'
|
|
2
|
+
import { agent_role_profile, type AgentProfile } from '#scripts/agent/agent-role-profile'
|
|
3
|
+
import { api_auth } from '#scripts/agent/api-auth'
|
|
4
|
+
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
5
|
+
import { josh_command, type JoshResult } from '#scripts/josh/josh-run'
|
|
6
|
+
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
7
|
+
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
8
|
+
import { lane_session_broker } from '#scripts/lane/lane-session-broker'
|
|
9
|
+
import { review_attest, type ReviewSlot } from '#scripts/review/review-attest'
|
|
10
|
+
import { detached_launch } from '#scripts/run/detached-launch'
|
|
11
|
+
import { run_ship_brokered_review } from './run-ship-brokered-review'
|
|
12
|
+
import { run_ship_review, type PromptOf } from './run-ship-review'
|
|
13
|
+
import type { Phase } from './run-ship-scoped'
|
|
14
|
+
import { run_ship_stop_cause, type Cause } from './run-ship-stop-cause'
|
|
15
|
+
import type { StepResult } from './run-ship-sync'
|
|
16
|
+
|
|
17
|
+
// The reviewer half of `josh ship --review` (`run-ship-review-steps.ts`): a brief-minting command, a
|
|
18
|
+
// reviewer session handed what it printed, and the attestation that the session read this checkout.
|
|
19
|
+
// Every review round the ship runs — round 1, the interaction review, round 2 — launches through here.
|
|
20
|
+
|
|
21
|
+
const SUCCESS_EXIT_CODE = 0
|
|
22
|
+
const FAILURE_EXIT_CODE = 1
|
|
23
|
+
const should_forward_stderr = true
|
|
24
|
+
const ATTEST_CHECK = ['review:attest', '--check']
|
|
25
|
+
const KEPT_REVIEW_NOTE =
|
|
26
|
+
'the reviewer wrote its findings before it failed — its review is kept; attest and record judge it.'
|
|
27
|
+
const MISSING_FINDINGS_NOTE = 'the reviewer submitted no findings; nothing is at the slot path:'
|
|
28
|
+
type Round = '1' | '2'
|
|
29
|
+
|
|
30
|
+
const ROUND_ONE: Round = '1'
|
|
31
|
+
const ROUND_TWO: Round = '2'
|
|
32
|
+
|
|
33
|
+
interface SlotOpen {
|
|
34
|
+
open: ReadonlyArray<string>
|
|
35
|
+
slot: ReviewSlot
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface Briefed {
|
|
39
|
+
brief: string
|
|
40
|
+
slot: ReviewSlot
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const { CAUSE } = run_ship_stop_cause
|
|
44
|
+
const { CODE } = review_attest.REVIEW_SLOT
|
|
45
|
+
|
|
46
|
+
// **Every stop is tagged with the step's own cause**, so a round that stopped on a red join, a reviewer
|
|
47
|
+
// that did not finish or a refused attestation is not booked as a finding (joshuafolkken/kit#4431).
|
|
48
|
+
function failure(out: string, cause: Cause): StepResult {
|
|
49
|
+
return { code: FAILURE_EXIT_CODE, out, cause }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function tagged(cause: Cause, result: JoshResult): StepResult {
|
|
53
|
+
return result.code === SUCCESS_EXIT_CODE ? result : { ...result, cause }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function tagged_phase(cause: Cause, phase: Phase): Phase {
|
|
57
|
+
return async () => tagged(cause, await phase())
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function paths(slot?: ReviewSlot): { brief: string; findings: string; log: string } {
|
|
61
|
+
return lane_session_broker.review_paths(PROJECT_ROOT, slot)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function josh(argv: ReadonlyArray<string>): Promise<JoshResult> {
|
|
65
|
+
return await josh_command.josh_run(argv, should_forward_stderr)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function note(text: string): void {
|
|
69
|
+
process.stderr.write(`${text}\n`)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// A reviewer that could not authenticate is named as such (`api-auth.ts`), so the stop is not booked as
|
|
73
|
+
// a review finding (joshuafolkken/kit#4216).
|
|
74
|
+
function exited_note(log_path: string): string {
|
|
75
|
+
const exited = `reviewer failed — log: ${log_path}`
|
|
76
|
+
|
|
77
|
+
if (!api_auth.is_auth_failed_transcript(stamp_file.read_stamp_text(log_path))) return exited
|
|
78
|
+
|
|
79
|
+
return `${api_auth.AUTH_FAILURE_NOTE}: ${exited}`
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function current_verdict(slot?: ReviewSlot): ReturnType<typeof run_ship_review.read_verdict> {
|
|
83
|
+
return run_ship_review.read_verdict(stamp_file.read_stamp_text(paths(slot).findings))
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// **A session that ended with no findings file names the slot's path** (joshuafolkken/kit#4774) — the
|
|
87
|
+
// one `review:submit` writes, or the one a lane predating it was told to write: a reviewer that never
|
|
88
|
+
// submitted otherwise stops the round later, on a join or a record that never says the file is missing.
|
|
89
|
+
function missing_findings(slots: ReadonlyArray<ReviewSlot>): string | undefined {
|
|
90
|
+
const missing = slots
|
|
91
|
+
.map((slot) => paths(slot).findings)
|
|
92
|
+
.filter((findings) => stamp_file.read_stamp_text(findings) === undefined)
|
|
93
|
+
|
|
94
|
+
return missing.length === 0 ? undefined : `${MISSING_FINDINGS_NOTE} ${missing.join(', ')}`
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function finished_session(slots: ReadonlyArray<ReviewSlot>): JoshResult {
|
|
98
|
+
const missing = missing_findings(slots)
|
|
99
|
+
|
|
100
|
+
return missing === undefined
|
|
101
|
+
? { code: SUCCESS_EXIT_CODE, out: '' }
|
|
102
|
+
: failure(missing, CAUSE.INFRA)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// **A session that ran and then failed keeps the review it wrote** (joshuafolkken/kit#4562). The
|
|
106
|
+
// findings file is removed before the launch and written as the reviewer's last step, so a readable one
|
|
107
|
+
// is this session's finished review — a late auth failure or a lost broker reply then costs nothing,
|
|
108
|
+
// where a relaunch would review the whole change again. The attest and record phases still judge it.
|
|
109
|
+
// A broker answers for every slot it ran at once, so each slot's file must be readable.
|
|
110
|
+
function ended_session(failed_note: string, slots: ReadonlyArray<ReviewSlot> = [CODE]): JoshResult {
|
|
111
|
+
if (slots.some((slot) => current_verdict(slot).kind === run_ship_review.VERDICT.INVALID)) {
|
|
112
|
+
const missing = missing_findings(slots)
|
|
113
|
+
|
|
114
|
+
return failure(missing === undefined ? failed_note : `${failed_note}\n${missing}`, CAUSE.INFRA)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
note(`${failed_note}\n${KEPT_REVIEW_NOTE}`)
|
|
118
|
+
|
|
119
|
+
return { code: SUCCESS_EXIT_CODE, out: '' }
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Under the round's reviewer profile — the same model and effort (`JOSH_REVIEWER_*` included) the
|
|
123
|
+
// chain's subagent is given — and waited on, so the join below runs only once the review has finished.
|
|
124
|
+
// Each call is its own process, so round 2 is a fresh session by construction. A failed session is
|
|
125
|
+
// judged on its own slot's findings, not on a sibling's still being written.
|
|
126
|
+
async function run_direct_session(
|
|
127
|
+
argv: AgentArgv,
|
|
128
|
+
profile: AgentProfile,
|
|
129
|
+
slot: ReviewSlot,
|
|
130
|
+
round: Round,
|
|
131
|
+
): Promise<JoshResult> {
|
|
132
|
+
const log_path = paths(slot).log
|
|
133
|
+
const request = { argv, cwd: PROJECT_ROOT, log_path, profile }
|
|
134
|
+
|
|
135
|
+
note(agent_role_profile.describe_review(Number(round), profile))
|
|
136
|
+
const result = await detached_launch.launch_attached(request, note)
|
|
137
|
+
|
|
138
|
+
if (result.kind === 'failed') {
|
|
139
|
+
return failure(`reviewer could not start: ${result.note}`, CAUSE.INFRA)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (result.exit_code !== SUCCESS_EXIT_CODE) return ended_session(exited_note(log_path), [slot])
|
|
143
|
+
|
|
144
|
+
return finished_session([slot])
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// A lane child's reviewer is started by the lane's broker: an OpenAI lane's always, since a nested Codex
|
|
148
|
+
// cannot write outside its sandbox, and a Claude lane's whenever the `run:wake` supervisor serves it, since this
|
|
149
|
+
// ship was started from the child's Bash tool and so never received a token-only credential
|
|
150
|
+
// (joshuafolkken/kit#3817). A Claude lane nobody serves starts the reviewer itself, as before.
|
|
151
|
+
function is_brokered(profile: AgentProfile, issue: string): boolean {
|
|
152
|
+
if (!lane_child_marker.is_child_of(PROJECT_ROOT)) return false
|
|
153
|
+
|
|
154
|
+
return profile.provider === 'openai' || lane_session_broker.is_serving(PROJECT_ROOT, issue)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
interface SlotSession {
|
|
158
|
+
slot: ReviewSlot
|
|
159
|
+
built: AgentArgvResult
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function session_for(
|
|
163
|
+
prompt_of: PromptOf,
|
|
164
|
+
issue: string,
|
|
165
|
+
round: Round,
|
|
166
|
+
slots: { slot: ReviewSlot; all: ReadonlyArray<ReviewSlot> },
|
|
167
|
+
): SlotSession {
|
|
168
|
+
const { slot, all } = slots
|
|
169
|
+
const prompt = run_ship_review.slot_prompt(prompt_of, slot, all)(paths(slot).brief, slot, issue)
|
|
170
|
+
|
|
171
|
+
return { slot, built: agent_argv.review_in(prompt, Number(round), PROJECT_ROOT) }
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
async function run_slot(session: SlotSession, round: Round): Promise<JoshResult> {
|
|
175
|
+
const { built, slot } = session
|
|
176
|
+
|
|
177
|
+
if (built.kind === 'rejected') {
|
|
178
|
+
return failure(`reviewer profile rejected: ${built.note}`, CAUSE.INFRA)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return await run_direct_session(built.argv, built.profile, slot, round)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function run_brokered(
|
|
185
|
+
issue: string,
|
|
186
|
+
round: Round,
|
|
187
|
+
slots: ReadonlyArray<ReviewSlot>,
|
|
188
|
+
): Promise<JoshResult> {
|
|
189
|
+
const answer = await run_ship_brokered_review.request(PROJECT_ROOT, issue, round, slots)
|
|
190
|
+
|
|
191
|
+
return answer.is_success
|
|
192
|
+
? finished_session(slots)
|
|
193
|
+
: ended_session(`isolated reviewer failed: ${answer.reason}`, slots)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// **The slots' reviewers run side by side** (joshuafolkken/kit#4672), and the first failure among
|
|
197
|
+
// them is the result — each slot is launched through the same path a single review takes.
|
|
198
|
+
async function run_sessions(
|
|
199
|
+
prompt_of: PromptOf,
|
|
200
|
+
issue: string,
|
|
201
|
+
round: Round,
|
|
202
|
+
slots: ReadonlyArray<ReviewSlot>,
|
|
203
|
+
): Promise<JoshResult> {
|
|
204
|
+
const sessions = slots.map((slot) => session_for(prompt_of, issue, round, { slot, all: slots }))
|
|
205
|
+
const [first] = sessions
|
|
206
|
+
|
|
207
|
+
if (first?.built.kind === 'argv' && is_brokered(first.built.profile, issue)) {
|
|
208
|
+
return await run_brokered(issue, round, slots)
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const results = await Promise.all(sessions.map(async (session) => await run_slot(session, round)))
|
|
212
|
+
|
|
213
|
+
return (
|
|
214
|
+
results.find((result) => result.code !== SUCCESS_EXIT_CODE) ?? {
|
|
215
|
+
code: SUCCESS_EXIT_CODE,
|
|
216
|
+
out: '',
|
|
217
|
+
}
|
|
218
|
+
)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// The brief goes to a file and the previous round's findings are removed, so a reviewer that writes
|
|
222
|
+
// nothing reads as unfinished rather than as the last round's verdict.
|
|
223
|
+
async function launch_reviewers(
|
|
224
|
+
briefs: ReadonlyArray<Briefed>,
|
|
225
|
+
prompt_of: PromptOf,
|
|
226
|
+
issue: string,
|
|
227
|
+
round: Round,
|
|
228
|
+
): Promise<JoshResult> {
|
|
229
|
+
for (const { brief, slot } of briefs) {
|
|
230
|
+
const target = paths(slot)
|
|
231
|
+
|
|
232
|
+
stamp_file.write_text_stamp(target.brief, brief)
|
|
233
|
+
stamp_file.remove_stamp(target.findings)
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return await run_sessions(
|
|
237
|
+
prompt_of,
|
|
238
|
+
issue,
|
|
239
|
+
round,
|
|
240
|
+
briefs.map(({ slot }) => slot),
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// A refused attestation — the issue changed after the brief, an update left unread, no attestation —
|
|
245
|
+
// is no finding: the round read what it was briefed on. `review:attest --check` asks every slot.
|
|
246
|
+
async function attest_phase(): Promise<StepResult> {
|
|
247
|
+
return tagged(CAUSE.ATTEST, await josh(ATTEST_CHECK))
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Each slot's brief-minting command in turn, then their reviewers side by side, each handed what its
|
|
251
|
+
// command printed. The slots are the ones asked for, not the ones whose command has run so far.
|
|
252
|
+
function reviewed_together(
|
|
253
|
+
opens: ReadonlyArray<SlotOpen>,
|
|
254
|
+
prompt_of: PromptOf,
|
|
255
|
+
issue: string,
|
|
256
|
+
round: Round,
|
|
257
|
+
): ReadonlyArray<Phase> {
|
|
258
|
+
const printed = new Map<ReviewSlot, string>()
|
|
259
|
+
|
|
260
|
+
function briefs(): ReadonlyArray<Briefed> {
|
|
261
|
+
return opens.map(({ slot }) => ({ brief: printed.get(slot) ?? '', slot }))
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return [
|
|
265
|
+
...opens.map(({ open, slot }) => async () => {
|
|
266
|
+
const result = await josh(open)
|
|
267
|
+
|
|
268
|
+
printed.set(slot, result.out)
|
|
269
|
+
|
|
270
|
+
return tagged(CAUSE.CHECK, result)
|
|
271
|
+
}),
|
|
272
|
+
async () => await launch_reviewers(briefs(), prompt_of, issue, round),
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// A brief-minting command, then a reviewer handed what it printed.
|
|
277
|
+
function reviewed(
|
|
278
|
+
open: ReadonlyArray<string>,
|
|
279
|
+
prompt_of: PromptOf,
|
|
280
|
+
issue: string,
|
|
281
|
+
round: Round,
|
|
282
|
+
): ReadonlyArray<Phase> {
|
|
283
|
+
return reviewed_together([{ open, slot: CODE }], prompt_of, issue, round)
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const run_ship_reviewer = {
|
|
287
|
+
attest_phase,
|
|
288
|
+
current_verdict,
|
|
289
|
+
failure,
|
|
290
|
+
josh,
|
|
291
|
+
note,
|
|
292
|
+
paths,
|
|
293
|
+
reviewed,
|
|
294
|
+
reviewed_together,
|
|
295
|
+
ROUND_ONE,
|
|
296
|
+
ROUND_TWO,
|
|
297
|
+
SUCCESS_EXIT_CODE,
|
|
298
|
+
tagged,
|
|
299
|
+
tagged_phase,
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export type { Round }
|
|
303
|
+
export { run_ship_reviewer }
|