@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,5 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
|
-
import { fileURLToPath } from 'node:url'
|
|
3
1
|
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
2
|
import { run_cli_fault } from '#scripts/run/run-cli-fault'
|
|
5
3
|
import { run_halfrun_resume } from '#scripts/run/run-halfrun-resume'
|
|
@@ -7,7 +5,10 @@ import { run_label } from '#scripts/run/run-label'
|
|
|
7
5
|
import { run_preflight, type PreflightDecision } from '#scripts/run/run-preflight'
|
|
8
6
|
import { run_prrun_resume } from '#scripts/run/run-prrun-resume'
|
|
9
7
|
import { run_tidy_cli } from '#scripts/run/tidy/run-tidy-cli'
|
|
8
|
+
import { test_e2e_stamp } from '#scripts/test/test-e2e-stamp'
|
|
10
9
|
import { run_hold, type HoldRead, type RunHold } from './run-hold'
|
|
10
|
+
import { run_hold_adopt } from './run-hold-adopt'
|
|
11
|
+
import { run_stop_notify } from './run-stop-notify'
|
|
11
12
|
|
|
12
13
|
// `josh run:hold [<N>]` and `josh run:release [<N> | --force]` — the working-tree guard the typed
|
|
13
14
|
// entry points ask before they start.
|
|
@@ -37,7 +38,6 @@ import { run_hold, type HoldRead, type RunHold } from './run-hold'
|
|
|
37
38
|
|
|
38
39
|
const SUCCESS_EXIT_CODE = 0
|
|
39
40
|
const FAILURE_EXIT_CODE = 1
|
|
40
|
-
const ARGV_OFFSET = 2
|
|
41
41
|
const RELEASE_FLAG = '--release'
|
|
42
42
|
// What removes a record this run did not write. **Deliberate friction**: every release names the run
|
|
43
43
|
// it belongs to, and the one act that cannot — clearing a record somebody else left behind — is
|
|
@@ -49,10 +49,14 @@ const FULLRUN_FLAG = '--fullrun'
|
|
|
49
49
|
const HALFRUN_STOP_FLAG = '--halfrun-stop'
|
|
50
50
|
// A `prrun`'s stop before merge: its record keeps the commit it stopped on.
|
|
51
51
|
const PRRUN_STOP_FLAG = '--prrun-stop'
|
|
52
|
+
// A `needs-human-review` stop: marked as a `halfrun` stop is, with its own confirmation.
|
|
53
|
+
const HUMAN_REVIEW_STOP_FLAG = '--human-review-stop'
|
|
54
|
+
// A `new` run's hand-over of its unnumbered record to the Issue it filed (`run-hold-adopt.ts`).
|
|
55
|
+
const ADOPT_FLAG = '--adopt'
|
|
52
56
|
// The most a claim reads: the issue number and the one flag after it.
|
|
53
57
|
const MAX_CLAIM_ARGUMENTS = 2
|
|
54
58
|
const USAGE =
|
|
55
|
-
'Usage: josh run:hold [<issue-number> [--fullrun | --halfrun-stop | --prrun-stop]] | josh run:release [<issue-number> | --force]'
|
|
59
|
+
'Usage: josh run:hold [<issue-number> [--fullrun | --halfrun-stop | --human-review-stop | --prrun-stop]] | josh run:hold --adopt <issue-number> | josh run:release [<issue-number> | --force]'
|
|
56
60
|
|
|
57
61
|
const COMMAND = 'run:hold'
|
|
58
62
|
|
|
@@ -64,10 +68,16 @@ const NONE_VERDICT = 'none'
|
|
|
64
68
|
// The record is another run's, so nothing was removed. **It is not `none`**: a release that did not
|
|
65
69
|
// happen must never read to a script as a tree it has just freed.
|
|
66
70
|
const HELD_VERDICT = 'held'
|
|
71
|
+
// A stop before commit asked on a tree `josh test:e2e` has not answered green on: nothing was marked.
|
|
72
|
+
const E2E_OWED_VERDICT = 'e2e-owed'
|
|
67
73
|
|
|
68
74
|
const FORCE_RELEASE_KIND = 'force-release'
|
|
69
75
|
const HALFRUN_STOP_KIND = 'halfrun-stop'
|
|
76
|
+
const HUMAN_REVIEW_STOP_KIND = 'human-review-stop'
|
|
70
77
|
const PRRUN_STOP_KIND = 'prrun-stop'
|
|
78
|
+
const ADOPT_KIND = 'adopt'
|
|
79
|
+
|
|
80
|
+
type StopKind = typeof HALFRUN_STOP_KIND | typeof HUMAN_REVIEW_STOP_KIND | typeof PRRUN_STOP_KIND
|
|
71
81
|
|
|
72
82
|
interface ClaimRequest {
|
|
73
83
|
kind: 'claim'
|
|
@@ -76,18 +86,25 @@ interface ClaimRequest {
|
|
|
76
86
|
}
|
|
77
87
|
|
|
78
88
|
interface StopRequest {
|
|
79
|
-
kind:
|
|
89
|
+
kind: StopKind
|
|
80
90
|
issue: string
|
|
81
91
|
}
|
|
82
92
|
|
|
83
93
|
type HoldRequest =
|
|
84
94
|
| ClaimRequest
|
|
85
95
|
| StopRequest
|
|
96
|
+
| { kind: typeof ADOPT_KIND; issue: string }
|
|
86
97
|
| { kind: 'release'; claimant: string }
|
|
87
98
|
| { kind: typeof FORCE_RELEASE_KIND }
|
|
88
99
|
|
|
100
|
+
const STOP_KINDS: ReadonlySet<string> = new Set([
|
|
101
|
+
HALFRUN_STOP_KIND,
|
|
102
|
+
HUMAN_REVIEW_STOP_KIND,
|
|
103
|
+
PRRUN_STOP_KIND,
|
|
104
|
+
])
|
|
105
|
+
|
|
89
106
|
function is_stop_request(request: HoldRequest): request is StopRequest {
|
|
90
|
-
return
|
|
107
|
+
return STOP_KINDS.has(request.kind)
|
|
91
108
|
}
|
|
92
109
|
|
|
93
110
|
const FORCE_RELEASE_REQUEST: HoldRequest = { kind: FORCE_RELEASE_KIND }
|
|
@@ -96,14 +113,14 @@ function release_request(claimant: string): HoldRequest {
|
|
|
96
113
|
return { kind: 'release', claimant }
|
|
97
114
|
}
|
|
98
115
|
|
|
99
|
-
const STOP_KIND_BY_FLAG: ReadonlyMap<string,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
116
|
+
const STOP_KIND_BY_FLAG: ReadonlyMap<string, StopKind> = new Map([
|
|
117
|
+
[HALFRUN_STOP_FLAG, HALFRUN_STOP_KIND],
|
|
118
|
+
[HUMAN_REVIEW_STOP_FLAG, HUMAN_REVIEW_STOP_KIND],
|
|
119
|
+
[PRRUN_STOP_FLAG, PRRUN_STOP_KIND],
|
|
120
|
+
])
|
|
104
121
|
|
|
105
|
-
// The flag after a numbered claim: absent, `--fullrun`, `--halfrun-stop
|
|
106
|
-
// else is a usage error.
|
|
122
|
+
// The flag after a numbered claim: absent, `--fullrun`, `--halfrun-stop`, `--human-review-stop` or
|
|
123
|
+
// `--prrun-stop`. Anything else is a usage error.
|
|
107
124
|
function numbered_claim(issue: string, flag: string | undefined): HoldRequest | undefined {
|
|
108
125
|
if (flag === undefined) return { kind: 'claim', issue }
|
|
109
126
|
|
|
@@ -142,9 +159,21 @@ function parse_release(argv: ReadonlyArray<string>): HoldRequest | undefined {
|
|
|
142
159
|
return argv.length > 1 ? undefined : parse_release_argument(first)
|
|
143
160
|
}
|
|
144
161
|
|
|
162
|
+
function parse_adopt(argv: ReadonlyArray<string>): HoldRequest | undefined {
|
|
163
|
+
const [issue] = argv
|
|
164
|
+
|
|
165
|
+
if (issue === undefined || argv.length > 1) return undefined
|
|
166
|
+
|
|
167
|
+
return issue_number_shape.ISSUE_NUMBER_PATTERN.test(issue)
|
|
168
|
+
? { kind: ADOPT_KIND, issue }
|
|
169
|
+
: undefined
|
|
170
|
+
}
|
|
171
|
+
|
|
145
172
|
function parse_request(argv: ReadonlyArray<string>): HoldRequest | undefined {
|
|
146
173
|
if (argv[0] === RELEASE_FLAG) return parse_release(argv.slice(1))
|
|
147
174
|
|
|
175
|
+
if (argv[0] === ADOPT_FLAG) return parse_adopt(argv.slice(1))
|
|
176
|
+
|
|
148
177
|
return parse_claim(argv)
|
|
149
178
|
}
|
|
150
179
|
|
|
@@ -339,25 +368,73 @@ function report_usage(): number {
|
|
|
339
368
|
return FAILURE_EXIT_CODE
|
|
340
369
|
}
|
|
341
370
|
|
|
371
|
+
const SEND_BY_KIND: Readonly<Record<StopKind, (target: string, issue: string) => Promise<void>>> = {
|
|
372
|
+
[HALFRUN_STOP_KIND]: run_stop_notify.send_halfrun,
|
|
373
|
+
[HUMAN_REVIEW_STOP_KIND]: run_stop_notify.send_human_review,
|
|
374
|
+
[PRRUN_STOP_KIND]: run_stop_notify.send_prrun,
|
|
375
|
+
}
|
|
376
|
+
|
|
342
377
|
// **A `halfrun` stop marks its own record** — the positive "this run has ended over its verified diff"
|
|
343
|
-
// that `run:entry` adopts on `fullrun #N`. Another run's record is left alone. A `
|
|
344
|
-
//
|
|
378
|
+
// that `run:entry` adopts on `fullrun #N`. Another run's record is left alone. A `needs-human-review`
|
|
379
|
+
// stop is the same mark, since its resume is `halfrun`'s. A `prrun` stop marks its record the same
|
|
380
|
+
// way, with the commit it stopped on. **A marked stop then sends its own `confirmation`**
|
|
381
|
+
// (`run-stop-notify.ts`), after the mark, since the mark rewrites the record its send is stamped on.
|
|
382
|
+
async function marked_stop(target: string, request: StopRequest): Promise<number> {
|
|
383
|
+
await SEND_BY_KIND[request.kind](target, request.issue)
|
|
384
|
+
|
|
385
|
+
return report_hold()
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// **A stop before commit has no CI E2E job behind it**, so it is refused until `josh test:e2e` has
|
|
389
|
+
// answered green on this exact tree (`test-e2e-stamp.ts`). A `prrun` stop has a pull request, and CI's.
|
|
390
|
+
async function e2e_refusal(request: StopRequest): Promise<number | undefined> {
|
|
391
|
+
if (request.kind === PRRUN_STOP_KIND || (await test_e2e_stamp.is_current_tree())) return undefined
|
|
392
|
+
|
|
393
|
+
return report(
|
|
394
|
+
'run:hold: `pnpm josh test:e2e` has not answered green on this tree — run it, then mark the stop again.',
|
|
395
|
+
E2E_OWED_VERDICT,
|
|
396
|
+
FAILURE_EXIT_CODE,
|
|
397
|
+
)
|
|
398
|
+
}
|
|
399
|
+
|
|
345
400
|
async function mark_stop(target: string, request: StopRequest): Promise<number> {
|
|
401
|
+
const refusal = await e2e_refusal(request)
|
|
402
|
+
|
|
403
|
+
if (refusal !== undefined) return refusal
|
|
404
|
+
|
|
346
405
|
const mark =
|
|
347
406
|
request.kind === PRRUN_STOP_KIND
|
|
348
407
|
? await run_prrun_resume.mark_stop_at(target, request.issue)
|
|
349
408
|
: run_halfrun_resume.mark_stop_at(target, request.issue)
|
|
350
409
|
|
|
351
|
-
if (mark === run_halfrun_resume.MARKED) return
|
|
410
|
+
if (mark === run_halfrun_resume.MARKED) return await marked_stop(target, request)
|
|
352
411
|
|
|
353
412
|
if (mark === run_halfrun_resume.UNREADABLE) return report_unreadable_record()
|
|
354
413
|
|
|
355
414
|
return report_busy(run_hold.race_message(run_hold.read_hold(target), target))
|
|
356
415
|
}
|
|
357
416
|
|
|
417
|
+
// The re-keyed record answers `hold`; no record answers `none` and another issue's `busy`, each a
|
|
418
|
+
// failure, since the run asking holds nothing it can stop on.
|
|
419
|
+
async function adopt(target: string, issue: string): Promise<number> {
|
|
420
|
+
const result = await run_hold_adopt.adopt(target, issue)
|
|
421
|
+
|
|
422
|
+
if (result === run_hold_adopt.ADOPTED) return report_hold()
|
|
423
|
+
|
|
424
|
+
if (result === run_hold_adopt.UNREADABLE) return report_unreadable_record()
|
|
425
|
+
|
|
426
|
+
if (result === run_hold_adopt.NO_RECORD) {
|
|
427
|
+
return report(run_hold_adopt.no_record_message(issue), NONE_VERDICT, FAILURE_EXIT_CODE)
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
return report(run_hold_adopt.foreign_message(issue), BUSY_VERDICT, FAILURE_EXIT_CODE)
|
|
431
|
+
}
|
|
432
|
+
|
|
358
433
|
async function dispatch(request: HoldRequest, target: string, is_linked: boolean): Promise<number> {
|
|
359
434
|
if (request.kind === 'claim') return await claim(target, request, is_linked)
|
|
360
435
|
|
|
436
|
+
if (request.kind === ADOPT_KIND) return await adopt(target, request.issue)
|
|
437
|
+
|
|
361
438
|
if (is_stop_request(request)) return await mark_stop(target, request)
|
|
362
439
|
|
|
363
440
|
if (request.kind === FORCE_RELEASE_KIND) return force_release(target)
|
|
@@ -392,10 +469,6 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
392
469
|
}
|
|
393
470
|
}
|
|
394
471
|
|
|
395
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
396
|
-
process.exitCode = await run(argv)
|
|
397
|
-
}
|
|
398
|
-
|
|
399
472
|
const run_hold_cli = {
|
|
400
473
|
BUSY_VERDICT,
|
|
401
474
|
HELD_VERDICT,
|
|
@@ -408,6 +481,4 @@ const run_hold_cli = {
|
|
|
408
481
|
run,
|
|
409
482
|
}
|
|
410
483
|
|
|
411
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
412
|
-
|
|
413
484
|
export { run_hold_cli }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { run_hold_cli } from './run-hold-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh run:hold` and `josh run:release` entry, kept apart from `run-hold-cli.ts` because other
|
|
6
|
+
// modules import that one: a bundle is one file, so a main guard there would fire for every command
|
|
7
|
+
// that carries it (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = await run_hold_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
2
|
+
import { run_hold, type RunHold, type SessionOwner } from './run-hold'
|
|
3
|
+
import { run_hold_session } from './run-hold-session'
|
|
4
|
+
|
|
5
|
+
// Whether this session is one of a run's own (joshuafolkken/kit#4099): a lane child, or the session
|
|
6
|
+
// holding the run's hold on this working tree. The run's event stream is the repository's, so a
|
|
7
|
+
// session outside the run — a question answered beside a `backlogrun` — writes to it too, and what it
|
|
8
|
+
// files is not the run's.
|
|
9
|
+
//
|
|
10
|
+
// **Unknown is outside.** Unlike the `Stop` hook's question (`run-hold-session.ts`), a hold or a session
|
|
11
|
+
// with no owner recorded is not this session's: counting another session's filing as the run's is the
|
|
12
|
+
// failure this answers.
|
|
13
|
+
|
|
14
|
+
function is_owned(hold: RunHold, owner: SessionOwner): boolean {
|
|
15
|
+
if (hold.owner_pid === undefined || owner.owner_pid === undefined) return false
|
|
16
|
+
|
|
17
|
+
return run_hold_session.is_session_hold(hold, owner)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function is_hold_owner(owner: SessionOwner): Promise<boolean> {
|
|
21
|
+
const directory = await run_hold.worktree_directory()
|
|
22
|
+
if (directory === undefined) return false
|
|
23
|
+
|
|
24
|
+
const read = run_hold.read_hold(run_hold.hold_path(directory))
|
|
25
|
+
|
|
26
|
+
return read.kind === 'held' && is_owned(read.hold, owner)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function is_run_member(owner: SessionOwner = run_hold.session_owner()): Promise<boolean> {
|
|
30
|
+
if (lane_child_marker.marked_issue() !== undefined) return true
|
|
31
|
+
|
|
32
|
+
return await is_hold_owner(owner)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const run_hold_member = { is_run_member }
|
|
36
|
+
|
|
37
|
+
export { run_hold_member }
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { git_gh_issue_read } from '#scripts/gh/git-gh-issue-read'
|
|
2
|
+
import { git_gh_pr_read } from '#scripts/gh/git-gh-pr-read'
|
|
3
|
+
import { git_gh_repo } from '#scripts/gh/git-gh-repo'
|
|
4
|
+
import { git_command } from '#scripts/git/git-command'
|
|
5
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
6
|
+
import { stdout_on_stderr } from '#scripts/lib/stdout-on-stderr'
|
|
7
|
+
import { telegram_test } from '#scripts/notify/telegram-test'
|
|
8
|
+
import type { CliValues } from '#scripts/notify/telegram-test-logic'
|
|
9
|
+
import { run_stage } from '#scripts/run/run-stage'
|
|
10
|
+
import { run_hold_session } from './run-hold-session'
|
|
11
|
+
|
|
12
|
+
// The `confirmation` a `halfrun`, `needs-human-review` or `prrun` stop sends from `josh run:hold
|
|
13
|
+
// --halfrun-stop` / `--human-review-stop` / `--prrun-stop` (joshuafolkken/kit#4135, #4156): every line is fixed once the Issue, its title and the pull
|
|
14
|
+
// request are known, so it is composed here rather than copied from prose. The send goes through
|
|
15
|
+
// `josh notify`'s own call and is stamped on the hold, so the `Stop` hook's own confirmation
|
|
16
|
+
// (`stop-actions.ts`) finds the pause announced and does not send it again.
|
|
17
|
+
//
|
|
18
|
+
// **A failed send does not fail the stop**: the mark is written, and an unstamped hold is exactly what
|
|
19
|
+
// lets the `Stop` hook send the confirmation in its place.
|
|
20
|
+
|
|
21
|
+
const TITLE_PLACEHOLDER = '<title>'
|
|
22
|
+
const PR_PLACEHOLDER = '<pr-url>'
|
|
23
|
+
const HALFRUN = 'halfrun'
|
|
24
|
+
const PRRUN = 'prrun'
|
|
25
|
+
// Single quotes expand nothing, so a title stays one argument whatever it carries; its own `'` closes
|
|
26
|
+
// the quote, emits an escaped one and reopens.
|
|
27
|
+
const QUOTE = "'"
|
|
28
|
+
|
|
29
|
+
interface StopFacts {
|
|
30
|
+
issue: string
|
|
31
|
+
title: string | undefined
|
|
32
|
+
issue_url: string | undefined
|
|
33
|
+
pr_url?: string | undefined
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface Composed {
|
|
37
|
+
values: CliValues
|
|
38
|
+
title: string | undefined
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function single_quoted(text: string): string {
|
|
42
|
+
return QUOTE + text.replaceAll(QUOTE, String.raw`'\''`) + QUOTE
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Plain, not linked: every line is a command a person copies out of the Telegram.
|
|
46
|
+
function reference_of(facts: StopFacts): string {
|
|
47
|
+
return issue_cite.plain(facts.issue)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function commit_title(facts: StopFacts): string {
|
|
51
|
+
return single_quoted(`${facts.title ?? TITLE_PLACEHOLDER} ${reference_of(facts)}`)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function with_urls(values: CliValues, facts: StopFacts): CliValues {
|
|
55
|
+
const with_issue =
|
|
56
|
+
facts.issue_url === undefined ? values : { ...values, 'issue-url': facts.issue_url }
|
|
57
|
+
|
|
58
|
+
return facts.pr_url === undefined ? with_issue : { ...with_issue, 'pr-url': facts.pr_url }
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function halfrun_values(facts: StopFacts): CliValues {
|
|
62
|
+
const title = commit_title(facts)
|
|
63
|
+
const body = [
|
|
64
|
+
'halfrun ready for manual verification',
|
|
65
|
+
run_stage.next_line(HALFRUN, facts.issue),
|
|
66
|
+
`Without an agent: pnpm josh git -y ${title} && pnpm josh followup ${title}`,
|
|
67
|
+
].join('\n')
|
|
68
|
+
const values: CliValues = {
|
|
69
|
+
'task-type': 'confirmation',
|
|
70
|
+
body,
|
|
71
|
+
recommended: `Verify by hand, then prrun ${reference_of(facts)}`,
|
|
72
|
+
alternative: [`fullrun ${reference_of(facts)}`],
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return with_urls(values, facts)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// A `needs-human-review` stop resumes as `halfrun`'s does, so its next line is `halfrun`'s; the lane
|
|
79
|
+
// directory is named because the uncommitted work a person must look at lives only there.
|
|
80
|
+
function human_review_values(facts: StopFacts, directory: string): CliValues {
|
|
81
|
+
const body = [
|
|
82
|
+
'needs-human-review: implemented and gated, stopped before the commit',
|
|
83
|
+
run_stage.next_line(HALFRUN, facts.issue),
|
|
84
|
+
`Working tree: ${directory}`,
|
|
85
|
+
].join('\n')
|
|
86
|
+
const values: CliValues = {
|
|
87
|
+
'task-type': 'confirmation',
|
|
88
|
+
body,
|
|
89
|
+
recommended: `Review the working tree, then prrun ${reference_of(facts)}`,
|
|
90
|
+
alternative: [`fullrun ${reference_of(facts)}`],
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return with_urls(values, facts)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function prrun_values(facts: StopFacts): CliValues {
|
|
97
|
+
const body = [
|
|
98
|
+
`prrun ready to merge: ${facts.pr_url ?? PR_PLACEHOLDER}`,
|
|
99
|
+
run_stage.next_line(PRRUN, facts.issue),
|
|
100
|
+
`After a manual merge, without an agent: pnpm josh followup ${commit_title(facts)}`,
|
|
101
|
+
].join('\n')
|
|
102
|
+
const values: CliValues = {
|
|
103
|
+
'task-type': 'confirmation',
|
|
104
|
+
body,
|
|
105
|
+
recommended: `fullrun ${reference_of(facts)}`,
|
|
106
|
+
alternative: ['Merge by hand, then pnpm josh followup'],
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return with_urls(values, facts)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function issue_facts(issue: string): Promise<StopFacts> {
|
|
113
|
+
const slug = await git_gh_repo.repo_get_name_with_owner()
|
|
114
|
+
const title = await git_gh_issue_read.issue_get_title(issue)
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
issue,
|
|
118
|
+
title,
|
|
119
|
+
issue_url: slug === undefined ? undefined : issue_cite.issue_url(slug, issue),
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async function prrun_facts(issue: string): Promise<StopFacts> {
|
|
124
|
+
const pr_url = await git_gh_pr_read.pr_get_url(await git_command.branch())
|
|
125
|
+
|
|
126
|
+
return { ...(await issue_facts(issue)), pr_url }
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// The title is passed with the values, so the send does not read it a second time.
|
|
130
|
+
async function send_composed(target: string, compose: () => Promise<Composed>): Promise<void> {
|
|
131
|
+
const { values, title } = await compose()
|
|
132
|
+
const titled = title === undefined ? values : { ...values, 'issue-title': title }
|
|
133
|
+
|
|
134
|
+
await stdout_on_stderr.run(async () => {
|
|
135
|
+
await telegram_test.send_values(titled)
|
|
136
|
+
})
|
|
137
|
+
run_hold_session.mark_notified(target)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// A `gh` read that fails is a send that did not happen, never a failed stop: the mark is already written.
|
|
141
|
+
async function send(target: string, compose: () => Promise<Composed>): Promise<void> {
|
|
142
|
+
try {
|
|
143
|
+
await send_composed(target, compose)
|
|
144
|
+
} catch (error) {
|
|
145
|
+
console.error(`⚠️ run:hold could not send the stop confirmation: ${String(error)}`)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
async function send_halfrun(target: string, issue: string): Promise<void> {
|
|
150
|
+
await send(target, async () => {
|
|
151
|
+
const facts = await issue_facts(issue)
|
|
152
|
+
|
|
153
|
+
return { values: halfrun_values(facts), title: facts.title }
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async function send_prrun(target: string, issue: string): Promise<void> {
|
|
158
|
+
await send(target, async () => {
|
|
159
|
+
const facts = await prrun_facts(issue)
|
|
160
|
+
|
|
161
|
+
return { values: prrun_values(facts), title: facts.title }
|
|
162
|
+
})
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async function send_human_review(target: string, issue: string): Promise<void> {
|
|
166
|
+
await send(target, async () => {
|
|
167
|
+
const facts = await issue_facts(issue)
|
|
168
|
+
const directory = await git_command.repository_root()
|
|
169
|
+
|
|
170
|
+
return { values: human_review_values(facts, directory), title: facts.title }
|
|
171
|
+
})
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const run_stop_notify = {
|
|
175
|
+
halfrun_values,
|
|
176
|
+
human_review_values,
|
|
177
|
+
prrun_values,
|
|
178
|
+
send_halfrun,
|
|
179
|
+
send_human_review,
|
|
180
|
+
send_prrun,
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export { run_stop_notify }
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { telegram_notify } from '#scripts/notify/telegram-notify'
|
|
3
|
+
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
4
|
+
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
5
|
+
|
|
6
|
+
// A returned child whose session could not authenticate (joshuafolkken/kit#4216). Nothing is counted
|
|
7
|
+
// and no label is touched — the child keeps `in-progress`, so it resumes once a person runs `/login` —
|
|
8
|
+
// and the run stops, since every child dispatched before that fails the same way. The stop is pushed
|
|
9
|
+
// as a `confirmation`: `/login` is a person's to run, and the driver's own stop notice names no cause.
|
|
10
|
+
// Script-emitted, so English.
|
|
11
|
+
|
|
12
|
+
const RECOVERY =
|
|
13
|
+
'If this did not arrive, `pnpm josh run:wake --list` relays the last progress line.'
|
|
14
|
+
|
|
15
|
+
async function stop(child: string): Promise<void> {
|
|
16
|
+
const cite = issue_cite.plain(child)
|
|
17
|
+
const text = `${cite} could not authenticate — run /login, then resume it`
|
|
18
|
+
|
|
19
|
+
await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.OUTAGE, text)
|
|
20
|
+
await telegram_notify.confirm({
|
|
21
|
+
issue_title: 'backlogrun stopped: Claude authentication failed',
|
|
22
|
+
body: `${text}. The child stays in-progress and was neither parked nor counted as a failure.`,
|
|
23
|
+
recovery: RECOVERY,
|
|
24
|
+
recommended: `Run /login, then run backlogrun again to resume ${cite}`,
|
|
25
|
+
alternatives: ['Leave the backlog stopped until a later session'],
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const run_merge_auth = { stop }
|
|
30
|
+
|
|
31
|
+
export { run_merge_auth }
|