@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,28 +1,34 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
1
|
import path from 'node:path'
|
|
3
2
|
import { fileURLToPath } from 'node:url'
|
|
4
3
|
import { agent_role_profile, type AgentProfile } from '#scripts/agent/agent-role-profile'
|
|
4
|
+
import { agent_session_role } from '#scripts/agent/agent-session-role'
|
|
5
5
|
import { bash_output_cap_reader } from '#scripts/document/bash-output-cap'
|
|
6
6
|
import { scoped_green } from '#scripts/gate/scoped-green'
|
|
7
7
|
import { change_base } from '#scripts/git/change-base'
|
|
8
8
|
import { changed_paths } from '#scripts/git/changed-paths'
|
|
9
9
|
import { git_command } from '#scripts/git/git-command'
|
|
10
10
|
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
11
|
+
import { issue_watch_gate } from '#scripts/issue/issue-watch-gate'
|
|
11
12
|
import type { FileMapStamp } from '#scripts/josh/file-map-stamp'
|
|
12
13
|
import { find_package_directory } from '#scripts/josh/josh-logic'
|
|
13
14
|
import { path_decision } from '#scripts/josh/path-decision'
|
|
14
15
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
15
16
|
import { lane_session_broker } from '#scripts/lane/lane-session-broker'
|
|
16
17
|
import { run_ship_review } from '#scripts/run/ship/run-ship-review'
|
|
17
|
-
import {
|
|
18
|
+
import { removed_tests_check } from './removed-tests-check'
|
|
19
|
+
import { review_attest, type ReviewSlot } from './review-attest'
|
|
18
20
|
import { review_brief } from './review-brief'
|
|
19
21
|
import { review_checkout, type ReviewCheckout } from './review-checkout'
|
|
20
22
|
import { review_code_tree } from './review-code-tree'
|
|
21
23
|
import type { DiffParts } from './review-diff-parts'
|
|
22
24
|
import { review_diff_write } from './review-diff-write'
|
|
25
|
+
import { review_interaction } from './review-interaction'
|
|
23
26
|
import { review_level, type ReviewLevel } from './review-level'
|
|
27
|
+
import { review_reviewed_tree } from './review-reviewed-tree'
|
|
28
|
+
import { review_round_one_blobs } from './review-round-one-blobs'
|
|
24
29
|
import { review_stamps } from './review-stamps'
|
|
25
30
|
import { review_tree } from './review-tree'
|
|
31
|
+
import { review_untouched_readers, type ReadersRead } from './review-untouched-readers'
|
|
26
32
|
|
|
27
33
|
// `josh review:brief` — print the whole `/code-review` invocation, not just the level.
|
|
28
34
|
//
|
|
@@ -33,8 +39,8 @@ import { review_tree } from './review-tree'
|
|
|
33
39
|
// so "still running" is the usual answer at this point), how this project runs its unit tests, and —
|
|
34
40
|
// on round 2 — which files the first round's fixes touched.
|
|
35
41
|
|
|
36
|
-
const
|
|
37
|
-
|
|
42
|
+
const USAGE =
|
|
43
|
+
'Usage: josh review:brief [--round <1|2>] | --interaction | --level-only [--staged] [--json]'
|
|
38
44
|
|
|
39
45
|
// The rubric's absolute path, resolved against the kit package rather than the review checkout root.
|
|
40
46
|
// The rubric ships inside the package, so a consumer that keeps no
|
|
@@ -54,6 +60,7 @@ const ROUND_FLAG = '--round'
|
|
|
54
60
|
// paths and nothing else. `--staged` and `--json` are passed straight through, exactly as the old
|
|
55
61
|
// command took them.
|
|
56
62
|
const LEVEL_ONLY_FLAG = '--level-only'
|
|
63
|
+
const INTERACTION_FLAG = '--interaction'
|
|
57
64
|
const LEVEL_KEY = 'level'
|
|
58
65
|
const FIRST_ROUND = 1
|
|
59
66
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -95,7 +102,7 @@ function kept_note(taken_at: string): string {
|
|
|
95
102
|
// **It is written once per run and never retaken**. Overwriting on every
|
|
96
103
|
// round-1 invocation put a wrong `skip` one command away: run a bare `josh review:brief` after round
|
|
97
104
|
// 1's fixes are in and the record is retaken against the fixed tree, the fix delta reads empty, and
|
|
98
|
-
// `josh review:round2
|
|
105
|
+
// `josh review:round2` on a closed round 1 fires arm A on unreviewed fix code. Keeping the record the
|
|
99
106
|
// run already has removes that path outright — a second round-1 invocation reads it and leaves it
|
|
100
107
|
// alone, so every later reading of the delta is measured from before the fixes.
|
|
101
108
|
//
|
|
@@ -132,7 +139,12 @@ function record_round_one(
|
|
|
132
139
|
return false
|
|
133
140
|
}
|
|
134
141
|
|
|
135
|
-
review_stamps.round_one_stamp.write(
|
|
142
|
+
review_stamps.round_one_stamp.write(
|
|
143
|
+
tree,
|
|
144
|
+
target,
|
|
145
|
+
base,
|
|
146
|
+
review_round_one_blobs.capture(Object.keys(tree)),
|
|
147
|
+
)
|
|
136
148
|
|
|
137
149
|
return true
|
|
138
150
|
} catch {
|
|
@@ -155,7 +167,7 @@ function record_round_one(
|
|
|
155
167
|
// **The narrowing is measured from the tree that review was briefed on**, and only when that record
|
|
156
168
|
// was written by the brief the pointer names: one left by an earlier brief is not the tree the
|
|
157
169
|
// finished review read, so the resume reads the whole change instead.
|
|
158
|
-
function
|
|
170
|
+
function findings_tree(checkout: ReviewCheckout): FileMapStamp | undefined {
|
|
159
171
|
const { findings } = lane_session_broker.review_paths(PROJECT_ROOT)
|
|
160
172
|
const briefed = review_stamps.briefed_stamp.read()
|
|
161
173
|
|
|
@@ -170,18 +182,31 @@ function attested_tree(checkout: ReviewCheckout): FileMapStamp | undefined {
|
|
|
170
182
|
return is_clean ? briefed : undefined
|
|
171
183
|
}
|
|
172
184
|
|
|
173
|
-
|
|
185
|
+
// **A recorded round narrows first**, from the tree `review:record` wrote it on — a lane's review
|
|
186
|
+
// before the ship writes no findings file, and its fixes are in that tree (joshuafolkken/kit#4620).
|
|
187
|
+
function attested_tree(checkout: ReviewCheckout): FileMapStamp | undefined {
|
|
188
|
+
return review_reviewed_tree.resume_point(checkout) ?? findings_tree(checkout)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function slot_of(interaction: ReadonlyArray<string> | undefined): ReviewSlot {
|
|
192
|
+
const { CODE, INTERACTION } = review_attest.REVIEW_SLOT
|
|
193
|
+
|
|
194
|
+
return interaction === undefined ? CODE : INTERACTION
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
async function open_contract(slot: ReviewSlot): Promise<{
|
|
174
198
|
checkout: ReviewCheckout
|
|
175
199
|
nonce: string
|
|
176
200
|
resumed_from: FileMapStamp | undefined
|
|
177
201
|
}> {
|
|
178
202
|
const checkout = await review_checkout.read_checkout()
|
|
179
203
|
const resumed_from = attested_tree(checkout)
|
|
180
|
-
|
|
181
204
|
// Keyed on the root git just answered with, never on `process.cwd()`: the check made before the
|
|
182
205
|
// merge asks git the same question, and the two hash different keys the moment one of them runs
|
|
183
206
|
// from a subdirectory — a mismatch that would drop the guard with nothing printed.
|
|
184
|
-
|
|
207
|
+
const nonce = review_attest.record_target(checkout, checkout.root, slot)
|
|
208
|
+
|
|
209
|
+
return { checkout, nonce, resumed_from }
|
|
185
210
|
}
|
|
186
211
|
|
|
187
212
|
// Retaken on every round-1 brief, after the pointer it pairs with. Swallowed:
|
|
@@ -202,6 +227,7 @@ interface ComposeRequest {
|
|
|
202
227
|
tree: Record<string, string>
|
|
203
228
|
base: string
|
|
204
229
|
profile: AgentProfile
|
|
230
|
+
interaction?: ReadonlyArray<string> | undefined
|
|
205
231
|
}
|
|
206
232
|
|
|
207
233
|
// **Swallowed, and the brief keeps its target line**: parts that could not be
|
|
@@ -221,9 +247,35 @@ async function read_diff(
|
|
|
221
247
|
}
|
|
222
248
|
}
|
|
223
249
|
|
|
250
|
+
// **Swallowed, and the brief omits the list**: `josh ship` and `followup` read the same list again
|
|
251
|
+
// and refuse on a failure, so the merge never rests on this reading.
|
|
252
|
+
async function read_removed_tests(): Promise<ReadonlyArray<string>> {
|
|
253
|
+
try {
|
|
254
|
+
return (await removed_tests_check.read()) ?? []
|
|
255
|
+
} catch {
|
|
256
|
+
return []
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// **A failure is marked, and the brief says the list could not be read** — never an empty list,
|
|
261
|
+
// which would read as a change with no reader outside it.
|
|
262
|
+
async function read_readers(
|
|
263
|
+
root: string,
|
|
264
|
+
base: string,
|
|
265
|
+
paths: ReadonlyArray<string>,
|
|
266
|
+
): Promise<ReadersRead> {
|
|
267
|
+
try {
|
|
268
|
+
return await review_untouched_readers.read({ root, base, paths })
|
|
269
|
+
} catch {
|
|
270
|
+
return review_untouched_readers.FAILED_READ
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
224
274
|
async function compose_brief(request: ComposeRequest): Promise<string> {
|
|
225
|
-
const { round, paths, tree, base, profile } = request
|
|
226
|
-
const
|
|
275
|
+
const { round, paths, tree, base, profile, interaction } = request
|
|
276
|
+
const opened = await open_contract(slot_of(interaction))
|
|
277
|
+
// The interaction review reads the whole change, never a resume's narrowing (joshuafolkken/kit#4276).
|
|
278
|
+
const contract = interaction === undefined ? opened : { ...opened, resumed_from: undefined }
|
|
227
279
|
const stamps = {
|
|
228
280
|
gate: review_stamps.gate_stamp.read(),
|
|
229
281
|
in_flight: review_stamps.in_flight_stamp.read(),
|
|
@@ -245,6 +297,10 @@ async function compose_brief(request: ComposeRequest): Promise<string> {
|
|
|
245
297
|
rubric_path: RUBRIC_PATH,
|
|
246
298
|
...contract,
|
|
247
299
|
diff: await read_diff(contract.checkout.root, base, paths),
|
|
300
|
+
readers: await read_readers(contract.checkout.root, base, paths),
|
|
301
|
+
removed_tests: await read_removed_tests(),
|
|
302
|
+
interaction,
|
|
303
|
+
high_cited: review_reviewed_tree.high_cited(),
|
|
248
304
|
})
|
|
249
305
|
}
|
|
250
306
|
|
|
@@ -255,7 +311,7 @@ async function compose_brief(request: ComposeRequest): Promise<string> {
|
|
|
255
311
|
// failure it exists to prevent. Where it cannot be resolved the printed command keeps `change_base`'s
|
|
256
312
|
// answer, which still runs, and the record is written without a base so the next round widens.
|
|
257
313
|
async function read_bases(): Promise<{ base: string; commit: string | undefined }> {
|
|
258
|
-
const commit = await change_base.
|
|
314
|
+
const commit = await change_base.resolved_through_merge()
|
|
259
315
|
|
|
260
316
|
return { base: commit ?? (await git_command.change_base()), commit }
|
|
261
317
|
}
|
|
@@ -304,6 +360,8 @@ interface ChangeReading {
|
|
|
304
360
|
tree: Record<string, string>
|
|
305
361
|
}
|
|
306
362
|
|
|
363
|
+
type Emit = (text: string) => void
|
|
364
|
+
|
|
307
365
|
// One reading, used by every half below. Read twice, the level could describe a different change from
|
|
308
366
|
// the digests printed beside it — and it would cost four git spawns to do so.
|
|
309
367
|
async function read_change(): Promise<ChangeReading> {
|
|
@@ -325,7 +383,14 @@ async function record_review(
|
|
|
325
383
|
record_briefed(round, tree, commit)
|
|
326
384
|
}
|
|
327
385
|
|
|
328
|
-
|
|
386
|
+
// An interaction brief records nothing: the round-one and briefed stamps describe `/code-review`'s
|
|
387
|
+
// round, which already ran, and retaking them would move the delta round 2 is measured from.
|
|
388
|
+
async function run_review(
|
|
389
|
+
round: number,
|
|
390
|
+
reading: ChangeReading,
|
|
391
|
+
emit: Emit,
|
|
392
|
+
interaction?: ReadonlyArray<string>,
|
|
393
|
+
): Promise<number> {
|
|
329
394
|
const { base, commit, paths, tree } = reading
|
|
330
395
|
const refusal = scoped_green.refusal_for(tree, commit)
|
|
331
396
|
|
|
@@ -334,27 +399,76 @@ async function run_review(round: number, reading: ChangeReading): Promise<number
|
|
|
334
399
|
|
|
335
400
|
if (resolved.kind === 'rejected') return report_error(resolved.note)
|
|
336
401
|
agent_role_profile.warn_of_default()
|
|
337
|
-
|
|
338
|
-
|
|
402
|
+
const { profile } = resolved
|
|
403
|
+
|
|
404
|
+
emit(await compose_brief({ round, paths, tree, base, profile, interaction }))
|
|
405
|
+
if (interaction === undefined) await record_review(round, tree, commit)
|
|
339
406
|
|
|
340
407
|
return 0
|
|
341
408
|
}
|
|
342
409
|
|
|
343
|
-
|
|
344
|
-
|
|
410
|
+
// The interaction review's brief (joshuafolkken/kit#4276): `/code-review`'s round-1 brief over the
|
|
411
|
+
// whole change, with the role and the run-tooling paths appended. Not due, it says so and exits 0.
|
|
412
|
+
//
|
|
413
|
+
// **An issue update taken in after round 1's brief refuses it**: this brief is minted on its own slot
|
|
414
|
+
// beside round 1's (joshuafolkken/kit#4672), so it is refused here rather than briefed over an earlier
|
|
415
|
+
// specification round 1 read.
|
|
416
|
+
async function run_interaction(emit: Emit): Promise<number> {
|
|
417
|
+
const reading = await read_change()
|
|
418
|
+
const targets = review_interaction.due_paths(reading.paths)
|
|
419
|
+
|
|
420
|
+
if (targets.length === 0) {
|
|
421
|
+
emit(review_interaction.NOT_DUE_LINE)
|
|
422
|
+
|
|
423
|
+
return 0
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
const stale = await issue_watch_gate.review_refusal_here()
|
|
427
|
+
|
|
428
|
+
if (stale !== undefined) return report_error(stale)
|
|
429
|
+
|
|
430
|
+
return await run_review(FIRST_ROUND, reading, emit, targets)
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// The scoped-green refusal a brief on this tree would print, read without composing one — so
|
|
434
|
+
// `josh run:review` refuses before it launches anything beside the brief (joshuafolkken/kit#4828).
|
|
435
|
+
async function scoped_refusal(): Promise<string | undefined> {
|
|
436
|
+
const { tree, commit } = await read_change()
|
|
437
|
+
|
|
438
|
+
return scoped_green.refusal_for(tree, commit)
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// **A reviewer never mints a brief** (joshuafolkken/kit#5113): every brief takes a fresh nonce and drops
|
|
442
|
+
// the previous one's records, so a reviewer that re-briefs after attesting erases the attestation its
|
|
443
|
+
// supervisor is about to check, and a finished review reads as none. `--level-only` mints nothing.
|
|
444
|
+
const REVIEWER_REFUSAL =
|
|
445
|
+
'review:brief refused: this is a reviewer session (JOSH_AGENT_ROLE=reviewer). A new brief would drop the attestation this review already left — review the brief you were handed and report.'
|
|
446
|
+
|
|
447
|
+
async function run_brief(argv: ReadonlyArray<string>, emit: Emit): Promise<number> {
|
|
448
|
+
if (argv.length === 1 && argv[0] === INTERACTION_FLAG) return await run_interaction(emit)
|
|
345
449
|
|
|
346
450
|
const round = parse_round(argv)
|
|
347
451
|
|
|
348
452
|
if (round === undefined) return report_error(USAGE)
|
|
349
453
|
|
|
350
|
-
return await run_review(round, await read_change())
|
|
454
|
+
return await run_review(round, await read_change(), emit)
|
|
351
455
|
}
|
|
352
456
|
|
|
353
|
-
|
|
354
|
-
|
|
457
|
+
// `emit` takes the brief: `josh run:review` writes it to a file, because its two briefs together exceed
|
|
458
|
+
// the Bash output cap (joshuafolkken/kit#4863). `run` prints it.
|
|
459
|
+
async function run_to(argv: ReadonlyArray<string>, emit: Emit): Promise<number> {
|
|
460
|
+
if (argv[0] === LEVEL_ONLY_FLAG) return await run_level(argv.slice(1))
|
|
461
|
+
if (agent_session_role.is_reviewer()) return report_error(REVIEWER_REFUSAL)
|
|
462
|
+
|
|
463
|
+
return await run_brief(argv, emit)
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
467
|
+
return await run_to(argv, console.info)
|
|
355
468
|
}
|
|
356
469
|
|
|
357
470
|
const review_brief_cli = {
|
|
471
|
+
attested_tree,
|
|
358
472
|
FIRST_ROUND,
|
|
359
473
|
format_reason,
|
|
360
474
|
KEPT_NOTE_PREFIX,
|
|
@@ -363,8 +477,9 @@ const review_brief_cli = {
|
|
|
363
477
|
record_round_one,
|
|
364
478
|
report_error,
|
|
365
479
|
run,
|
|
480
|
+
run_to,
|
|
481
|
+
scoped_refusal,
|
|
366
482
|
}
|
|
367
483
|
|
|
368
|
-
|
|
369
|
-
|
|
484
|
+
export type { Emit }
|
|
370
485
|
export { review_brief_cli }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { review_brief_cli } from './review-brief-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh review:brief` entry, kept apart from `review-brief-cli.ts` because `run-review-cli.ts`
|
|
6
|
+
// imports that one: a bundle is one file, so a main guard there would fire for every command that
|
|
7
|
+
// carries it (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = await review_brief_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// The path lists a review brief prints.
|
|
2
|
+
|
|
3
|
+
// Absolute, for the same reason the round-1 target carries `-C`: git prints repository-root-relative
|
|
4
|
+
// paths, and a forked agent sitting in another checkout resolves them against that one — where the
|
|
5
|
+
// same relative path names a different file, or none.
|
|
6
|
+
function format_paths(root: string, paths: ReadonlyArray<string>): string {
|
|
7
|
+
return paths.map((relative) => ` ${root}/${relative}`).join('\n')
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// **A recorded High's fix is round 2's to verify, read whole** (joshuafolkken/kit#4941): `josh ship`
|
|
11
|
+
// reuses the lane's round 1 once only round 2's delta moved, so this pass is the one that reads the fix
|
|
12
|
+
// — and a fix can reach past the hunks the delta shows.
|
|
13
|
+
const HIGH_FIX_LINE =
|
|
14
|
+
'These files hold the fix of a High round 1 recorded — read each whole, not only its hunks, with the fix sites the finding names:'
|
|
15
|
+
|
|
16
|
+
function high_fix_lines(root: string, cited: ReadonlyArray<string> = []): ReadonlyArray<string> {
|
|
17
|
+
return cited.length === 0 ? [] : [`${HIGH_FIX_LINE}\n${format_paths(root, cited)}`]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const review_brief_paths = { format_paths, HIGH_FIX_LINE, high_fix_lines }
|
|
21
|
+
|
|
22
|
+
export { review_brief_paths }
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { agent_role_profile, type AgentProfile } from '#scripts/agent/agent-role-profile'
|
|
2
2
|
import { file_map_stamp, type FileMapStamp } from '#scripts/josh/file-map-stamp'
|
|
3
|
+
import { removed_tests } from './removed-tests'
|
|
4
|
+
import { review_brief_paths } from './review-brief-paths'
|
|
3
5
|
import { review_checkout, type ReviewCheckout } from './review-checkout'
|
|
4
6
|
import { review_diff_parts, type DiffParts } from './review-diff-parts'
|
|
7
|
+
import { review_interaction } from './review-interaction'
|
|
8
|
+
import { review_untouched_readers, type ReadersRead } from './review-untouched-readers'
|
|
5
9
|
|
|
6
10
|
// The text `josh review:brief` prints — the `/code-review` invocation, composed from what the run
|
|
7
11
|
// already knows.
|
|
@@ -19,6 +23,9 @@ import { review_diff_parts, type DiffParts } from './review-diff-parts'
|
|
|
19
23
|
|
|
20
24
|
const TEST_COMMAND_LINE =
|
|
21
25
|
'- The unit suite is `pnpm josh test:unit`. Do not reach for `npx vitest`; it is not how this project runs them.'
|
|
26
|
+
// The self-check's question 2 ("Prose matches the code", `prompts/review.md`) as one command.
|
|
27
|
+
const PROSE_STALE_LINE =
|
|
28
|
+
'- Self-check 2, prose matches the code: `pnpm josh prose:stale` lists each removed name, command, constant or heading docs, prompts or comments still name.'
|
|
22
29
|
|
|
23
30
|
// **The checkout block, and why the target below names a path instead of assuming one**.
|
|
24
31
|
// `/code-review` is forked by the harness and inherits the session's
|
|
@@ -193,12 +200,7 @@ function gate_line(
|
|
|
193
200
|
return NOT_VERIFIED_LINE
|
|
194
201
|
}
|
|
195
202
|
|
|
196
|
-
|
|
197
|
-
// paths, and a forked agent sitting in another checkout resolves them against that one — where the
|
|
198
|
-
// same relative path names a different file, or none.
|
|
199
|
-
function format_paths(root: string, paths: ReadonlyArray<string>): string {
|
|
200
|
-
return paths.map((relative) => ` ${root}/${relative}`).join('\n')
|
|
201
|
-
}
|
|
203
|
+
const { format_paths, high_fix_lines } = review_brief_paths
|
|
202
204
|
|
|
203
205
|
// **An empty target has two readings, and only one of them is "nothing changed"**.
|
|
204
206
|
// Since the delta is intersected with the change, round 1's fixes can be
|
|
@@ -411,9 +413,20 @@ interface BriefInput {
|
|
|
411
413
|
// The tree a finished, clean review of this branch was briefed on, so round 1 is a resume.
|
|
412
414
|
// Absent, round 1 reads the whole change.
|
|
413
415
|
resumed_from?: FileMapStamp | undefined
|
|
416
|
+
// The files a recorded High cites (`review_reviewed_tree.high_cited`), named in round 2 as the
|
|
417
|
+
// High's fix. Absent or empty, no line.
|
|
418
|
+
high_cited?: ReadonlyArray<string> | undefined
|
|
414
419
|
// The change written as parts under the Bash output cap. Absent when the
|
|
415
420
|
// write failed, and the target line alone then names the change.
|
|
416
421
|
diff?: { parts: DiffParts; cap: number } | undefined
|
|
422
|
+
// The tests the change removes, listed for the reviewer to account for. Absent or empty, no section.
|
|
423
|
+
removed_tests?: ReadonlyArray<string> | undefined
|
|
424
|
+
// The run-tooling paths an interaction review is briefed on (joshuafolkken/kit#4276). Absent, the
|
|
425
|
+
// brief is `/code-review`'s alone.
|
|
426
|
+
interaction?: ReadonlyArray<string> | undefined
|
|
427
|
+
// The readers outside the diff of each exported name it edits (joshuafolkken/kit#4515). A failed
|
|
428
|
+
// read is printed as one; absent or empty, no section.
|
|
429
|
+
readers?: ReadersRead | undefined
|
|
417
430
|
}
|
|
418
431
|
|
|
419
432
|
const SECOND_ROUND = 2
|
|
@@ -429,7 +442,10 @@ function round_one_target(input: BriefInput): string {
|
|
|
429
442
|
function target_block(input: BriefInput): string {
|
|
430
443
|
if (input.round < SECOND_ROUND) return round_one_target(input)
|
|
431
444
|
|
|
432
|
-
|
|
445
|
+
const { root } = input.checkout
|
|
446
|
+
const block = round_two_block(input.stamps.round_one, input.tree, root, input.base)
|
|
447
|
+
|
|
448
|
+
return [block, ...high_fix_lines(root, input.high_cited)].join('\n')
|
|
433
449
|
}
|
|
434
450
|
|
|
435
451
|
// **Only beside a whole-change target**: each part is a path's diff against
|
|
@@ -437,16 +453,30 @@ function target_block(input: BriefInput): string {
|
|
|
437
453
|
// code that narrowing exists to keep out of scope. Decided by the target actually printed, not by
|
|
438
454
|
// the round: every round that cannot narrow widens through `whole_change_target`, and that round
|
|
439
455
|
// needs the parts as much as a first one does.
|
|
440
|
-
function
|
|
441
|
-
|
|
456
|
+
function is_whole_change(input: BriefInput, target: string): boolean {
|
|
457
|
+
return target.includes(whole_change_target(input.checkout.root, input.base))
|
|
458
|
+
}
|
|
442
459
|
|
|
443
|
-
|
|
460
|
+
function diff_block(input: BriefInput, target: string): ReadonlyArray<string> {
|
|
461
|
+
if (!is_whole_change(input, target) || input.diff === undefined) return []
|
|
444
462
|
|
|
445
463
|
return ['', review_diff_parts.reading_block(input.diff.parts, input.diff.cap)]
|
|
446
464
|
}
|
|
447
465
|
|
|
466
|
+
// Beside a whole-change target only, for the reason `diff_block` gives: a narrowed round keeps the
|
|
467
|
+
// rest of the change, and so its readers, out of scope.
|
|
468
|
+
function readers_block(input: BriefInput, target: string): ReadonlyArray<string> {
|
|
469
|
+
if (!is_whole_change(input, target)) return []
|
|
470
|
+
|
|
471
|
+
return review_untouched_readers.brief_block(input.readers)
|
|
472
|
+
}
|
|
473
|
+
|
|
448
474
|
// The level alone on the first line, because the level-only mode's contract — a caller reading the
|
|
449
475
|
// answer with `$(...)` — is the one thing a brief must not break.
|
|
476
|
+
function interaction_block(targets: ReadonlyArray<string> | undefined): ReadonlyArray<string> {
|
|
477
|
+
return targets === undefined ? [] : ['', review_interaction.brief_block(targets)]
|
|
478
|
+
}
|
|
479
|
+
|
|
450
480
|
function compose(input: BriefInput): string {
|
|
451
481
|
const profile = input.profile ?? agent_role_profile.DEFAULT_PROFILES.reviewer
|
|
452
482
|
const target = target_block(input)
|
|
@@ -462,9 +492,13 @@ function compose(input: BriefInput): string {
|
|
|
462
492
|
'',
|
|
463
493
|
gate_line(input.stamps, input.tree, input.base),
|
|
464
494
|
TEST_COMMAND_LINE,
|
|
495
|
+
PROSE_STALE_LINE,
|
|
465
496
|
'',
|
|
466
497
|
target,
|
|
467
498
|
...diff_block(input, target),
|
|
499
|
+
...readers_block(input, target),
|
|
500
|
+
...removed_tests.brief_block(input.removed_tests ?? []),
|
|
501
|
+
...interaction_block(input.interaction),
|
|
468
502
|
].join('\n')
|
|
469
503
|
}
|
|
470
504
|
|
|
@@ -481,6 +515,7 @@ const review_brief = {
|
|
|
481
515
|
matching_stamp,
|
|
482
516
|
no_snapshot_line,
|
|
483
517
|
NOTHING_LEFT_LINE,
|
|
518
|
+
PROSE_STALE_LINE,
|
|
484
519
|
rubric_line,
|
|
485
520
|
RUBRIC_RELATIVE_PATH,
|
|
486
521
|
ROUND_TWO_HEADING,
|
|
@@ -4,6 +4,7 @@ import path from 'node:path'
|
|
|
4
4
|
import { git_command } from '#scripts/git/git-command'
|
|
5
5
|
import type { FileMapStamp } from '#scripts/josh/file-map-stamp'
|
|
6
6
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
7
|
+
import { PACKAGE_JSON } from '#scripts/lib/package-manifest'
|
|
7
8
|
import { comment_ranges, type TypeScriptApi } from './comment-ranges'
|
|
8
9
|
import { review_stamps } from './review-stamps'
|
|
9
10
|
|
|
@@ -26,7 +27,6 @@ const SCRIPT_EXTENSIONS: ReadonlyArray<string> = ['.ts', '.js']
|
|
|
26
27
|
const SVELTE_EXTENSION = '.svelte'
|
|
27
28
|
const EXCLUDED_PREFIX = '.claude/'
|
|
28
29
|
const TYPESCRIPT_MODULE = 'typescript'
|
|
29
|
-
const PACKAGE_JSON = 'package.json'
|
|
30
30
|
|
|
31
31
|
function is_svelte(relative: string): boolean {
|
|
32
32
|
return relative.endsWith(SVELTE_EXTENSION)
|
|
@@ -100,20 +100,24 @@ async function record(
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
// The paths whose code round 1's fixes left as it was — whose difference, if any, is in comments.
|
|
103
|
-
//
|
|
104
|
-
//
|
|
103
|
+
// Against a record taken on another base only `unmoved` qualifies — the paths the move left alone
|
|
104
|
+
// (`review_round_one_blobs.unmoved`), where the carried file is round 1's own and equal code digests
|
|
105
|
+
// still mean a comment-only fix (joshuafolkken/kit#4165).
|
|
105
106
|
function comment_only(
|
|
106
107
|
snapshot: FileMapStamp | undefined,
|
|
107
108
|
tree: Record<string, string>,
|
|
108
109
|
base: string | undefined,
|
|
110
|
+
unmoved: ReadonlyArray<string> = [],
|
|
109
111
|
): ReadonlyArray<string> {
|
|
110
|
-
if (snapshot === undefined || base === undefined
|
|
112
|
+
if (snapshot === undefined || base === undefined) return []
|
|
113
|
+
const is_same_base = snapshot.base === base
|
|
111
114
|
|
|
112
115
|
return Object.keys(snapshot.files).filter(
|
|
113
|
-
(relative) =>
|
|
116
|
+
(relative) =>
|
|
117
|
+
snapshot.files[relative] === tree[relative] && (is_same_base || unmoved.includes(relative)),
|
|
114
118
|
)
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
const review_code_tree = { comment_only, read, record, tree_of }
|
|
121
|
+
const review_code_tree = { comment_only, load_typescript, read, record, tree_of }
|
|
118
122
|
|
|
119
123
|
export { review_code_tree }
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { rmSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { error_text } from '#scripts/lib/error-message'
|
|
4
|
+
import { observation_ledger } from '#scripts/observations/observation-ledger'
|
|
5
|
+
import { review_comment_round } from './review-comment-round'
|
|
6
|
+
|
|
7
|
+
// The carry of the closed issues' comment rounds as its two callers run it — `review:record` outside a
|
|
8
|
+
// lane, and `observations:flush` for the lanes (joshuafolkken/kit#5326) — so both print the same
|
|
9
|
+
// lines. **A carry that fails never fails its caller**: the rounds wait for the next carry, and the
|
|
10
|
+
// carried file is the mark, so nothing is copied twice.
|
|
11
|
+
|
|
12
|
+
const CARRIED_LINE =
|
|
13
|
+
'review-finding line(s) recorded on closed issues after their pull requests opened into the ledger.'
|
|
14
|
+
const CARRY_FAILED_LINE =
|
|
15
|
+
'Could not carry the closed issues’ comment rounds into the ledger; the next carry retries:'
|
|
16
|
+
const UNTRACKED_PREFIX = '?? '
|
|
17
|
+
|
|
18
|
+
// **A carried file no commit took is discarded before the default branch catches up**: left untracked
|
|
19
|
+
// by a flush that stopped after its carry, it would make git refuse that fast-forward on every later
|
|
20
|
+
// flush. Nothing is lost — the carry regenerates it from the issue's comments.
|
|
21
|
+
function discard_uncommitted(status_output: string, root: string): void {
|
|
22
|
+
const untracked = status_output.split('\n').filter((line) => line.startsWith(UNTRACKED_PREFIX))
|
|
23
|
+
const carried = untracked
|
|
24
|
+
.map((line) => observation_ledger.status_path(line))
|
|
25
|
+
.filter((file_path) => review_comment_round.is_carried_file(file_path))
|
|
26
|
+
|
|
27
|
+
for (const file_path of carried) rmSync(path.join(root, file_path), { force: true })
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function carry_reported(root: string): Promise<void> {
|
|
31
|
+
try {
|
|
32
|
+
const count = await review_comment_round.carry(root)
|
|
33
|
+
|
|
34
|
+
if (count > 0) console.info(`Carried ${String(count)} ${CARRIED_LINE}`)
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.warn(`${CARRY_FAILED_LINE} ${error_text.message_of(error)}`)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const review_comment_carry = {
|
|
41
|
+
CARRIED_LINE,
|
|
42
|
+
CARRY_FAILED_LINE,
|
|
43
|
+
carry_reported,
|
|
44
|
+
discard_uncommitted,
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { review_comment_carry }
|