@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
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ENV_FILE_NAME,
|
|
3
|
-
issue_number_shape,
|
|
4
|
-
lane_paths
|
|
5
|
-
} from "./chunk-APUO6U4J.js";
|
|
6
|
-
|
|
7
|
-
// scripts/josh/josh-environment-file.ts
|
|
8
|
-
function load_environment_file() {
|
|
9
|
-
try {
|
|
10
|
-
process.loadEnvFile(ENV_FILE_NAME);
|
|
11
|
-
} catch {
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
var josh_environment_file = {
|
|
15
|
-
load_environment_file
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
// scripts/lane/lane-child-marker.ts
|
|
19
|
-
var KEY = "JOSH_LANE_CHILD";
|
|
20
|
-
var CACHE_TTL_KEY = "CLAUDE_CODE_PROMPT_CACHE_TTL";
|
|
21
|
-
var CACHE_TTL = "5m";
|
|
22
|
-
function environment_for(issue) {
|
|
23
|
-
issue_number_shape.require_issue_number(issue);
|
|
24
|
-
return { [KEY]: issue, [CACHE_TTL_KEY]: CACHE_TTL };
|
|
25
|
-
}
|
|
26
|
-
function marked_issue(source = process.env) {
|
|
27
|
-
const value = source[KEY];
|
|
28
|
-
if (value === void 0) return void 0;
|
|
29
|
-
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(value) ? value : void 0;
|
|
30
|
-
}
|
|
31
|
-
function is_child_of(directory, source = process.env) {
|
|
32
|
-
const marked = marked_issue(source);
|
|
33
|
-
return marked !== void 0 && marked === lane_paths.lane_issue_of(directory, { ...source });
|
|
34
|
-
}
|
|
35
|
-
var lane_child_marker = {
|
|
36
|
-
KEY,
|
|
37
|
-
env_for: environment_for,
|
|
38
|
-
is_child_of,
|
|
39
|
-
marked_issue
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export {
|
|
43
|
-
josh_environment_file,
|
|
44
|
-
lane_child_marker
|
|
45
|
-
};
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
// scripts/init/distributed-paths.ts
|
|
2
|
-
var KIT_PACKAGE_PATH_PREFIX = "node_modules/@joshuafolkken/kit/";
|
|
3
|
-
var PROMPTS_PACKAGE_PREFIX = `${KIT_PACKAGE_PATH_PREFIX}prompts/`;
|
|
4
|
-
var ESLINT_PACKAGE_PREFIX = `${KIT_PACKAGE_PATH_PREFIX}eslint/`;
|
|
5
|
-
var GITHUB_REPO_BLOB_BASE = "https://github.com/joshuafolkken/kit/blob/main/";
|
|
6
|
-
var GITHUB_REPO_TREE_BASE = "https://github.com/joshuafolkken/kit/tree/main/";
|
|
7
|
-
var CLAUDE_MD_IMPORT_LINE = "@node_modules/@joshuafolkken/kit/dist/CLAUDE.md";
|
|
8
|
-
var OLD_CLAUDE_MD_BOOTSTRAP = "> Fresh checkout: if kit is not installed, run `pnpm install` first, then reread this file before doing any other work.";
|
|
9
|
-
var CLAUDE_MD_BOOTSTRAP = '> Fresh checkout: before `pnpm install`, run `pnpm config get "@joshuafolkken:registry"` from the project root to check the effective registry, including user-level settings. If it points to GitHub Packages, [set up authentication](https://github.com/joshuafolkken/kit/blob/main/docs/authentication.md#1-get-a-token-from-the-gh-cli) first. Then run `pnpm install` and reread this file before doing any other work.';
|
|
10
|
-
function transform_prompt_paths(content) {
|
|
11
|
-
return content.replaceAll(
|
|
12
|
-
/`prompts\/([^`*]+)`/gu,
|
|
13
|
-
(_match, prompt_path) => `\`${PROMPTS_PACKAGE_PREFIX}${prompt_path}\``
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
function transform_eslint_paths(content) {
|
|
17
|
-
return content.replaceAll(
|
|
18
|
-
/`eslint\/([^`*]+)`/gu,
|
|
19
|
-
(_match, eslint_path) => `\`${ESLINT_PACKAGE_PREFIX}${eslint_path}\``
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
function transform_test_file_paths(content) {
|
|
23
|
-
return content.replaceAll(
|
|
24
|
-
/`([^`*]+\.(?:test|spec)\.ts)`/gu,
|
|
25
|
-
(_match, test_path) => `\`${GITHUB_REPO_BLOB_BASE}${test_path}\``
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
function github_url_base(reference_path) {
|
|
29
|
-
return reference_path.endsWith("/") ? GITHUB_REPO_TREE_BASE : GITHUB_REPO_BLOB_BASE;
|
|
30
|
-
}
|
|
31
|
-
function transform_documentation_paths(content) {
|
|
32
|
-
return content.replaceAll(
|
|
33
|
-
/`(docs\/[^`*]*)`/gu,
|
|
34
|
-
(_match, documentation_path) => `\`${github_url_base(documentation_path)}${documentation_path}\``
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
function transform_distributed_paths(content) {
|
|
38
|
-
const with_prompts = transform_prompt_paths(content);
|
|
39
|
-
const with_eslint = transform_eslint_paths(with_prompts);
|
|
40
|
-
const with_tests = transform_test_file_paths(with_eslint);
|
|
41
|
-
return transform_documentation_paths(with_tests);
|
|
42
|
-
}
|
|
43
|
-
function ensure_claude_md_import(existing) {
|
|
44
|
-
if (existing === void 0) return `${CLAUDE_MD_BOOTSTRAP}
|
|
45
|
-
|
|
46
|
-
${CLAUDE_MD_IMPORT_LINE}
|
|
47
|
-
`;
|
|
48
|
-
const updated = existing.replace(OLD_CLAUDE_MD_BOOTSTRAP, () => CLAUDE_MD_BOOTSTRAP);
|
|
49
|
-
if (updated.includes(CLAUDE_MD_IMPORT_LINE)) {
|
|
50
|
-
if (updated.includes(CLAUDE_MD_BOOTSTRAP)) return updated;
|
|
51
|
-
return `${CLAUDE_MD_BOOTSTRAP}
|
|
52
|
-
|
|
53
|
-
${updated}`;
|
|
54
|
-
}
|
|
55
|
-
return `${CLAUDE_MD_BOOTSTRAP}
|
|
56
|
-
|
|
57
|
-
${CLAUDE_MD_IMPORT_LINE}
|
|
58
|
-
|
|
59
|
-
${updated}`;
|
|
60
|
-
}
|
|
61
|
-
var FULL_CLAUDE_MD_LINES = /* @__PURE__ */ new Set([
|
|
62
|
-
CLAUDE_MD_BOOTSTRAP,
|
|
63
|
-
OLD_CLAUDE_MD_BOOTSTRAP,
|
|
64
|
-
CLAUDE_MD_IMPORT_LINE
|
|
65
|
-
]);
|
|
66
|
-
function remove_claude_md_import(content) {
|
|
67
|
-
const lines = content.split("\n");
|
|
68
|
-
return lines.filter((line, index) => {
|
|
69
|
-
if (FULL_CLAUDE_MD_LINES.has(line)) return false;
|
|
70
|
-
return line !== "" || !FULL_CLAUDE_MD_LINES.has(lines[index - 1] ?? "");
|
|
71
|
-
}).join("\n");
|
|
72
|
-
}
|
|
73
|
-
var distributed_paths = {
|
|
74
|
-
transform_prompt_paths,
|
|
75
|
-
transform_distributed_paths,
|
|
76
|
-
ensure_claude_md_import,
|
|
77
|
-
remove_claude_md_import,
|
|
78
|
-
CLAUDE_MD_IMPORT_LINE
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export {
|
|
82
|
-
distributed_paths
|
|
83
|
-
};
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
investigation_reads
|
|
3
|
-
} from "./chunk-PTICX4OL.js";
|
|
4
|
-
import {
|
|
5
|
-
lane_guard_policy
|
|
6
|
-
} from "./chunk-JP45SOCJ.js";
|
|
7
|
-
import {
|
|
8
|
-
hook_decision
|
|
9
|
-
} from "./chunk-6TS2JD6D.js";
|
|
10
|
-
import {
|
|
11
|
-
time_spans
|
|
12
|
-
} from "./chunk-TNUMY6NL.js";
|
|
13
|
-
import {
|
|
14
|
-
json_value
|
|
15
|
-
} from "./chunk-APUO6U4J.js";
|
|
16
|
-
|
|
17
|
-
// scripts/delegation/duplicate-read-guard.ts
|
|
18
|
-
import { statSync } from "node:fs";
|
|
19
|
-
import { text } from "node:stream/consumers";
|
|
20
|
-
import { fileURLToPath } from "node:url";
|
|
21
|
-
var SWITCH_ENV_KEY = "JOSH_DUPLICATE_READ_GUARD";
|
|
22
|
-
var LANE_GUARD_ID = "duplicate-read";
|
|
23
|
-
var STAMP_PREFIX = "josh-duplicate-read-guard-";
|
|
24
|
-
var NOTICE_STAMP_PREFIX = "josh-duplicate-read-notice-";
|
|
25
|
-
var READ_TOOL = "Read";
|
|
26
|
-
var GLOB_CHARACTERS = /[*?]/u;
|
|
27
|
-
var REASON = `\u26D4 duplicate read: this file was already read in this session and has not changed since (its mtime predates that read), so reading it again returns nothing new. Scroll up to the earlier result instead of re-reading it. A read with a new offset/limit, or of a file that has since changed, is allowed; set \`JOSH_DUPLICATE_READ_GUARD=off\` to disable this guard.`;
|
|
28
|
-
var NOTICE = `\u26A0 duplicate read: this file was already read in this session and has not changed since, so re-reading it returns nothing new \u2014 scroll up to the earlier result instead of re-reading it. Set \`JOSH_DUPLICATE_READ_GUARD=off\` to silence this.`;
|
|
29
|
-
function is_paginated(input) {
|
|
30
|
-
return input["offset"] !== void 0 || input["limit"] !== void 0;
|
|
31
|
-
}
|
|
32
|
-
function names_one_file(file_path) {
|
|
33
|
-
return typeof file_path === "string" && file_path !== "" && !GLOB_CHARACTERS.test(file_path);
|
|
34
|
-
}
|
|
35
|
-
function read_target(call) {
|
|
36
|
-
if (call.name !== READ_TOOL || !json_value.is_record(call.input)) return void 0;
|
|
37
|
-
const { input } = call;
|
|
38
|
-
if (is_paginated(input) || !names_one_file(input["file_path"])) return void 0;
|
|
39
|
-
return investigation_reads.resolved(input["file_path"]);
|
|
40
|
-
}
|
|
41
|
-
function is_refusable_call(call) {
|
|
42
|
-
return read_target(call) !== void 0;
|
|
43
|
-
}
|
|
44
|
-
function is_successful_read(span) {
|
|
45
|
-
const is_read = investigation_reads.READ_TOOLS.has(span.label);
|
|
46
|
-
return is_read && span.outcome !== time_spans.FAILED_OUTCOME;
|
|
47
|
-
}
|
|
48
|
-
function reads_target(span, target) {
|
|
49
|
-
return span.targets.some((one) => investigation_reads.resolved(one) === target);
|
|
50
|
-
}
|
|
51
|
-
function last_read_ms(spans, target) {
|
|
52
|
-
const times = spans.filter((span) => is_successful_read(span) && reads_target(span, target)).map((span) => span.ended_ms);
|
|
53
|
-
return times.length === 0 ? hook_decision.NEVER_MS : Math.max(...times);
|
|
54
|
-
}
|
|
55
|
-
function file_mtime_ms(target) {
|
|
56
|
-
try {
|
|
57
|
-
return statSync(target).mtimeMs;
|
|
58
|
-
} catch {
|
|
59
|
-
return void 0;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function read_window(tail, target) {
|
|
63
|
-
const { spans, started_ms } = time_spans.parse_timeline(tail);
|
|
64
|
-
return { last_ms: last_read_ms(spans, target), window_start_ms: started_ms };
|
|
65
|
-
}
|
|
66
|
-
function is_unchanged_reread(last_ms, mtime) {
|
|
67
|
-
if (mtime === void 0 || last_ms === hook_decision.NEVER_MS) return false;
|
|
68
|
-
return mtime < last_ms;
|
|
69
|
-
}
|
|
70
|
-
function is_rearmed(window, fired_at_ms) {
|
|
71
|
-
if (fired_at_ms === hook_decision.NEVER_MS || fired_at_ms < window.window_start_ms) return true;
|
|
72
|
-
return window.last_ms > fired_at_ms;
|
|
73
|
-
}
|
|
74
|
-
function is_redundant_reread(tail, call, fired_at_ms) {
|
|
75
|
-
const target = read_target(call);
|
|
76
|
-
if (target === void 0) return false;
|
|
77
|
-
const window = read_window(tail, target);
|
|
78
|
-
if (!is_unchanged_reread(window.last_ms, file_mtime_ms(target))) return false;
|
|
79
|
-
return is_rearmed(window, fired_at_ms);
|
|
80
|
-
}
|
|
81
|
-
function duplicate_mode() {
|
|
82
|
-
return lane_guard_policy.mode_here(LANE_GUARD_ID);
|
|
83
|
-
}
|
|
84
|
-
function is_candidate(call) {
|
|
85
|
-
return is_refusable_call(call) && duplicate_mode() !== "off";
|
|
86
|
-
}
|
|
87
|
-
function should_block_here(tail, call, refused_at_ms) {
|
|
88
|
-
if (duplicate_mode() !== "refuse") return false;
|
|
89
|
-
return is_redundant_reread(tail, call, refused_at_ms);
|
|
90
|
-
}
|
|
91
|
-
function should_notify_here(tail, call, notified_at_ms) {
|
|
92
|
-
if (duplicate_mode() !== "notice") return false;
|
|
93
|
-
return is_redundant_reread(tail, call, notified_at_ms);
|
|
94
|
-
}
|
|
95
|
-
var GUARD = hook_decision.create_transcript_guard({
|
|
96
|
-
prefix: STAMP_PREFIX,
|
|
97
|
-
switch_key: SWITCH_ENV_KEY,
|
|
98
|
-
is_candidate,
|
|
99
|
-
should_block: should_block_here,
|
|
100
|
-
reason: REASON,
|
|
101
|
-
notify: {
|
|
102
|
-
prefix: NOTICE_STAMP_PREFIX,
|
|
103
|
-
should_notify: should_notify_here,
|
|
104
|
-
text: () => NOTICE
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
var duplicate_read_refusal = GUARD.refusal;
|
|
108
|
-
var duplicate_read_outcome = GUARD.outcome;
|
|
109
|
-
var { is_enabled, refusal_path } = GUARD;
|
|
110
|
-
var notice_refusal_path = hook_decision.create_refusal_stamp(NOTICE_STAMP_PREFIX).path;
|
|
111
|
-
var { deny_envelope, DISABLED_VALUES } = hook_decision;
|
|
112
|
-
var duplicate_reads = {
|
|
113
|
-
REASON,
|
|
114
|
-
NOTICE
|
|
115
|
-
};
|
|
116
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
117
|
-
if (process.stdin.isTTY) hook_decision.report_no_payload("duplicate-read:guard");
|
|
118
|
-
else hook_decision.write_outcome(await text(process.stdin), duplicate_read_outcome);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export {
|
|
122
|
-
SWITCH_ENV_KEY,
|
|
123
|
-
duplicate_read_refusal,
|
|
124
|
-
duplicate_read_outcome,
|
|
125
|
-
is_enabled,
|
|
126
|
-
refusal_path,
|
|
127
|
-
notice_refusal_path,
|
|
128
|
-
deny_envelope,
|
|
129
|
-
DISABLED_VALUES,
|
|
130
|
-
duplicate_reads
|
|
131
|
-
};
|
|
@@ -1,358 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
hook_decision
|
|
3
|
-
} from "./chunk-6TS2JD6D.js";
|
|
4
|
-
import {
|
|
5
|
-
cost_blocks,
|
|
6
|
-
time_batch_guard,
|
|
7
|
-
time_bundle_call,
|
|
8
|
-
time_shell,
|
|
9
|
-
time_spans
|
|
10
|
-
} from "./chunk-TNUMY6NL.js";
|
|
11
|
-
import {
|
|
12
|
-
cost_transcript
|
|
13
|
-
} from "./chunk-APUO6U4J.js";
|
|
14
|
-
|
|
15
|
-
// scripts/delegation/investigation-reads.ts
|
|
16
|
-
import path2 from "node:path";
|
|
17
|
-
|
|
18
|
-
// scripts/document/capped-print-part.ts
|
|
19
|
-
import path from "node:path";
|
|
20
|
-
var DIRECTORY_PREFIX = "josh-capped-print-";
|
|
21
|
-
var PART_PREFIX = "part-";
|
|
22
|
-
var PART_SUFFIX = ".md";
|
|
23
|
-
var PART_PATTERN = /^part-[1-9]\d*\.md$/u;
|
|
24
|
-
function part_name(index) {
|
|
25
|
-
return `${PART_PREFIX}${String(index + 1)}${PART_SUFFIX}`;
|
|
26
|
-
}
|
|
27
|
-
function is_part_file(absolute) {
|
|
28
|
-
const parent = path.basename(path.dirname(absolute));
|
|
29
|
-
return parent.startsWith(DIRECTORY_PREFIX) && PART_PATTERN.test(path.basename(absolute));
|
|
30
|
-
}
|
|
31
|
-
var capped_print_part = { DIRECTORY_PREFIX, part_name, is_part_file };
|
|
32
|
-
|
|
33
|
-
// scripts/delegation/delegation-policy.ts
|
|
34
|
-
var DELEGATE_VERDICT = "delegate";
|
|
35
|
-
var KEEP_VERDICT = "keep";
|
|
36
|
-
var INVESTIGATION_FILE_THRESHOLD = 3;
|
|
37
|
-
var INVESTIGATION_SEARCH_TURN_THRESHOLD = 3;
|
|
38
|
-
var DELEGATABLE_STEPS = [
|
|
39
|
-
{
|
|
40
|
-
name: "gate-fix",
|
|
41
|
-
does: "apply the fixes the verification gate already named \u2014 a lint rule, a type error, a spelling the dictionary rejects",
|
|
42
|
-
verifier: "`pnpm josh gate` is re-run; a wrong fix fails it again, and the failure names the file"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: "epic-child",
|
|
46
|
-
// One row, two entry points: an epic's child and one named issue of a `backlogrun` are the same
|
|
47
|
-
// unit — same brief, same summary, same verifier. A second row for the batch would be the clone
|
|
48
|
-
// `CLAUDE.md` prohibits.
|
|
49
|
-
does: "run one child of a batch end to end in an isolated unit \u2014 an epic's child or one named issue of a `backlogrun` alike \u2014 plan, verification gate, PR, merge \u2014 and return only its summary to the parent loop",
|
|
50
|
-
verifier: "the parent reads the child's state from GitHub with `pnpm josh issue:state`, not from the summary; a child reported done but not merged is still open, which is the failure showing rather than a run continuing, and its own gate, `/code-review` and CI ran inside the unit before `followup` would touch the PR"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
name: "followup-filing",
|
|
54
|
-
// The late-run follow-up filing chain — `issue:file` (which scouts, lints, labels and runs
|
|
55
|
-
// epic:bundle itself) → epic --add — is a dependency chain `batch:guard`
|
|
56
|
-
// correctly keeps one call per step, and what makes it expensive is the ~340k context it runs in
|
|
57
|
-
// at the tail of a run, not the step count. A fresh unit runs the same
|
|
58
|
-
// chain at a small context, and the review round cap already composed the finding text, so what
|
|
59
|
-
// the unit is handed is mechanical: run the commands and act on their deterministic answers. This
|
|
60
|
-
// is not `batch:guard`'s business — delegation only moves the chain to a cheaper context.
|
|
61
|
-
does: "run the late-run follow-up filing chain in an isolated unit \u2014 issue:file (scout, lint, labels, epic:bundle), then epic --add \u2014 given the finding text the parent already composed, and return the new Issue number and the epic:bundle answer",
|
|
62
|
-
verifier: "the parent reads the filed Issue from GitHub with `pnpm josh issue:state <new>`, not the unit's summary; a follow-up reported filed but not created is still absent, the way `epic-child`'s reported-done-but-not-merged child is still open. The finding text came from the parent and `issue:file`'s steps are deterministic, so the unit's work is the mechanical execution `issue:state` confirms"
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
name: "implementation-unit",
|
|
66
|
-
// The Step 0 change list already decided *what* to change — that design stays in the main line,
|
|
67
|
-
// which is why `design` is rejected below. What is delegated is the *writing* of one unit of that
|
|
68
|
-
// list, and only a unit whose files are disjoint from every other dispatched unit: two subagents
|
|
69
|
-
// editing one file in parallel race on it. `pnpm josh fanout` confirms that disjointness
|
|
70
|
-
// mechanically, so the split is read off the file sets rather than judged.
|
|
71
|
-
does: "implement one file-disjoint unit of the Step 0 change list in an isolated subagent \u2014 the files it edits shared with no other dispatched unit, confirmed by `pnpm josh fanout` \u2014 and return the edited files, never a summary standing in for the diff; the main line keeps integration and the verification gate. Units that share a file, or an Issue that will not split, stay serial",
|
|
72
|
-
verifier: "the parent runs the whole integrated change through `pnpm josh gate` and a `/code-review` subagent it would run anyway \u2014 a unit's mistake fails the same gate and review a serial edit passes through, so delegating writes nothing the backstop does not already catch, and the `pnpm josh fanout` disjointness removes the one failure parallelism adds, two units colliding on a file"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
name: "survey",
|
|
76
|
-
does: "read across many files and report where something appears \u2014 every reference to a symbol, which documents carry a marker",
|
|
77
|
-
verifier: "the reported locations are checked directly; a fabricated or missed location does not survive one `grep` of what it claimed"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
name: "investigation",
|
|
81
|
-
// Not `survey`: that row reports *where* something appears and is checked by one `grep`, while
|
|
82
|
-
// this one reports *how the subject works* and is checked by opening the lines it cited. The two
|
|
83
|
-
// verifiers differ, so widening `survey` would put both in one field and lose the boundary below.
|
|
84
|
-
// **No ordinal.** `${N}rd` would print `1rd` for any other threshold, past a test that only looks
|
|
85
|
-
// for the numeral, so the count is phrased as a plain "N or more".
|
|
86
|
-
does: `read the Issue's subject to find out how it currently works \u2014 once ${String(INVESTIGATION_FILE_THRESHOLD)} or more files the run will not edit have to be read, or ${String(INVESTIGATION_SEARCH_TURN_THRESHOLD)} or more search turns run without an edit \u2014 and return the conclusion plus the \`file:line\` citations that support it, never the file text, which would put the cost back where it was. A throwaway probe script is written, run and deleted inside the unit, which returns its output alone`,
|
|
87
|
-
verifier: "the parent opens the cited lines; a conclusion those lines do not support fails there, and reading a handful of cited regions costs far less than redoing the reading. The unit reports what the code does and never what to change \u2014 deciding that is `diagnosis`, which stays kept, so a unit returning a root cause would be delegating the rejected row under this name"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
name: "lane-failure-investigation",
|
|
91
|
-
// The `backlogrun` parent's counterpart of `investigation`. The parent
|
|
92
|
-
// orchestrates and never implements, yet it read a failed lane's logs, records and sources in its
|
|
93
|
-
// own context — about 150 grep / cat / sed calls on 2026-10-02 — and every later request of the
|
|
94
|
-
// batch re-read them. The verifier is `investigation`'s, and so is the boundary: the unit reports
|
|
95
|
-
// what happened, and what the parent does about it (park, re-dispatch, file) stays its own call.
|
|
96
|
-
does: "find out why a lane's child stopped, failed or conflicted \u2014 its output log, run records, PR checks and the files they name \u2014 and return the conclusion plus the `file:line` or log-line citations that support it, never the text read, so the batch parent's context stays the size its orchestration needs",
|
|
97
|
-
verifier: "the parent opens the cited lines and re-reads the child with `pnpm josh issue:state`; a conclusion those do not support fails there. The unit reports what happened and never what to do \u2014 parking, re-dispatching or filing stays with the parent, so a wrong account is caught before it is acted on"
|
|
98
|
-
}
|
|
99
|
-
];
|
|
100
|
-
var REJECTED_STEPS = [
|
|
101
|
-
{
|
|
102
|
-
name: "notify-body",
|
|
103
|
-
because: "no verifier. A notification with a wrong body is sent and read as though it were right; nothing in the run disagrees with it afterwards"
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
name: "issue-comment",
|
|
107
|
-
because: "no verifier. A decision log or completion comment that says the wrong thing is the record, so there is nothing left to check it against"
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
name: "status-read",
|
|
111
|
-
because: "a misread routes the run to the wrong child, and no later step disagrees. Running the status command is already cheap; what is expensive is acting on it, which is not this step"
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: "diagnosis",
|
|
115
|
-
because: "a wrong root cause produces a fix that passes the gate and leaves the defect"
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
name: "design",
|
|
119
|
-
because: "the cost of a wrong design is paid by every step after it"
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
name: "split-assessment",
|
|
123
|
-
because: "a missed split widens one Issue into a batch nobody authorized"
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
name: "review",
|
|
127
|
-
because: "the review is the last thing between a defect and a merge; a cheaper one finds less"
|
|
128
|
-
}
|
|
129
|
-
];
|
|
130
|
-
function find_step(name) {
|
|
131
|
-
return DELEGATABLE_STEPS.find((step) => step.name === name.trim());
|
|
132
|
-
}
|
|
133
|
-
function verdict_for(name) {
|
|
134
|
-
return find_step(name) === void 0 ? KEEP_VERDICT : DELEGATE_VERDICT;
|
|
135
|
-
}
|
|
136
|
-
function rejection_for(name) {
|
|
137
|
-
return REJECTED_STEPS.find((step) => step.name === name.trim());
|
|
138
|
-
}
|
|
139
|
-
function reason_for(name) {
|
|
140
|
-
const step = find_step(name);
|
|
141
|
-
if (step !== void 0) return `delegatable: ${step.verifier}`;
|
|
142
|
-
const rejected = rejection_for(name);
|
|
143
|
-
if (rejected !== void 0) return `kept deliberately: ${rejected.because}`;
|
|
144
|
-
return "kept by default: not on the delegatable list, and the list is the whole of it";
|
|
145
|
-
}
|
|
146
|
-
var delegation_policy = {
|
|
147
|
-
DELEGATE_VERDICT,
|
|
148
|
-
INVESTIGATION_FILE_THRESHOLD,
|
|
149
|
-
INVESTIGATION_SEARCH_TURN_THRESHOLD,
|
|
150
|
-
KEEP_VERDICT,
|
|
151
|
-
DELEGATABLE_STEPS,
|
|
152
|
-
REJECTED_STEPS,
|
|
153
|
-
find_step,
|
|
154
|
-
verdict_for,
|
|
155
|
-
reason_for
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
// scripts/delegation/investigation-reads.ts
|
|
159
|
-
var READ_TOOLS = /* @__PURE__ */ new Set(["Read"]);
|
|
160
|
-
var DELEGATION_TOOLS = /* @__PURE__ */ new Set(["Agent", "Task"]);
|
|
161
|
-
var CONTENT_READ_COMMANDS = [
|
|
162
|
-
"bat",
|
|
163
|
-
"cat",
|
|
164
|
-
"head",
|
|
165
|
-
"less",
|
|
166
|
-
"more",
|
|
167
|
-
"nl",
|
|
168
|
-
"sed",
|
|
169
|
-
"tail"
|
|
170
|
-
];
|
|
171
|
-
var CONTENT_READ_LABELS = new Set(
|
|
172
|
-
CONTENT_READ_COMMANDS.map((command) => time_shell.bash_label(command))
|
|
173
|
-
);
|
|
174
|
-
var SEARCH_COMMANDS = ["fd", "find", "grep", "rg"];
|
|
175
|
-
var SEARCH_LABELS = new Set(
|
|
176
|
-
SEARCH_COMMANDS.map((command) => time_shell.bash_label(command))
|
|
177
|
-
);
|
|
178
|
-
var INVESTIGATOR_AGENT = "investigator";
|
|
179
|
-
var REASON = `\u26D4 investigation: ${String(delegation_policy.INVESTIGATION_FILE_THRESHOLD)} files read and not edited, or ${String(delegation_policy.INVESTIGATION_SEARCH_TURN_THRESHOLD)} search turns, since the last delegated unit. Run \`pnpm josh delegate investigation\`, then dispatch the \`${INVESTIGATOR_AGENT}\` agent (\`kit:${INVESTIGATOR_AGENT}\` in a consumer); it returns \`file:line\` citations, never the file text. Keep main-line reads to files you will edit; every read-only search turn counts. \`.claude/skills/workflow-commands/delegation.md\``;
|
|
180
|
-
var INSTRUCTION_PATHS = ["prompts", ".claude/skills"];
|
|
181
|
-
var INSTRUCTION_FILES = /* @__PURE__ */ new Set(["CLAUDE.md", "AGENTS.md", "GEMINI.md"]);
|
|
182
|
-
var REPOSITORY_ROOT = process.cwd();
|
|
183
|
-
function resolved(target) {
|
|
184
|
-
return path2.resolve(REPOSITORY_ROOT, target);
|
|
185
|
-
}
|
|
186
|
-
function repository_relative(absolute) {
|
|
187
|
-
return path2.relative(REPOSITORY_ROOT, absolute);
|
|
188
|
-
}
|
|
189
|
-
function is_instruction_document(target) {
|
|
190
|
-
const relative = repository_relative(resolved(target));
|
|
191
|
-
const segments = relative.split(path2.sep);
|
|
192
|
-
return INSTRUCTION_FILES.has(segments.at(-1) ?? "") || INSTRUCTION_PATHS.some((prefix) => relative.startsWith(`${prefix}${path2.sep}`));
|
|
193
|
-
}
|
|
194
|
-
var SESSION_TEMP_SEGMENT = /^claude-\d+$/u;
|
|
195
|
-
var SESSION_STATE_SEGMENTS = cost_transcript.TRANSCRIPT_ROOT.split(path2.sep);
|
|
196
|
-
var HARNESS_OUTPUT_DIRECTORY = "tasks";
|
|
197
|
-
var HARNESS_OUTPUT_EXTENSION = ".output";
|
|
198
|
-
var FILE_SEGMENT_INDEX = -1;
|
|
199
|
-
var PARENT_SEGMENT_INDEX = -2;
|
|
200
|
-
function has_state_root(segments, index) {
|
|
201
|
-
return SESSION_STATE_SEGMENTS.every((segment, offset) => segments[index + offset] === segment);
|
|
202
|
-
}
|
|
203
|
-
function is_harness_output(segments) {
|
|
204
|
-
return segments.some((segment) => SESSION_TEMP_SEGMENT.test(segment)) && segments.at(PARENT_SEGMENT_INDEX) === HARNESS_OUTPUT_DIRECTORY && (segments.at(FILE_SEGMENT_INDEX) ?? "").endsWith(HARNESS_OUTPUT_EXTENSION);
|
|
205
|
-
}
|
|
206
|
-
function is_outside_repository(absolute) {
|
|
207
|
-
return repository_relative(absolute).startsWith("..");
|
|
208
|
-
}
|
|
209
|
-
function is_session_artifact(target) {
|
|
210
|
-
const absolute = resolved(target);
|
|
211
|
-
const segments = absolute.split(path2.sep);
|
|
212
|
-
if (!is_outside_repository(absolute)) return false;
|
|
213
|
-
return segments.some((_segment, index) => has_state_root(segments, index)) || is_harness_output(segments) || capped_print_part.is_part_file(absolute);
|
|
214
|
-
}
|
|
215
|
-
function is_subject_file(target) {
|
|
216
|
-
return !is_instruction_document(target) && !is_session_artifact(target);
|
|
217
|
-
}
|
|
218
|
-
function is_nameable_file(target) {
|
|
219
|
-
return !target.includes("*") && !target.includes("?");
|
|
220
|
-
}
|
|
221
|
-
function is_content_read(label) {
|
|
222
|
-
return READ_TOOLS.has(label) || CONTENT_READ_LABELS.has(label);
|
|
223
|
-
}
|
|
224
|
-
function subject_targets(targets) {
|
|
225
|
-
return targets.filter((target) => is_nameable_file(target) && is_subject_file(target)).map((target) => resolved(target));
|
|
226
|
-
}
|
|
227
|
-
function call_targets(call) {
|
|
228
|
-
return subject_targets(time_bundle_call.call_facts(call.name, call.input).targets);
|
|
229
|
-
}
|
|
230
|
-
function delegation_instant(span) {
|
|
231
|
-
return span === void 0 ? hook_decision.NEVER_MS : span.ended_ms;
|
|
232
|
-
}
|
|
233
|
-
function is_failed_outcome(span) {
|
|
234
|
-
return span.outcome === time_spans.FAILED_OUTCOME;
|
|
235
|
-
}
|
|
236
|
-
function edited_files(spans) {
|
|
237
|
-
const written = spans.filter((span) => !is_failed_outcome(span)).flatMap((span) => subject_targets(span.writes));
|
|
238
|
-
return new Set(written);
|
|
239
|
-
}
|
|
240
|
-
function add_all(pending, targets, at_ms) {
|
|
241
|
-
for (const target of targets) if (!pending.has(target)) pending.set(target, at_ms);
|
|
242
|
-
}
|
|
243
|
-
function is_read_only_search(span) {
|
|
244
|
-
return SEARCH_LABELS.has(span.label) && span.is_bundleable && !span.may_write;
|
|
245
|
-
}
|
|
246
|
-
function search_turn_key(searches, span) {
|
|
247
|
-
if (span.message_id !== time_spans.NO_MESSAGE_ID) return span.message_id;
|
|
248
|
-
return `${time_spans.NO_MESSAGE_ID}#${String(searches.size)}`;
|
|
249
|
-
}
|
|
250
|
-
function apply_search(searches, span) {
|
|
251
|
-
if (span.is_writing) {
|
|
252
|
-
searches.clear();
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
const turn = search_turn_key(searches, span);
|
|
256
|
-
if (is_read_only_search(span) && !searches.has(turn)) searches.set(turn, span.ended_ms);
|
|
257
|
-
}
|
|
258
|
-
function apply_span(accumulation, span, edited) {
|
|
259
|
-
if (DELEGATION_TOOLS.has(span.label)) {
|
|
260
|
-
accumulation.pending.clear();
|
|
261
|
-
accumulation.searches.clear();
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
if (is_failed_outcome(span)) return;
|
|
265
|
-
apply_search(accumulation.searches, span);
|
|
266
|
-
if (!is_content_read(span.label)) return;
|
|
267
|
-
const fresh = subject_targets(span.targets).filter((target) => !edited.has(target));
|
|
268
|
-
add_all(accumulation.pending, fresh, span.ended_ms);
|
|
269
|
-
}
|
|
270
|
-
function last_delegation_ms(spans) {
|
|
271
|
-
return delegation_instant(spans.findLast((span) => DELEGATION_TOOLS.has(span.label)));
|
|
272
|
-
}
|
|
273
|
-
function pending_after(pending, since_ms) {
|
|
274
|
-
return [...pending.values()].filter((at_ms) => at_ms > since_ms).length;
|
|
275
|
-
}
|
|
276
|
-
function tally_of(text, since_ms = hook_decision.NEVER_MS) {
|
|
277
|
-
const { spans, started_ms } = time_spans.parse_timeline(text);
|
|
278
|
-
const edited = edited_files(spans);
|
|
279
|
-
const accumulation = { pending: /* @__PURE__ */ new Map(), searches: /* @__PURE__ */ new Map() };
|
|
280
|
-
for (const span of spans) apply_span(accumulation, span, edited);
|
|
281
|
-
return {
|
|
282
|
-
pending: [...accumulation.pending.keys()],
|
|
283
|
-
pending_since: pending_after(accumulation.pending, since_ms),
|
|
284
|
-
reset_ms: last_delegation_ms(spans),
|
|
285
|
-
window_start_ms: started_ms,
|
|
286
|
-
searches: accumulation.searches.size,
|
|
287
|
-
searches_since: pending_after(accumulation.searches, since_ms),
|
|
288
|
-
edited
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
function projected_count(pending, call, edited = /* @__PURE__ */ new Set()) {
|
|
292
|
-
return (/* @__PURE__ */ new Set([...pending, ...call_targets(call).filter((target) => !edited.has(target))])).size;
|
|
293
|
-
}
|
|
294
|
-
function is_at_threshold(pending_count) {
|
|
295
|
-
return pending_count + 1 >= delegation_policy.INVESTIGATION_FILE_THRESHOLD;
|
|
296
|
-
}
|
|
297
|
-
function is_at_search_threshold(search_count) {
|
|
298
|
-
return search_count + 1 >= delegation_policy.INVESTIGATION_SEARCH_TURN_THRESHOLD;
|
|
299
|
-
}
|
|
300
|
-
function has_cleared_the_disarm(tally, refused_at_ms) {
|
|
301
|
-
return tally.reset_ms > refused_at_ms || refused_at_ms < tally.window_start_ms;
|
|
302
|
-
}
|
|
303
|
-
function is_rearmed(tally, refused_at_ms) {
|
|
304
|
-
if (refused_at_ms === hook_decision.NEVER_MS || has_cleared_the_disarm(tally, refused_at_ms)) {
|
|
305
|
-
return true;
|
|
306
|
-
}
|
|
307
|
-
return is_at_threshold(tally.pending_since) || is_at_search_threshold(tally.searches_since);
|
|
308
|
-
}
|
|
309
|
-
function is_unit_transcript(transcript) {
|
|
310
|
-
return transcript.split(path2.sep).includes(cost_transcript.UNIT_DIRECTORY);
|
|
311
|
-
}
|
|
312
|
-
function is_unit_run(run) {
|
|
313
|
-
return run !== void 0 && is_unit_transcript(run.transcript);
|
|
314
|
-
}
|
|
315
|
-
function is_read_only_command(call, labels) {
|
|
316
|
-
if (call.name !== cost_blocks.BASH_TOOL) return false;
|
|
317
|
-
const label = time_shell.bash_label(time_shell.bash_command(call.input));
|
|
318
|
-
return labels.has(label) && time_batch_guard.is_read_only_call(call);
|
|
319
|
-
}
|
|
320
|
-
function is_search_call(call) {
|
|
321
|
-
return is_read_only_command(call, SEARCH_LABELS);
|
|
322
|
-
}
|
|
323
|
-
function is_refusable_call(call) {
|
|
324
|
-
if (is_search_call(call)) return true;
|
|
325
|
-
if (call_targets(call).length === 0) return false;
|
|
326
|
-
if (READ_TOOLS.has(call.name)) return true;
|
|
327
|
-
return is_read_only_command(call, CONTENT_READ_LABELS);
|
|
328
|
-
}
|
|
329
|
-
function is_growing_past_threshold(tally, call) {
|
|
330
|
-
if (is_search_call(call)) return is_at_search_threshold(tally.searches);
|
|
331
|
-
if (!is_at_threshold(tally.pending.length)) return false;
|
|
332
|
-
return projected_count(tally.pending, call, tally.edited) > tally.pending.length;
|
|
333
|
-
}
|
|
334
|
-
function should_block(text, call, refused_at_ms, run) {
|
|
335
|
-
if (!is_refusable_call(call) || is_unit_run(run)) return false;
|
|
336
|
-
const tally = tally_of(text, refused_at_ms);
|
|
337
|
-
return is_growing_past_threshold(tally, call) && is_rearmed(tally, refused_at_ms);
|
|
338
|
-
}
|
|
339
|
-
var investigation_reads = {
|
|
340
|
-
DELEGATION_TOOLS,
|
|
341
|
-
INVESTIGATOR_AGENT,
|
|
342
|
-
READ_TOOLS,
|
|
343
|
-
REASON,
|
|
344
|
-
is_at_threshold,
|
|
345
|
-
is_instruction_document,
|
|
346
|
-
is_rearmed,
|
|
347
|
-
is_refusable_call,
|
|
348
|
-
is_session_artifact,
|
|
349
|
-
is_subject_file,
|
|
350
|
-
projected_count,
|
|
351
|
-
resolved,
|
|
352
|
-
should_block,
|
|
353
|
-
tally_of
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
export {
|
|
357
|
-
investigation_reads
|
|
358
|
-
};
|