@joshuafolkken/kit 1.1471.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 +6 -6
- package/.claude/skills/epic-commands/SKILL.md +26 -77
- package/.claude/skills/epic-commands/epic-bundle.md +12 -6
- package/.claude/skills/epic-commands/execution-waves.md +1 -2
- package/.claude/skills/verify-ui/SKILL.md +1 -2
- package/.claude/skills/workflow-commands/SKILL.md +12 -14
- package/.claude/skills/workflow-commands/background-commands.md +8 -12
- package/.claude/skills/workflow-commands/backlogrun-child.md +13 -18
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +7 -25
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +23 -28
- package/.claude/skills/workflow-commands/backlogrun-park.md +16 -31
- package/.claude/skills/workflow-commands/backlogrun-progress.md +12 -21
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -20
- package/.claude/skills/workflow-commands/backlogrun.md +32 -51
- package/.claude/skills/workflow-commands/chain-rule.md +18 -11
- package/.claude/skills/workflow-commands/delegation.md +13 -8
- package/.claude/skills/workflow-commands/entry-sequence.md +10 -12
- package/.claude/skills/workflow-commands/followup.md +10 -35
- package/.claude/skills/workflow-commands/fullrun-steps.md +38 -49
- package/.claude/skills/workflow-commands/fullrun.md +6 -8
- package/.claude/skills/workflow-commands/halfrun.md +20 -32
- package/.claude/skills/workflow-commands/into-target.md +1 -2
- package/.claude/skills/workflow-commands/issue-comments.md +19 -15
- package/.claude/skills/workflow-commands/issue-scout.md +5 -4
- package/.claude/skills/workflow-commands/kickoff.md +24 -23
- package/.claude/skills/workflow-commands/latest-gate.md +9 -18
- package/.claude/skills/workflow-commands/needs-human-review.md +11 -19
- package/.claude/skills/workflow-commands/observation-filing.md +4 -50
- package/.claude/skills/workflow-commands/observation-ledger.md +5 -10
- package/.claude/skills/workflow-commands/pre-gate-cut.md +22 -44
- package/.claude/skills/workflow-commands/prerequisite.md +11 -18
- package/.claude/skills/workflow-commands/progress-watcher.md +3 -8
- package/.claude/skills/workflow-commands/prrun.md +6 -12
- package/.claude/skills/workflow-commands/retrospective.md +5 -5
- package/.claude/skills/workflow-commands/split-assessment.md +14 -4
- package/.claude/skills/workflow-commands/target-repository.md +1 -2
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -13
- package/.codex/hooks.json +6 -6
- package/.github/actions/setup-node/action.yml +10 -1
- 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 +121 -11
- package/.github/workflows/publish.yml +10 -3
- package/.github/workflows/sonar-qube.yml +1 -0
- package/.prettierignore +2 -0
- package/.vscode/tasks.json +1 -2
- package/CLAUDE.md +4 -8
- package/README.md +4 -2
- package/SECURITY.md +1 -1
- package/cspell/index.yaml +7 -0
- package/dist/CLAUDE.md +4 -8
- package/dist/commands/document-read-cli.js +882 -0
- package/dist/commands/{document-section-cli.js → document-section-main.js} +137 -62
- 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-AS74OU3D.js → chunk-PT5R6UJD.js} +4582 -2118
- package/dist/hooks/chunk-TUIFS5E7.js +72 -0
- package/dist/hooks/{chunk-723HKZO5.js → chunk-VWWCFGWK.js} +1 -1
- package/dist/hooks/{chunk-E7OIKX5Z.js → chunk-WR2KQAYZ.js} +1863 -382
- package/dist/hooks/{chunk-KC5AK2GF.js → chunk-XGBNSWEI.js} +248 -46
- package/dist/hooks/chunk-YCDOIR3I.js +3456 -0
- package/dist/hooks/codex-hook-adapter.js +10 -19
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +436 -257
- package/dist/hooks/pretool-guard.js +7 -22
- package/dist/hooks/session-lang.js +380 -42
- package/dist/hooks/stop-guard.js +8711 -782
- package/dist/josh.js +5263 -997
- 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 +8 -4
- package/package.json +17 -53
- package/pnpm-workspace.yaml +4 -2
- package/prompts/coding-standards.md +1 -1
- package/prompts/collaboration-workflow/file-edits.md +1 -9
- package/prompts/collaboration-workflow/gh-rest.md +1 -2
- package/prompts/collaboration-workflow/issue-citation.md +2 -4
- package/prompts/collaboration-workflow/issue-template.md +42 -17
- package/prompts/collaboration-workflow/lane-instructions.md +34 -0
- package/prompts/collaboration-workflow/measurement.md +37 -0
- package/prompts/collaboration-workflow/operating-rules.md +6 -12
- package/prompts/collaboration-workflow/output-bounds.md +4 -9
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +3 -42
- package/prompts/collaboration-workflow/principles.md +19 -8
- package/prompts/collaboration-workflow/report-format.md +37 -57
- package/prompts/collaboration-workflow/residency.md +12 -8
- package/prompts/collaboration-workflow/rule-delivery.md +3 -11
- package/prompts/collaboration-workflow/shell-body.md +8 -18
- package/prompts/collaboration-workflow/turn-batching.md +4 -6
- package/prompts/collaboration-workflow/upstream-interrupt.md +16 -6
- package/prompts/collaboration-workflow/wip-cap.md +7 -7
- package/prompts/collaboration-workflow.md +4 -7
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +1 -2
- package/prompts/review.md +45 -26
- package/prompts/testing-guide.md +10 -45
- package/scripts/agent/agent-argv.ts +20 -4
- package/scripts/agent/agent-event.ts +15 -15
- package/scripts/agent/agent-exit-record.ts +13 -1
- package/scripts/agent/agent-role-profile.ts +101 -45
- package/scripts/agent/agent-safe-text.ts +60 -0
- package/scripts/agent/api-auth.ts +41 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +14 -0
- package/scripts/agent/codex-agent-argv.ts +2 -0
- package/scripts/agent/lane-instructions.ts +144 -0
- 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 +6 -7
- 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 +54 -7
- 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 +39 -8
- package/scripts/backlog/backlog-drive-seats.ts +18 -8
- package/scripts/backlog/backlog-drive-token-handling.ts +38 -0
- package/scripts/backlog/backlog-drive.ts +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 +69 -0
- 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 +137 -18
- 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 +2 -10
- package/scripts/delegation/investigation-guard.ts +15 -73
- package/scripts/delegation/investigation-reads.ts +3 -5
- 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 +9 -6
- package/scripts/document/document-scan.ts +1 -1
- package/scripts/document/document-section-cli.ts +17 -13
- package/scripts/document/document-section-main.ts +12 -0
- package/scripts/document/entry-read-budget.ts +2 -2
- package/scripts/document/read-set-cli.ts +4 -1
- package/scripts/epic/epic-audit-cli.ts +12 -6
- package/scripts/epic/epic-audit-orphans.ts +5 -8
- package/scripts/epic/epic-audit.ts +52 -1
- package/scripts/epic/epic-bundle-apply.ts +137 -0
- package/scripts/epic/epic-bundle-cli.ts +32 -121
- package/scripts/epic/epic-bundle-evidence.ts +49 -26
- package/scripts/epic/epic-bundle-format.ts +116 -0
- package/scripts/epic/epic-bundle-main.ts +17 -0
- package/scripts/epic/epic-bundle-referenced.ts +14 -3
- package/scripts/epic/epic-bundle.ts +17 -9
- 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 +31 -60
- 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 +73 -0
- package/scripts/gate/check-reuse.ts +141 -0
- 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 +150 -119
- package/scripts/gate/core-wait-record.ts +48 -0
- package/scripts/gate/core-wait.ts +162 -0
- package/scripts/gate/core-weights.ts +86 -0
- package/scripts/gate/free-cores.ts +72 -0
- package/scripts/gate/gate-ledger.ts +49 -7
- package/scripts/gate/gate-plan.ts +44 -15
- package/scripts/gate/gate-report.ts +29 -4
- package/scripts/gate/gate-run-steps.ts +195 -0
- package/scripts/gate/gate-skip.ts +12 -2
- package/scripts/gate/gate-steps.ts +12 -1
- package/scripts/gate/held-mark.ts +55 -0
- package/scripts/gate/input-fingerprint.ts +42 -0
- package/scripts/gate/machine-capacity.ts +124 -31
- package/scripts/gate/moved-paths.ts +67 -0
- package/scripts/gate/pre-commit-type-check.ts +14 -1
- 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 +65 -129
- 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-rest.ts +1 -0
- package/scripts/gh/git-gh-issue-write.ts +77 -17
- 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/gh/git-pr.ts +13 -1
- 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 +78 -0
- package/scripts/git/main-merge.ts +39 -14
- 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 +5 -16
- 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 +118 -0
- package/scripts/hooks/pre-push-unit.ts +4 -2
- package/scripts/hooks/pretool-guard-cli.ts +1 -8
- package/scripts/hooks/pretool-guard.ts +57 -69
- package/scripts/hooks/reserved-run.ts +67 -8
- package/scripts/hooks/run-hook.sh +18 -11
- package/scripts/hooks/shell-rules-notice.ts +37 -0
- package/scripts/hooks/stop-actions.ts +185 -0
- package/scripts/hooks/stop-guard.ts +72 -27
- package/scripts/init/hook-command-rewrite.ts +19 -5
- package/scripts/init/hook-launch.ts +15 -12
- 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 +60 -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 +33 -22
- package/scripts/issue/issue-cite-main.ts +12 -0
- package/scripts/issue/issue-classification.ts +13 -8
- 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 +7 -13
- 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 +19 -25
- 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/markdown-section.ts +19 -5
- 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 +82 -0
- package/scripts/josh/file-map-stamp.ts +49 -16
- package/scripts/josh/hook-decision.ts +32 -20
- package/scripts/josh/josh-command-map.ts +6 -1
- package/scripts/josh/josh-command-types.ts +65 -13
- package/scripts/josh/josh-commands-agent-hooks.ts +83 -0
- package/scripts/josh/josh-commands-ai.ts +169 -157
- 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 +31 -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 +112 -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 +149 -6
- package/scripts/josh/josh-logic.ts +11 -27
- package/scripts/josh/josh.ts +14 -5
- package/scripts/josh/package-directory.ts +18 -0
- 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 +19 -22
- package/scripts/lane/lane-check-stats.ts +97 -0
- package/scripts/lane/lane-child-invocation.ts +43 -4
- 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 +27 -6
- package/scripts/lane/lane-gap-stats.ts +156 -0
- package/scripts/lane/lane-guard-policy.ts +2 -2
- package/scripts/lane/lane-handoff.ts +76 -1
- package/scripts/lane/lane-held-stats.ts +129 -0
- package/scripts/lane/lane-install.ts +16 -15
- 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 +108 -97
- package/scripts/lane/lane-limit-cli.ts +19 -9
- package/scripts/lane/lane-measure-cli.ts +58 -10
- 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-preserve.ts +29 -1
- 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 +33 -10
- package/scripts/lane/lane-residents.ts +162 -0
- package/scripts/lane/lane-restart.ts +26 -27
- 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 +160 -0
- package/scripts/lane/lane-session-broker.ts +134 -134
- 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 +72 -0
- package/scripts/lane/lane-withdraw.ts +183 -0
- 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 +14 -5
- 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 +72 -33
- package/scripts/lint/lint-related-scope.ts +33 -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 +12 -11
- 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 +4 -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-check.ts +61 -0
- package/scripts/review/acceptance-map.ts +206 -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 +82 -16
- 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 +67 -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 +90 -3
- 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 +8 -0
- package/scripts/rules/firing-point.ts +6 -5
- package/scripts/rules/git-argv.ts +72 -14
- package/scripts/rules/git-force.ts +12 -2
- package/scripts/rules/guard-remedy.ts +121 -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 +76 -7
- 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/last-prompt.ts +50 -5
- package/scripts/rules/oracle-consulted.ts +10 -0
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +7 -0
- package/scripts/rules/permission-guards.ts +3 -0
- package/scripts/rules/piped-verification.ts +4 -2
- 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 +12 -28
- package/scripts/rules/rule-rewrite.ts +114 -0
- package/scripts/rules/rule-value-cache.ts +4 -9
- package/scripts/rules/rule-value-cli.ts +51 -32
- package/scripts/rules/rule-value.ts +8 -2
- package/scripts/rules/shell-segments.ts +50 -0
- package/scripts/rules/stop-decision.ts +77 -0
- package/scripts/rules/stop-rule-rows.ts +64 -0
- package/scripts/rules/stop-rules.ts +150 -51
- package/scripts/rules/tail-commands.ts +15 -1
- 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 -30
- package/scripts/run/board/run-board-closed.ts +8 -2
- 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 +119 -31
- package/scripts/run/board/run-board-header.ts +86 -21
- 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 +118 -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 +240 -61
- 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 +153 -13
- package/scripts/run/board/run-board-reason.ts +238 -45
- 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 -47
- 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 +125 -0
- package/scripts/run/board/run-board-render.ts +206 -259
- package/scripts/run/board/run-board-roots.ts +54 -0
- package/scripts/run/board/run-board-row-yield.ts +10 -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 +23 -29
- package/scripts/run/board/run-board-status.ts +206 -79
- package/scripts/run/board/run-board-thanks-read.ts +2 -2
- package/scripts/run/board/run-board-tick.ts +123 -104
- 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-cli.ts +3 -2
- package/scripts/run/cut/run-cut-handoff.ts +2 -2
- package/scripts/run/cut/run-cut-report.ts +16 -0
- package/scripts/run/detached-launch.ts +23 -4
- package/scripts/run/entry/run-entry-cli.ts +8 -1
- 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 +7 -10
- package/scripts/run/event/run-event-scope.ts +20 -2
- package/scripts/run/event/run-event-stream-emit.ts +78 -11
- package/scripts/run/event/run-event-stream.ts +37 -7
- 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-hold-session.ts +46 -0
- package/scripts/run/hold/run-hold.ts +7 -1
- package/scripts/run/hold/run-stop-notify.ts +183 -0
- package/scripts/run/launch-priority.ts +32 -0
- package/scripts/run/merge/run-merge-auth.ts +31 -0
- package/scripts/run/merge/run-merge-cli.ts +72 -107
- 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 +123 -0
- package/scripts/run/merge/run-merge-steps.ts +128 -83
- package/scripts/run/merge/run-merge.ts +53 -40
- 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 +61 -30
- package/scripts/run/run-next.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +2 -2
- package/scripts/run/run-poll-hook.ts +157 -0
- 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-cli.ts +22 -15
- package/scripts/run/run-step-section.ts +85 -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 +67 -151
- package/scripts/run/ship/run-ship-detach.ts +27 -7
- package/scripts/run/ship/run-ship-infra-retry.ts +59 -0
- package/scripts/run/ship/run-ship-next.ts +27 -3
- package/scripts/run/ship/run-ship-overlap.ts +232 -0
- 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 +102 -27
- package/scripts/run/ship/run-ship-preflight.ts +161 -30
- 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 +123 -15
- package/scripts/run/ship/run-ship-review-steps.ts +105 -149
- 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-context.ts +206 -0
- package/scripts/run/ship/run-ship-stop-text.ts +11 -6
- package/scripts/run/ship/run-ship-sync.ts +57 -12
- 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 +55 -6
- 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 +54 -21
- 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 +71 -137
- 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 +126 -14
- package/scripts/time-runtime/time-spans.ts +1 -0
- package/scripts/time-runtime/time-tool-call.ts +7 -0
- 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 +10 -3
- 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-43ZHT22P.js +0 -3495
- package/dist/hooks/chunk-CDY4NFQG.js +0 -15
- package/dist/hooks/chunk-EUMACUK2.js +0 -2038
- package/dist/hooks/chunk-H5HVWYXK.js +0 -359
- package/dist/hooks/chunk-IIGFYXKC.js +0 -7104
- package/dist/hooks/chunk-IX6TTTI6.js +0 -95
- package/dist/hooks/chunk-J47HU5H5.js +0 -237
- package/dist/hooks/chunk-K4EOONYM.js +0 -45
- package/dist/hooks/chunk-K4LMBQC2.js +0 -68
- package/dist/hooks/chunk-SHGPANFB.js +0 -56
- package/dist/hooks/chunk-YHBZAJSV.js +0 -79
- package/dist/hooks/chunk-YYPI7SJZ.js +0 -131
- package/dist/hooks/duplicate-read-guard.js +0 -30
- package/dist/hooks/investigation-guard.js +0 -32
- 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/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 -282
- package/scripts/rules/rule-registry.ts +0 -109
- package/scripts/run/run-stranded-cli.ts +0 -27
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
1
|
import {
|
|
3
|
-
ALREADY_DONE_LABEL,
|
|
4
2
|
EPIC_LABEL,
|
|
5
3
|
has_label_name,
|
|
6
|
-
|
|
4
|
+
has_parked_label,
|
|
5
|
+
RUN_STALLED_LABEL,
|
|
7
6
|
} from '#scripts/issue/issue-labels'
|
|
8
7
|
import type { IssueState } from '#scripts/issue/issue-state'
|
|
9
8
|
import type { CarryChange, RunCarry } from '#scripts/run/carry/run-carry'
|
|
9
|
+
import { run_stalled } from '#scripts/run/park/run-stalled'
|
|
10
|
+
import type { ChildOutcome } from './run-merge-outcome'
|
|
10
11
|
|
|
11
12
|
// The pure core of `run:merge`, the one composite command for a `backlogrun` merge event: the parent —
|
|
12
13
|
// the session whose context is largest and per-turn cost highest — calls `run:merge <N>` once at a
|
|
@@ -24,10 +25,11 @@ const CLOSED_STATE = 'CLOSED'
|
|
|
24
25
|
// failing every child it is handed rather than on failures scattered across a long run.
|
|
25
26
|
const CONSECUTIVE_FAILURE_LIMIT = 3
|
|
26
27
|
// Three outages in a row stop the run too — the same shape as the failure
|
|
27
|
-
// guard, over its own streak. An outage is a child its environment ended — it could not reach the API
|
|
28
|
-
// its session was killed inside a turn
|
|
29
|
-
//
|
|
30
|
-
//
|
|
28
|
+
// guard, over its own streak. An outage is a child its environment ended — it could not reach the API
|
|
29
|
+
// or its session was killed inside a turn — so a run of them is the environment being down; stopping is
|
|
30
|
+
// what keeps the run from re-dispatching into a dead API forever. A ship that stopped with no relaunch
|
|
31
|
+
// is re-dispatched too but not counted: its child reached the API (joshuafolkken/kit#3974). A merge or
|
|
32
|
+
// a genuine child failure resets it (`run-carry.ts` → `next_outages`).
|
|
31
33
|
const CONSECUTIVE_OUTAGE_LIMIT = 3
|
|
32
34
|
const ONE = 1
|
|
33
35
|
|
|
@@ -37,25 +39,22 @@ const ONE = 1
|
|
|
37
39
|
// child a merged pull request's `closes #N` names — GitHub merged it without closing
|
|
38
40
|
// the issue.
|
|
39
41
|
// - `human-review` — OPEN and carrying `needs-human-review`; the run's own ending (needs-human-review.md).
|
|
40
|
-
// - `parked` — OPEN and carrying
|
|
42
|
+
// - `parked` — OPEN and carrying a park label (`PARKED_LABELS`); a person still owns it.
|
|
41
43
|
// - `split` — OPEN and carrying `epic`; its work was divided into new children.
|
|
42
|
-
// - `outage` — OPEN and carrying neither, but the exit record shows it could not reach the API
|
|
43
|
-
//
|
|
44
|
+
// - `outage` — OPEN and carrying neither, but the exit record shows it could not reach the API, a
|
|
45
|
+
// host restart killed it, or its ship stop went unanswered; not the child's failure, so
|
|
46
|
+
// it is re-dispatchable and uncounted against the failure guard.
|
|
44
47
|
// - `cut` — OPEN and carrying neither, but its lane holds a declared cut no successor adopted;
|
|
45
48
|
// the child ended its session on purpose, so it is resumed rather than parked and
|
|
46
49
|
// counts nothing.
|
|
50
|
+
// - `unauthenticated` — OPEN and carrying neither, but the exit record shows the session could not
|
|
51
|
+
// authenticate; no child can run until a person runs `/login`, so the run stops with
|
|
52
|
+
// the child left `in-progress` and nothing counted (joshuafolkken/kit#4216).
|
|
47
53
|
// - `failed` — OPEN and carrying neither, and not an outage; the child did not finish.
|
|
54
|
+
// - `withdrawn` — a person withdrew it with `lane:withdraw`, read from the event stream before the
|
|
55
|
+
// GitHub state: left OPEN for the next run, it is neither merged nor failed.
|
|
48
56
|
// - `unresolved` — the state could not be read; re-read before deciding.
|
|
49
|
-
|
|
50
|
-
| 'merged'
|
|
51
|
-
| 'human-review'
|
|
52
|
-
| 'parked'
|
|
53
|
-
| 'split'
|
|
54
|
-
| 'cut'
|
|
55
|
-
| 'outage'
|
|
56
|
-
| 'failed'
|
|
57
|
-
| 'unresolved'
|
|
58
|
-
| 'shipping'
|
|
57
|
+
// The names themselves are `run-merge-outcome.ts`'s.
|
|
59
58
|
|
|
60
59
|
// What the CLI read beside the GitHub state: whether the exit record is an API outage, and whether the
|
|
61
60
|
// lane holds a cut its successor never adopted.
|
|
@@ -65,6 +64,13 @@ interface EndingSignals {
|
|
|
65
64
|
// The merged pull request whose `closes #N` names the child, when GitHub left the child OPEN after
|
|
66
65
|
// merging it.
|
|
67
66
|
merged_pr?: string | undefined
|
|
67
|
+
// The newest launch of the child was withdrawn by a person (`run_event_scope.is_withdrawn`).
|
|
68
|
+
is_withdrawn?: boolean | undefined
|
|
69
|
+
// The outage is not an API the child could not reach — a ship stop no relaunch answered, or a host
|
|
70
|
+
// restart that killed it — so it is left out of the run-wide streak.
|
|
71
|
+
is_streak_exempt?: boolean | undefined
|
|
72
|
+
// The exit record shows the session could not authenticate (`api-auth.ts`).
|
|
73
|
+
is_auth_failure?: boolean | undefined
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
const NO_SIGNALS: EndingSignals = { is_outage: false, is_cut: false }
|
|
@@ -73,12 +79,10 @@ function is_closed(state: IssueState): boolean {
|
|
|
73
79
|
return state.state.toUpperCase() === CLOSED_STATE
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
// A parked child is one a person still owns: it
|
|
77
|
-
//
|
|
78
|
-
const PARK_LABELS: ReadonlyArray<string> = [NEEDS_DECISION_LABEL, ALREADY_DONE_LABEL]
|
|
79
|
-
|
|
82
|
+
// A parked child is one a person still owns (`PARKED_LABELS`): it is left alone and not counted as a
|
|
83
|
+
// failure again.
|
|
80
84
|
function is_parked(state: IssueState): boolean {
|
|
81
|
-
return
|
|
85
|
+
return has_parked_label(state.labels)
|
|
82
86
|
}
|
|
83
87
|
|
|
84
88
|
// **CLOSED means merged, whatever labels it carries** — a child that finished and merged keeps the
|
|
@@ -94,6 +98,8 @@ function unfinished_outcome(signals: EndingSignals): ChildOutcome {
|
|
|
94
98
|
|
|
95
99
|
if (signals.is_cut) return 'cut'
|
|
96
100
|
|
|
101
|
+
if (signals.is_auth_failure === true) return 'unauthenticated'
|
|
102
|
+
|
|
97
103
|
return signals.is_outage ? 'outage' : 'failed'
|
|
98
104
|
}
|
|
99
105
|
|
|
@@ -107,12 +113,16 @@ function open_outcome(state: IssueState, signals: EndingSignals): ChildOutcome {
|
|
|
107
113
|
return unfinished_outcome(signals)
|
|
108
114
|
}
|
|
109
115
|
|
|
110
|
-
// The signals are read by the CLI and matter only for an OPEN child — a CLOSED
|
|
111
|
-
// regardless of how the process exited.
|
|
116
|
+
// The signals are read by the CLI and, but for a withdrawal, matter only for an OPEN child — a CLOSED
|
|
117
|
+
// child is merged regardless of how the process exited. **A withdrawal is read first**: `lane:withdraw`
|
|
118
|
+
// records it before stopping the child and leaves the issue OPEN, which would otherwise read as a child
|
|
119
|
+
// to resume or park.
|
|
112
120
|
function classify_child(
|
|
113
121
|
state: IssueState | undefined,
|
|
114
122
|
signals: EndingSignals = NO_SIGNALS,
|
|
115
123
|
): ChildOutcome {
|
|
124
|
+
if (signals.is_withdrawn === true) return 'withdrawn'
|
|
125
|
+
|
|
116
126
|
if (state === undefined) return 'unresolved'
|
|
117
127
|
|
|
118
128
|
if (is_closed(state)) return 'merged'
|
|
@@ -121,9 +131,9 @@ function classify_child(
|
|
|
121
131
|
}
|
|
122
132
|
|
|
123
133
|
// The counter change a child's outcome implies. A merge counts a merge (which resets the failure
|
|
124
|
-
// streak); a failure counts a failure; a split, parked or human-review child counts nothing —
|
|
125
|
-
//
|
|
126
|
-
// untouched.
|
|
134
|
+
// streak); a failure counts a failure; a split, parked, withdrawn or human-review child counts nothing —
|
|
135
|
+
// a decision a person made or still owes is not the environment failing — and `undefined` says the
|
|
136
|
+
// carry record is left untouched.
|
|
127
137
|
function change_of(outcome: ChildOutcome): CarryChange | undefined {
|
|
128
138
|
if (outcome === 'merged') return { merged: ONE }
|
|
129
139
|
|
|
@@ -161,7 +171,7 @@ function counters_comment(carry: RunCarry): string {
|
|
|
161
171
|
}
|
|
162
172
|
|
|
163
173
|
// Why the run parked a child it judged failed. A child that stops itself leaves its own comment; one
|
|
164
|
-
// the driver stops leaves none, so this tells a person why it carries `
|
|
174
|
+
// the driver stops leaves none, so this tells a person why it carries `run:stalled`.
|
|
165
175
|
// Script-emitted, so English.
|
|
166
176
|
interface ParkReason {
|
|
167
177
|
child: string
|
|
@@ -180,21 +190,22 @@ function park_comment(reason: ParkReason): string {
|
|
|
180
190
|
const transcript = reason.output === undefined ? '' : ` (\`${reason.output}\`)`
|
|
181
191
|
|
|
182
192
|
return [
|
|
183
|
-
|
|
193
|
+
`Parked with \`${RUN_STALLED_LABEL}\` by \`pnpm josh run:merge\`, the \`backlogrun\` driver — a mechanical failure, with no decision to make.`,
|
|
184
194
|
`- Why: ${reason.cause}`,
|
|
185
|
-
'- Read: the issue is OPEN, carries
|
|
195
|
+
'- Read: the issue is OPEN, carries no park label, `needs-human-review` or `epic`, no merged pull request’s `closes #N` names it, and it declares no open blocker, start date still ahead or sample condition not yet met.',
|
|
186
196
|
streak_line(reason.carry),
|
|
187
|
-
`- Next: read the child’s transcript${transcript},
|
|
197
|
+
`- Next: read the child’s transcript${transcript}, ${run_stalled.next_step(reason.child)}.`,
|
|
188
198
|
].join('\n')
|
|
189
199
|
}
|
|
190
200
|
|
|
191
|
-
// Why the run released a child it would otherwise have parked: the child records open blockers
|
|
192
|
-
//
|
|
193
|
-
|
|
201
|
+
// Why the run released a child it would otherwise have parked: the child records open blockers or a
|
|
202
|
+
// start date still ahead or samples still short, so when it runs is already decided and it waits rather than asking a person.
|
|
203
|
+
// Script-emitted, so English.
|
|
204
|
+
function waiting_comment(waits: ReadonlyArray<string>): string {
|
|
194
205
|
return [
|
|
195
206
|
'Released to wait by `pnpm josh run:merge`, the `backlogrun` driver — not parked, and not counted as a failure.',
|
|
196
|
-
`- Why: the child’s session ended unfinished while it
|
|
197
|
-
'- Next:
|
|
207
|
+
`- Why: the child’s session ended unfinished while it waits on: ${waits.join(', ')}.`,
|
|
208
|
+
'- Next: when it runs is already recorded — it becomes runnable again once its blockers merge, its start date arrives and its sample condition is met; a blocker outside the backlog still needs a person to land it.',
|
|
198
209
|
].join('\n')
|
|
199
210
|
}
|
|
200
211
|
|
|
@@ -210,5 +221,7 @@ const run_merge = {
|
|
|
210
221
|
is_outage_guard_tripped,
|
|
211
222
|
}
|
|
212
223
|
|
|
213
|
-
export type {
|
|
224
|
+
export type { EndingSignals, ParkReason }
|
|
214
225
|
export { run_merge }
|
|
226
|
+
|
|
227
|
+
export { type ChildOutcome } from './run-merge-outcome'
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
4
|
+
import { issue_comment_cli, type CommentRequest } from '#scripts/issue/issue-comment-cli'
|
|
5
|
+
import { NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
|
|
6
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
7
|
+
import { issue_park } from '#scripts/issue/issue-park'
|
|
8
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
9
|
+
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
10
|
+
import { run_park } from './run-park'
|
|
11
|
+
|
|
12
|
+
// `josh run:park <N> --body-file <path>` — park a lane child for a person's decision in one call: the
|
|
13
|
+
// question as a comment, `needs-decision`, and the local record the `lane-park` guard reads.
|
|
14
|
+
// `josh run:park <N> --clear` takes the park back off once the decision is recorded.
|
|
15
|
+
//
|
|
16
|
+
// **The park was two hand-typed commands, and a child could stop after either one**
|
|
17
|
+
// (joshuafolkken/kit#4132). One call writes both, and only a park that has both is recorded, so the
|
|
18
|
+
// guard falls silent on exactly the child that left a question behind.
|
|
19
|
+
//
|
|
20
|
+
// **`in-progress` and the hold are not this command's.** A parked child keeps `in-progress`, and every
|
|
21
|
+
// parked ending still owes `pnpm josh run:release <N>` (`backlogrun-park.md` → "park and continue").
|
|
22
|
+
|
|
23
|
+
const SUCCESS_EXIT_CODE = 0
|
|
24
|
+
const FAILURE_EXIT_CODE = 1
|
|
25
|
+
const ARGV_OFFSET = 2
|
|
26
|
+
const CLEAR_FLAG = '--clear'
|
|
27
|
+
const USAGE = `Usage: josh run:park <issue-number> --body-file <path> | <issue-number> ${CLEAR_FLAG}`
|
|
28
|
+
const CLEAR_OPTIONS = { clear: { type: 'boolean' } } as const
|
|
29
|
+
|
|
30
|
+
function clear_issue(argv: ReadonlyArray<string>): string | undefined {
|
|
31
|
+
const parsed = cli_flags.arguments_of(argv, CLEAR_OPTIONS)
|
|
32
|
+
|
|
33
|
+
if (parsed === undefined) return undefined
|
|
34
|
+
|
|
35
|
+
return issue_number_shape.single_of(parsed.positionals)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function park(request: CommentRequest, directory: string): Promise<number> {
|
|
39
|
+
const { issue_number, body } = request
|
|
40
|
+
const write = await issue_park.apply(issue_number, NEEDS_DECISION_LABEL, body)
|
|
41
|
+
const is_parked = write.is_labelled && write.is_commented
|
|
42
|
+
const is_recorded = is_parked && run_park.record(issue_number, directory)
|
|
43
|
+
|
|
44
|
+
console.info(
|
|
45
|
+
`park ${session_cite.issue(issue_number)} — label: ${String(write.is_labelled)} · comment: ${String(write.is_commented)} · recorded: ${String(is_recorded)}`,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
return is_parked ? SUCCESS_EXIT_CODE : FAILURE_EXIT_CODE
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// **The record goes whatever the label answers**: the decision is a person's and already made, so a
|
|
52
|
+
// guard reading a stale park would only stay silent on the child's next stop.
|
|
53
|
+
async function clear(issue_number: string, directory: string): Promise<number> {
|
|
54
|
+
run_park.clear(issue_number, directory)
|
|
55
|
+
const is_cleared = await git_gh_issue_write.issue_clear_label(issue_number, NEEDS_DECISION_LABEL)
|
|
56
|
+
|
|
57
|
+
console.info(`park ${session_cite.issue(issue_number)} — cleared: ${String(is_cleared)}`)
|
|
58
|
+
|
|
59
|
+
return is_cleared ? SUCCESS_EXIT_CODE : FAILURE_EXIT_CODE
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function run_clear(argv: ReadonlyArray<string>, directory: string): Promise<number> {
|
|
63
|
+
const issue_number = clear_issue(argv)
|
|
64
|
+
|
|
65
|
+
if (issue_number !== undefined) return await clear(issue_number, directory)
|
|
66
|
+
|
|
67
|
+
console.error(USAGE)
|
|
68
|
+
|
|
69
|
+
return FAILURE_EXIT_CODE
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function run(
|
|
73
|
+
argv: ReadonlyArray<string>,
|
|
74
|
+
directory: string = process.cwd(),
|
|
75
|
+
): Promise<number> {
|
|
76
|
+
if (argv.includes(CLEAR_FLAG)) return await run_clear(argv, directory)
|
|
77
|
+
|
|
78
|
+
const request = issue_comment_cli.resolve_request(argv, USAGE)
|
|
79
|
+
|
|
80
|
+
return request === undefined ? FAILURE_EXIT_CODE : await park(request, directory)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
84
|
+
process.exitCode = await run(argv)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const run_park_cli = { USAGE, run }
|
|
88
|
+
|
|
89
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
90
|
+
|
|
91
|
+
export { run_park_cli }
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { backlog_budget } from '#scripts/backlog/backlog-budget'
|
|
2
|
+
import { git_common_directory } from '#scripts/git/git-common-directory'
|
|
3
|
+
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
4
|
+
import { stamp_record, type StampRecordSpec } from '#scripts/josh/stamp-record'
|
|
5
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
6
|
+
import { z } from 'zod'
|
|
7
|
+
|
|
8
|
+
// The local record of a lane child's park — the half of `run:park` a `PreToolUse` guard can read.
|
|
9
|
+
//
|
|
10
|
+
// **The park itself is a GitHub label, which a synchronous guard cannot read**, so `lane-park` used to
|
|
11
|
+
// fire on every lane-child stop, parked or not (joshuafolkken/kit#4132). `run:park` writes this record
|
|
12
|
+
// once the comment and the label are both on the issue, and the guard reads it back synchronously, the
|
|
13
|
+
// way the pre-gate cut guard reads `run-cut.ts`'s record.
|
|
14
|
+
//
|
|
15
|
+
// **Keyed to the repository and the issue, not the work tree.** The child parks from its lane, and the
|
|
16
|
+
// parent clears the park from the main checkout once a person has decided; both resolve the same
|
|
17
|
+
// common git directory, so `run:park --clear` removes the record wherever it runs.
|
|
18
|
+
//
|
|
19
|
+
// **Bounded like the cut record, and taken back by the next dispatch.** The guard asks within the run
|
|
20
|
+
// that parked, seconds after the park; a label a person removed by hand, without `--clear`, must not
|
|
21
|
+
// leave the guard silent on that issue's next dispatch, so `lane:dispatch` clears the record before it
|
|
22
|
+
// starts the child, and a record past the lane child's idle bound reads as no park.
|
|
23
|
+
|
|
24
|
+
const PARK_PREFIX = 'josh-run-park-'
|
|
25
|
+
const PARK_MAX_AGE_MS = backlog_budget.DEFAULT_IDLE_MS
|
|
26
|
+
|
|
27
|
+
const run_park_schema = z.object({
|
|
28
|
+
issue: z.string(),
|
|
29
|
+
parked_at: z.string(),
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
type RunPark = z.infer<typeof run_park_schema>
|
|
33
|
+
|
|
34
|
+
function parse_park(raw: string): RunPark | undefined {
|
|
35
|
+
return json_value.parse_with(raw, run_park_schema)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function parked_at_of(park: RunPark): string {
|
|
39
|
+
return park.parked_at
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const PARK_SPEC: StampRecordSpec<RunPark> = {
|
|
43
|
+
parse: parse_park,
|
|
44
|
+
timestamp_of: parked_at_of,
|
|
45
|
+
max_age_ms: PARK_MAX_AGE_MS,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function park_path(repository: string, issue: string): string {
|
|
49
|
+
return stamp_file.stamp_path(`${PARK_PREFIX}${issue}-`, repository)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// **The directory is injectable so a test never writes the live record** — the same reason
|
|
53
|
+
// `run_cut.carried_cut_sync` takes one.
|
|
54
|
+
function record(issue: string, directory: string, now: Date = new Date()): boolean {
|
|
55
|
+
const repository = git_common_directory.repository(directory)
|
|
56
|
+
|
|
57
|
+
if (repository === undefined) return false
|
|
58
|
+
|
|
59
|
+
stamp_file.replace_stamp(park_path(repository, issue), { issue, parked_at: now.toISOString() })
|
|
60
|
+
|
|
61
|
+
return true
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function clear(issue: string, directory: string): void {
|
|
65
|
+
const repository = git_common_directory.repository(directory)
|
|
66
|
+
|
|
67
|
+
if (repository !== undefined) stamp_file.remove_stamp(park_path(repository, issue))
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// **A fault reads as "not parked"**, the direction `carried_cut_sync` takes: the guard then speaks once,
|
|
71
|
+
// which a child answers by reissuing, rather than falling silent on a run that never parked.
|
|
72
|
+
function is_parked_sync(issue: string, directory: string, now: Date = new Date()): boolean {
|
|
73
|
+
const repository = git_common_directory.repository(directory)
|
|
74
|
+
|
|
75
|
+
if (repository === undefined) return false
|
|
76
|
+
|
|
77
|
+
const read = stamp_record.classify(
|
|
78
|
+
stamp_file.read_stamp_text(park_path(repository, issue)),
|
|
79
|
+
PARK_SPEC,
|
|
80
|
+
now,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
return read.kind === 'carried' && read.record.issue === issue
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const run_park = { PARK_MAX_AGE_MS, clear, is_parked_sync, record }
|
|
87
|
+
|
|
88
|
+
export { run_park }
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { RUN_STALLED_LABEL } from '#scripts/issue/issue-labels'
|
|
3
|
+
|
|
4
|
+
// What a `run:stalled` park says, written and read in one place (joshuafolkken/kit#4215): the park
|
|
5
|
+
// event carries the cause's short name after the label, the park comment its whole `Why:`, and the
|
|
6
|
+
// park comments, `backlog:plan --waves` and `run:board` name the one next action.
|
|
7
|
+
|
|
8
|
+
// Why a child was parked: `short` rides on the park event and the board row, `why` on the comment.
|
|
9
|
+
interface StallCause {
|
|
10
|
+
short: string
|
|
11
|
+
why: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// What `run:merge` judged when it parks a child with no ship stop to name.
|
|
15
|
+
const SESSION_UNFINISHED: StallCause = {
|
|
16
|
+
short: 'session unfinished',
|
|
17
|
+
why: 'the child’s session ended with its issue still open and unfinished.',
|
|
18
|
+
}
|
|
19
|
+
const CUT_NOT_RELAUNCHED: StallCause = {
|
|
20
|
+
short: 'cut not relaunched',
|
|
21
|
+
why: 'its lane held a declared cut, but no successor could be relaunched from it (or it already was once).',
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const RESUME_COMMAND = 'fullrun'
|
|
25
|
+
const CAUSE_LEAD = `${RUN_STALLED_LABEL}: `
|
|
26
|
+
const NEXT_ARROW = ' → '
|
|
27
|
+
|
|
28
|
+
function resume_of(child: number | string): string {
|
|
29
|
+
return `${RESUME_COMMAND} ${issue_cite.plain(child)}`
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// The next action as a clause, which a park comment's `Next:` and the plan's note end with.
|
|
33
|
+
function next_step(child: number | string): string {
|
|
34
|
+
return `fix the cause, then resume it with \`${resume_of(child)}\` or remove \`${RUN_STALLED_LABEL}\` to offer it again`
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function park_event(child: number | string, cause: string): string {
|
|
38
|
+
return `${issue_cite.plain(child)} parked (${CAUSE_LEAD}${cause})`
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// The cause a park event's reason carries: `''` for a bare `run:stalled` (written before the event
|
|
42
|
+
// carried one), `undefined` for a reason that is no `run:stalled` park.
|
|
43
|
+
function cause_of(reason: string): string | undefined {
|
|
44
|
+
if (reason === RUN_STALLED_LABEL) return ''
|
|
45
|
+
|
|
46
|
+
return reason.startsWith(CAUSE_LEAD) ? reason.slice(CAUSE_LEAD.length) : undefined
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// A stalled row's right end: its cause, then the action that resumes it — the action alone where no
|
|
50
|
+
// cause was recorded.
|
|
51
|
+
function row_text(child: number | string, cause = ''): string {
|
|
52
|
+
const resume = resume_of(child)
|
|
53
|
+
|
|
54
|
+
return cause === '' ? resume : `${cause}${NEXT_ARROW}${resume}`
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const run_stalled = {
|
|
58
|
+
CUT_NOT_RELAUNCHED,
|
|
59
|
+
SESSION_UNFINISHED,
|
|
60
|
+
cause_of,
|
|
61
|
+
next_step,
|
|
62
|
+
park_event,
|
|
63
|
+
resume_of,
|
|
64
|
+
row_text,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { run_stalled }
|
|
68
|
+
export type { StallCause }
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
4
|
+
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
5
|
+
import { run_pause, type PauseRequest, type PauseResult, type StepReport } from './run-pause'
|
|
6
|
+
|
|
7
|
+
// `josh run:pause <M> --for <N>` — the argument parsing and the report around `run-pause.ts`. One
|
|
8
|
+
// line per step that landed; a failure names its step, what was already done, and the rerun that
|
|
9
|
+
// continues from there.
|
|
10
|
+
|
|
11
|
+
const SUCCESS_EXIT_CODE = 0
|
|
12
|
+
const FAILURE_EXIT_CODE = 1
|
|
13
|
+
const ARGV_OFFSET = 2
|
|
14
|
+
const USAGE = 'Usage: josh run:pause <issue> --for <prerequisite>'
|
|
15
|
+
const OPTIONS = { for: { type: 'string' } } as const
|
|
16
|
+
|
|
17
|
+
// The prerequisite has to be another issue: `#M` blocked by itself is no order at all.
|
|
18
|
+
function prerequisite_of(value: string | undefined, issue: string): string | undefined {
|
|
19
|
+
if (value === undefined || value === issue) return undefined
|
|
20
|
+
|
|
21
|
+
return issue_number_shape.is_issue_number(value) ? value : undefined
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function parse_request(argv: ReadonlyArray<string>): PauseRequest | undefined {
|
|
25
|
+
const parsed = cli_flags.arguments_of(argv, OPTIONS)
|
|
26
|
+
if (parsed === undefined) return undefined
|
|
27
|
+
const issue = issue_number_shape.single_of(parsed.positionals)
|
|
28
|
+
const prerequisite = issue === undefined ? undefined : prerequisite_of(parsed.values.for, issue)
|
|
29
|
+
|
|
30
|
+
return issue === undefined || prerequisite === undefined ? undefined : { issue, prerequisite }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function report_done(done: ReadonlyArray<StepReport>): void {
|
|
34
|
+
for (const { step, detail } of done) console.info(`${step}: ${detail}`)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function report_failure(request: PauseRequest, result: PauseResult & { kind: 'failed' }): void {
|
|
38
|
+
const steps = result.done.map(({ step }) => step).join(', ')
|
|
39
|
+
|
|
40
|
+
console.error(`✖ ${result.step} failed: ${result.reason}`)
|
|
41
|
+
console.error(`Done: ${steps.length === 0 ? 'nothing' : steps}.`)
|
|
42
|
+
console.error(
|
|
43
|
+
`Rerun \`pnpm josh run:pause ${request.issue} --for ${request.prerequisite}\` to continue from ${result.step}.`,
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
48
|
+
const request = parse_request(argv)
|
|
49
|
+
|
|
50
|
+
if (request === undefined) {
|
|
51
|
+
console.error(USAGE)
|
|
52
|
+
|
|
53
|
+
return FAILURE_EXIT_CODE
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const result = await run_pause.pause(request)
|
|
57
|
+
|
|
58
|
+
report_done(result.done)
|
|
59
|
+
if (result.kind === 'paused') return SUCCESS_EXIT_CODE
|
|
60
|
+
report_failure(request, result)
|
|
61
|
+
|
|
62
|
+
return FAILURE_EXIT_CODE
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
66
|
+
process.exitCode = await run(argv)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const run_pause_cli = { USAGE, run }
|
|
70
|
+
|
|
71
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
72
|
+
|
|
73
|
+
export { run_pause_cli }
|