@joshuafolkken/kit 1.1514.0 → 1.1784.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/settings.json +5 -5
- 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 +5 -5
- package/.claude/skills/workflow-commands/background-commands.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-child.md +10 -8
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +17 -13
- package/.claude/skills/workflow-commands/backlogrun-park.md +14 -23
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +5 -5
- package/.claude/skills/workflow-commands/backlogrun-steps.md +10 -10
- package/.claude/skills/workflow-commands/backlogrun.md +1 -1
- package/.claude/skills/workflow-commands/chain-rule.md +13 -7
- package/.claude/skills/workflow-commands/delegation.md +6 -5
- package/.claude/skills/workflow-commands/entry-sequence.md +9 -9
- package/.claude/skills/workflow-commands/followup.md +9 -31
- package/.claude/skills/workflow-commands/fullrun-steps.md +36 -45
- package/.claude/skills/workflow-commands/fullrun.md +2 -2
- package/.claude/skills/workflow-commands/halfrun.md +17 -25
- package/.claude/skills/workflow-commands/issue-comments.md +16 -12
- 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 +1 -1
- package/.claude/skills/workflow-commands/pre-gate-cut.md +13 -30
- package/.claude/skills/workflow-commands/prerequisite.md +10 -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 +1 -1
- package/.claude/skills/workflow-commands/split-assessment.md +13 -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 +1 -1
- package/.github/dependabot.yml +16 -0
- package/.github/release.yml +0 -2
- package/.github/workflows/ci.yml +120 -10
- package/.github/workflows/publish.yml +8 -1
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +3 -7
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +3 -7
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +79 -37
- package/dist/commands/read-set-cli.js +1867 -0
- package/dist/commands/run-prep-main.js +21653 -0
- package/dist/commands/run-step-cli.js +23880 -0
- package/dist/config-merge/index.js +5 -1
- package/dist/hooks/audit-provision.js +20 -35
- package/dist/hooks/{chunk-DGT54IH5.js → chunk-AZX4FGQ3.js} +63 -17
- package/dist/hooks/chunk-CWMBGKYW.js +6483 -0
- package/dist/hooks/chunk-O2YBIDSI.js +4306 -0
- package/dist/hooks/{chunk-TNUMY6NL.js → chunk-PT5R6UJD.js} +4193 -1900
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-APUO6U4J.js → chunk-WR2KQAYZ.js} +1843 -440
- package/dist/hooks/{chunk-O6GDRNJB.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -22
- package/dist/hooks/format-edited.js +5 -6
- package/dist/hooks/inputs.json +443 -317
- package/dist/hooks/pretool-guard.js +7 -25
- package/dist/hooks/session-lang.js +44 -51
- package/dist/hooks/stop-guard.js +7716 -2187
- package/dist/josh.js +6002 -3583
- package/dist/self-sync-guard/index.js +74 -10
- package/dist/version/index.js +115 -406
- package/eslint/base.js +1 -1
- package/lefthook/base.yml +3 -1
- package/package.json +10 -48
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -7
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +33 -16
- package/prompts/collaboration-workflow/lane-instructions.md +1 -2
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +4 -6
- package/prompts/collaboration-workflow/output-bounds.md +2 -7
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +5 -0
- package/prompts/collaboration-workflow/report-format.md +31 -60
- package/prompts/collaboration-workflow/residency.md +2 -2
- 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 +14 -4
- package/prompts/collaboration-workflow/wip-cap.md +1 -1
- package/prompts/collaboration-workflow.md +3 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +41 -21
- package/prompts/testing-guide.md +8 -43
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +14 -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 +4 -3
- 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 +113 -28
- package/scripts/backlog/backlog-drive-hold.ts +162 -0
- package/scripts/backlog/backlog-drive-idle.ts +151 -0
- package/scripts/backlog/backlog-drive-judge.ts +25 -0
- package/scripts/backlog/backlog-drive-memory.ts +126 -0
- package/scripts/backlog/backlog-drive-named-offer.ts +5 -10
- package/scripts/backlog/backlog-drive-named.ts +53 -6
- package/scripts/backlog/backlog-drive-offer-argv.ts +3 -8
- package/scripts/backlog/backlog-drive-paused.ts +169 -0
- package/scripts/backlog/backlog-drive-restore.ts +30 -7
- 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 +79 -75
- package/scripts/backlog/backlog-next-main.ts +16 -0
- package/scripts/backlog/backlog-next-shared.ts +73 -0
- package/scripts/backlog/backlog-next.ts +48 -16
- 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 +22 -4
- package/scripts/backlog/backlog-plan-read.ts +6 -2
- package/scripts/backlog/backlog-plan.ts +18 -4
- package/scripts/backlog/backlog-pool.ts +10 -10
- package/scripts/backlog/backlog-rank.ts +10 -2
- package/scripts/backlog/backlog-ready.ts +112 -30
- package/scripts/backlog/backlog-stalled-detect.ts +109 -36
- package/scripts/backlog/backlog-stalled.ts +52 -16
- package/scripts/backlog/backlog-wait-cause.ts +86 -0
- package/scripts/backlog/backlog-waves.ts +39 -13
- package/scripts/backlog/backlogrun-args.ts +19 -7
- package/scripts/backlog/backlogrun-cli.ts +19 -5
- package/scripts/backlog/backlogrun-launch.ts +6 -0
- 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/cost-blocks.ts +22 -37
- package/scripts/cost-runtime/cost-cli.ts +31 -14
- package/scripts/cost-runtime/cost-main.ts +12 -0
- package/scripts/cost-runtime/cost-transcript.ts +1 -0
- package/scripts/delegation/delegation-policy.ts +17 -4
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/investigation-guard.ts +0 -8
- package/scripts/delegation/investigation-reads.ts +3 -4
- package/scripts/dependabot/dependabot-cooldown.ts +194 -0
- package/scripts/discovery/repo-discovery.ts +24 -6
- package/scripts/doctor/doctor-consumer.ts +2 -5
- package/scripts/document/document-byte-budget.ts +8 -6
- 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/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 +31 -0
- 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 +4 -0
- package/scripts/epic/epic-graph.ts +2 -0
- package/scripts/epic/epic-issue.ts +5 -1
- 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-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-cli.ts +2 -2
- package/scripts/followup/followup-checks-event.ts +8 -3
- package/scripts/followup/followup-coderabbit-wait.ts +82 -0
- package/scripts/followup/followup-review-gates.ts +81 -0
- package/scripts/followup/git-followup-stages.ts +13 -3
- package/scripts/followup/git-followup-workflow.ts +19 -66
- package/scripts/followup/git-pr-followup-wrapup.ts +9 -14
- package/scripts/followup/git-pr-followup.ts +36 -8
- package/scripts/fresh-machine/fresh-machine-cli.ts +1 -1
- package/scripts/fresh-machine/fresh-machine-run.ts +8 -8
- package/scripts/fresh-machine/specs/kit-test-backlogrun.json +1 -1
- package/scripts/gate/busy-average.ts +58 -0
- package/scripts/gate/check-cpu.ts +60 -0
- package/scripts/gate/check-inputs.ts +39 -95
- package/scripts/gate/check-reuse.ts +33 -54
- package/scripts/gate/command-memory.ts +192 -0
- package/scripts/gate/core-admission.ts +218 -28
- package/scripts/gate/core-budget-timing.ts +37 -0
- package/scripts/gate/core-budget.ts +80 -98
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +37 -5
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +27 -4
- package/scripts/gate/gate-ledger.ts +32 -4
- package/scripts/gate/gate-plan.ts +41 -34
- package/scripts/gate/gate-report.ts +14 -2
- package/scripts/gate/gate-run-steps.ts +53 -8
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +65 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/project-checks.ts +5 -12
- package/scripts/gate/scoped-green.ts +12 -8
- package/scripts/gate/since-green.ts +62 -0
- package/scripts/gate/toolchain-inputs.ts +115 -0
- package/scripts/gate/verification-gate.ts +27 -24
- package/scripts/gate/verification-inputs.ts +250 -0
- package/scripts/gh/gh-author-association.ts +96 -9
- package/scripts/gh/git-ai-review-scan.ts +4 -2
- package/scripts/gh/git-gh-api-path.ts +15 -0
- package/scripts/gh/git-gh-branch-rules.ts +73 -0
- package/scripts/gh/git-gh-conditional.ts +5 -2
- package/scripts/gh/git-gh-issue-read.ts +5 -1
- package/scripts/gh/git-gh-issue-write.ts +67 -29
- package/scripts/gh/git-gh-issue.ts +7 -3
- package/scripts/gh/git-gh-poll-read.ts +89 -0
- package/scripts/gh/git-gh-pr-auto-merge.ts +8 -3
- package/scripts/gh/git-gh-pr-rest.ts +1 -1
- package/scripts/gh/git-gh-pr-snapshot.ts +33 -20
- package/scripts/gh/git-gh-pr.ts +27 -15
- package/scripts/gh/git-pr-checks-eval.ts +39 -7
- package/scripts/gh/git-pr-checks-parse.ts +39 -9
- package/scripts/gh/git-pr-merge-checked.ts +80 -0
- package/scripts/git/base-tree.ts +19 -2
- package/scripts/git/changed-file-scope.ts +6 -4
- package/scripts/git/changed-paths.ts +18 -1
- package/scripts/git/git-diff-reads.ts +27 -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 +17 -7
- package/scripts/git/git-spawn.ts +1 -2
- package/scripts/git/git-status.ts +4 -4
- package/scripts/git/main-merge-main.ts +12 -0
- package/scripts/git/main-merge-regenerate.ts +2 -2
- package/scripts/git/main-merge.ts +25 -9
- package/scripts/git/main-sync-main.ts +12 -0
- package/scripts/git/main-sync.ts +0 -9
- package/scripts/git/stash/git-stash.ts +27 -4
- 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 +76 -0
- package/scripts/git/stash/stash-push-main.ts +12 -0
- package/scripts/hooks/batch-guard.ts +0 -8
- package/scripts/hooks/check-commit-message-main.ts +8 -0
- package/scripts/hooks/check-commit-message.ts +4 -7
- package/scripts/hooks/format-edited-file.ts +8 -24
- package/scripts/hooks/pre-commit-lint.ts +30 -3
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +32 -19
- package/scripts/hooks/reserved-run.ts +67 -9
- package/scripts/hooks/run-hook.sh +13 -4
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +2 -21
- package/scripts/hooks/stop-guard.ts +13 -9
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -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/defect-origin-cli.ts +106 -0
- package/scripts/issue/defect-origin-line.ts +60 -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 +34 -78
- 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/expected-effect-lint.ts +1 -0
- package/scripts/issue/issue-already-done-cli.ts +62 -0
- package/scripts/issue/issue-body-or-comment.ts +40 -0
- package/scripts/issue/issue-cite-cli.ts +0 -9
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +12 -7
- 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 +100 -0
- package/scripts/issue/issue-file-cli.ts +29 -7
- package/scripts/issue/issue-file.ts +19 -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 +81 -90
- package/scripts/issue/issue-lint-cli.ts +2 -10
- package/scripts/issue/issue-lint-main.ts +12 -0
- package/scripts/issue/issue-measured-cli.ts +56 -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 +111 -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.ts +151 -0
- package/scripts/issue/issue-rank.ts +7 -1
- package/scripts/issue/issue-read-cli.ts +3 -10
- package/scripts/issue/issue-read-main.ts +12 -0
- package/scripts/issue/issue-read.ts +29 -5
- 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 +192 -0
- package/scripts/issue/issue-sample-source.ts +76 -0
- package/scripts/issue/issue-scout-cli.ts +0 -11
- package/scripts/issue/issue-scout-main.ts +14 -0
- package/scripts/issue/issue-state-cli.ts +0 -10
- package/scripts/issue/issue-state-main.ts +12 -0
- package/scripts/issue/issue-watch-diff.ts +56 -15
- package/scripts/issue/issue-watch.ts +2 -1
- package/scripts/issue/issue-wip.ts +2 -7
- package/scripts/issue/measure-rerun-cli.ts +13 -8
- 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 +55 -0
- package/scripts/issue/plan-consumers.ts +127 -0
- package/scripts/josh/agent-session-environment.ts +1 -1
- package/scripts/josh/command-usage.ts +15 -43
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +4 -1
- 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 +157 -158
- 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 +111 -71
- 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 +181 -0
- package/scripts/josh/josh-commands-issue.ts +124 -24
- package/scripts/josh/josh-commands-lane.ts +103 -2
- package/scripts/josh/josh-commands-lint.ts +19 -8
- package/scripts/josh/josh-commands-maintenance.ts +112 -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 +124 -0
- package/scripts/josh/josh-commands-run.ts +211 -23
- package/scripts/josh/josh-commands-ship.ts +169 -0
- package/scripts/josh/josh-commands-split.ts +9 -0
- package/scripts/josh/josh-commands-versioning.ts +49 -2
- package/scripts/josh/josh-commands-workflow.ts +144 -6
- package/scripts/josh/josh-logic.ts +6 -13
- package/scripts/josh/package-directory.ts +2 -4
- package/scripts/josh/process-identity.ts +13 -4
- 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 +9 -15
- package/scripts/lane/lane-await.ts +51 -12
- package/scripts/lane/lane-cache.ts +5 -30
- package/scripts/lane/lane-capacity.ts +14 -23
- package/scripts/lane/lane-check-stats.ts +62 -21
- package/scripts/lane/lane-child-invocation.ts +8 -0
- package/scripts/lane/lane-cli.ts +15 -5
- package/scripts/lane/lane-close.ts +86 -18
- package/scripts/lane/lane-core-wait-stats.ts +66 -0
- package/scripts/lane/lane-dispatch.ts +24 -3
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-handoff.ts +69 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +4 -11
- package/scripts/lane/lane-launch-cli.ts +0 -9
- package/scripts/lane/lane-launch-main.ts +12 -0
- package/scripts/lane/lane-ledger-schema.ts +266 -0
- package/scripts/lane/lane-ledger.ts +92 -123
- package/scripts/lane/lane-limit-cli.ts +12 -1
- package/scripts/lane/lane-measure-cli.ts +57 -11
- package/scripts/lane/lane-open.ts +9 -1
- package/scripts/lane/lane-parked.ts +3 -3
- package/scripts/lane/lane-pause-cli.ts +130 -0
- package/scripts/lane/lane-pause.ts +158 -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 +24 -3
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +22 -2
- package/scripts/lane/lane-round-two-stats.ts +49 -0
- package/scripts/lane/lane-sampler.ts +4 -0
- package/scripts/lane/lane-session-action.ts +19 -5
- package/scripts/lane/lane-session-broker.ts +102 -21
- package/scripts/lane/lane-snapshot-trace.ts +84 -0
- package/scripts/lane/lane-spans.ts +51 -0
- package/scripts/lane/lane-spent.ts +6 -3
- package/scripts/lane/lane-stage-stats.ts +7 -2
- package/scripts/lane/lane-state.ts +302 -0
- package/scripts/lane/lane-stats.ts +58 -4
- package/scripts/lane/lane-stop-stats.ts +113 -37
- package/scripts/lane/lane-test-related-stats.ts +127 -0
- package/scripts/lane/lane-transcript-calls.ts +145 -0
- package/scripts/lane/lane-transcript-stats.ts +168 -0
- package/scripts/lane/lane-vacant.ts +13 -3
- package/scripts/lane/lane-withdraw-cli.ts +5 -4
- package/scripts/lane/lane-withdraw.ts +50 -49
- 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/read-file.ts +3 -1
- 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/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.ts +265 -0
- package/scripts/lint/format.ts +11 -2
- package/scripts/lint/import-graph.ts +279 -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 +62 -30
- package/scripts/lint/lint-related-scope.ts +30 -24
- package/scripts/lint/lint-related.ts +38 -6
- package/scripts/notify/confirmation-options.ts +1 -2
- package/scripts/notify/telegram-notify.ts +20 -20
- 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/observations-flush-landing.ts +5 -3
- package/scripts/observations/observations-flush.ts +6 -1
- package/scripts/overrides/overrides-check.ts +2 -5
- 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 +18 -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 +6 -15
- package/scripts/report/report-format-reference.ts +2 -0
- package/scripts/report/report-labels.ts +155 -0
- package/scripts/report/report-lint-cli.ts +3 -0
- package/scripts/report/report-lint.ts +85 -110
- 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/removed-tests-check.ts +86 -0
- package/scripts/review/removed-tests.ts +149 -0
- package/scripts/review/review-brief-cli.ts +81 -15
- package/scripts/review/review-brief-main.ts +12 -0
- package/scripts/review/review-brief.ts +31 -3
- package/scripts/review/review-code-tree.ts +10 -6
- package/scripts/review/review-comment-round.ts +26 -8
- package/scripts/review/review-finding-ledger.ts +30 -15
- package/scripts/review/review-interaction.ts +94 -0
- package/scripts/review/review-readers-scan.ts +163 -0
- package/scripts/review/review-record-cli.ts +69 -30
- package/scripts/review/review-record-main.ts +12 -0
- package/scripts/review/review-round-one-blobs.ts +221 -0
- package/scripts/review/review-round2-cli.ts +49 -12
- package/scripts/review/review-round2.ts +80 -12
- package/scripts/review/review-stamps.ts +19 -1
- package/scripts/review/review-stop-log.ts +96 -0
- package/scripts/review/review-stops-cli.ts +85 -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 +8 -0
- package/scripts/rules/bash-triggers.ts +46 -3
- package/scripts/rules/decision-oracle-batch.ts +9 -1
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +80 -2
- package/scripts/rules/destructive-command.ts +8 -1
- package/scripts/rules/direct-filing.ts +10 -2
- package/scripts/rules/direct-issue-comment.ts +117 -0
- package/scripts/rules/direct-pr-create.ts +69 -3
- package/scripts/rules/early-heartbeat.ts +2 -1
- package/scripts/rules/file-body.ts +7 -0
- package/scripts/rules/filing-cap.ts +7 -0
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +4 -0
- package/scripts/rules/implementation-cut-verdict.ts +1 -1
- package/scripts/rules/implementation-cut.ts +11 -3
- package/scripts/rules/index-guard.ts +8 -1
- package/scripts/rules/issue-comments.ts +9 -1
- package/scripts/rules/josh-git-bare.ts +7 -0
- package/scripts/rules/lane-background.ts +67 -25
- package/scripts/rules/lane-carry-conflict.ts +6 -0
- package/scripts/rules/lane-direct-tool.ts +74 -0
- package/scripts/rules/lane-interactive-ask.ts +9 -2
- package/scripts/rules/lane-park.ts +45 -23
- package/scripts/rules/lane-split-park.ts +10 -2
- package/scripts/rules/lane-switch-main.ts +7 -0
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +1 -1
- package/scripts/rules/poll-loop.ts +7 -0
- package/scripts/rules/pr-merge.ts +123 -0
- package/scripts/rules/protected-files.ts +32 -5
- package/scripts/rules/raw-field-body.ts +6 -0
- package/scripts/rules/rule-body-guard.ts +8 -0
- package/scripts/rules/rule-list.ts +9 -28
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +1 -1
- package/scripts/rules/shell-segments.ts +35 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +3 -4
- package/scripts/rules/test-declared-commit.ts +11 -1
- package/scripts/rules/third-party-write.ts +7 -0
- package/scripts/rules/timed-rerun.ts +69 -0
- package/scripts/rules/worktree-guard.ts +13 -3
- 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 +67 -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 +153 -36
- package/scripts/run/board/run-board-fold.ts +123 -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 +82 -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 +116 -71
- package/scripts/run/board/run-board-lane-state.ts +109 -0
- package/scripts/run/board/run-board-lane-time.ts +122 -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-machine.ts +8 -4
- package/scripts/run/board/run-board-main.ts +12 -0
- package/scripts/run/board/run-board-notes.ts +52 -31
- package/scripts/run/board/run-board-now.ts +1 -1
- package/scripts/run/board/run-board-operation.ts +15 -33
- package/scripts/run/board/run-board-phase.ts +1 -1
- package/scripts/run/board/run-board-plan-shared.ts +115 -0
- package/scripts/run/board/run-board-plan.ts +55 -3
- 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 +151 -27
- package/scripts/run/board/run-board-reason.ts +235 -51
- package/scripts/run/board/run-board-released.ts +35 -0
- package/scripts/run/board/run-board-render-checks.ts +39 -5
- package/scripts/run/board/run-board-render-condition.ts +96 -0
- package/scripts/run/board/run-board-render-drawn.ts +67 -0
- package/scripts/run/board/run-board-render-foot.ts +59 -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 +80 -0
- package/scripts/run/board/run-board-render-legend.ts +117 -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 +207 -265
- 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 +2 -2
- package/scripts/run/board/run-board-state.ts +22 -33
- package/scripts/run/board/run-board-status.ts +147 -71
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +122 -107
- 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.ts +9 -4
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/event/run-event-cli.ts +1 -5
- package/scripts/run/event/run-event-filed.ts +12 -6
- package/scripts/run/event/run-event-follow.ts +2 -3
- package/scripts/run/event/run-event-render.ts +6 -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 +34 -8
- 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 +183 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +62 -48
- 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 +23 -0
- package/scripts/run/merge/run-merge-restart.ts +39 -0
- package/scripts/run/merge/run-merge-ship.ts +20 -4
- package/scripts/run/merge/run-merge-signals.ts +33 -9
- package/scripts/run/merge/run-merge-steps.ts +120 -85
- package/scripts/run/merge/run-merge.ts +38 -37
- 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.ts +2 -1
- 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 +2 -2
- 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 +6 -0
- package/scripts/run/run-report-cli.ts +101 -13
- package/scripts/run/run-report-handoff.ts +114 -0
- package/scripts/run/run-step.ts +1 -1
- 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 +121 -0
- package/scripts/run/ship/run-ship-body-draft.ts +110 -0
- package/scripts/run/ship/run-ship-cli.ts +63 -140
- package/scripts/run/ship/run-ship-detach.ts +19 -8
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +18 -2
- package/scripts/run/ship/run-ship-overlap.ts +42 -5
- package/scripts/run/ship/run-ship-place.ts +96 -0
- package/scripts/run/ship/run-ship-pre-detach-timed.ts +43 -0
- package/scripts/run/ship/run-ship-pre-detach.ts +81 -24
- package/scripts/run/ship/run-ship-preflight.ts +137 -32
- package/scripts/run/ship/run-ship-probe.ts +11 -3
- package/scripts/run/ship/run-ship-relaunch-cap.ts +70 -0
- package/scripts/run/ship/run-ship-removed-rows.ts +61 -0
- package/scripts/run/ship/run-ship-return.ts +107 -23
- package/scripts/run/ship/run-ship-review-steps.ts +105 -151
- package/scripts/run/ship/run-ship-review.ts +73 -6
- package/scripts/run/ship/run-ship-reviewer.ts +207 -0
- package/scripts/run/ship/run-ship-stage.ts +55 -6
- package/scripts/run/ship/run-ship-steps.ts +46 -15
- package/scripts/run/ship/run-ship-stop-cause.ts +135 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +43 -6
- package/scripts/run/ship/run-ship.ts +30 -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-cli.ts +119 -100
- package/scripts/run/wake/run-wake-code.ts +83 -0
- package/scripts/run/wake/run-wake-driver.ts +19 -8
- package/scripts/run/wake/run-wake-loop.ts +34 -3
- package/scripts/run/wake/run-wake-main.ts +13 -0
- package/scripts/run/wake/run-wake-ports.ts +90 -0
- package/scripts/run/wake/run-wake-takeover.ts +66 -0
- package/scripts/run/wake/run-wake.ts +2 -1
- 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 +3 -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 +12 -0
- package/scripts/security/security-audit-provision.ts +11 -26
- package/scripts/security/security-audit.ts +6 -7
- 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 +15 -0
- package/scripts/split/split-measure.ts +65 -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/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-pinned-logic.ts +145 -0
- package/scripts/test/test-pinned-main.ts +78 -0
- package/scripts/test/test-pinned.ts +100 -0
- package/scripts/test/test-read-map.ts +264 -0
- package/scripts/test/test-read-recording.ts +91 -0
- package/scripts/test/test-read-trace.ts +148 -0
- package/scripts/test/test-red-main.ts +12 -0
- package/scripts/test/test-red.ts +12 -30
- package/scripts/test/test-related-main.ts +18 -0
- package/scripts/test/test-related-record.ts +119 -0
- package/scripts/test/test-related-scope.ts +229 -43
- package/scripts/test/test-related.ts +300 -22
- package/scripts/test/test-unit-guard-main.ts +15 -0
- package/scripts/test/test-unit-guard.ts +42 -24
- package/scripts/test/unit-count-file.ts +37 -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 +61 -149
- package/scripts/test/whole-suite-files.ts +63 -0
- package/scripts/time-runtime/time-background.ts +20 -2
- package/scripts/time-runtime/time-bundles.ts +4 -3
- 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 +10 -1
- package/scripts/time-runtime/time-shell.ts +97 -10
- package/scripts/time-runtime/time-transcript-line.ts +49 -62
- 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/effective-upstream.ts +6 -12
- package/scripts/version/latest-corepack.ts +17 -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 +4 -1
- package/templates/pnpm-workspace.basic.yaml +1 -1
- package/templates/sonar-project.properties +3 -2
- package/templates/workflows/ci.yml +12 -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-CDY4NFQG.js +0 -15
- 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-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-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/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/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
|
@@ -3,7 +3,7 @@ import { stamp_file } from './stamp-file'
|
|
|
3
3
|
|
|
4
4
|
// A stamp whose payload is "when this was taken, and the digest of every file it covers".
|
|
5
5
|
//
|
|
6
|
-
// `
|
|
6
|
+
// `tools/eval/eval-stamp.ts` was the only holder of this shape. `josh review:brief` needs two more
|
|
7
7
|
// records of exactly the same kind — the gate's result, and the snapshot round 1 takes so round 2
|
|
8
8
|
// can name the fix delta — and copying the payload type, its validation, the guarded read and the
|
|
9
9
|
// comparison into a second module is the clone `CLAUDE.md` prohibits. What genuinely differs between
|
|
@@ -48,6 +48,14 @@ interface FileMapStamp {
|
|
|
48
48
|
// reads it and the two `josh review:brief` records, which assert a completed past fact by
|
|
49
49
|
// existing at all, neither write nor read it.
|
|
50
50
|
completed_at?: string
|
|
51
|
+
// The git blob of each mapped path as it was read — written only by the round-1 review snapshot
|
|
52
|
+
// (`review-round-one-blobs.ts`). When `base` moves, round 2 carries these onto the new base and
|
|
53
|
+
// measures the fix delta from there; a record without them falls back to the moved-base refusal.
|
|
54
|
+
blobs?: Record<string, string>
|
|
55
|
+
// The fingerprint of what the vouched check reads beside the files — its tools' versions and its
|
|
56
|
+
// environment (`verification-inputs.ts`, joshuafolkken/kit#4495). Written by a record created with an
|
|
57
|
+
// `inputs` source; a reader of such a record refuses one whose fingerprint is absent or differs.
|
|
58
|
+
inputs?: string
|
|
51
59
|
}
|
|
52
60
|
|
|
53
61
|
// Takes `unknown` rather than the declared field type, because the declared type is an assertion
|
|
@@ -64,28 +72,38 @@ function is_file_map(value: unknown): value is Record<string, string> {
|
|
|
64
72
|
// reader treats an absent field as the safe answer — "not running" for a `pid`, "cannot be reused"
|
|
65
73
|
// for a `base`. Spread rather than assigned, because `exactOptionalPropertyTypes` makes an explicit
|
|
66
74
|
// `undefined` a different thing from an absent key.
|
|
67
|
-
function
|
|
68
|
-
pid: unknown,
|
|
69
|
-
base: unknown,
|
|
70
|
-
completed_at: unknown,
|
|
71
|
-
process_start: unknown,
|
|
72
|
-
): Partial<FileMapStamp> {
|
|
75
|
+
function identity_fields({ pid, process_start }: Partial<FileMapStamp>): Partial<FileMapStamp> {
|
|
73
76
|
return {
|
|
74
77
|
...(typeof pid === 'number' && { pid }),
|
|
78
|
+
...(typeof process_start === 'string' && { process_start }),
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function tree_fields({ base, completed_at, blobs }: Partial<FileMapStamp>): Partial<FileMapStamp> {
|
|
83
|
+
return {
|
|
75
84
|
...(typeof base === 'string' && { base }),
|
|
76
85
|
...(typeof completed_at === 'string' && { completed_at }),
|
|
77
|
-
...(
|
|
86
|
+
...(is_file_map(blobs) && { blobs }),
|
|
78
87
|
}
|
|
79
88
|
}
|
|
80
89
|
|
|
90
|
+
function input_fields({ inputs }: Partial<FileMapStamp>): Partial<FileMapStamp> {
|
|
91
|
+
return typeof inputs === 'string' ? { inputs } : {}
|
|
92
|
+
}
|
|
93
|
+
|
|
81
94
|
function parse_stamp(raw: string): FileMapStamp | undefined {
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
) as Partial<FileMapStamp>
|
|
95
|
+
const parsed = JSON.parse(raw) as Partial<FileMapStamp>
|
|
96
|
+
const { taken_at, files } = parsed
|
|
85
97
|
|
|
86
98
|
if (typeof taken_at !== 'string' || !is_file_map(files)) return undefined
|
|
87
99
|
|
|
88
|
-
return {
|
|
100
|
+
return {
|
|
101
|
+
taken_at,
|
|
102
|
+
files,
|
|
103
|
+
...identity_fields(parsed),
|
|
104
|
+
...tree_fields(parsed),
|
|
105
|
+
...input_fields(parsed),
|
|
106
|
+
}
|
|
89
107
|
}
|
|
90
108
|
|
|
91
109
|
// Whether the process that wrote this record is still running. It takes the
|
|
@@ -152,14 +170,22 @@ function changed_since(stamp: FileMapStamp, tree: Record<string, string>): Reado
|
|
|
152
170
|
interface FileMapStampAccess {
|
|
153
171
|
stamp_path: () => string
|
|
154
172
|
// `base` is written by the one record that is acted on rather than merely reported — the
|
|
155
|
-
// green-gate reuse. The others omit it and are unaffected.
|
|
156
|
-
write: (
|
|
173
|
+
// green-gate reuse. The others omit it and are unaffected. `blobs` is the round-1 snapshot's alone.
|
|
174
|
+
write: (
|
|
175
|
+
files: Record<string, string>,
|
|
176
|
+
target?: string,
|
|
177
|
+
base?: string,
|
|
178
|
+
blobs?: Record<string, string>,
|
|
179
|
+
) => string
|
|
157
180
|
// Marks an existing record as belonging to a run that finished. It
|
|
158
181
|
// amends rather than rewrites, and answers `undefined` where there is no record to amend: a run
|
|
159
182
|
// whose record never got written has nothing to assert a completion about, and inventing one here
|
|
160
183
|
// would manufacture the very vouching the field exists to withhold.
|
|
161
184
|
complete: (target?: string) => string | undefined
|
|
162
185
|
read: (source?: string) => FileMapStamp | undefined
|
|
186
|
+
// Whether `stamp` was written under the inputs fingerprint read now; always `true` for a record
|
|
187
|
+
// created without an `inputs` source, which never vouches for a check.
|
|
188
|
+
describes_inputs: (stamp: FileMapStamp) => boolean
|
|
163
189
|
// For a record whose meaning is its existence rather than its contents — the in-flight gate marker.
|
|
164
190
|
// A record nobody removes would go on asserting a gate that ended.
|
|
165
191
|
remove: (target?: string) => void
|
|
@@ -219,7 +245,11 @@ function complete_at(target: string): string | undefined {
|
|
|
219
245
|
// The destination is a parameter on both sides so a test can exercise the round trip without
|
|
220
246
|
// overwriting the record a real run may be relying on — two commands share one path by design, and a
|
|
221
247
|
// suite that wrote to it would be a second writer nobody declared.
|
|
222
|
-
|
|
248
|
+
//
|
|
249
|
+
// `inputs` answers the fingerprint of what the record vouches for beside its files
|
|
250
|
+
// (`verification-inputs.ts`); it is read at each write and each comparison, so a tool reinstalled or an
|
|
251
|
+
// environment variable changed between them leaves the record standing for nobody.
|
|
252
|
+
function create(prefix: string, root?: string, inputs?: () => string): FileMapStampAccess {
|
|
223
253
|
function resolve(): string {
|
|
224
254
|
return stamp_file.stamp_path(prefix, root)
|
|
225
255
|
}
|
|
@@ -229,15 +259,18 @@ function create(prefix: string, root?: string): FileMapStampAccess {
|
|
|
229
259
|
// `base` goes into the payload undefined and all — `JSON.stringify` drops an undefined value,
|
|
230
260
|
// so a caller that has no base writes exactly the record it wrote before this field existed.
|
|
231
261
|
// `own_fields` is what writes the pid, and the writing process's start time beside it — assembled in one place so no record can carry half an identity.
|
|
232
|
-
write: (files, target = resolve(), base?: string) =>
|
|
262
|
+
write: (files, target = resolve(), base?: string, blobs?: Record<string, string>) =>
|
|
233
263
|
stamp_file.write_stamp(target, {
|
|
234
264
|
taken_at: new Date().toISOString(),
|
|
235
265
|
files,
|
|
236
266
|
...process_identity.own_fields(),
|
|
237
267
|
base,
|
|
268
|
+
blobs,
|
|
269
|
+
inputs: inputs?.(),
|
|
238
270
|
}),
|
|
239
271
|
complete: (target = resolve()) => complete_at(target),
|
|
240
272
|
read: (source = resolve()) => read_at(source),
|
|
273
|
+
describes_inputs: (stamp) => inputs === undefined || stamp.inputs === inputs(),
|
|
241
274
|
remove: (target = resolve()) => {
|
|
242
275
|
stamp_file.remove_stamp(target)
|
|
243
276
|
},
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { text } from 'node:stream/consumers'
|
|
1
2
|
import { json_value } from '#scripts/lib/json-value'
|
|
3
|
+
import { file_reader } from '#scripts/lib/read-file'
|
|
2
4
|
import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
|
|
3
5
|
import { time_density_hook } from '#scripts/time-runtime/time-density-hook'
|
|
4
6
|
import { time_hook_transcript } from '#scripts/time-runtime/time-hook-transcript'
|
|
@@ -43,7 +45,6 @@ const ALLOW_DECISION = 'allow'
|
|
|
43
45
|
// No record means nothing has been refused yet, and every span began after instant zero — which is
|
|
44
46
|
// the answer wanted: the first qualifying accumulation of a run is refused.
|
|
45
47
|
const NEVER_MS = 0
|
|
46
|
-
const MISSING_FILE = 'ENOENT'
|
|
47
48
|
|
|
48
49
|
// More than one spelling, because the mistake on this side is silent: a value meant to disable a
|
|
49
50
|
// guard that the list does not recognize leaves it on, and the person sees refusals they asked to
|
|
@@ -69,9 +70,7 @@ function is_switch_opt_in(key: string): boolean {
|
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
function parse_hook_payload(raw_payload: string): HookPayload | undefined {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return parsed.success ? parsed.data : undefined
|
|
73
|
+
return json_value.parse_with(raw_payload, payload_schema)
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
// The documented shape a `PreToolUse` hook answers with. Plain stdout is not it — only this envelope
|
|
@@ -137,25 +136,19 @@ function stamp_fault(switch_key: string): string {
|
|
|
137
136
|
)
|
|
138
137
|
}
|
|
139
138
|
|
|
140
|
-
// **A transcript that does not exist yet is not a fault.** A delegated unit's own file is named before
|
|
141
|
-
// anything is written under it, so a fork's first guarded calls read a path with no file behind it —
|
|
142
|
-
// `time-hook-transcript.ts` states that "no history" is the honest verdict there. Reported as a fault
|
|
143
|
-
// it would print on every early call of every fork, which is the routine case drowning the signal this
|
|
144
|
-
// exists to raise.
|
|
145
|
-
function is_missing_file(error: unknown): boolean {
|
|
146
|
-
if (!(error instanceof Error) || !('code' in error)) return false
|
|
147
|
-
|
|
148
|
-
return typeof error.code === 'string' && error.code === MISSING_FILE
|
|
149
|
-
}
|
|
150
|
-
|
|
151
139
|
function error_text(error: unknown): string {
|
|
152
140
|
if (error instanceof Error) return error.message
|
|
153
141
|
|
|
154
142
|
return typeof error === 'string' ? error : 'a value that is not an error'
|
|
155
143
|
}
|
|
156
144
|
|
|
145
|
+
// **A transcript that does not exist yet is not a fault.** A delegated unit's own file is named before
|
|
146
|
+
// anything is written under it, so a fork's first guarded calls read a path with no file behind it —
|
|
147
|
+
// `time-hook-transcript.ts` states that "no history" is the honest verdict there. Reported as a fault
|
|
148
|
+
// it would print on every early call of every fork, which is the routine case drowning the signal this
|
|
149
|
+
// exists to raise.
|
|
157
150
|
function fault_notice(switch_key: string, error: unknown): string | undefined {
|
|
158
|
-
if (
|
|
151
|
+
if (file_reader.is_absent(error)) return undefined
|
|
159
152
|
|
|
160
153
|
const detail = error_text(error)
|
|
161
154
|
|
|
@@ -416,10 +409,10 @@ function create_transcript_guard(spec: TranscriptGuardSpec): TranscriptGuard {
|
|
|
416
409
|
return stamp.path(transcript_path)
|
|
417
410
|
}
|
|
418
411
|
|
|
419
|
-
// **Every failure allows the call.**
|
|
420
|
-
//
|
|
421
|
-
//
|
|
422
|
-
//
|
|
412
|
+
// **Every failure allows the call.** An unreadable transcript, a half-written tail, a temp directory
|
|
413
|
+
// that cannot be written — each ends as "no refusal", for the same reason `format-edited-file.ts`
|
|
414
|
+
// swallows a formatter it could not start: a hook that failed closed would stop a run over its own
|
|
415
|
+
// plumbing. A payload that is not JSON names no call to judge, so it ends with no outcome at all.
|
|
423
416
|
//
|
|
424
417
|
// **What changed is that it no longer does so in silence**. The call still
|
|
425
418
|
// goes through — failing open is the right call and is not being revisited — but the fault comes
|
|
@@ -481,6 +474,24 @@ function report_no_payload(command: string): void {
|
|
|
481
474
|
)
|
|
482
475
|
}
|
|
483
476
|
|
|
477
|
+
// A hook entry's whole main: the hand-run notice from a terminal, else the payload on stdin handed to
|
|
478
|
+
// `respond` once `.env` is loaded.
|
|
479
|
+
async function respond_from_stdin(
|
|
480
|
+
command: string,
|
|
481
|
+
respond: (raw: string) => Promise<void> | void,
|
|
482
|
+
): Promise<void> {
|
|
483
|
+
if (process.stdin.isTTY) {
|
|
484
|
+
report_no_payload(command)
|
|
485
|
+
|
|
486
|
+
return
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
const raw_payload = await text(process.stdin)
|
|
490
|
+
|
|
491
|
+
load_environment_file()
|
|
492
|
+
await respond(raw_payload)
|
|
493
|
+
}
|
|
494
|
+
|
|
484
495
|
const hook_decision = {
|
|
485
496
|
DISABLED_VALUES,
|
|
486
497
|
ENABLED_VALUES,
|
|
@@ -497,6 +508,7 @@ const hook_decision = {
|
|
|
497
508
|
notice_envelope,
|
|
498
509
|
parse_hook_payload,
|
|
499
510
|
report_no_payload,
|
|
511
|
+
respond_from_stdin,
|
|
500
512
|
rewrite_envelope,
|
|
501
513
|
stamp_fault,
|
|
502
514
|
write_decision,
|
|
@@ -47,6 +47,7 @@ const ALIASES: Record<string, string> = {
|
|
|
47
47
|
tr: 'test:related',
|
|
48
48
|
td: 'test:declared',
|
|
49
49
|
trd: 'test:red',
|
|
50
|
+
tpn: 'test:pinned',
|
|
50
51
|
te: 'test:e2e',
|
|
51
52
|
c: 'check',
|
|
52
53
|
pt: 'port',
|
|
@@ -55,7 +56,6 @@ const ALIASES: Record<string, string> = {
|
|
|
55
56
|
st: 'start',
|
|
56
57
|
sy: 'sync',
|
|
57
58
|
un: 'uninstall',
|
|
58
|
-
rmi: 'registry:migrate',
|
|
59
59
|
g: 'git',
|
|
60
60
|
gp: 'pr',
|
|
61
61
|
ms: 'main:sync',
|
|
@@ -79,6 +79,7 @@ const ALIASES: Record<string, string> = {
|
|
|
79
79
|
rtr: 'retrospective',
|
|
80
80
|
ca: 'cost:audit',
|
|
81
81
|
rvf: 'review:findings',
|
|
82
|
+
rvs: 'review:stops',
|
|
82
83
|
ruv: 'rule:value',
|
|
83
84
|
ev: 'eval',
|
|
84
85
|
fr: 'fresh:run',
|
|
@@ -88,6 +89,8 @@ const ALIASES: Record<string, string> = {
|
|
|
88
89
|
lli: 'lane:limit',
|
|
89
90
|
lrs: 'lane:restart',
|
|
90
91
|
lwd: 'lane:withdraw',
|
|
92
|
+
lps: 'lane:pause',
|
|
93
|
+
lru: 'lane:resume',
|
|
91
94
|
blr: 'backlogrun',
|
|
92
95
|
}
|
|
93
96
|
|
|
@@ -56,7 +56,8 @@ interface CommandFlag {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// What `josh help <command>` prints and what the reference pages render between their usage
|
|
59
|
-
// markers — one source for both, so the page and the terminal cannot disagree (#3932).
|
|
59
|
+
// markers — one source for both, so the page and the terminal cannot disagree (#3932). Each command's
|
|
60
|
+
// entry carries its own, so a command cannot be registered without one (#4185).
|
|
60
61
|
interface CommandUsage {
|
|
61
62
|
examples: ReadonlyArray<CommandExample>
|
|
62
63
|
flags?: ReadonlyArray<CommandFlag>
|
|
@@ -68,6 +69,7 @@ interface CommandEntry {
|
|
|
68
69
|
description: string
|
|
69
70
|
category: CommandCategory
|
|
70
71
|
reference: CommandReference
|
|
72
|
+
usage: CommandUsage
|
|
71
73
|
tsx_arguments?: ReadonlyArray<string>
|
|
72
74
|
default_script_arguments?: ReadonlyArray<string>
|
|
73
75
|
// Composite (`sh -c`) commands reject extra CLI arguments instead of swallowing them; this
|
|
@@ -93,6 +95,8 @@ interface CommandEntry {
|
|
|
93
95
|
// The memory the command's tools hold, claimed with its cores; read like
|
|
94
96
|
// `core_weight`, and none declared is none waited for.
|
|
95
97
|
memory_mb?: number | (() => number)
|
|
98
|
+
// A unit suite's claim, whose weight is its worker count (`gate_plan.DIRECT_UNIT_CLAIM`).
|
|
99
|
+
is_unit_claim?: boolean
|
|
96
100
|
}
|
|
97
101
|
|
|
98
102
|
// The name `josh gate` registers under. It lives here rather than in `verification-gate.ts` so a
|
|
@@ -184,7 +188,7 @@ const GATE_CACHE_FILES: ReadonlyArray<string> = GATE_CACHE_SPECS.map((spec) => s
|
|
|
184
188
|
// The `PostToolUse` edit hook runs eslint too, and ESLint *deletes* the file at `--cache-location`
|
|
185
189
|
// whenever it is started without `--cache` — so a shared file would be wiped by every single edit,
|
|
186
190
|
// leaving the gate a cold lint. The hook is given a location of its own rather than the
|
|
187
|
-
// gate's because the two run at the same time: `josh gate` lints
|
|
191
|
+
// gate's because the two run at the same time: `josh gate` lints beside the review
|
|
188
192
|
// while this hook fires on every edit, and each eslint run rewrites its cache file whole from the
|
|
189
193
|
// copy it loaded at start-up — so two writers silently discard each other's entries. A file of its
|
|
190
194
|
// own makes the hook structurally unable to degrade the cache this exists to protect.
|
|
@@ -193,7 +197,7 @@ const GATE_CACHE_FILES: ReadonlyArray<string> = GATE_CACHE_SPECS.map((spec) => s
|
|
|
193
197
|
// true, and a single-file run against the gate's full cache was measured byte-identical, so a shared
|
|
194
198
|
// file would keep the entries that run never visited.
|
|
195
199
|
// The same reasoning for the scoped lint. `josh lint:related` is what an implementation loop calls
|
|
196
|
-
// between edits, and `josh gate` lints
|
|
200
|
+
// between edits, and `josh gate` lints beside the review — so those two run at the
|
|
197
201
|
// same time as readily as the hook and the gate do. Whichever of a pair sharing one file wrote last
|
|
198
202
|
// would replace it with "the copy I loaded at start-up plus what I visited", so a narrowed run
|
|
199
203
|
// finishing during a whole-tree run would roll the cache back to its pre-gate state, and a
|
|
@@ -204,8 +208,8 @@ const GATE_CACHE_FILES: ReadonlyArray<string> = GATE_CACHE_SPECS.map((spec) => s
|
|
|
204
208
|
// warm from its own second call onwards, and the gate's stays exactly as the gate left it.
|
|
205
209
|
//
|
|
206
210
|
// **The lint's target scope is untouched.** This is where a cache is written, not what is read:
|
|
207
|
-
// `josh lint:related`
|
|
208
|
-
//
|
|
211
|
+
// `josh lint:related` and the gate's `josh lint --changed` each narrow to the change, on caches of
|
|
212
|
+
// their own. The scoped lint's prettier cache is its own for the same reason:
|
|
209
213
|
// prettier rewrites its cache file whole as well.
|
|
210
214
|
// What the ignore rules are asserted against: every cache file this package writes, wherever it is
|
|
211
215
|
// written from. The gate's, the edit hook's, the scoped lint's and the pre-commit hook's — a cache
|
|
@@ -250,7 +254,8 @@ export type { CommandCategory, CommandEntry, CommandUsage, GateCacheSpec }
|
|
|
250
254
|
// them per target: the lint step writes only the eslint one, so a target
|
|
251
255
|
// that cleared the list would report a cold type check as the lint's own cost. The edit hook's cache
|
|
252
256
|
// stays private; the scoped lint cache is exported because #2060 shares its completed file between
|
|
253
|
-
// worktrees, but it still never overlaps the gate's distinct cache location.
|
|
257
|
+
// worktrees, but it still never overlaps the gate's distinct cache location. The pre-commit hook's
|
|
258
|
+
// eslint cache is exported because the hook re-reads a red report against it (#4407).
|
|
254
259
|
export {
|
|
255
260
|
COMMAND_AUDIENCES,
|
|
256
261
|
COMMAND_SIDE_EFFECTS,
|
|
@@ -259,6 +264,7 @@ export {
|
|
|
259
264
|
CSPELL_COMMIT_CACHE_FLAGS,
|
|
260
265
|
ESLINT_CACHE_FILE,
|
|
261
266
|
ESLINT_CACHE_FLAGS,
|
|
267
|
+
ESLINT_COMMIT_CACHE_FILE,
|
|
262
268
|
ESLINT_COMMIT_CACHE_FLAGS,
|
|
263
269
|
ESLINT_EDIT_CACHE_FLAGS,
|
|
264
270
|
ESLINT_RELATED_CACHE_FLAGS,
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { CommandEntry } from './josh-command-types'
|
|
2
|
+
|
|
3
|
+
const PRE_TOOL_USE = 'run by the PreToolUse hook, the pending tool call as JSON on stdin'
|
|
4
|
+
|
|
5
|
+
// The Claude Code and Codex hook commands, split out of `josh-commands-development.ts` when each
|
|
6
|
+
// command's usage moved onto its entry (#4185). `DEV_COMMANDS` spreads this in at the same place, so
|
|
7
|
+
// the map keeps its order.
|
|
8
|
+
|
|
9
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
10
|
+
const AGENT_HOOK_COMMANDS: Record<string, CommandEntry> = {
|
|
11
|
+
'format:edited': {
|
|
12
|
+
script: 'scripts/hooks/format-edited-cli.ts',
|
|
13
|
+
description: 'Claude Code hook: format the file just edited (reads the tool call on stdin)',
|
|
14
|
+
category: 'Development',
|
|
15
|
+
reference: ['', 'automation', ['files', 'processes']],
|
|
16
|
+
usage: {
|
|
17
|
+
examples: [
|
|
18
|
+
{ arguments: '', note: 'run by the PostToolUse hook, the tool call as JSON on stdin' },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
'pretool:guard': {
|
|
23
|
+
script: 'scripts/hooks/pretool-guard-cli.ts',
|
|
24
|
+
description:
|
|
25
|
+
'Claude Code hook: the batch, investigation and rule guards in one process (reads the tool call on stdin)',
|
|
26
|
+
category: 'Development',
|
|
27
|
+
reference: ['', 'automation', ['none']],
|
|
28
|
+
usage: { examples: [{ arguments: '', note: PRE_TOOL_USE }] },
|
|
29
|
+
// **No `tsx_arguments`, deliberately.** `JOSH_BATCH_GUARD` and the other guard switches are
|
|
30
|
+
// per-machine preferences kept in `.env`, which every other command reads through
|
|
31
|
+
// `OPTIONAL_ENV_FILE_FLAGS` — but declaring any `tsx_arguments` disqualifies a command from
|
|
32
|
+
// in-process dispatch (`josh-in-process.ts`), and this is the one PreToolUse hook consumers run
|
|
33
|
+
// before every guarded call, where a second ~0.16 s tsx start is not affordable. Each guard it
|
|
34
|
+
// composes loads `.env` through the shared loader instead.
|
|
35
|
+
},
|
|
36
|
+
'stop:guard': {
|
|
37
|
+
script: 'scripts/hooks/stop-guard.ts',
|
|
38
|
+
description:
|
|
39
|
+
'Claude Code Stop hook: send the hold notify, release the hold and print the issue citations itself; block on the rules that need the model (reads the Stop payload on stdin)',
|
|
40
|
+
category: 'Development',
|
|
41
|
+
reference: ['', 'automation', ['none']],
|
|
42
|
+
usage: {
|
|
43
|
+
examples: [
|
|
44
|
+
{ arguments: '', note: 'run by the Stop hook, the stop payload as JSON on stdin' },
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
// **No `tsx_arguments`, deliberately**, the same as `pretool:guard` above: this runs at every
|
|
48
|
+
// turn end, so it must stay eligible for in-process dispatch rather than pay a second tsx start.
|
|
49
|
+
// It loads `.env` through the shared `hook-decision.ts` loader.
|
|
50
|
+
},
|
|
51
|
+
'session:lang': {
|
|
52
|
+
script: 'scripts/josh/session-language-main.ts',
|
|
53
|
+
description:
|
|
54
|
+
'Claude Code hook: print a non-default JOSH_SESSION_LANG for the session context, and the run:board reply rule while a backlogrun is live (otherwise nothing)',
|
|
55
|
+
category: 'Development',
|
|
56
|
+
reference: ['', 'automation', ['none']],
|
|
57
|
+
usage: {
|
|
58
|
+
examples: [{ arguments: '', note: 'run by the UserPromptSubmit hook; `ja` prints nothing' }],
|
|
59
|
+
},
|
|
60
|
+
// **No `tsx_arguments`, deliberately**, the same as `pretool:guard` above: this runs on every
|
|
61
|
+
// `UserPromptSubmit`, so it must stay eligible for in-process dispatch rather than pay a second
|
|
62
|
+
// tsx start each turn. It calls `process.loadEnvFile` itself through the shared loader.
|
|
63
|
+
},
|
|
64
|
+
'codex:hook-adapter': {
|
|
65
|
+
script: 'scripts/hooks/codex-hook-adapter.ts',
|
|
66
|
+
description:
|
|
67
|
+
'Codex hook: run the pretool or posttool guard on a Codex payload (reads the tool call on stdin)',
|
|
68
|
+
category: 'Development',
|
|
69
|
+
reference: ['<pretool|posttool>', 'automation', ['none']],
|
|
70
|
+
usage: {
|
|
71
|
+
examples: [
|
|
72
|
+
{ arguments: 'pretool', note: 'a Codex PreToolUse payload on stdin' },
|
|
73
|
+
{ arguments: 'posttool', note: 'a Codex PostToolUse payload on stdin' },
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
// The live-source fallback `scripts/hooks/run-hook.sh` derives from the `codex-hook-adapter`
|
|
77
|
+
// bundle name. **No `tsx_arguments`**, the same as `pretool:guard`
|
|
78
|
+
// above: it runs before every guarded Codex call.
|
|
79
|
+
},
|
|
80
|
+
}
|
|
81
|
+
/* eslint-enable @typescript-eslint/naming-convention */
|
|
82
|
+
|
|
83
|
+
export { AGENT_HOOK_COMMANDS }
|