@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,42 @@
|
|
|
1
|
+
// The long-line ceiling of the command reference — one source for `command-reference.test.ts` and the
|
|
2
|
+
// fast `josh lint:related` path (`document-ratchet-check.ts`), so the two can never hold different
|
|
3
|
+
// lines. A reference entry is a short summary; the why behind it lives in the page's maintainer
|
|
4
|
+
// rationale file. The pages once carried 137 lines over 400 characters (joshuafolkken/kit#3868); the
|
|
5
|
+
// ceiling is a ratchet at the long lines left after condensing them, so lowering it is the only way
|
|
6
|
+
// it moves.
|
|
7
|
+
|
|
8
|
+
// The only files under `docs/` an agent is routed to read — the four command references; the rest of
|
|
9
|
+
// `docs/` is reference a human browses, so the byte budget (`document/document-byte-budget.ts`)
|
|
10
|
+
// covers these alone.
|
|
11
|
+
const COMMAND_REFERENCE_DOCS: ReadonlyArray<string> = [
|
|
12
|
+
'docs/josh-commands.md',
|
|
13
|
+
'docs/josh-commands-automation.md',
|
|
14
|
+
'docs/josh-commands-run.md',
|
|
15
|
+
'docs/josh-commands-backlog.md',
|
|
16
|
+
]
|
|
17
|
+
const LONG_LINE_CHARACTERS = 400
|
|
18
|
+
const MAX_LONG_LINES = 3
|
|
19
|
+
|
|
20
|
+
// The lines over the length limit across every page handed in — the ceiling holds the pages
|
|
21
|
+
// together, so one page's cut makes room in another.
|
|
22
|
+
function long_line_count(texts: ReadonlyArray<string>): number {
|
|
23
|
+
return texts
|
|
24
|
+
.flatMap((text) => text.split('\n'))
|
|
25
|
+
.filter((line) => line.length > LONG_LINE_CHARACTERS).length
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// The failure for a count over the ceiling, or undefined at or under it.
|
|
29
|
+
function long_line_violation(count: number): string | undefined {
|
|
30
|
+
if (count <= MAX_LONG_LINES) return undefined
|
|
31
|
+
|
|
32
|
+
return `the command reference (${COMMAND_REFERENCE_DOCS.join(', ')}) has ${count.toString()} lines over ${LONG_LINE_CHARACTERS.toString()} characters, over its ceiling of ${MAX_LONG_LINES.toString()}. Shorten the entry — the why belongs in the page's maintainer rationale file.`
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const command_reference_line_budget = {
|
|
36
|
+
COMMAND_REFERENCE_DOCS,
|
|
37
|
+
long_line_count,
|
|
38
|
+
long_line_violation,
|
|
39
|
+
MAX_LONG_LINES,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { command_reference_line_budget }
|
|
@@ -58,7 +58,7 @@ function block_ceiling(size: number): number {
|
|
|
58
58
|
// unreached file, so the definition cannot rot as documents move on or off the execution path.
|
|
59
59
|
const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
|
|
60
60
|
{ path: '.claude/skills/dependency-update/SKILL.md', bytes: 4096 },
|
|
61
|
-
{ path: '.claude/skills/epic-commands/SKILL.md', bytes:
|
|
61
|
+
{ path: '.claude/skills/epic-commands/SKILL.md', bytes: 8192 },
|
|
62
62
|
{ path: '.claude/skills/epic-commands/epic-bundle.md', bytes: 4096 },
|
|
63
63
|
{ path: '.claude/skills/epic-commands/execution-waves.md', bytes: 4096 },
|
|
64
64
|
{ path: '.claude/skills/verify-ui/SKILL.md', bytes: 4096 },
|
|
@@ -73,10 +73,18 @@ const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
|
|
|
73
73
|
{ path: '.claude/skills/workflow-commands/prerequisite.md', bytes: 8192 },
|
|
74
74
|
{ path: '.claude/skills/workflow-commands/target-repository.md', bytes: 4096 },
|
|
75
75
|
{ path: '.claude/skills/workflow-commands/working-tree-hold.md', bytes: 8192 },
|
|
76
|
+
// `command:derive`'s usage section (joshuafolkken/kit#4970) crossed the 45056 block.
|
|
76
77
|
{ path: 'docs/josh-commands-automation.md', bytes: 49_152 },
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
// The carried `--unpinned-ok` record (joshuafolkken/kit#4775) crossed the 73728 block.
|
|
79
|
+
// `run:merge`'s withdrawn child (joshuafolkken/kit#4916) crossed the 77824 block.
|
|
80
|
+
// `lane:plan --probe` and the entry probe (joshuafolkken/kit#5211) crossed the 81920 block.
|
|
81
|
+
{ path: 'docs/josh-commands-run.md', bytes: 86_016 },
|
|
82
|
+
// `josh effect:audit` (joshuafolkken/kit#4958) and `issue:priority`'s usage section (joshuafolkken/kit#4960) crossed the 57344 block;
|
|
83
|
+
// `josh prose:stale` (joshuafolkken/kit#5287) crossed the 61440 block.
|
|
84
|
+
{ path: 'docs/josh-commands-backlog.md', bytes: 65_536 },
|
|
85
|
+
// `run:merge` withdrawing a lane closed without a merge (joshuafolkken/kit#4916) crossed the 53248 block;
|
|
86
|
+
// `gate --static-group` (joshuafolkken/kit#5215) crossed the 57344 block.
|
|
87
|
+
{ path: 'docs/josh-commands.md', bytes: 61_440 },
|
|
80
88
|
{ path: 'docs/labels-and-run-states.md', bytes: 8192 },
|
|
81
89
|
{ path: 'prompts/coding-standards.md', bytes: 4096 },
|
|
82
90
|
{ path: 'prompts/collaboration-workflow.md', bytes: 4096 },
|
|
@@ -84,8 +92,11 @@ const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
|
|
|
84
92
|
{ path: 'prompts/collaboration-workflow/gh-rest.md', bytes: 4096 },
|
|
85
93
|
{ path: 'prompts/collaboration-workflow/glossary.md', bytes: 4096 },
|
|
86
94
|
{ path: 'prompts/collaboration-workflow/issue-citation.md', bytes: 4096 },
|
|
87
|
-
|
|
95
|
+
// The priority declaration and its criteria (joshuafolkken/kit#4383) crossed the 8192 block; the
|
|
96
|
+
// causing-lane declaration and criteria F / G (joshuafolkken/kit#4749) crossed the 12288 one.
|
|
97
|
+
{ path: 'prompts/collaboration-workflow/issue-template.md', bytes: 16_384 },
|
|
88
98
|
{ path: 'prompts/collaboration-workflow/lane-instructions.md', bytes: 4096 },
|
|
99
|
+
{ path: 'prompts/collaboration-workflow/measurement.md', bytes: 4096 },
|
|
89
100
|
{ path: 'prompts/collaboration-workflow/operating-rules.md', bytes: 8192 },
|
|
90
101
|
{ path: 'prompts/collaboration-workflow/output-bounds.md', bytes: 4096 },
|
|
91
102
|
{ path: 'prompts/collaboration-workflow/overview.md', bytes: 4096 },
|
|
@@ -101,7 +112,8 @@ const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
|
|
|
101
112
|
{ path: 'prompts/collaboration-workflow/wip-cap.md', bytes: 8192 },
|
|
102
113
|
{ path: 'prompts/refactoring.md', bytes: 8192 },
|
|
103
114
|
{ path: 'prompts/review-rubric.md', bytes: 12_288 },
|
|
104
|
-
|
|
115
|
+
// Self-check 2's `josh prose:stale` pointer (joshuafolkken/kit#5287) crossed the 12288 block.
|
|
116
|
+
{ path: 'prompts/review.md', bytes: 16_384 },
|
|
105
117
|
{ path: 'prompts/sonar-hotspot-handling.md', bytes: 8192 },
|
|
106
118
|
{ path: 'prompts/testing-guide.md', bytes: 12_288 },
|
|
107
119
|
]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { document_byte_check } from './document-byte-check'
|
|
2
|
+
import { document_ratchet_check } from './document-ratchet-check'
|
|
3
|
+
|
|
4
|
+
// The document checks `josh lint:related` brings forward from the gate's tests, as one call: the
|
|
5
|
+
// byte ceilings (`document-byte-check.ts`) and the ratchets (`document-ratchet-check.ts`). Both run
|
|
6
|
+
// every time, so one edit reports every ceiling it broke in one pass rather than one per run.
|
|
7
|
+
|
|
8
|
+
const CHECKS = [document_byte_check, document_ratchet_check]
|
|
9
|
+
|
|
10
|
+
function check_files(root: string, absolute_files: ReadonlyArray<string>): number {
|
|
11
|
+
return Math.max(...CHECKS.map((check) => check.check_files(root, absolute_files)))
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function check_all(root: string): number {
|
|
15
|
+
return Math.max(...CHECKS.map((check) => check.check_all(root)))
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const document_checks = { check_all, check_files }
|
|
19
|
+
|
|
20
|
+
export { document_checks }
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { project_checks } from '#scripts/gate/project-checks'
|
|
4
|
+
import { command_reference_line_budget } from './command-reference-line-budget'
|
|
5
|
+
import { issue_citation_budget } from './issue-citation-budget'
|
|
6
|
+
|
|
7
|
+
// The two document ratchets the gate's tests hold — the command reference's long-line ceiling
|
|
8
|
+
// (`command-reference.test.ts`) and each agent-read document's issue-citation count
|
|
9
|
+
// (`issue-citation-budget.test.ts`) — made reachable on the fast between-edits path beside
|
|
10
|
+
// `document-byte-check.ts`, so a documentation edit that breaks either surfaces in seconds rather
|
|
11
|
+
// than in a minutes-long `check:related` (joshuafolkken/kit#4986). The ceilings, the counting and the
|
|
12
|
+
// messages are the budget modules' alone; this adds none of its own.
|
|
13
|
+
//
|
|
14
|
+
// It reads no change of its own: `lint:related` hands in the files it already resolved. The citation
|
|
15
|
+
// check holds the documents the budget records; a document with no entry, and the whole-list checks
|
|
16
|
+
// (a stale or a zero entry), stay with the gate's test, which knows the agent-read set.
|
|
17
|
+
//
|
|
18
|
+
// Both ratchets are kit's: the budget records kit's paths, and a consumer's own file at one of them
|
|
19
|
+
// holds its own count, so a consumer root is checked by neither.
|
|
20
|
+
|
|
21
|
+
const LABEL = 'document ratchet'
|
|
22
|
+
|
|
23
|
+
function read_text(absolute_path: string): string | undefined {
|
|
24
|
+
return existsSync(absolute_path) ? readFileSync(absolute_path, 'utf8') : undefined
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// The long-line failure across the whole command reference, which the ceiling holds together.
|
|
28
|
+
function long_line_message(root: string): string | undefined {
|
|
29
|
+
const texts = command_reference_line_budget.COMMAND_REFERENCE_DOCS.map((relative_path) =>
|
|
30
|
+
read_text(path.join(root, relative_path)),
|
|
31
|
+
).filter((text): text is string => text !== undefined)
|
|
32
|
+
|
|
33
|
+
return command_reference_line_budget.long_line_violation(
|
|
34
|
+
command_reference_line_budget.long_line_count(texts),
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function touches_command_reference(root: string, absolute_files: ReadonlyArray<string>): boolean {
|
|
39
|
+
const references = new Set(command_reference_line_budget.COMMAND_REFERENCE_DOCS)
|
|
40
|
+
|
|
41
|
+
return absolute_files.some((absolute_path) => references.has(path.relative(root, absolute_path)))
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// The citation failure for one file the budget records, or undefined when it holds its count, has no
|
|
45
|
+
// entry, or is gone from the tree.
|
|
46
|
+
function citation_message(root: string, absolute_path: string): string | undefined {
|
|
47
|
+
const relative_path = path.relative(root, absolute_path)
|
|
48
|
+
const recorded = issue_citation_budget.recorded_citations_for(relative_path)
|
|
49
|
+
const text = read_text(absolute_path)
|
|
50
|
+
if (recorded === 0 || text === undefined) return undefined
|
|
51
|
+
|
|
52
|
+
const current = issue_citation_budget.count_citations(text)
|
|
53
|
+
|
|
54
|
+
return issue_citation_budget.citation_violation(relative_path, current, recorded)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function citation_messages(
|
|
58
|
+
root: string,
|
|
59
|
+
absolute_files: ReadonlyArray<string>,
|
|
60
|
+
): ReadonlyArray<string> {
|
|
61
|
+
return absolute_files
|
|
62
|
+
.map((absolute_path) => citation_message(root, absolute_path))
|
|
63
|
+
.filter((message): message is string => message !== undefined)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Prints one labelled line per failure and answers non-zero, or stays silent and answers zero.
|
|
67
|
+
function report(messages: ReadonlyArray<string | undefined>): number {
|
|
68
|
+
const lines = messages
|
|
69
|
+
.filter((message): message is string => message !== undefined)
|
|
70
|
+
.map((message) => `${LABEL}: ${message}`)
|
|
71
|
+
if (lines.length === 0) return 0
|
|
72
|
+
|
|
73
|
+
process.stdout.write(`${lines.join('\n')}\n`)
|
|
74
|
+
|
|
75
|
+
return 1
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// The check over a resolved change: the long-line ceiling when it touches a command reference page,
|
|
79
|
+
// and the citation count of every changed file the budget records. An unrelated change reads nothing.
|
|
80
|
+
function check_files(root: string, absolute_files: ReadonlyArray<string>): number {
|
|
81
|
+
if (!project_checks.is_kit_repository(root)) return 0
|
|
82
|
+
const long_line = touches_command_reference(root, absolute_files)
|
|
83
|
+
? long_line_message(root)
|
|
84
|
+
: undefined
|
|
85
|
+
|
|
86
|
+
return report([long_line, ...citation_messages(root, absolute_files)])
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// The whole-tree fallback: the long-line ceiling and every recorded document, a superset of any change.
|
|
90
|
+
function check_all(root: string): number {
|
|
91
|
+
if (!project_checks.is_kit_repository(root)) return 0
|
|
92
|
+
const absolute_files = issue_citation_budget.ISSUE_CITATION_BUDGET.map((entry) =>
|
|
93
|
+
path.join(root, entry.path),
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
return report([long_line_message(root), ...citation_messages(root, absolute_files)])
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const document_ratchet_check = { check_all, check_files }
|
|
100
|
+
|
|
101
|
+
export { document_ratchet_check }
|
|
@@ -57,7 +57,7 @@ function command_references(text: string): Array<string> {
|
|
|
57
57
|
.filter((name) => !name.endsWith(':'))
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
// A `<placeholder>` inside a command, and `
|
|
60
|
+
// A `<placeholder>` inside a command, and `label:<n>` after the char class stops at `<`, both leave a
|
|
61
61
|
// token that is not a real label. Real labels never end in a colon and never carry angle brackets.
|
|
62
62
|
function is_real_label(token: string): boolean {
|
|
63
63
|
return token.length > 0 && !token.endsWith(':') && !token.includes('<')
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
1
|
import { existsSync } from 'node:fs'
|
|
3
2
|
import path from 'node:path'
|
|
4
3
|
import { fileURLToPath } from 'node:url'
|
|
@@ -22,7 +21,6 @@ import { entry_read_set } from './entry-read-set'
|
|
|
22
21
|
// renamed would otherwise print nothing and read as a section with nothing in it — the one outcome
|
|
23
22
|
// that is worse than reading the whole file.
|
|
24
23
|
|
|
25
|
-
const ARGV_OFFSET = 2
|
|
26
24
|
const FAILURE_EXIT_CODE = 1
|
|
27
25
|
const FILE_ARGUMENT = 0
|
|
28
26
|
const HEADING_ARGUMENT = 1
|
|
@@ -101,12 +99,6 @@ function run(argv: ReadonlyArray<string>, root: string = process.cwd()): number
|
|
|
101
99
|
return markdown === undefined ? FAILURE_EXIT_CODE : print_section(markdown, heading, root)
|
|
102
100
|
}
|
|
103
101
|
|
|
104
|
-
function main(argv: ReadonlyArray<string>): void {
|
|
105
|
-
process.exitCode = run(argv)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
102
|
const document_section_cli = { FAILURE_EXIT_CODE, USAGE, resolve_document, run }
|
|
109
103
|
|
|
110
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) main(process.argv.slice(ARGV_OFFSET))
|
|
111
|
-
|
|
112
104
|
export { document_section_cli }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { document_section_cli } from './document-section-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh doc:section` entry, kept apart from `document-section-cli.ts` because other modules import
|
|
6
|
+
// that one: a bundle is one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = document_section_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -34,6 +34,9 @@ const { block_ceiling } = document_byte_budget
|
|
|
34
34
|
const { LANE_CHILD } = lane_child_read_set
|
|
35
35
|
const { BACKLOGRUN } = backlogrun_parent_read_set
|
|
36
36
|
const NOTHING = 0
|
|
37
|
+
// The command that re-measures every entry total in seconds, named by the over-budget message so a
|
|
38
|
+
// trim is checked without re-running the whole lint or gate.
|
|
39
|
+
const RECHECK_COMMAND = 'pnpm josh bytes'
|
|
37
40
|
|
|
38
41
|
interface EntryBudget {
|
|
39
42
|
entry: string
|
|
@@ -46,8 +49,8 @@ interface EntryBudget {
|
|
|
46
49
|
const ENTRY_READ_BUDGET: ReadonlyArray<EntryBudget> = [
|
|
47
50
|
{ entry: 'kickoff', bytes: 36_864 },
|
|
48
51
|
{ entry: 'fullrun', bytes: 53_248 },
|
|
49
|
-
{ entry: 'halfrun', bytes:
|
|
50
|
-
{ entry: 'prrun', bytes:
|
|
52
|
+
{ entry: 'halfrun', bytes: 45_056 },
|
|
53
|
+
{ entry: 'prrun', bytes: 57_344 },
|
|
51
54
|
{ entry: 'backlogrun', bytes: 81_920 },
|
|
52
55
|
{ entry: LANE_CHILD, bytes: 45_056 },
|
|
53
56
|
]
|
|
@@ -95,7 +98,7 @@ function over_budget_message(entry: string, current_bytes: number, recorded_byte
|
|
|
95
98
|
const next = block_ceiling(current_bytes).toString()
|
|
96
99
|
const raise_hint = `raise its recorded size to ${next} in scripts/document/entry-read-budget.ts so the reason shows in the PR diff`
|
|
97
100
|
|
|
98
|
-
return `entry ${entry} reads ${current_bytes.toString()} bytes, over its ${recorded_bytes.toString()}-byte ceiling. Trim what it reads, or ${raise_hint}
|
|
101
|
+
return `entry ${entry} reads ${current_bytes.toString()} bytes, over its ${recorded_bytes.toString()}-byte ceiling. Trim what it reads, or ${raise_hint}. Recheck with \`${RECHECK_COMMAND}\`.`
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
// The stale-ratchet message: a recorded ceiling more than a block above the entry's actual total was
|
|
@@ -113,6 +116,7 @@ function stale_budget_message(
|
|
|
113
116
|
|
|
114
117
|
const entry_read_budget = {
|
|
115
118
|
ENTRY_READ_BUDGET,
|
|
119
|
+
RECHECK_COMMAND,
|
|
116
120
|
entry_total_bytes,
|
|
117
121
|
over_budget_message,
|
|
118
122
|
recorded_bytes_for,
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// The issue-number citation ceiling of every agent-read document — an exact ratchet.
|
|
2
|
+
//
|
|
3
|
+
// Issue-number citations and the "why / measured / rejected" prose around them are what swell the
|
|
4
|
+
// documents an agent reads at run time; a reduction epic cuts them only for the next PRs to add them
|
|
5
|
+
// back, because nothing held the reduced count. This list is that hold:
|
|
6
|
+
// `issue-citation-budget.test.ts` fails `pnpm josh gate` when an agent-read document cites more issue
|
|
7
|
+
// numbers than its entry records, and when it cites fewer — a reduction must lower its entry in the
|
|
8
|
+
// same PR, so the ceiling follows the count down and never sits loose above it. A document absent from
|
|
9
|
+
// the list has a ceiling of zero. History belongs in `docs/maintainers/<topic>-rationale.md`, which
|
|
10
|
+
// this budget does not hold (`docs/maintainers/residency-rationale.md` → "The issue-citation ratchet").
|
|
11
|
+
//
|
|
12
|
+
// The ratchet is exact rather than block-quantized like `document-byte-budget.ts`: a single added
|
|
13
|
+
// citation is the growth this exists to refuse, so there is no headroom to quantize.
|
|
14
|
+
|
|
15
|
+
interface CitationBudget {
|
|
16
|
+
path: string
|
|
17
|
+
citations: number
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// An issue number as a document cites it — `#1234` or `joshuafolkken/kit#1234`. Three digits or more,
|
|
21
|
+
// so a placeholder (`#N`, `#<N>`) and a list ordinal are not counted.
|
|
22
|
+
const CITATION_PATTERN = /#\d{3,}\b/gu
|
|
23
|
+
|
|
24
|
+
const ISSUE_CITATION_BUDGET: ReadonlyArray<CitationBudget> = [
|
|
25
|
+
{ path: 'docs/josh-commands-backlog.md', citations: 13 },
|
|
26
|
+
{ path: 'docs/josh-commands-run.md', citations: 4 },
|
|
27
|
+
{ path: 'docs/josh-commands.md', citations: 2 },
|
|
28
|
+
{ path: 'prompts/collaboration-workflow/file-edits.md', citations: 1 },
|
|
29
|
+
{ path: 'prompts/collaboration-workflow/glossary.md', citations: 1 },
|
|
30
|
+
{ path: 'prompts/collaboration-workflow/issue-citation.md', citations: 1 },
|
|
31
|
+
{ path: 'prompts/collaboration-workflow/issue-template.md', citations: 5 },
|
|
32
|
+
{ path: 'prompts/collaboration-workflow/operating-rules.md', citations: 3 },
|
|
33
|
+
{ path: 'prompts/collaboration-workflow/output-bounds.md', citations: 3 },
|
|
34
|
+
{ path: 'prompts/collaboration-workflow/overview.md', citations: 1 },
|
|
35
|
+
{ path: 'prompts/collaboration-workflow/plan-comment.md', citations: 1 },
|
|
36
|
+
{ path: 'prompts/collaboration-workflow/principles.md', citations: 1 },
|
|
37
|
+
{ path: 'prompts/collaboration-workflow/report-format.md', citations: 7 },
|
|
38
|
+
{ path: 'prompts/collaboration-workflow/residency.md', citations: 3 },
|
|
39
|
+
{ path: 'prompts/collaboration-workflow/rule-delivery.md', citations: 5 },
|
|
40
|
+
{ path: 'prompts/collaboration-workflow/shell-body.md', citations: 2 },
|
|
41
|
+
{ path: 'prompts/collaboration-workflow/turn-batching.md', citations: 2 },
|
|
42
|
+
{ path: 'prompts/collaboration-workflow/upstream-interrupt.md', citations: 1 },
|
|
43
|
+
{ path: 'prompts/collaboration-workflow/wip-cap.md', citations: 2 },
|
|
44
|
+
{ path: 'prompts/refactoring.md', citations: 1 },
|
|
45
|
+
{ path: 'prompts/review-rubric.md', citations: 1 },
|
|
46
|
+
{ path: 'prompts/sonar-hotspot-handling.md', citations: 2 },
|
|
47
|
+
{ path: 'prompts/testing-guide.md', citations: 3 },
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
const BUDGET_FILE = 'scripts/document/issue-citation-budget.ts'
|
|
51
|
+
|
|
52
|
+
function count_citations(text: string): number {
|
|
53
|
+
return text.match(CITATION_PATTERN)?.length ?? 0
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// The recorded ceiling for one path — zero when the list carries no entry for it.
|
|
57
|
+
function recorded_citations_for(relative_path: string): number {
|
|
58
|
+
return ISSUE_CITATION_BUDGET.find((entry) => entry.path === relative_path)?.citations ?? 0
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function over_budget_message(relative_path: string, current: number, recorded: number): string {
|
|
62
|
+
const hint = `move the history to docs/maintainers/<topic>-rationale.md, or record ${current.toString()} in ${BUDGET_FILE} so the reason shows in the PR diff`
|
|
63
|
+
|
|
64
|
+
return `${relative_path} cites ${current.toString()} issue numbers, over its ceiling of ${recorded.toString()}. Cut the citations — ${hint}.`
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function stale_budget_message(relative_path: string, current: number, recorded: number): string {
|
|
68
|
+
const hint = `lower its entry to ${current.toString()} in ${BUDGET_FILE} (remove the entry at 0) so the ratchet holds the reduction`
|
|
69
|
+
|
|
70
|
+
return `${relative_path} cites ${current.toString()} issue numbers but records ${recorded.toString()}. ${hint}.`
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// The failure for one document, or undefined when its count equals its record. Growth and a
|
|
74
|
+
// reduction left unrecorded both fail, which is what makes the ceiling a ratchet rather than a cap.
|
|
75
|
+
function citation_violation(
|
|
76
|
+
relative_path: string,
|
|
77
|
+
current: number,
|
|
78
|
+
recorded: number,
|
|
79
|
+
): string | undefined {
|
|
80
|
+
if (current > recorded) return over_budget_message(relative_path, current, recorded)
|
|
81
|
+
if (current < recorded) return stale_budget_message(relative_path, current, recorded)
|
|
82
|
+
|
|
83
|
+
return undefined
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const issue_citation_budget = {
|
|
87
|
+
ISSUE_CITATION_BUDGET,
|
|
88
|
+
citation_violation,
|
|
89
|
+
count_citations,
|
|
90
|
+
recorded_citations_for,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export type { CitationBudget }
|
|
94
|
+
export { issue_citation_budget }
|
|
@@ -222,22 +222,27 @@ function fetch_anomalies(
|
|
|
222
222
|
//
|
|
223
223
|
// A listing that could not be read is left out of the map rather than entered as `[]`, so a
|
|
224
224
|
// transport failure reads as "not asked" instead of "nobody recorded anything" — the finding it
|
|
225
|
-
// would otherwise manufacture is an `error`, which stops the epic.
|
|
225
|
+
// would otherwise manufacture is an `error`, which stops the epic. Only a comment from an author with
|
|
226
|
+
// write access records a rationale.
|
|
226
227
|
async function read_order_comments(
|
|
227
228
|
pairs: ReadonlyArray<OrderPair>,
|
|
228
229
|
): Promise<Map<string, ReadonlyArray<string>>> {
|
|
229
230
|
const ends = epic_audit_rationale.pair_ends(pairs)
|
|
230
|
-
const
|
|
231
|
-
ends.map(async (child) =>
|
|
231
|
+
const parsed = await Promise.all(
|
|
232
|
+
ends.map(async (child) => {
|
|
233
|
+
const listing = await git_gh_command.issue_list_comments(String(child.number))
|
|
234
|
+
|
|
235
|
+
return await issue_read.parse_comments(listing)
|
|
236
|
+
}),
|
|
232
237
|
)
|
|
233
238
|
|
|
234
239
|
return new Map(
|
|
235
240
|
ends.flatMap((child, index) => {
|
|
236
|
-
const comments =
|
|
241
|
+
const comments = parsed[index]
|
|
237
242
|
|
|
238
243
|
return comments === undefined
|
|
239
244
|
? []
|
|
240
|
-
: [[epic_graph.key_of(child),
|
|
245
|
+
: [[epic_graph.key_of(child), issue_read.trusted_bodies(comments)] as const]
|
|
241
246
|
}),
|
|
242
247
|
)
|
|
243
248
|
}
|
|
@@ -349,7 +354,7 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
349
354
|
// `process.exitCode` rather than `process.exit()`: the answer goes to standard output and a write to
|
|
350
355
|
// a pipe is asynchronous on macOS, so exiting can tear the process down before it drains. This
|
|
351
356
|
// command's answer is what a workflow reads and acts on, which is exactly that pipe. The same shape
|
|
352
|
-
// is in `scripts/cost-runtime/cost-
|
|
357
|
+
// is in `scripts/cost-runtime/cost-main.ts`, which met the truncation first.
|
|
353
358
|
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
354
359
|
process.exitCode = await run(argv)
|
|
355
360
|
}
|
|
@@ -360,6 +365,7 @@ const epic_audit_cli = {
|
|
|
360
365
|
attach_bodies,
|
|
361
366
|
resolve_reference_states,
|
|
362
367
|
outside_references,
|
|
368
|
+
read_order_comments,
|
|
363
369
|
audit,
|
|
364
370
|
run,
|
|
365
371
|
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { epic_add } from './epic-add'
|
|
3
|
+
import {
|
|
4
|
+
epic_bundle,
|
|
5
|
+
type BacklogIssue,
|
|
6
|
+
type BundleAction,
|
|
7
|
+
type BundleDecision,
|
|
8
|
+
} from './epic-bundle'
|
|
9
|
+
import { epic_reconcile } from './epic-reconcile'
|
|
10
|
+
import { epic_run } from './epic-run'
|
|
11
|
+
|
|
12
|
+
// `josh epic:bundle <N> --apply` — write the answer whose placement is settled: `add_to_epic` through
|
|
13
|
+
// `epic --add`'s writer, `create_epic` through `epic`'s. Nothing here edits an epic itself, so the
|
|
14
|
+
// task list and the `blocked-by` relations stay as those writers keep them.
|
|
15
|
+
//
|
|
16
|
+
// **An order the candidates already record is carried into the epic body** by `epic --reconcile`,
|
|
17
|
+
// which declares exactly the recorded relations — an order nobody recorded is never invented.
|
|
18
|
+
//
|
|
19
|
+
// `ask` stays the caller's: which epic to choose is a judgement, recorded with its reasoning.
|
|
20
|
+
|
|
21
|
+
const SUCCESS_EXIT_CODE = 0
|
|
22
|
+
const FAILURE_EXIT_CODE = 1
|
|
23
|
+
|
|
24
|
+
interface ApplyInput {
|
|
25
|
+
decision: BundleDecision
|
|
26
|
+
subject: BacklogIssue
|
|
27
|
+
// The backlog rows of `decision.candidates`, as `format_order` reads them.
|
|
28
|
+
members: ReadonlyArray<BacklogIssue>
|
|
29
|
+
is_membership_established: boolean
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const UNAPPLIED_LINES: Readonly<Partial<Record<BundleAction, string>>> = {
|
|
33
|
+
ask: '↷ `--apply` wrote nothing: the related issues sit in more than one epic. Choose one and place it with `pnpm josh epic --add <E> <N> --decision-file <path>`.',
|
|
34
|
+
none: '↷ `--apply` wrote nothing: there is nothing to place.',
|
|
35
|
+
}
|
|
36
|
+
const WITHHELD_LINE =
|
|
37
|
+
'↷ `--apply` wrote nothing: the epic listing was cut short, so no placement was confirmed.'
|
|
38
|
+
const UNREAD_EPIC_LINE =
|
|
39
|
+
"✖ The new epic's number could not be read, so the recorded order was not written; run `pnpm josh epic --reconcile <E>` on it."
|
|
40
|
+
|
|
41
|
+
function has_order(input: ApplyInput): boolean {
|
|
42
|
+
return epic_bundle.bundle_dependency_links(input.subject, input.members).length > 0
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function children_of(input: ApplyInput): Array<number> {
|
|
46
|
+
return epic_bundle.bundle_children(input.subject, input.members)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// An epic whose number could not be read cannot be given the order, so that is a failure rather than
|
|
50
|
+
// an order silently left out.
|
|
51
|
+
async function reconcile_order(
|
|
52
|
+
epic_number: number | undefined,
|
|
53
|
+
input: ApplyInput,
|
|
54
|
+
): Promise<number> {
|
|
55
|
+
if (!has_order(input)) return SUCCESS_EXIT_CODE
|
|
56
|
+
|
|
57
|
+
if (epic_number === undefined) {
|
|
58
|
+
console.error(UNREAD_EPIC_LINE)
|
|
59
|
+
|
|
60
|
+
return FAILURE_EXIT_CODE
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return await epic_reconcile.reconcile_epic(epic_number)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// A member another epic tracks stays there: `add_to_epic` can name an inner epic while a candidate sits
|
|
67
|
+
// in its parent, and adding that candidate here would put one issue in two task lists.
|
|
68
|
+
function placeable(epic_number: number, input: ApplyInput): ApplyInput {
|
|
69
|
+
const members = input.members.filter(
|
|
70
|
+
(member) => member.epic === undefined || member.epic === epic_number,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return { ...input, members }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function add_to_epic(epic_number: number, input: ApplyInput): Promise<number> {
|
|
77
|
+
const placed = placeable(epic_number, input)
|
|
78
|
+
const added = await epic_add.add_children({ epic_number, children: children_of(placed) })
|
|
79
|
+
if (added !== SUCCESS_EXIT_CODE) return added
|
|
80
|
+
|
|
81
|
+
return await reconcile_order(epic_number, placed)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// The title is the subject's, since the subject is what the bundle was asked about; the rationale is
|
|
85
|
+
// the verdict's own reason, which already names the signal that grouped them.
|
|
86
|
+
function title_of(subject: BacklogIssue): string {
|
|
87
|
+
const title = subject.title ?? `bundle with ${issue_cite.plain(subject.number)}`
|
|
88
|
+
|
|
89
|
+
return `Epic: ${title}`
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async function create_epic(input: ApplyInput): Promise<number> {
|
|
93
|
+
const epic_number = await epic_run.create_epic_number({
|
|
94
|
+
title: title_of(input.subject),
|
|
95
|
+
children: children_of(input),
|
|
96
|
+
rationale: input.decision.reason,
|
|
97
|
+
is_ordered: false,
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
return await reconcile_order(epic_number, input)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function report_unapplied(action: BundleAction): number {
|
|
104
|
+
const line = UNAPPLIED_LINES[action]
|
|
105
|
+
if (line !== undefined) console.info(line)
|
|
106
|
+
|
|
107
|
+
return SUCCESS_EXIT_CODE
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async function apply_decision(input: ApplyInput): Promise<number> {
|
|
111
|
+
const { decision } = input
|
|
112
|
+
|
|
113
|
+
if (!input.is_membership_established) {
|
|
114
|
+
console.info(WITHHELD_LINE)
|
|
115
|
+
|
|
116
|
+
return SUCCESS_EXIT_CODE
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (decision.action === 'add_to_epic' && decision.epic !== undefined) {
|
|
120
|
+
return await add_to_epic(decision.epic, input)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (decision.action === 'create_epic') return await create_epic(input)
|
|
124
|
+
|
|
125
|
+
return report_unapplied(decision.action)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const epic_bundle_apply = {
|
|
129
|
+
UNAPPLIED_LINES,
|
|
130
|
+
WITHHELD_LINE,
|
|
131
|
+
UNREAD_EPIC_LINE,
|
|
132
|
+
title_of,
|
|
133
|
+
apply_decision,
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export { epic_bundle_apply }
|
|
137
|
+
export type { ApplyInput }
|