@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
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { git_grep_hits, type Hit } from '#scripts/git/git-grep-hits'
|
|
4
|
+
import { git_spawn } from '#scripts/git/git-spawn'
|
|
5
|
+
import { review_readers_scan, type Edited } from './review-readers-scan'
|
|
6
|
+
|
|
7
|
+
// The readers outside the diff of each exported name the diff edits, listed in the brief
|
|
8
|
+
// (joshuafolkken/kit#4515). A reader the change left on the old meaning was the most common kind of
|
|
9
|
+
// finding that stopped a lane review; the self-check's "Every caller moved with it" asked for the
|
|
10
|
+
// search and left it to the implementer, and this does it mechanically for the reviewer to read.
|
|
11
|
+
//
|
|
12
|
+
// **A reader is a line outside the changed paths that names the edited name as a word** — a
|
|
13
|
+
// re-derivation or an alias is not found, and the list says so. A grep that could not run is printed
|
|
14
|
+
// as such, never as "no readers".
|
|
15
|
+
|
|
16
|
+
const SOURCE_FILE = /\.(?:ts|js)$/u
|
|
17
|
+
const SEARCH_PATHS = ['*.ts', '*.js', '*.svelte', ':(exclude)*.snap']
|
|
18
|
+
const WORD_FLAG = '-w'
|
|
19
|
+
const MAX_HITS = 10
|
|
20
|
+
const MAX_NAMES = 30
|
|
21
|
+
const HEADING = '## Readers outside the diff'
|
|
22
|
+
const ROLE_LINE =
|
|
23
|
+
'Each exported name this change edits, with every line outside the changed paths that names it (`git grep -w`). Check each reader still holds under the new meaning — the self-check\'s "Every caller moved with it" (`prompts/review.md`). A reader left on the old meaning is a finding at the reader\'s `file:line`. A reader reaching the name through an alias or a re-derivation is not listed.'
|
|
24
|
+
const SEARCH_FAILED = ' - git grep failed; not searched'
|
|
25
|
+
const READ_FAILED = 'The readers outside the diff could not be read; search them yourself:'
|
|
26
|
+
const OMITTED_TAIL = 'not searched; search their readers yourself'
|
|
27
|
+
|
|
28
|
+
interface Readers {
|
|
29
|
+
target: string
|
|
30
|
+
origin: string
|
|
31
|
+
hits: ReadonlyArray<Hit>
|
|
32
|
+
has_failed: boolean
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// `omitted` counts the edited names past `MAX_NAMES`, which were never searched.
|
|
36
|
+
interface ReadersRead {
|
|
37
|
+
readers: ReadonlyArray<Readers>
|
|
38
|
+
omitted: number
|
|
39
|
+
has_failed: boolean
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const NO_READ: ReadersRead = { readers: [], omitted: 0, has_failed: false }
|
|
43
|
+
const FAILED_READ: ReadersRead = { readers: [], omitted: 0, has_failed: true }
|
|
44
|
+
|
|
45
|
+
interface ReadRequest {
|
|
46
|
+
root: string
|
|
47
|
+
base: string
|
|
48
|
+
paths: ReadonlyArray<string>
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface FileEdits {
|
|
52
|
+
relative: string
|
|
53
|
+
edits: ReadonlyArray<Edited>
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async function file_edits(request: ReadRequest, relative: string): Promise<FileEdits> {
|
|
57
|
+
const { root, base } = request
|
|
58
|
+
const diff = await git_spawn.read(['-C', root, 'diff', '-U0', '--no-color', base, '--', relative])
|
|
59
|
+
|
|
60
|
+
if (diff.length === 0) return { relative, edits: [] }
|
|
61
|
+
|
|
62
|
+
// A path the change deletes has no text; its readers fail the typecheck rather than read stale.
|
|
63
|
+
try {
|
|
64
|
+
const source = readFileSync(path.join(root, relative), 'utf8')
|
|
65
|
+
|
|
66
|
+
return { relative, edits: review_readers_scan.edited(source, diff) }
|
|
67
|
+
} catch {
|
|
68
|
+
return { relative, edits: [] }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function excluded(paths: ReadonlyArray<string>): Array<string> {
|
|
73
|
+
return paths.map((relative) => `:(exclude,literal)${relative}`)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function readers_of(request: ReadRequest, entry: FileEdits, edit: Edited): Promise<Readers> {
|
|
77
|
+
const pathspecs = [...SEARCH_PATHS, ...excluded(request.paths)]
|
|
78
|
+
const found = await git_grep_hits.search(edit.target, [WORD_FLAG], pathspecs, request.root)
|
|
79
|
+
|
|
80
|
+
return { target: edit.target, origin: `${entry.relative}:${String(edit.line)}`, ...found }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Every edited name, with its readers outside `paths`. Only names that have a reader, or whose search
|
|
84
|
+
// failed, are returned; the names past the cap are counted, never dropped silently.
|
|
85
|
+
async function read(request: ReadRequest): Promise<ReadersRead> {
|
|
86
|
+
const sources = request.paths.filter((relative) => SOURCE_FILE.test(relative))
|
|
87
|
+
const files = await Promise.all(
|
|
88
|
+
sources.map(async (relative) => await file_edits(request, relative)),
|
|
89
|
+
)
|
|
90
|
+
const pairs = files.flatMap((entry) => entry.edits.map((edit) => ({ entry, edit })))
|
|
91
|
+
const capped = pairs.slice(0, MAX_NAMES)
|
|
92
|
+
const all = await Promise.all(
|
|
93
|
+
capped.map(async ({ entry, edit }) => await readers_of(request, entry, edit)),
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
const readers = all.filter((entry) => entry.has_failed || entry.hits.length > 0)
|
|
97
|
+
|
|
98
|
+
return { readers, omitted: pairs.length - capped.length, has_failed: false }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function hit_line(hit: Hit): string {
|
|
102
|
+
return ` - ${hit.path}:${hit.line} ${hit.excerpt}`
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function readers_lines(readers: Readers): Array<string> {
|
|
106
|
+
const head = `- \`${readers.target}\` — ${readers.origin}`
|
|
107
|
+
|
|
108
|
+
if (readers.has_failed) return [head, SEARCH_FAILED]
|
|
109
|
+
|
|
110
|
+
const more = readers.hits.length - MAX_HITS
|
|
111
|
+
const tail = more > 0 ? [` - … and ${String(more)} more`] : []
|
|
112
|
+
|
|
113
|
+
return [head, ...readers.hits.slice(0, MAX_HITS).map((hit) => hit_line(hit)), ...tail]
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function omitted_lines(omitted: number): Array<string> {
|
|
117
|
+
if (omitted === 0) return []
|
|
118
|
+
|
|
119
|
+
return [`- … and ${String(omitted)} more edited names ${OMITTED_TAIL}`]
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// A read that failed as a whole says so, never reads as a change with no reader outside it; absent
|
|
123
|
+
// or empty, no section.
|
|
124
|
+
function brief_block(read_result: ReadersRead = NO_READ): ReadonlyArray<string> {
|
|
125
|
+
const { readers, omitted, has_failed } = read_result
|
|
126
|
+
|
|
127
|
+
if (has_failed) return ['', `${HEADING}\n${READ_FAILED}`]
|
|
128
|
+
if (omitted === 0 && readers.length === 0) return []
|
|
129
|
+
|
|
130
|
+
const listed = readers.flatMap((entry) => readers_lines(entry))
|
|
131
|
+
|
|
132
|
+
return ['', [HEADING, ROLE_LINE, ...listed, ...omitted_lines(omitted)].join('\n')]
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const review_untouched_readers = {
|
|
136
|
+
brief_block,
|
|
137
|
+
FAILED_READ,
|
|
138
|
+
HEADING,
|
|
139
|
+
MAX_NAMES,
|
|
140
|
+
OMITTED_TAIL,
|
|
141
|
+
read,
|
|
142
|
+
READ_FAILED,
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export type { Readers, ReadersRead }
|
|
146
|
+
export { review_untouched_readers }
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type ts from 'typescript'
|
|
2
|
+
import type { TypeScriptApi } from './comment-ranges'
|
|
3
|
+
|
|
4
|
+
// The tests a test file declares, each as its full name — the titles of the `describe` blocks around it
|
|
5
|
+
// joined to its own `it` / `test` title — so two tests with the same title under different blocks
|
|
6
|
+
// stay apart.
|
|
7
|
+
//
|
|
8
|
+
// **Read from the TypeScript parser, never from a pattern**: a title holding a quote or a bracket, or
|
|
9
|
+
// a call split over lines, is exactly what a hand-written scanner misreads. `it.skip(…)`,
|
|
10
|
+
// `test.each([…])(…)` and `describe.concurrent(…)` are the same test with a modifier, so a call
|
|
11
|
+
// counts by the names its callee chain is built from: Playwright's `test.describe(…)` is a block and
|
|
12
|
+
// its `test.step(…)` is part of the test around it, never a test. A template title with substitutions is kept
|
|
13
|
+
// as its source text; a title held in a variable has no text to compare and is not listed.
|
|
14
|
+
//
|
|
15
|
+
// **A `describe` is a name, never a test**: renaming one moves the tests under it, and removing it
|
|
16
|
+
// removes them, so only the `it` / `test` calls are listed.
|
|
17
|
+
|
|
18
|
+
const BLOCK_FUNCTION = 'describe'
|
|
19
|
+
const STEP_FUNCTION = 'step'
|
|
20
|
+
const TEST_FUNCTIONS: ReadonlySet<string> = new Set(['it', 'test'])
|
|
21
|
+
const TITLE_SEPARATOR = ' > '
|
|
22
|
+
const VIRTUAL_FILE_NAME = 'test-titles.ts'
|
|
23
|
+
|
|
24
|
+
type Prefix = ReadonlyArray<string>
|
|
25
|
+
|
|
26
|
+
interface NamedCall {
|
|
27
|
+
chain: ReadonlyArray<string>
|
|
28
|
+
title: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
interface Walk {
|
|
32
|
+
api: TypeScriptApi
|
|
33
|
+
source: ts.SourceFile
|
|
34
|
+
into: Array<string>
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function member_name(api: TypeScriptApi, expression: ts.Expression): ReadonlyArray<string> {
|
|
38
|
+
return api.isPropertyAccessExpression(expression) ? [expression.name.text] : []
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// The names a callee chain is built from, root first: `test.describe.parallel` is
|
|
42
|
+
// `['test', 'describe', 'parallel']`, and `it.each([…])` is `['it', 'each']`.
|
|
43
|
+
function callee_chain(
|
|
44
|
+
api: TypeScriptApi,
|
|
45
|
+
expression: ts.Expression,
|
|
46
|
+
): ReadonlyArray<string> | undefined {
|
|
47
|
+
if (api.isIdentifier(expression)) return [expression.text]
|
|
48
|
+
const is_chained = api.isPropertyAccessExpression(expression) || api.isCallExpression(expression)
|
|
49
|
+
const chain = is_chained ? callee_chain(api, expression.expression) : undefined
|
|
50
|
+
|
|
51
|
+
return chain === undefined ? undefined : [...chain, ...member_name(api, expression)]
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function is_block(chain: ReadonlyArray<string>): boolean {
|
|
55
|
+
return chain.includes(BLOCK_FUNCTION)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function is_test(chain: ReadonlyArray<string>): boolean {
|
|
59
|
+
const [root = ''] = chain
|
|
60
|
+
|
|
61
|
+
return TEST_FUNCTIONS.has(root) && !is_block(chain) && !chain.includes(STEP_FUNCTION)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Only a string or a template can be a title: the array `it.each([…])` is first called with is the
|
|
65
|
+
// table of cases, not a name.
|
|
66
|
+
function title_of(walk: Walk, call: ts.CallExpression): string | undefined {
|
|
67
|
+
const [first] = call.arguments
|
|
68
|
+
|
|
69
|
+
if (first === undefined) return undefined
|
|
70
|
+
if (walk.api.isStringLiteralLike(first)) return first.text
|
|
71
|
+
|
|
72
|
+
return walk.api.isTemplateExpression(first) ? first.getText(walk.source) : undefined
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function named_call(walk: Walk, node: ts.Node): NamedCall | undefined {
|
|
76
|
+
if (!walk.api.isCallExpression(node)) return undefined
|
|
77
|
+
const chain = callee_chain(walk.api, node.expression)
|
|
78
|
+
const title = chain === undefined ? undefined : title_of(walk, node)
|
|
79
|
+
|
|
80
|
+
return chain === undefined || title === undefined ? undefined : { chain, title }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// The block titles a call adds to the name of everything inside it: a `describe` adds its own, a
|
|
84
|
+
// test is listed and adds nothing further down, and any other node passes its prefix through.
|
|
85
|
+
function entered(walk: Walk, call: NamedCall | undefined, prefix: Prefix): Prefix {
|
|
86
|
+
if (call === undefined) return prefix
|
|
87
|
+
const named = [...prefix, call.title]
|
|
88
|
+
|
|
89
|
+
if (is_test(call.chain)) walk.into.push(named.join(TITLE_SEPARATOR))
|
|
90
|
+
|
|
91
|
+
return is_block(call.chain) ? named : prefix
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function visit(walk: Walk, node: ts.Node, prefix: Prefix): void {
|
|
95
|
+
const inner = entered(walk, named_call(walk, node), prefix)
|
|
96
|
+
|
|
97
|
+
walk.api.forEachChild(node, (child) => {
|
|
98
|
+
visit(walk, child, inner)
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function titles_of(api: TypeScriptApi, text: string): ReadonlyArray<string> {
|
|
103
|
+
const source = api.createSourceFile(VIRTUAL_FILE_NAME, text, api.ScriptTarget.Latest, true)
|
|
104
|
+
const into: Array<string> = []
|
|
105
|
+
|
|
106
|
+
visit({ api, source, into }, source, [])
|
|
107
|
+
|
|
108
|
+
return into
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// The title a test carries itself, without the blocks around it.
|
|
112
|
+
function leaf_of(full_name: string): string {
|
|
113
|
+
return full_name.split(TITLE_SEPARATOR).at(-1) ?? full_name
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const test_titles = { leaf_of, titles_of }
|
|
117
|
+
|
|
118
|
+
export { test_titles }
|
|
@@ -52,8 +52,16 @@ const ROW = {
|
|
|
52
52
|
decide: (): boolean => true,
|
|
53
53
|
keeps: keeps_model,
|
|
54
54
|
reaches: is_general_purpose,
|
|
55
|
+
about: {
|
|
56
|
+
title: 'Subagent model named',
|
|
57
|
+
topic:
|
|
58
|
+
'`.claude/skills/workflow-commands/delegation.md` → "A `general-purpose` subagent names its model"',
|
|
59
|
+
fires:
|
|
60
|
+
'an `Agent` / `Task` call of the `general-purpose` type with no `model`. Every occurrence',
|
|
61
|
+
quiet: 'a named agent type, or a `model` set',
|
|
62
|
+
},
|
|
55
63
|
}
|
|
56
64
|
|
|
57
|
-
const agent_model = { AGENT_MODEL_REASON, ROW, is_unnamed_model }
|
|
65
|
+
const agent_model = { AGENT_MODEL_REASON, ROW, SUBAGENT_TOOLS, is_unnamed_model }
|
|
58
66
|
|
|
59
67
|
export { agent_model }
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
|
|
2
2
|
import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
|
|
3
3
|
import { time_shell } from '#scripts/time-runtime/time-shell'
|
|
4
|
+
import { git_argv } from './git-argv'
|
|
4
5
|
import { shell_segments } from './shell-segments'
|
|
5
6
|
|
|
6
7
|
// The trigger helpers the enumeration in `delivered-rules.ts` is built from, held here so a rule
|
|
7
8
|
// that lives in its own module can build its own row without importing the enumeration back.
|
|
8
|
-
// `is_issue_filing` is
|
|
9
|
-
//
|
|
9
|
+
// `is_issue_filing` is shared by the readers of a run's filings off the transcript (`turn-filings.ts`,
|
|
10
|
+
// `stop-guard.ts`), so it could not stay a private function of one of them.
|
|
10
11
|
|
|
11
12
|
// **Only `Bash`, and the omission is deliberate**: Claude Code denies one
|
|
12
13
|
// call of a turn and runs the rest, so a refused `Edit` would leave its siblings applied and itself
|
|
@@ -35,14 +36,56 @@ const TITLE_FIELD = /(?:-f|-F|--field|--raw-field)\s*'?title=/u
|
|
|
35
36
|
|
|
36
37
|
// A filing made by hand rather than through `josh issue:file` — the call the `direct-filing` row
|
|
37
38
|
// refuses on every occurrence.
|
|
39
|
+
//
|
|
40
|
+
// **Read outside quotes, but not outside a heredoc** (joshuafolkken/kit#4525). `echo "… gh issue create
|
|
41
|
+
// …"` files nothing, so the `gh` call is matched on the unquoted line — which keeps a `"$(gh issue
|
|
42
|
+
// create …)"` that runs. A heredoc body is matched as written: `bash <<EOF` runs it, and the body cannot
|
|
43
|
+
// be told apart from prose, so the rule errs on the refusing side. The endpoint and the title field are
|
|
44
|
+
// still read from the line as written, where a quoted path or field keeps them.
|
|
45
|
+
//
|
|
46
|
+
// **A quoted script handed to a shell runs, so it is read as written too**: `bash -c "gh issue create
|
|
47
|
+
// …"`, `sh -c '…'` and `eval "…"` file the Issue the quotes would otherwise hide.
|
|
48
|
+
const GH_API_COMMAND = /\bgh\s+api\b/u
|
|
49
|
+
const SHELL_SCRIPT_RUNNER = /\b(?:(?:ba|z|da|k)?sh\s+(?:-\w+\s+)*-\w*c\b|eval\b)/u
|
|
50
|
+
|
|
51
|
+
function spoken_line(command: string): string {
|
|
52
|
+
if (time_shell.has_heredoc(command)) return command
|
|
53
|
+
|
|
54
|
+
const plain = time_shell.unquoted(command)
|
|
55
|
+
|
|
56
|
+
return SHELL_SCRIPT_RUNNER.test(plain) ? command : plain
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const LEADING_SHELL_SCRIPT_RUNNER = new RegExp(`^${SHELL_SCRIPT_RUNNER.source}`, 'u')
|
|
60
|
+
const QUOTE_MARK = /["']/gu
|
|
61
|
+
|
|
62
|
+
// The quoted script a segment's shell runs, as a line of its own: `sh -c 'pnpm exec eslint .'` reads
|
|
63
|
+
// as `pnpm exec eslint .`, so a caller cutting it into commands reads the programs the script
|
|
64
|
+
// launches. Only when the segment's program is the runner — `echo sh -c x` hands no script to a shell.
|
|
65
|
+
// `undefined` when the segment runs no shell script.
|
|
66
|
+
function shell_script_of(segment: string): string | undefined {
|
|
67
|
+
const call = git_argv.program_of(segment)
|
|
68
|
+
|
|
69
|
+
if (call === undefined) return undefined
|
|
70
|
+
|
|
71
|
+
const spoken = [call.name, ...call.args].join(' ')
|
|
72
|
+
const runner = LEADING_SHELL_SCRIPT_RUNNER.exec(spoken)
|
|
73
|
+
|
|
74
|
+
if (runner === null) return undefined
|
|
75
|
+
|
|
76
|
+
return spoken.slice(runner[0].length).replaceAll(QUOTE_MARK, '').trim()
|
|
77
|
+
}
|
|
78
|
+
|
|
38
79
|
function is_direct_filing(command: string): boolean {
|
|
39
|
-
|
|
80
|
+
const spoken = spoken_line(command)
|
|
81
|
+
|
|
82
|
+
if (ISSUE_CREATE_COMMAND.test(spoken)) return true
|
|
40
83
|
|
|
41
|
-
return ISSUES_ENDPOINT.test(command) && TITLE_FIELD.test(command)
|
|
84
|
+
return GH_API_COMMAND.test(spoken) && ISSUES_ENDPOINT.test(command) && TITLE_FIELD.test(command)
|
|
42
85
|
}
|
|
43
86
|
|
|
44
87
|
// `pnpm josh issue:file`, in either spelling — **the** filing act once a direct one is refused, so the
|
|
45
|
-
//
|
|
88
|
+
// turn's filing count reads it. Segment-wise, so a
|
|
46
89
|
// spelling quoted inside another command's body is not read as a filing.
|
|
47
90
|
const FILING_NAMES: ReadonlySet<string> = new Set(['issue:file'])
|
|
48
91
|
|
|
@@ -52,6 +95,6 @@ function is_issue_filing(command: string): boolean {
|
|
|
52
95
|
.some((segment) => shell_segments.is_josh_command(segment, FILING_NAMES))
|
|
53
96
|
}
|
|
54
97
|
|
|
55
|
-
const bash_triggers = { is_direct_filing, is_issue_filing, on_bash_command }
|
|
98
|
+
const bash_triggers = { is_direct_filing, is_issue_filing, on_bash_command, shell_script_of }
|
|
56
99
|
|
|
57
100
|
export { bash_triggers }
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { document_section } from '#scripts/document/document-section'
|
|
4
|
+
import { find_package_directory } from '#scripts/josh/package-directory'
|
|
5
|
+
import type { MeasuredRule } from './delivered-rules'
|
|
6
|
+
import { reply_prose } from './reply-prose'
|
|
7
|
+
import { stop_decision } from './stop-decision'
|
|
8
|
+
|
|
9
|
+
// A chat reply leads with its conclusion and keeps its narrative short: the procedure is
|
|
10
|
+
// `prompts/collaboration-workflow/principles.md` → "concise-reply"; the limit is this file's.
|
|
11
|
+
|
|
12
|
+
// Letters and digits of narrative — prose outside code, tables and lists. Counted, not characters, so
|
|
13
|
+
// markdown markers and punctuation weigh nothing in any language.
|
|
14
|
+
const PROSE_LIMIT = 400
|
|
15
|
+
// A person who asked for the detail is answered with it.
|
|
16
|
+
const EXEMPT_WORDS: ReadonlyArray<string> = ['詳しく', '具体的に', '詳細']
|
|
17
|
+
const COUNTED_PATTERN = /[\p{L}\p{N}]/gu
|
|
18
|
+
|
|
19
|
+
const PRINCIPLES_FILE = 'prompts/collaboration-workflow/principles.md'
|
|
20
|
+
const SECTION = 'concise-reply'
|
|
21
|
+
const PACKAGE_DIRECTORY = find_package_directory(path.dirname(fileURLToPath(import.meta.url)))
|
|
22
|
+
|
|
23
|
+
// The constant opening `rule-value.ts` credits a Stop refusal to this row by.
|
|
24
|
+
const REASON_OPENING = `⛔ concise reply: your reply's prose outside code, tables and lists is over the limit of \`${PRINCIPLES_FILE}\` → "${SECTION}"`
|
|
25
|
+
|
|
26
|
+
const KEEP_DECISION = ' Keep its `Recommended:` / `Alternative:` lines as they are.'
|
|
27
|
+
|
|
28
|
+
function prose_length(message: string): number {
|
|
29
|
+
return reply_prose.narrative_of(message).match(COUNTED_PATTERN)?.length ?? 0
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function is_exempt(prompt: string): boolean {
|
|
33
|
+
return EXEMPT_WORDS.some((word) => prompt.includes(word))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// `prompt` is the person's last prompt — `undefined` when it could not be read, and then whether they
|
|
37
|
+
// asked for the detail is unknown, so nothing is refused.
|
|
38
|
+
function is_over(message: string, prompt: string | undefined): boolean {
|
|
39
|
+
if (prompt === undefined || is_exempt(prompt)) return false
|
|
40
|
+
|
|
41
|
+
return prose_length(message) > PROSE_LIMIT
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function section_text(root: string): string | undefined {
|
|
45
|
+
const markdown = document_section.read_optional(path.join(root, PRINCIPLES_FILE))
|
|
46
|
+
|
|
47
|
+
return markdown === undefined ? undefined : document_section.section(markdown, SECTION)?.text
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// A held run's notify reads the decision off the rewrite, which the loop-breaker lets stop unchecked.
|
|
51
|
+
function decision_note(message: string): string {
|
|
52
|
+
return stop_decision.decision_of(message) === undefined ? '' : KEEP_DECISION
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// The refusal carries the section itself, so the rewrite needs no read.
|
|
56
|
+
function build_reason(message: string, root: string = PACKAGE_DIRECTORY): string {
|
|
57
|
+
const head =
|
|
58
|
+
`${REASON_OPENING} (${String(prose_length(message))} of ${String(PROSE_LIMIT)}). Rewrite it ` +
|
|
59
|
+
`shorter as that section says — do not repeat your previous reply.${decision_note(message)}`
|
|
60
|
+
const body = section_text(root)
|
|
61
|
+
|
|
62
|
+
return body === undefined ? head : `${head}\n\n${body}`
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const ROW: MeasuredRule = {
|
|
66
|
+
id: SECTION,
|
|
67
|
+
reason: REASON_OPENING,
|
|
68
|
+
about: {
|
|
69
|
+
title: 'Concise reply',
|
|
70
|
+
topic: `\`principles.md\` → "${SECTION}"`,
|
|
71
|
+
entry: 'pnpm josh stop:guard',
|
|
72
|
+
fires: `a reply whose narrative outside code, tables and lists is over ${String(PROSE_LIMIT)} letters. Blocks the stop`,
|
|
73
|
+
quiet:
|
|
74
|
+
'a reply under the limit, a prompt asking for the detail (`詳しく` / `具体的に` / `詳細`), a fixed output in a code block, no prompt of the person’s on the transcript tail, or a headless session',
|
|
75
|
+
},
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const concise_reply = {
|
|
79
|
+
EXEMPT_WORDS,
|
|
80
|
+
PROSE_LIMIT,
|
|
81
|
+
REASON_OPENING,
|
|
82
|
+
ROW,
|
|
83
|
+
build_reason,
|
|
84
|
+
is_over,
|
|
85
|
+
prose_length,
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { concise_reply }
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { file_reader } from '#scripts/lib/read-file'
|
|
2
|
+
import { token_shape } from '#scripts/lib/token-shape'
|
|
3
|
+
import { bash_triggers } from './bash-triggers'
|
|
4
|
+
import { direct_pr_create } from './direct-pr-create'
|
|
5
|
+
import { gh_api, type FieldSource } from './gh-api'
|
|
6
|
+
import { git_argv } from './git-argv'
|
|
7
|
+
|
|
8
|
+
// The `credential-body` row of `delivered-rules.ts`. A body kit sends is refused when it holds a
|
|
9
|
+
// token-shaped string (`git-gh-exec.ts`, joshuafolkken/kit#4658), but a `gh api` call a run types on
|
|
10
|
+
// the shell never passes through kit's code, so the same scan runs here before the call does
|
|
11
|
+
// (joshuafolkken/kit#4682). The shapes are `token-shape.ts`'s, read by `token_shape.holds` — the test
|
|
12
|
+
// `token_shape.refuse` throws on — so no second copy of a pattern exists.
|
|
13
|
+
//
|
|
14
|
+
// **The text `gh` would send, not the command line alone**: each field value, and the file a
|
|
15
|
+
// `-F key=@<path>` or `--input <path>` names, read as the hook sees it — a path relative to a
|
|
16
|
+
// directory a `cd` earlier on the line moved to is not found and reads as empty. A JSON body is scanned
|
|
17
|
+
// decoded, as the in-process send does.
|
|
18
|
+
//
|
|
19
|
+
// **It fires on every occurrence**, for the reason `git-force.ts` does.
|
|
20
|
+
|
|
21
|
+
// `gh` sends a typed `\n` as the two characters, so a token after it follows the letter `n` and the
|
|
22
|
+
// shapes' "no letter before it" guard would pass it. So the text is scanned twice — as sent, and with
|
|
23
|
+
// each escape read as a space — since a backslash may also sit right before the token (`\ghp_…`),
|
|
24
|
+
// where the second reading loses its first letter. A non-JSON file is read the same way.
|
|
25
|
+
const TYPED_ESCAPE = /\\./gu
|
|
26
|
+
|
|
27
|
+
function sent_text(source: FieldSource): string {
|
|
28
|
+
if (source.kind === 'text') return source.value
|
|
29
|
+
|
|
30
|
+
return token_shape.decoded(file_reader.read_if_readable(source.value) ?? '')
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function holds_token(text: string): boolean {
|
|
34
|
+
return [text, text.replaceAll(TYPED_ESCAPE, () => ' ')].some((reading) =>
|
|
35
|
+
token_shape.holds(reading),
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function is_credential_segment(segment: string): boolean {
|
|
40
|
+
const args = git_argv.arguments_of(segment, direct_pr_create.GH_COMMAND)
|
|
41
|
+
|
|
42
|
+
if (args === undefined) return false
|
|
43
|
+
|
|
44
|
+
const call = [direct_pr_create.GH_COMMAND, ...args].join(' ')
|
|
45
|
+
|
|
46
|
+
if (!gh_api.is_gh_api(call)) return false
|
|
47
|
+
|
|
48
|
+
return gh_api.field_sources(call).some((source) => holds_token(sent_text(source)))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function sends_credential(command: string): boolean {
|
|
52
|
+
return direct_pr_create.has_run_segment(command, is_credential_segment)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const CREDENTIAL_BODY_REASON =
|
|
56
|
+
'⛔ credential in a gh api body: a field value, or the file `-F key=@<path>` / `--input <path>` ' +
|
|
57
|
+
'names, holds a token-shaped string (`scripts/lib/token-shape.ts`), and the call would publish it. ' +
|
|
58
|
+
'Remove the credential from the body and send it again. ' +
|
|
59
|
+
'**This rule fires on every occurrence, not once per run.**'
|
|
60
|
+
|
|
61
|
+
const ROW = {
|
|
62
|
+
id: 'credential-body',
|
|
63
|
+
is_trigger: bash_triggers.on_bash_command(sends_credential),
|
|
64
|
+
reason: CREDENTIAL_BODY_REASON,
|
|
65
|
+
decide: (): boolean => true,
|
|
66
|
+
about: {
|
|
67
|
+
title: 'Credential in a body',
|
|
68
|
+
topic: '`shell-body.md`',
|
|
69
|
+
fires:
|
|
70
|
+
'a `gh api` call whose field value, or the file `-F key=@<path>` / `--input <path>` names, holds a token-shaped string (`token-shape.ts`). Every occurrence',
|
|
71
|
+
quiet: 'a body with no credential, or a body sent through kit, which runs the same scan',
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const credential_body = { CREDENTIAL_BODY_REASON, ROW, sends_credential }
|
|
76
|
+
|
|
77
|
+
export { credential_body }
|
|
@@ -33,6 +33,7 @@ const EPIC_NEXT_REFERENCE = 'docs/josh-commands-backlog.md → `josh epic:next`'
|
|
|
33
33
|
const BACKLOG_BUDGET_REFERENCE = 'docs/josh-commands-backlog.md → `josh backlog:budget`'
|
|
34
34
|
const RUN_LIVENESS_REFERENCE = 'docs/josh-commands-run.md → `josh run:liveness`'
|
|
35
35
|
const AUTO_OK_NEXT_REFERENCE = 'docs/josh-commands-backlog.md → `josh auto-ok:next`'
|
|
36
|
+
const STASH_PUSH_REFERENCE = 'docs/josh-commands-backlog.md → `josh stash:push`'
|
|
36
37
|
|
|
37
38
|
// Command used by two separate oracle entries (run:cut:resume and run:cut:gate).
|
|
38
39
|
const RUN_CUT_CMD = 'run:cut'
|
|
@@ -65,9 +66,16 @@ const BATCH_ORACLES: ReadonlyArray<DecisionOracle> = [
|
|
|
65
66
|
name: 'run:liveness',
|
|
66
67
|
decision: 'Whether a delegated unit is still working or has stopped without reporting',
|
|
67
68
|
args: `${ISSUE_N_ARG} --output <path>`,
|
|
68
|
-
vocabulary: ['alive', 'stopped', 'settled', 'undetermined'],
|
|
69
|
+
vocabulary: ['alive', 'paused', 'stopped', 'settled', 'undetermined'],
|
|
69
70
|
single_source: RUN_LIVENESS_REFERENCE,
|
|
70
71
|
},
|
|
72
|
+
{
|
|
73
|
+
name: 'stash:push',
|
|
74
|
+
decision: 'Whether the working tree had anything outside the observation ledger to set aside',
|
|
75
|
+
args: '<message>',
|
|
76
|
+
vocabulary: ['stashed', 'clean'],
|
|
77
|
+
single_source: STASH_PUSH_REFERENCE,
|
|
78
|
+
},
|
|
71
79
|
{
|
|
72
80
|
name: 'stash:pop',
|
|
73
81
|
decision: 'Whether a named stash entry exists and can be applied',
|
|
@@ -66,7 +66,7 @@ const DECISION_ORACLES: ReadonlyArray<DecisionOracle> = [
|
|
|
66
66
|
{
|
|
67
67
|
name: 'review:round2',
|
|
68
68
|
decision: 'Whether the second /code-review round is due',
|
|
69
|
-
args: '[--
|
|
69
|
+
args: '[--record <N>]',
|
|
70
70
|
vocabulary: [REQUIRED, SKIP],
|
|
71
71
|
single_source: CHAIN_RULE_MD,
|
|
72
72
|
},
|
|
@@ -152,9 +152,9 @@ const DECISION_ORACLES: ReadonlyArray<DecisionOracle> = [
|
|
|
152
152
|
{
|
|
153
153
|
name: 'cases',
|
|
154
154
|
decision:
|
|
155
|
-
'Each boundary a change crosses (network, process, fs, time) and the abnormal cases it owes',
|
|
155
|
+
'Each boundary a change crosses (network, process, fs, time, shared state, environment) and the abnormal cases it owes',
|
|
156
156
|
args: '<path...>',
|
|
157
|
-
vocabulary: ['network', 'process', 'fs', 'time', NONE],
|
|
157
|
+
vocabulary: ['network', 'process', 'fs', 'time', 'state', 'env', NONE],
|
|
158
158
|
single_source: 'prompts/collaboration-workflow/report-format.md → 変更とテスト',
|
|
159
159
|
},
|
|
160
160
|
{
|