@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,111 @@
|
|
|
1
|
+
import { stripVTControlCharacters } from 'node:util'
|
|
2
|
+
import { gate_log } from '#scripts/gate/gate-log'
|
|
3
|
+
import { verification_tail } from '#scripts/gate/verification-tail'
|
|
4
|
+
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
5
|
+
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
6
|
+
|
|
7
|
+
// A failed vitest run's answer, put where a `tail` reaches it (joshuafolkken/kit#4869).
|
|
8
|
+
//
|
|
9
|
+
// **The console's end is the last failure's stack, not the list of what failed.** vitest prints its
|
|
10
|
+
// failures in order and then a summary of counts, so `josh test:related 2>&1 | tail -40` kept one stack
|
|
11
|
+
// and no names, and the only way to learn the rest was to run the suite again. So every run's output
|
|
12
|
+
// goes to a file, and a failed one ends with the failed tests' names and that file's path — the same
|
|
13
|
+
// log and notice `josh gate` uses, imported rather than re-derived.
|
|
14
|
+
|
|
15
|
+
const UNIT_LOG_PREFIX = 'josh-unit-log-'
|
|
16
|
+
const UNIT_LOG_HEADER = 'vitest'
|
|
17
|
+
const FAILED_LINE = /^FAIL\s+(?<name>\S.*)$/u
|
|
18
|
+
const FAILED_HEADING = 'failed tests:'
|
|
19
|
+
const NONE_NAMED = ' (none named in the output — read the full output)'
|
|
20
|
+
const NONE_NAMED_VERDICT = 'none named'
|
|
21
|
+
// A name is `<file> > <suite> > <test>` or `<file> [ <file> ]`, prefixed `|<project>| ` in a workspace —
|
|
22
|
+
// or, with color on, ` <project> ` once its badge's escapes are stripped (joshuafolkken/kit#5171).
|
|
23
|
+
const FAILED_FILE = /^(?:\|[^|]*\|\s+|\S+\s{2,})?(?<file>\S+)/u
|
|
24
|
+
// The guarded unit run, filtered to those files: it reserves its cores and ends a failure with this
|
|
25
|
+
// same summary (joshuafolkken/kit#5023).
|
|
26
|
+
const RERUN_PREFIX = 'rerun failed: pnpm josh test:unit '
|
|
27
|
+
|
|
28
|
+
// One path per checkout and vitest mode, overwritten by each run, beside the gate's own log. **The
|
|
29
|
+
// mode is in the name** because the gate's whole-suite `run` and a `related` run started beside it
|
|
30
|
+
// overlap, and one shared file would hand the failed run's reader the other run's output.
|
|
31
|
+
function unit_log_path(vitest_arguments: ReadonlyArray<string>): string {
|
|
32
|
+
const prefix = `${UNIT_LOG_PREFIX}${vitest_arguments[0] ?? UNIT_LOG_HEADER}-`
|
|
33
|
+
|
|
34
|
+
return stamp_file.stamp_path(prefix, PROJECT_ROOT, gate_log.GATE_LOG_SUFFIX)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function failed_name(line: string): string | undefined {
|
|
38
|
+
return FAILED_LINE.exec(stripVTControlCharacters(line).trim())?.groups?.['name']
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// vitest names each failed test on a ` FAIL <file> > <suite> > <test>` line, and a file that could
|
|
42
|
+
// not load on ` FAIL <file> [ <file> ]`. A name printed twice is listed once.
|
|
43
|
+
function failed_tests(output: string): ReadonlyArray<string> {
|
|
44
|
+
const names = output.split('\n').map((line) => failed_name(line))
|
|
45
|
+
|
|
46
|
+
return [...new Set(names.filter((name) => name !== undefined))]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// The files the failed names belong to, each once — what to run after a fix, before the whole related
|
|
50
|
+
// set again (joshuafolkken/kit#5023).
|
|
51
|
+
function failed_files(names: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
52
|
+
const files = names.map((name) => FAILED_FILE.exec(name)?.groups?.['file'])
|
|
53
|
+
|
|
54
|
+
return [...new Set(files.filter((file) => file !== undefined))]
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function name_lines(names: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
58
|
+
if (names.length === 0) return [NONE_NAMED]
|
|
59
|
+
|
|
60
|
+
return [...names.map((name) => ` ${name}`), `${RERUN_PREFIX}${failed_files(names).join(' ')}`]
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// The verdict names the failed files, so the last line alone says what to fix (joshuafolkken/kit#5162).
|
|
64
|
+
function format_failure_summary(
|
|
65
|
+
output: string,
|
|
66
|
+
log_path: string | undefined,
|
|
67
|
+
label: string = UNIT_LOG_HEADER,
|
|
68
|
+
): string {
|
|
69
|
+
const names = failed_tests(output)
|
|
70
|
+
const failures = `${[FAILED_HEADING, ...name_lines(names)].join('\n')}\n`
|
|
71
|
+
const failed = names.length === 0 ? [NONE_NAMED_VERDICT] : failed_files(names)
|
|
72
|
+
const verdict = verification_tail.format_verdict(label, failed)
|
|
73
|
+
|
|
74
|
+
return verification_tail.format_tail({ failures, log: { path: log_path }, verdict })
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function format_green_summary(log_path: string | undefined, label: string): string {
|
|
78
|
+
const verdict = verification_tail.format_verdict(label, [])
|
|
79
|
+
|
|
80
|
+
return verification_tail.format_tail({ failures: '', log: { path: log_path }, verdict })
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Written on every run, as the gate's is, headed by the run's own invocation, and ended as every josh
|
|
84
|
+
// check ends (`verification-tail.ts`): a green run's last line is its verdict, not vitest's counts.
|
|
85
|
+
function report(
|
|
86
|
+
vitest_arguments: ReadonlyArray<string>,
|
|
87
|
+
output: string,
|
|
88
|
+
exit_code: number,
|
|
89
|
+
target: string = unit_log_path(vitest_arguments),
|
|
90
|
+
): void {
|
|
91
|
+
const header = [UNIT_LOG_HEADER, ...vitest_arguments].join(' ')
|
|
92
|
+
const log_path = gate_log.write_gate_log([{ header, output }], target)
|
|
93
|
+
const label = [UNIT_LOG_HEADER, ...vitest_arguments.slice(0, 1)].join(' ')
|
|
94
|
+
const summary =
|
|
95
|
+
exit_code === 0
|
|
96
|
+
? format_green_summary(log_path, label)
|
|
97
|
+
: format_failure_summary(output, log_path, label)
|
|
98
|
+
|
|
99
|
+
process.stdout.write(summary)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const vitest_failure_summary = {
|
|
103
|
+
RERUN_PREFIX,
|
|
104
|
+
failed_files,
|
|
105
|
+
failed_tests,
|
|
106
|
+
format_failure_summary,
|
|
107
|
+
report,
|
|
108
|
+
unit_log_path,
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { vitest_failure_summary }
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { unit_setup_files } from './unit-setup-files'
|
|
3
|
+
|
|
4
|
+
// The files every test depends on without importing or reading them: the package and its lock,
|
|
5
|
+
// the vitest configuration, and the setup files every worker runs before every test.
|
|
6
|
+
const SETUP_FILES: ReadonlyArray<string> = [
|
|
7
|
+
...unit_setup_files.NETWORK_GUARD,
|
|
8
|
+
...unit_setup_files.STATE_GUARD,
|
|
9
|
+
...unit_setup_files.WORKER_GUARDS,
|
|
10
|
+
...unit_setup_files.READ_RECORDER,
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
const ROOT_FILES: ReadonlyArray<string> = [
|
|
14
|
+
'package.json',
|
|
15
|
+
'pnpm-lock.yaml',
|
|
16
|
+
'pnpm-workspace.yaml',
|
|
17
|
+
'tsconfig.json',
|
|
18
|
+
'vitest.config.ts',
|
|
19
|
+
'vitest.harness.config.ts',
|
|
20
|
+
// What the read recorder runs in every worker, which no test imports through the setup file.
|
|
21
|
+
'tools/test/test-read-capture.ts',
|
|
22
|
+
'scripts/test/test-read-trace.ts',
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
// **What the vitest config and the worker setup files import** (joshuafolkken/kit#4465). Vitest runs
|
|
26
|
+
// every test when a file it is given is a config dependency — every module the config imports,
|
|
27
|
+
// statically or not — and the setup files are in every test's graph, so `vitest related` widens to the
|
|
28
|
+
// whole suite on any of these with no word of why. Named here, they print the reason instead.
|
|
29
|
+
// `whole-suite-files.test.ts` holds the list to both graphs, so an import added to either fails there.
|
|
30
|
+
const IMPORTED_BY_EVERY_TEST: ReadonlyArray<string> = [
|
|
31
|
+
'scripts/git/constants.ts',
|
|
32
|
+
'scripts/git/git-location-environment.ts',
|
|
33
|
+
'scripts/init/init-paths.ts',
|
|
34
|
+
'scripts/josh/agent-session-environment.ts',
|
|
35
|
+
'scripts/josh/platform-temporary.ts',
|
|
36
|
+
'scripts/josh/process-identity.ts',
|
|
37
|
+
'scripts/josh/process-owner.ts',
|
|
38
|
+
'scripts/josh/stamp-file.ts',
|
|
39
|
+
'scripts/lane/lane-child-mark-keys.ts',
|
|
40
|
+
'scripts/lib/atomic-write.ts',
|
|
41
|
+
'scripts/lib/json-value.ts',
|
|
42
|
+
'scripts/lib/read-file.ts',
|
|
43
|
+
'scripts/lib/timeouts.ts',
|
|
44
|
+
'scripts/test/unit-durations.ts',
|
|
45
|
+
'scripts/test/unit-run-marker.ts',
|
|
46
|
+
'scripts/test/unit-setup-files.ts',
|
|
47
|
+
'scripts/test/vitest-cache-directory.ts',
|
|
48
|
+
'scripts/test/vitest-cli-excludes.ts',
|
|
49
|
+
'tools/test/duration-sequencer.ts',
|
|
50
|
+
'tools/test/duration-shard.ts',
|
|
51
|
+
'tools/test/pure-files.ts',
|
|
52
|
+
'tools/test/test-module-elapsed.ts',
|
|
53
|
+
'tools/test/test-repository-guard.ts',
|
|
54
|
+
'tools/test/unit-duration-record.ts',
|
|
55
|
+
'tools/test/unit-guard-environment.ts',
|
|
56
|
+
'tools/test/unit-projects.ts',
|
|
57
|
+
'tools/test/vitest-config-workers.ts',
|
|
58
|
+
'tools/test/vitest-include-globs.ts',
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
const WHOLE_SUITE_FILES: ReadonlySet<string> = new Set(
|
|
62
|
+
[...ROOT_FILES, ...IMPORTED_BY_EVERY_TEST, ...SETUP_FILES].map((file) => path.normalize(file)),
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
// The part of `WHOLE_SUITE_FILES` a scoped run narrows to the test files importing it directly
|
|
66
|
+
// (`direct-importers.ts`, joshuafolkken/kit#5122): each is a module some test imports by name, unlike a
|
|
67
|
+
// root or setup file, which only the whole suite reaches.
|
|
68
|
+
const EVERY_TEST_IMPORTS: ReadonlySet<string> = new Set(
|
|
69
|
+
IMPORTED_BY_EVERY_TEST.map((file) => path.normalize(file)),
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
const whole_suite_files = { EVERY_TEST_IMPORTS, WHOLE_SUITE_FILES }
|
|
73
|
+
|
|
74
|
+
export { whole_suite_files }
|
|
@@ -51,8 +51,15 @@ const NO_FINISH = 0
|
|
|
51
51
|
// let the #3273 lane child end its turn on a running task the stop hook never saw.
|
|
52
52
|
const LAUNCH_PATTERN =
|
|
53
53
|
/(?:running in background with ID:|moved to the background \(ID:)\s*([\w-]+)/iu
|
|
54
|
-
// A backgrounded subagent's launch result, which names its id on an `agentId:` line of its own
|
|
55
|
-
|
|
54
|
+
// A backgrounded subagent's launch result, which names its id on an `agentId:` line of its own — or
|
|
55
|
+
// the JSON result of a `SendMessage` that resumed one, which names it as `resumedAgentId`. A resumed
|
|
56
|
+
// subagent runs in the background under the same id and ends with the same notice; missing that
|
|
57
|
+
// spelling let the #4344 lane child's stop hook release its hold and `in-progress` while the resumed
|
|
58
|
+
// investigator was still running (joshuafolkken/kit#4347). It is anchored on the result's own first
|
|
59
|
+
// key: a command that printed a transcript line, which nests the same key under `toolUseResult`,
|
|
60
|
+
// would otherwise open a resume that never finishes.
|
|
61
|
+
const AGENT_LAUNCH_PATTERN =
|
|
62
|
+
/^(?:Async agent launched[\s\S]*?\bagentId:\s*|\{"success":[^\n]*?"resumedAgentId":")([\w-]+)/u
|
|
56
63
|
// The notice the harness writes when a task it took into the background ends.
|
|
57
64
|
// It is anchored at the start because the whole content of that line *is*
|
|
58
65
|
// the notice — a body merely quoting one is text, the same hazard `read_id` unquotes for — and it
|
|
@@ -65,6 +72,11 @@ const AGENT_LAUNCH_PATTERN = /^Async agent launched[\s\S]*?\bagentId:\s*([\w-]+)
|
|
|
65
72
|
// an enumeration of the harness's spellings, and a spelling it added later would silently start
|
|
66
73
|
// reporting finished commands as never finished.
|
|
67
74
|
const FINISH_PATTERN = /^<task-notification>[\s\S]*?<task-id>([\w-]+)<\/task-id>/u
|
|
75
|
+
// The other end of a backgrounded task: the result of a `TaskStop` call. The harness writes no
|
|
76
|
+
// task-notification for a task it was told to stop, so reading the notice alone left a stopped task
|
|
77
|
+
// open for ever, and the lane stop guard blocked every stop after it (joshuafolkken/kit#4472). It is
|
|
78
|
+
// anchored on the result's own first key for the reason `AGENT_LAUNCH_PATTERN` is.
|
|
79
|
+
const STOP_PATTERN = /^\{"message":"Successfully stopped task:\s*([\w-]+)/u
|
|
68
80
|
// The output file every reader of a backgrounded command names, whichever command it uses to read
|
|
69
81
|
// it — `tail`, `cat`, `sed`, `grep`, or the `Monitor` tool, all of which carry the path.
|
|
70
82
|
const OUTPUT_PATTERN = /tasks\/([\w-]+)\.output/u
|
|
@@ -113,6 +125,11 @@ function finished_id(text: string): string {
|
|
|
113
125
|
return FINISH_PATTERN.exec(text)?.[1] ?? NO_BACKGROUND
|
|
114
126
|
}
|
|
115
127
|
|
|
128
|
+
// The background run a `TaskStop` result reports stopping, or nothing for every other tool result.
|
|
129
|
+
function stopped_id(text: string): string {
|
|
130
|
+
return STOP_PATTERN.exec(text)?.[1] ?? NO_BACKGROUND
|
|
131
|
+
}
|
|
132
|
+
|
|
116
133
|
// One line, as much of it as this reading needs. Taken structurally rather than as a `TranscriptLine`
|
|
117
134
|
// so the import stays one-way: `time-transcript-line.ts` already imports this module to read the two
|
|
118
135
|
// ids off a body, and asking for its type back would close the cycle.
|
|
@@ -300,6 +317,7 @@ const time_background = {
|
|
|
300
317
|
launch_id,
|
|
301
318
|
agent_launch_id,
|
|
302
319
|
finished_id,
|
|
320
|
+
stopped_id,
|
|
303
321
|
finished_at,
|
|
304
322
|
read_id,
|
|
305
323
|
read_id_of,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { time_bundle_call, type BundleFacts } from './time-bundle-call'
|
|
2
2
|
import { time_bundles } from './time-bundles'
|
|
3
3
|
import { time_call_identity } from './time-call-identity'
|
|
4
|
+
import { time_search_call } from './time-search-call'
|
|
4
5
|
import { time_spans, type Span } from './time-spans'
|
|
6
|
+
import type { ToolCall } from './time-tool-call'
|
|
5
7
|
import { time_transcript_line } from './time-transcript-line'
|
|
6
8
|
|
|
7
9
|
// Whether the call about to go out should be refused because the run has stopped batching. What a
|
|
@@ -154,6 +156,16 @@ function is_reissued_refusal(spans: ReadonlyArray<Span>, call: GuardedCall): boo
|
|
|
154
156
|
)
|
|
155
157
|
}
|
|
156
158
|
|
|
159
|
+
// The closed history a refusal judges; empty where the call is not refusable or is a reissue, and an
|
|
160
|
+
// empty history never reaches the limit.
|
|
161
|
+
function refusable_spans(text: string, call: GuardedCall): ReadonlyArray<Span> {
|
|
162
|
+
if (!is_guarded_call(call)) return []
|
|
163
|
+
|
|
164
|
+
const { spans } = time_spans.parse_timeline(text)
|
|
165
|
+
|
|
166
|
+
return is_reissued_refusal(spans, call) ? [] : spans
|
|
167
|
+
}
|
|
168
|
+
|
|
157
169
|
// The lane-child notice passes `NOTICE_REFIRE_EVERY` to recur on the notice's cadence.
|
|
158
170
|
function should_block(
|
|
159
171
|
text: string,
|
|
@@ -161,13 +173,37 @@ function should_block(
|
|
|
161
173
|
refused_at_ms: number,
|
|
162
174
|
refire_every: number = REFIRE_EVERY,
|
|
163
175
|
): boolean {
|
|
164
|
-
|
|
176
|
+
return is_at_limit(refusable_spans(text, call), call, refused_at_ms, refire_every)
|
|
177
|
+
}
|
|
165
178
|
|
|
166
|
-
|
|
179
|
+
function as_tool_call(call: GuardedCall): ToolCall {
|
|
180
|
+
return time_spans.to_tool_call(call.name, call.input, time_spans.NO_MESSAGE_ID)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Asked before the transcript is read, like `is_guarded_call`, for the search-chain refusal alone.
|
|
184
|
+
function is_search_chain_call(call: GuardedCall): boolean {
|
|
185
|
+
return is_guarded_call(call) && time_search_call.is_search_chain_call(as_tool_call(call))
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// The turns that make the limit — the last closed ones and the call in hand — are all searches.
|
|
189
|
+
function is_search_chain(spans: ReadonlyArray<Span>, call: GuardedCall): boolean {
|
|
190
|
+
const recent = time_bundles.open_sequence(spans).slice(-SEQUENCE_BEFORE_LIMIT)
|
|
191
|
+
|
|
192
|
+
return [...recent, as_tool_call(call)].every((turn) =>
|
|
193
|
+
time_search_call.is_search_chain_call(turn),
|
|
194
|
+
)
|
|
195
|
+
}
|
|
167
196
|
|
|
168
|
-
|
|
197
|
+
// The narrower refusal a lane child keeps (`search-batching` in `lane-guard-policy.ts`): only a chain
|
|
198
|
+
// of searches issued one per turn, the largest share of the child's single-call pairs.
|
|
199
|
+
function should_block_search_chain(
|
|
200
|
+
text: string,
|
|
201
|
+
call: GuardedCall,
|
|
202
|
+
refused_at_ms: number,
|
|
203
|
+
): boolean {
|
|
204
|
+
const spans = refusable_spans(text, call)
|
|
169
205
|
|
|
170
|
-
return is_at_limit(spans, call, refused_at_ms,
|
|
206
|
+
return is_search_chain(spans, call) && is_at_limit(spans, call, refused_at_ms, REFIRE_EVERY)
|
|
171
207
|
}
|
|
172
208
|
|
|
173
209
|
// `notified_at_ms` is the notice's own record, so a notice never silences a later refusal.
|
|
@@ -279,9 +315,11 @@ const time_batch_guard = {
|
|
|
279
315
|
is_guarded_call,
|
|
280
316
|
is_notice_call,
|
|
281
317
|
is_read_only_call,
|
|
318
|
+
is_search_chain_call,
|
|
282
319
|
pairing_candidates,
|
|
283
320
|
recent_candidates,
|
|
284
321
|
should_block,
|
|
322
|
+
should_block_search_chain,
|
|
285
323
|
should_notify,
|
|
286
324
|
}
|
|
287
325
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cost_blocks } from '#scripts/cost-runtime/cost-blocks'
|
|
2
|
-
import { canonical_command } from '#scripts/josh/josh-
|
|
2
|
+
import { canonical_command } from '#scripts/josh/josh-aliases'
|
|
3
3
|
import { json_value } from '#scripts/lib/json-value'
|
|
4
4
|
import { time_shell } from './time-shell'
|
|
5
5
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { figure_format } from '#scripts/lib/figure-format'
|
|
1
2
|
import { time_agent_bundles } from './time-agent-bundles'
|
|
2
3
|
import { time_format } from './time-format'
|
|
3
4
|
import { time_round_trips } from './time-round-trips'
|
|
@@ -94,15 +95,29 @@ interface BundleTotals {
|
|
|
94
95
|
recoverable_round_trips: number
|
|
95
96
|
by_tool: ReadonlyArray<BundleToolRow>
|
|
96
97
|
unattributed_round_trips: number
|
|
98
|
+
single_call: SingleCallSplit
|
|
97
99
|
is_measured: boolean
|
|
98
100
|
}
|
|
99
101
|
|
|
102
|
+
// The consecutive single-call turns alone, split by the target test — what `josh time:density` reads.
|
|
103
|
+
// **The spread-apart `Agent` launch series is left out** of every field here: the walk never sees a
|
|
104
|
+
// launch, so it can be neither dependent nor independent, and folding its count into one side would
|
|
105
|
+
// make the two sides measure different populations.
|
|
106
|
+
interface SingleCallSplit {
|
|
107
|
+
// Turns that could have gone out beside the single-call turn before them.
|
|
108
|
+
independent_round_trips: number
|
|
109
|
+
// Turns whose call shared a target with the open sequence, so needed the turn before.
|
|
110
|
+
dependent_round_trips: number
|
|
111
|
+
by_tool: ReadonlyArray<BundleToolRow>
|
|
112
|
+
}
|
|
113
|
+
|
|
100
114
|
const NO_BUNDLES: BundleTotals = {
|
|
101
115
|
sequence_count: 0,
|
|
102
116
|
longest_sequence: 0,
|
|
103
117
|
recoverable_round_trips: 0,
|
|
104
118
|
by_tool: [],
|
|
105
119
|
unattributed_round_trips: 0,
|
|
120
|
+
single_call: { independent_round_trips: 0, dependent_round_trips: 0, by_tool: [] },
|
|
106
121
|
is_measured: false,
|
|
107
122
|
}
|
|
108
123
|
|
|
@@ -111,7 +126,7 @@ const NO_BUNDLES: BundleTotals = {
|
|
|
111
126
|
// `scripts/time-x` inside `scripts/time-xyz`.
|
|
112
127
|
//
|
|
113
128
|
// **The tail position is what makes an absolute path comparable with a relative one.** A `Read` call
|
|
114
|
-
// names `/Users/…/kit/
|
|
129
|
+
// names `/Users/…/kit/tools/time/x.ts` while the `grep` before it named `tools/time`, and nothing
|
|
115
130
|
// here knows the working directory the second was relative to — so the search-then-read pair, which is
|
|
116
131
|
// the whole reason the target test exists, would escape it on the two shapes it occurs in most.
|
|
117
132
|
function contains_segments(whole: string, part: string): boolean {
|
|
@@ -124,7 +139,7 @@ function contains_segments(whole: string, part: string): boolean {
|
|
|
124
139
|
}
|
|
125
140
|
|
|
126
141
|
// Equal, or one inside the other. The containing form is what catches the search-then-read pair:
|
|
127
|
-
// `grep -rn foo scripts` names `scripts`, and the `cat
|
|
142
|
+
// `grep -rn foo scripts` names `scripts`, and the `cat tools/time/x.ts` that follows it names a path
|
|
128
143
|
// beneath — which is exactly how the second call learned the first one's answer.
|
|
129
144
|
function is_related(left: string, right: string): boolean {
|
|
130
145
|
if (left === right) return true
|
|
@@ -190,10 +205,11 @@ interface Walk {
|
|
|
190
205
|
pending: Array<Span>
|
|
191
206
|
sequence: Array<Span>
|
|
192
207
|
closed: Array<Array<Span>>
|
|
208
|
+
dependent: number
|
|
193
209
|
}
|
|
194
210
|
|
|
195
211
|
function new_walk(): Walk {
|
|
196
|
-
return { pending: [], sequence: [], closed: [] }
|
|
212
|
+
return { pending: [], sequence: [], closed: [], dependent: NONE }
|
|
197
213
|
}
|
|
198
214
|
|
|
199
215
|
function flush(walk: Walk): void {
|
|
@@ -203,9 +219,13 @@ function flush(walk: Walk): void {
|
|
|
203
219
|
}
|
|
204
220
|
|
|
205
221
|
// A conflicting call does not end the run of single-call turns; it starts a new sequence at itself,
|
|
206
|
-
// because everything after it may still have been bundleable with it.
|
|
222
|
+
// because everything after it may still have been bundleable with it. The conflict is the one place a
|
|
223
|
+
// dependent pair is seen, so it is counted here rather than by a second walk.
|
|
207
224
|
function extend(walk: Walk, span: Span): void {
|
|
208
|
-
if (conflicts(span, walk.sequence))
|
|
225
|
+
if (conflicts(span, walk.sequence)) {
|
|
226
|
+
walk.dependent += ONE_CALL
|
|
227
|
+
flush(walk)
|
|
228
|
+
}
|
|
209
229
|
|
|
210
230
|
walk.sequence.push(span)
|
|
211
231
|
}
|
|
@@ -358,6 +378,14 @@ function with_agent_row(
|
|
|
358
378
|
return [...rows, row].toSorted(by_weight)
|
|
359
379
|
}
|
|
360
380
|
|
|
381
|
+
function single_call_split(walk: Walk, sizes: ReadonlyArray<number>): SingleCallSplit {
|
|
382
|
+
return {
|
|
383
|
+
independent_round_trips: recoverable_of(sizes),
|
|
384
|
+
dependent_round_trips: walk.dependent,
|
|
385
|
+
by_tool: tool_rows(walk.closed),
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
361
389
|
function build_bundles(spans: ReadonlyArray<Span>): BundleTotals {
|
|
362
390
|
const walk = new_walk()
|
|
363
391
|
|
|
@@ -372,8 +400,9 @@ function build_bundles(spans: ReadonlyArray<Span>): BundleTotals {
|
|
|
372
400
|
// is never bundleable, so it cannot have entered a sequence above — so their counts simply add.
|
|
373
401
|
const sizes = sizes_of(walk.closed)
|
|
374
402
|
const agent_sizes = time_agent_bundles.agent_bundles(spans)
|
|
375
|
-
const
|
|
376
|
-
const
|
|
403
|
+
const single_call = single_call_split(walk, sizes)
|
|
404
|
+
const by_tool = with_agent_row(single_call.by_tool, agent_sizes)
|
|
405
|
+
const recoverable_round_trips = single_call.independent_round_trips + recoverable_of(agent_sizes)
|
|
377
406
|
|
|
378
407
|
return {
|
|
379
408
|
sequence_count: sizes.length + agent_sizes.length,
|
|
@@ -381,6 +410,7 @@ function build_bundles(spans: ReadonlyArray<Span>): BundleTotals {
|
|
|
381
410
|
recoverable_round_trips,
|
|
382
411
|
by_tool,
|
|
383
412
|
unattributed_round_trips: recoverable_round_trips - attributed_of(by_tool),
|
|
413
|
+
single_call,
|
|
384
414
|
is_measured: time_spans.has_transcript_data(spans.length),
|
|
385
415
|
}
|
|
386
416
|
}
|
|
@@ -422,7 +452,7 @@ interface TripPrice {
|
|
|
422
452
|
}
|
|
423
453
|
|
|
424
454
|
function recoverable_suffix(totals: BundleTotals, round_trip_count: number): string {
|
|
425
|
-
const share =
|
|
455
|
+
const share = figure_format.format_share(totals.recoverable_round_trips, round_trip_count)
|
|
426
456
|
|
|
427
457
|
return `${share} of ${String(round_trip_count)} round trip(s)`
|
|
428
458
|
}
|
|
@@ -523,9 +553,11 @@ const time_bundles = {
|
|
|
523
553
|
NO_BUNDLES,
|
|
524
554
|
build_bundles,
|
|
525
555
|
bundle_lines,
|
|
556
|
+
by_weight,
|
|
526
557
|
is_dependent,
|
|
527
558
|
open_sequence,
|
|
528
559
|
shares_target,
|
|
529
560
|
}
|
|
530
561
|
|
|
562
|
+
export type { BundleToolRow }
|
|
531
563
|
export { time_bundles }
|
|
@@ -66,22 +66,22 @@ const notice_schema = z.object({ notified_at_ms: z.number() })
|
|
|
66
66
|
const call_schema = z.object({ tool_name: z.string().min(1), tool_input: z.unknown() })
|
|
67
67
|
|
|
68
68
|
function parse_transcript_path(raw_payload: string): string | undefined {
|
|
69
|
-
const
|
|
69
|
+
const payload = json_value.parse_with(raw_payload, payload_schema)
|
|
70
70
|
|
|
71
|
-
if (
|
|
71
|
+
if (payload?.transcript_path === undefined) return undefined
|
|
72
72
|
|
|
73
|
-
return time_hook_transcript.transcript_of(
|
|
73
|
+
return time_hook_transcript.transcript_of(payload.transcript_path, payload.agent_id)
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
// The call that has just run, as the payload names it — what the line checks
|
|
77
77
|
// against the turns behind it, so a call that needed their result is never offered as one that could
|
|
78
78
|
// have shared their turn. A payload without a tool name answers `undefined`, judged on those turns alone.
|
|
79
79
|
function parse_call(raw_payload: string): GuardedCall | undefined {
|
|
80
|
-
const
|
|
80
|
+
const call = json_value.parse_with(raw_payload, call_schema)
|
|
81
81
|
|
|
82
|
-
if (
|
|
82
|
+
if (call === undefined) return undefined
|
|
83
83
|
|
|
84
|
-
return { name:
|
|
84
|
+
return { name: call.tool_name, input: call.tool_input }
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
// The last `max_bytes` of a file, as text. The leading line is usually cut mid-way, which every
|
|
@@ -173,6 +173,8 @@ function density_notice(raw_payload: string, now_ms: number = Date.now()): strin
|
|
|
173
173
|
const time_density_hook = {
|
|
174
174
|
density_notice,
|
|
175
175
|
notice_path,
|
|
176
|
+
parse_call,
|
|
177
|
+
parse_transcript_path,
|
|
176
178
|
read_tail,
|
|
177
179
|
}
|
|
178
180
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { git_followup_stages, type FollowupStage } from '#scripts/followup/git-followup-stages'
|
|
2
|
+
import { MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
2
3
|
|
|
3
4
|
// Reading `followup`'s own stage rows back out of what it printed.
|
|
4
5
|
//
|
|
@@ -35,9 +36,6 @@ const LINE_SEPARATOR = '\n'
|
|
|
35
36
|
// so the tail is the one part of the row whose shape the alignment cannot move.
|
|
36
37
|
const SECONDS_SUFFIX = ' s'
|
|
37
38
|
const DIGIT_OR_POINT = /[\d.]/u
|
|
38
|
-
// Written here rather than imported: `time-format.ts` keeps its own copy private, and reaching for
|
|
39
|
-
// `run-progress.ts` would pull a command module into the parse for one number.
|
|
40
|
-
const MS_PER_SECOND = 1000
|
|
41
39
|
const NO_STAGES: ReadonlyArray<FollowupStage> = []
|
|
42
40
|
|
|
43
41
|
// Leading whitespace is trimmed for the same reason `time-reported-failure.ts` trims it: the printer
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { figure_format } from '#scripts/lib/figure-format'
|
|
2
|
+
import { MS_PER_SECOND } from '#scripts/lib/timeouts'
|
|
3
|
+
|
|
1
4
|
// The column and number formatting every timing report is laid out through.
|
|
2
5
|
//
|
|
3
6
|
// It was `time-report.ts`'s until three renderers shared it: the run scope's own tables, the epic
|
|
@@ -12,13 +15,9 @@
|
|
|
12
15
|
// imports either of them. **The words two blocks must spell identically are the exception**, and they
|
|
13
16
|
// are here for the reason `NO_CALLS` is: a label printed by two renderers, one of which cannot import
|
|
14
17
|
// the other, has to be written once or the two reports come to disagree about what a row is called.
|
|
18
|
+
// The figures themselves are `figure_format`'s, shared with the cost reports.
|
|
15
19
|
|
|
16
|
-
const MS_PER_MINUTE = 60_000
|
|
17
|
-
const MS_PER_SECOND = 1000
|
|
18
|
-
const MINUTE_DECIMALS = 1
|
|
19
20
|
const SECOND_DECIMALS = 1
|
|
20
|
-
const PERCENT_SCALE = 100
|
|
21
|
-
const PERCENT_DECIMALS = 1
|
|
22
21
|
const LABEL_WIDTH = 24
|
|
23
22
|
// Wide enough for a three-digit run (`335.4 min`), so a long session's rows stay in column with a
|
|
24
23
|
// short one's rather than pushing the share out by a character.
|
|
@@ -53,32 +52,12 @@ function overflow_line(row_count: number): Array<string> {
|
|
|
53
52
|
]
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
function format_minutes(duration_ms: number): string {
|
|
57
|
-
return `${(duration_ms / MS_PER_MINUTE).toFixed(MINUTE_DECIMALS)} min`
|
|
58
|
-
}
|
|
59
|
-
|
|
60
55
|
// Seconds rather than minutes for a per-turn figure: one turn is tens of seconds, and `0.1 min` is
|
|
61
56
|
// too coarse to show the rise across a batch that this scale exists to make visible.
|
|
62
57
|
function format_seconds(duration_ms: number): string {
|
|
63
58
|
return `${(duration_ms / MS_PER_SECOND).toFixed(SECOND_DECIMALS)} s`
|
|
64
59
|
}
|
|
65
60
|
|
|
66
|
-
function format_share(part: number, whole: number): string {
|
|
67
|
-
if (whole === 0) return 'n/a'
|
|
68
|
-
|
|
69
|
-
return `${((part / whole) * PERCENT_SCALE).toFixed(PERCENT_DECIMALS)}%`
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// A dollar figure, to the caller's own precision. Two cost blocks print money now — the phase costs
|
|
73
|
-
// and the per-subagent context-construction costs — and each rounds to a different place (a run total
|
|
74
|
-
// to the cent, a per-round-trip figure finer), so the decimals are the caller's and only the `$` and
|
|
75
|
-
// the `toFixed` are shared. It sits here beside the other number formatters rather than in one block,
|
|
76
|
-
// for the reason `format_minutes` does: a second copy beside the second renderer is how two cost rows
|
|
77
|
-
// of one report come to punctuate a dollar amount two ways.
|
|
78
|
-
function usd(amount: number, decimals: number): string {
|
|
79
|
-
return `$${amount.toFixed(decimals)}`
|
|
80
|
-
}
|
|
81
|
-
|
|
82
61
|
// The one place the three columns are laid out, so a row carrying words instead of a duration lines
|
|
83
62
|
// up with the rows that carry one rather than overrunning the numeric column.
|
|
84
63
|
function format_columns(label: string, minutes: string, suffix: string): string {
|
|
@@ -86,7 +65,7 @@ function format_columns(label: string, minutes: string, suffix: string): string
|
|
|
86
65
|
}
|
|
87
66
|
|
|
88
67
|
function format_row(label: string, duration_ms: number, suffix: string): string {
|
|
89
|
-
return format_columns(label, format_minutes(duration_ms), suffix)
|
|
68
|
+
return format_columns(label, figure_format.format_minutes(duration_ms), suffix)
|
|
90
69
|
}
|
|
91
70
|
|
|
92
71
|
// **A share nobody read says so rather than totalling zero.** The duration column is left empty
|
|
@@ -101,8 +80,6 @@ const time_format = {
|
|
|
101
80
|
NO_CALLS,
|
|
102
81
|
overflow_line,
|
|
103
82
|
format_seconds,
|
|
104
|
-
format_share,
|
|
105
|
-
usd,
|
|
106
83
|
format_columns,
|
|
107
84
|
format_row,
|
|
108
85
|
// `format_clock` stays private: `format_window` is its only caller, and a namespace that offers
|
|
@@ -32,8 +32,8 @@ import { json_value } from '#scripts/lib/json-value'
|
|
|
32
32
|
// which the main line loaded the skill itself.
|
|
33
33
|
//
|
|
34
34
|
// **The launch is recognized by its prompt carrying both `/code-review` and `review:attest`.** The
|
|
35
|
-
// first is the instruction to invoke the review skill; the second is the attestation
|
|
36
|
-
// `pnpm josh review
|
|
35
|
+
// first is the instruction to invoke the review skill; the second is the attestation step the launch
|
|
36
|
+
// prompt `pnpm josh run:review` prints beside each brief file names (joshuafolkken/kit#4863).
|
|
37
37
|
// Neither alone is enough: an investigation subagent about the review tooling quotes `/code-review`
|
|
38
38
|
// in prose and is handed no brief, so `review:attest` is what tells a genuine review launch from a
|
|
39
39
|
// discussion of one — measured against five real launches, it admits the review and rejects every
|
|
@@ -89,6 +89,11 @@ const BODY_FIELD_PATTERN = /\bbody=/u
|
|
|
89
89
|
const ISSUE_COMMENT_PATTERN = /\bgh\s+issue\s+comment\b/u
|
|
90
90
|
const BODY_FLAG_PATTERN = /--body(?:-file)?\b/u
|
|
91
91
|
|
|
92
|
+
// `josh issue:plan` posts the plan under no API path of its own, so it is named outright — **as the
|
|
93
|
+
// command run**, at the start or after a `;` / `&&` / `|`, so a grep or a commit message that merely
|
|
94
|
+
// quotes it is not the call.
|
|
95
|
+
const ISSUE_PLAN_PATTERN = /(?:^|[;&|]\s*)pnpm\s+josh\s+issue:plan\b/u
|
|
96
|
+
|
|
92
97
|
// **The add form, not the label's name anywhere in the command.** The prerequisite branch removes the
|
|
93
98
|
// same label with `-X DELETE …/labels/in-progress`, which is a run ending its hold on an issue rather
|
|
94
99
|
// than opening one — matched loosely, that call would move the run's start to somewhere near its end.
|
|
@@ -159,6 +164,10 @@ function is_issue_comment(command: string): boolean {
|
|
|
159
164
|
return ISSUE_COMMENT_PATTERN.test(command) && BODY_FLAG_PATTERN.test(command)
|
|
160
165
|
}
|
|
161
166
|
|
|
167
|
+
function is_plan_write(command: string): boolean {
|
|
168
|
+
return is_api_body_write(command) || is_issue_comment(command) || ISSUE_PLAN_PATTERN.test(command)
|
|
169
|
+
}
|
|
170
|
+
|
|
162
171
|
function is_in_progress_label(command: string): boolean {
|
|
163
172
|
return ISSUE_LABELS_PATTERN.test(command) && command.includes(IN_PROGRESS_FIELD)
|
|
164
173
|
}
|
|
@@ -216,7 +225,7 @@ function bash_issue(command: string): number {
|
|
|
216
225
|
function bash_marker(command: string): PhaseMarker {
|
|
217
226
|
if (is_run_start(command)) return WORKFLOW_MARKER
|
|
218
227
|
|
|
219
|
-
return
|
|
228
|
+
return is_plan_write(command) ? PLAN_MARKER : NO_MARKER
|
|
220
229
|
}
|
|
221
230
|
|
|
222
231
|
const time_markers = {
|