@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 { josh_command } from '#scripts/josh/josh-run'
|
|
4
2
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
5
3
|
import { json_value } from '#scripts/lib/json-value'
|
|
@@ -7,6 +5,7 @@ import { rule_value_cache } from '#scripts/rules/rule-value-cache'
|
|
|
7
5
|
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
8
6
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
9
7
|
import { z } from 'zod'
|
|
8
|
+
import { backlog_next_shared } from './backlog-next-shared'
|
|
10
9
|
import { backlog_offer, type OfferAnswer } from './backlog-offer'
|
|
11
10
|
|
|
12
11
|
// `josh backlog:offer` — one composite command for a `backlogrun` loop-head event.
|
|
@@ -21,7 +20,6 @@ import { backlog_offer, type OfferAnswer } from './backlog-offer'
|
|
|
21
20
|
// and in the `--json` object; every explanation `backlog:next` and `backlog:budget` print is streamed
|
|
22
21
|
// straight through to stderr.
|
|
23
22
|
|
|
24
|
-
const ARGV_OFFSET = 2
|
|
25
23
|
const SUCCESS_EXIT_CODE = 0
|
|
26
24
|
const FAILURE_EXIT_CODE = 1
|
|
27
25
|
const JSON_KEY = 'offer'
|
|
@@ -36,7 +34,6 @@ const EXHAUSTED_ANSWER = 'exhausted'
|
|
|
36
34
|
const NO_RUNNING = 0
|
|
37
35
|
const DRAIN_TEXT = 'backlog drained'
|
|
38
36
|
const should_forward_stderr = true
|
|
39
|
-
const COUNT_PATTERN = /^\d+$/u
|
|
40
37
|
|
|
41
38
|
const USAGE =
|
|
42
39
|
'Usage: josh backlog:offer --started <ISO-8601> [--active <ISO-8601>] [--merged <n>] [--running <n>] [--max <n>] [--idle <minutes>] [--retries <n>] [--exclude <n>[,<n>...]]... [--repo <owner/repo>] [--json]'
|
|
@@ -65,18 +62,10 @@ function read_values(argv: ReadonlyArray<string>): ParsedValues | undefined {
|
|
|
65
62
|
return cli_flags.values_of(argv, OPTIONS)
|
|
66
63
|
}
|
|
67
64
|
|
|
68
|
-
function to_count(raw: string | undefined): number | undefined {
|
|
69
|
-
if (raw === undefined || !COUNT_PATTERN.test(raw)) return undefined
|
|
70
|
-
|
|
71
|
-
const parsed = Number(raw)
|
|
72
|
-
|
|
73
|
-
return Number.isSafeInteger(parsed) ? parsed : undefined
|
|
74
|
-
}
|
|
75
|
-
|
|
76
65
|
// A count flag that was given but unreadable makes the invocation unreadable rather than defaulted —
|
|
77
66
|
// the contract `backlog:budget` follows for its own counts.
|
|
78
67
|
function count_of(raw: string | undefined): number | undefined {
|
|
79
|
-
return raw === undefined ? DEFAULT_COUNT : to_count(raw)
|
|
68
|
+
return raw === undefined ? DEFAULT_COUNT : cli_flags.to_count(raw)
|
|
80
69
|
}
|
|
81
70
|
|
|
82
71
|
interface OfferCounts {
|
|
@@ -159,6 +148,8 @@ function emit(decision: BudgetRead, offer: OfferAnswer, is_json: boolean): numbe
|
|
|
159
148
|
verdict,
|
|
160
149
|
issues,
|
|
161
150
|
answer: offer.answer,
|
|
151
|
+
cause: offer.cause,
|
|
152
|
+
waiting: offer.waiting,
|
|
162
153
|
retries: offer.retries,
|
|
163
154
|
reason,
|
|
164
155
|
is_finish,
|
|
@@ -198,9 +189,9 @@ async function mark_drain(verdict: string, answer: string, running: number): Pro
|
|
|
198
189
|
}
|
|
199
190
|
|
|
200
191
|
async function decide(values: ParsedValues, counts: OfferCounts): Promise<number> {
|
|
201
|
-
const next = await
|
|
192
|
+
const next = await backlog_next_shared.read(next_argv(values), should_forward_stderr)
|
|
202
193
|
const offer = backlog_offer.answer_of(
|
|
203
|
-
{ code: next.code, tokens: to_tokens(next.out) },
|
|
194
|
+
{ code: next.code, tokens: to_tokens(next.out), err: next.err },
|
|
204
195
|
counts.running,
|
|
205
196
|
counts.retries,
|
|
206
197
|
)
|
|
@@ -239,10 +230,6 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
239
230
|
return await decide(values, counts)
|
|
240
231
|
}
|
|
241
232
|
|
|
242
|
-
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
243
|
-
process.exitCode = await run(argv)
|
|
244
|
-
}
|
|
245
|
-
|
|
246
233
|
const backlog_offer_cli = {
|
|
247
234
|
JSON_KEY,
|
|
248
235
|
budget_argv,
|
|
@@ -252,7 +239,5 @@ const backlog_offer_cli = {
|
|
|
252
239
|
run,
|
|
253
240
|
}
|
|
254
241
|
|
|
255
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
256
|
-
|
|
257
242
|
export { backlog_offer_cli }
|
|
258
243
|
export type { ParsedValues }
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const LIST_SEPARATOR = ','
|
|
2
|
+
|
|
3
|
+
// **A child in flight is never offered**, nor a settled one `backlog:next` still reads OPEN — merged, or
|
|
4
|
+
// withdrawn from this run (joshuafolkken/kit#4365). The drive builds this list from its state and the
|
|
5
|
+
// stall detector from the event stream (joshuafolkken/kit#4349); both go through here. Kept free of the
|
|
6
|
+
// drive's imports so a reader of the stream does not load it.
|
|
7
|
+
function exclude_of(settled: Iterable<string>, in_flight: Iterable<string>): ReadonlyArray<string> {
|
|
8
|
+
return [...new Set([...settled, ...in_flight])]
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function exclude_argv(exclude: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
12
|
+
return exclude.length === 0 ? [] : ['--exclude', exclude.join(LIST_SEPARATOR)]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const backlog_offer_exclude = { exclude_argv, exclude_of }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { backlog_offer_cli } from './backlog-offer-cli'
|
|
4
|
+
|
|
5
|
+
// The `josh backlog:offer` entry, kept apart from `backlog-offer-cli.ts` because other modules import
|
|
6
|
+
// that one: a bundle is one file, so a main guard there would fire for every command that carries it
|
|
7
|
+
// (joshuafolkken/kit#4186).
|
|
8
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
|
+
const ARGV_OFFSET = 2
|
|
10
|
+
|
|
11
|
+
process.exitCode = await backlog_offer_cli.run(process.argv.slice(ARGV_OFFSET))
|
|
12
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { epic_solo } from '#scripts/epic/epic-solo'
|
|
1
2
|
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
2
3
|
import type { BacklogAnswer } from './backlog-budget'
|
|
3
4
|
import { backlog_next } from './backlog-next'
|
|
5
|
+
import { backlog_wait_cause } from './backlog-wait-cause'
|
|
4
6
|
|
|
5
7
|
// The mechanical half of `josh backlog:offer`: turn what `backlog:next`
|
|
6
8
|
// answered — its stdout tokens and its exit code — into the one word `backlog:budget` is then asked
|
|
@@ -21,10 +23,15 @@ const NO_RETRIES = 0
|
|
|
21
23
|
|
|
22
24
|
const TOKENS = backlog_next.VERDICT_TOKENS
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
const BLOCKED_ANSWER = 'blocked'
|
|
27
|
+
const SOLO_CAUSE = 'solo'
|
|
28
|
+
|
|
29
|
+
// `backlog:next`'s captured result: the exit code, the trimmed stdout as one token per line, and the
|
|
30
|
+
// stderr its explanations went to.
|
|
25
31
|
interface NextRead {
|
|
26
32
|
code: number
|
|
27
33
|
tokens: ReadonlyArray<string>
|
|
34
|
+
err?: string | undefined
|
|
28
35
|
}
|
|
29
36
|
|
|
30
37
|
interface OfferAnswer {
|
|
@@ -32,6 +39,12 @@ interface OfferAnswer {
|
|
|
32
39
|
issues: ReadonlyArray<string>
|
|
33
40
|
// The consecutive-retry count after this ask — reset to zero by any answer that is not `retry`.
|
|
34
41
|
retries: number
|
|
42
|
+
// Why a `wait` answer started nothing, where `backlog:next` said: `solo` for the `run:solo` gate,
|
|
43
|
+
// so `lane:stats` rows that wait apart from every other one (joshuafolkken/kit#4396); `chain`,
|
|
44
|
+
// `gate` or `chain+gate` for the waits `backlog-wait-cause.ts` names (joshuafolkken/kit#4513).
|
|
45
|
+
cause?: string
|
|
46
|
+
// The issues a `chain` / `gate` cause waited on, recorded with the hold.
|
|
47
|
+
waiting?: ReadonlyArray<number> | undefined
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
// The verdict words that map to one answer regardless of context. `wait` and `retry` are the two that
|
|
@@ -46,7 +59,7 @@ const VERDICT_ANSWERS: Readonly<Record<string, BacklogAnswer>> = {
|
|
|
46
59
|
// `wait` is `blocked` while this run has children in flight and `exhausted` when it does not — the
|
|
47
60
|
// mapping `backlog:budget` states, decided from the running count alone.
|
|
48
61
|
function wait_answer(running: number): BacklogAnswer {
|
|
49
|
-
return running > 0 ?
|
|
62
|
+
return running > 0 ? BLOCKED_ANSWER : 'exhausted'
|
|
50
63
|
}
|
|
51
64
|
|
|
52
65
|
// An unrecognized token is read as `unreadable` rather than guessed at: an answer the loop cannot
|
|
@@ -73,6 +86,24 @@ function is_numbers(tokens: ReadonlyArray<string>): boolean {
|
|
|
73
86
|
return tokens.length > 0 && tokens.every((token) => issue_number_shape.is_issue_number(token))
|
|
74
87
|
}
|
|
75
88
|
|
|
89
|
+
// What `backlog:next`'s stderr says a blocked wait was for: the `run:solo` gate's notice first, then
|
|
90
|
+
// the waiting issues' causes, or nothing when it names neither.
|
|
91
|
+
function blocked_cause(error: string): Pick<OfferAnswer, 'cause' | 'waiting'> {
|
|
92
|
+
if (epic_solo.is_solo_wait(error)) return { cause: SOLO_CAUSE }
|
|
93
|
+
|
|
94
|
+
const causes = backlog_wait_cause.parse(error)
|
|
95
|
+
const tag = backlog_wait_cause.tag_of(causes)
|
|
96
|
+
|
|
97
|
+
return tag === undefined ? {} : { cause: tag, waiting: backlog_wait_cause.numbers_of(causes) }
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// A `wait` answer marked with its cause. An `exhausted` wait is marked too: the idle watch it opens
|
|
101
|
+
// holds a free lane as long as a `blocked` one, and a hold with nothing in flight here (a start date,
|
|
102
|
+
// or a blocker another session runs) is still that wait, not an empty backlog.
|
|
103
|
+
function with_cause(offer: OfferAnswer, token: string, error: string): OfferAnswer {
|
|
104
|
+
return token === TOKENS.wait ? { ...offer, ...blocked_cause(error) } : offer
|
|
105
|
+
}
|
|
106
|
+
|
|
76
107
|
// **Read the exit code before the tokens.** Exit 1 is "the listing could not be read", which is never
|
|
77
108
|
// an empty backlog — reading it as `none` would report an emptiness that was never seen, so it maps to
|
|
78
109
|
// `unreadable`, and a stray stdout line on that path cannot be mistaken for an issue number.
|
|
@@ -85,7 +116,9 @@ function answer_of(read: NextRead, running: number, retries: number): OfferAnswe
|
|
|
85
116
|
return { answer: 'candidates', issues: read.tokens, retries: NO_RETRIES }
|
|
86
117
|
}
|
|
87
118
|
|
|
88
|
-
|
|
119
|
+
const token = read.tokens[0] ?? ''
|
|
120
|
+
|
|
121
|
+
return with_cause(from_verdict(token, running, retries), token, read.err ?? '')
|
|
89
122
|
}
|
|
90
123
|
|
|
91
124
|
const backlog_offer = { RETRY_LIMIT, answer_of, verdict_answer, wait_answer }
|
|
@@ -2,6 +2,7 @@ import type { BusyRead } from '#scripts/epic/epic-busy'
|
|
|
2
2
|
import type { EpicChild } from '#scripts/epic/epic-graph'
|
|
3
3
|
import type { SoloSelection } from '#scripts/epic/epic-solo'
|
|
4
4
|
import { session_cite } from '#scripts/issue/session-cite'
|
|
5
|
+
import { lane_state, type LaneRecords } from '#scripts/lane/lane-state'
|
|
5
6
|
|
|
6
7
|
// Which candidates may not run side by side because their bodies declare overlapping paths.
|
|
7
8
|
// joshuafolkken/kit#3221 held back only a path both bodies named beside a move, split, rename or
|
|
@@ -76,6 +77,8 @@ function overlaps(left: string, right: string): boolean {
|
|
|
76
77
|
interface SeparateContext {
|
|
77
78
|
read: BusyRead
|
|
78
79
|
repo: string
|
|
80
|
+
// The holders' lane state records, so a clash names a paused holder (joshuafolkken/kit#4270).
|
|
81
|
+
lanes?: LaneRecords | undefined
|
|
79
82
|
}
|
|
80
83
|
|
|
81
84
|
// The path each of `holders` declares, mapped to the issue that holds it.
|
|
@@ -130,15 +133,29 @@ function running_clash(child: EpicChild, declared: Declared, holding: Holding):
|
|
|
130
133
|
return clash_of(claims, paths_of(child, declared, holding.repo))
|
|
131
134
|
}
|
|
132
135
|
|
|
133
|
-
|
|
136
|
+
// Whether `waiting` declares a path `holder` declares — the overlap `separate` withholds it on.
|
|
137
|
+
function holds(declared: Declared, holder: number, waiting: number): boolean {
|
|
138
|
+
return clash_of(claims_of(declared, [holder]), declared.get(waiting) ?? new Set()) !== undefined
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ` — paused since 01:28 by lane:pause` for a holder whose lane is paused: it holds the path while
|
|
142
|
+
// nothing moves, so the wait lasts until someone resumes it.
|
|
143
|
+
function paused_tail(clash: Clash, lanes: LaneRecords): string {
|
|
144
|
+
const note = lane_state.paused_note(lanes.get(String(clash.holder)))
|
|
145
|
+
|
|
146
|
+
return note === undefined ? '' : ` — ${note}`
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function clash_note(child: EpicChild, clash: Clash, lanes: LaneRecords): string {
|
|
134
150
|
const waiting = session_cite.issue(child.number, undefined, child.repo)
|
|
135
151
|
const holder = session_cite.issue(clash.holder, undefined, child.repo)
|
|
136
152
|
|
|
137
|
-
return `${waiting} waits: its \`${clash.path}\` overlaps \`${clash.claimed}\`, which ${holder} declares.`
|
|
153
|
+
return `${waiting} waits: its \`${clash.path}\` overlaps \`${clash.claimed}\`, which ${holder} declares${paused_tail(clash, lanes)}.`
|
|
138
154
|
}
|
|
139
155
|
|
|
140
156
|
interface Walk {
|
|
141
157
|
claims: Map<string, number>
|
|
158
|
+
lanes: LaneRecords
|
|
142
159
|
offered: Array<EpicChild>
|
|
143
160
|
withheld: Array<EpicChild>
|
|
144
161
|
notes: Array<string>
|
|
@@ -155,7 +172,7 @@ function visit(walk: Walk, child: EpicChild, paths: ReadonlySet<string>): void {
|
|
|
155
172
|
}
|
|
156
173
|
|
|
157
174
|
walk.withheld.push(child)
|
|
158
|
-
walk.notes.push(clash_note(child, clash))
|
|
175
|
+
walk.notes.push(clash_note(child, clash, walk.lanes))
|
|
159
176
|
}
|
|
160
177
|
|
|
161
178
|
function merged_notice(
|
|
@@ -176,6 +193,7 @@ function separate(
|
|
|
176
193
|
): SoloSelection {
|
|
177
194
|
const walk: Walk = {
|
|
178
195
|
claims: running_claims(declared, context.read),
|
|
196
|
+
lanes: context.lanes ?? new Map(),
|
|
179
197
|
offered: [],
|
|
180
198
|
withheld: [],
|
|
181
199
|
notes: [],
|
|
@@ -189,7 +207,7 @@ function separate(
|
|
|
189
207
|
return { offered: walk.offered, withheld, ...(notice !== undefined && { notice }) }
|
|
190
208
|
}
|
|
191
209
|
|
|
192
|
-
const backlog_overlap = { declared_of, declared_paths, running_clash, separate }
|
|
210
|
+
const backlog_overlap = { declared_of, declared_paths, holds, running_clash, separate }
|
|
193
211
|
|
|
194
212
|
export { backlog_overlap }
|
|
195
213
|
export type { Clash, Declared }
|
|
@@ -4,6 +4,7 @@ import type { EpicNextResult } from '#scripts/epic/epic-report'
|
|
|
4
4
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
5
5
|
import { open_issue_schema, type OpenIssueData } from '#scripts/git/git-schemas'
|
|
6
6
|
import { read_json_listing } from '#scripts/git/parse-json-array'
|
|
7
|
+
import { issue_sample_gate } from '#scripts/issue/issue-sample-gate'
|
|
7
8
|
import { backlog_next, type OptedIn } from './backlog-next'
|
|
8
9
|
import type { PlanContext } from './backlog-plan'
|
|
9
10
|
import type { GateScope } from './backlog-rank'
|
|
@@ -60,7 +61,7 @@ async function classify(
|
|
|
60
61
|
repo: context.repo,
|
|
61
62
|
exclude,
|
|
62
63
|
tracked: epic_index.withheld_children(context.tracking.index, context.opted_in.issues),
|
|
63
|
-
scope: backlog_next.gate_scope(context),
|
|
64
|
+
scope: await backlog_next.gate_scope(context),
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
|
|
@@ -74,7 +75,10 @@ async function fetch_open(): Promise<OpenListing | undefined> {
|
|
|
74
75
|
|
|
75
76
|
const read = read_json_listing(json, open_issue_schema)
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
if (read.kind !== 'read') return undefined
|
|
79
|
+
await issue_sample_gate.prime(read.rows.map((row) => row.body))
|
|
80
|
+
|
|
81
|
+
return { rows: read.rows, is_capped }
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
// A cut listing cannot say an issue is closed, only that it was not read — so the blocker filter is
|
|
@@ -4,7 +4,12 @@ import { epic_report, type EpicNextResult } from '#scripts/epic/epic-report'
|
|
|
4
4
|
import { epic_solo } from '#scripts/epic/epic-solo'
|
|
5
5
|
import { epic_triage } from '#scripts/epic/epic-triage'
|
|
6
6
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
has_label_name,
|
|
9
|
+
IN_PROGRESS_LABEL,
|
|
10
|
+
PARKED_LABELS,
|
|
11
|
+
RUN_SOLO_LABEL,
|
|
12
|
+
} from '#scripts/issue/issue-labels'
|
|
8
13
|
import type { OutOfScopeRow } from './backlog-scope'
|
|
9
14
|
|
|
10
15
|
// The plan a person reads before a `backlogrun` starts.
|
|
@@ -30,8 +35,9 @@ const ONLY_NAMED_HEADING =
|
|
|
30
35
|
const READY_HEADING =
|
|
31
36
|
'Ready now — each takes a free lane in its repository, so these may run in parallel:'
|
|
32
37
|
const WAITING_HEADING = 'Waiting — each names what it is waiting on:'
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
// Every park label (`PARKED_LABELS`) puts a child here, so the heading names none and each row names
|
|
39
|
+
// its own: a `run:stalled` row read as `needs-decision` sends a person to decide a mechanical failure.
|
|
40
|
+
const HUMAN_HEADING = 'Waiting on a person — resolve these before the run starts:'
|
|
35
41
|
const SCOPE_HEADING = 'Out of scope — open, but the backlog will not run these:'
|
|
36
42
|
// `epic_report`'s own words for the same condition, so the plan and the run name it identically.
|
|
37
43
|
const UNUSABLE_HEADING = 'The dependency graph is unusable, so there is no plan:'
|
|
@@ -150,6 +156,14 @@ function child_lines(
|
|
|
150
156
|
return children.map((child) => row_of(child, context, note(child)))
|
|
151
157
|
}
|
|
152
158
|
|
|
159
|
+
// The park labels a child carries, so its row says what the person is asked for.
|
|
160
|
+
function park_note(child: EpicChild): string {
|
|
161
|
+
return [...PARKED_LABELS]
|
|
162
|
+
.filter((label) => has_label_name(child.labels, label))
|
|
163
|
+
.map((label) => `\`${label}\``)
|
|
164
|
+
.join(', ')
|
|
165
|
+
}
|
|
166
|
+
|
|
153
167
|
// A section whose rows say nothing beyond naming the issue: being under the heading is the whole
|
|
154
168
|
// statement.
|
|
155
169
|
function no_note(): string {
|
|
@@ -239,7 +253,7 @@ function format_plan(
|
|
|
239
253
|
'',
|
|
240
254
|
section(WAITING_HEADING, waiting_lines(result.waiting, context)),
|
|
241
255
|
'',
|
|
242
|
-
section(HUMAN_HEADING, child_lines(result.blocked_on_people, context,
|
|
256
|
+
section(HUMAN_HEADING, child_lines(result.blocked_on_people, context, park_note)),
|
|
243
257
|
'',
|
|
244
258
|
section(SCOPE_HEADING, scope_lines(out_of_scope, context.repo)),
|
|
245
259
|
].join('\n')
|
|
@@ -7,12 +7,7 @@ import type { EpicView } from '#scripts/epic/epic-next-views'
|
|
|
7
7
|
import { epic_outside_blocker } from '#scripts/epic/epic-outside-blocker'
|
|
8
8
|
import type { OpenIssueData } from '#scripts/git/git-schemas'
|
|
9
9
|
import { git_next_issues } from '#scripts/issue/git-next-issues'
|
|
10
|
-
import {
|
|
11
|
-
ALREADY_DONE_LABEL,
|
|
12
|
-
EPIC_LABEL,
|
|
13
|
-
has_any_label,
|
|
14
|
-
NEEDS_DECISION_LABEL,
|
|
15
|
-
} from '#scripts/issue/issue-labels'
|
|
10
|
+
import { EPIC_LABEL, has_any_label, PARKED_LABELS } from '#scripts/issue/issue-labels'
|
|
16
11
|
|
|
17
12
|
// The candidate pool `josh backlog:next` answers from.
|
|
18
13
|
//
|
|
@@ -25,11 +20,12 @@ import {
|
|
|
25
20
|
|
|
26
21
|
const EPIC_LABELS: ReadonlySet<string> = new Set([EPIC_LABEL])
|
|
27
22
|
// The labels that put a withheld row in the "needs a person" bucket rather than the "waiting on
|
|
28
|
-
// time" one. `already-done`
|
|
29
|
-
// work is merged and the close is Tier C,
|
|
23
|
+
// time" one are the park labels (`PARKED_LABELS`). `already-done` and `run:stalled` belong with
|
|
24
|
+
// `needs-decision` because no amount of waiting moves them: the work is merged and the close is Tier C,
|
|
25
|
+
// or a mechanical cause has to be fixed, so a person is the only thing that resolves it.
|
|
30
26
|
// Read as `time`, it would be reported as something that resolves itself
|
|
31
|
-
// and nobody would ever be told to
|
|
32
|
-
const DECISION_LABELS: ReadonlySet<string> =
|
|
27
|
+
// and nobody would ever be told to act on it.
|
|
28
|
+
const DECISION_LABELS: ReadonlySet<string> = PARKED_LABELS
|
|
33
29
|
|
|
34
30
|
// What decides whether a standalone row is offered: the children an opted-in epic is going to offer
|
|
35
31
|
// instead, the ones the caller has named as done, and the repository the rows belong to.
|
|
@@ -140,6 +136,9 @@ function settle_standalone(
|
|
|
140
136
|
// `epic_issue.blocker_references_of` is the epic side's own resolution —
|
|
141
137
|
// `repository_url` when the node names one, this repository only as the fallback an unqualified
|
|
142
138
|
// relation has always meant — and it is reused rather than repeated.
|
|
139
|
+
//
|
|
140
|
+
// The body rides along as an epic child's does, so a declared start time (`issue-not-before.ts`)
|
|
141
|
+
// reaches the classification and the board's waiting row for a standalone row too (#4014).
|
|
143
142
|
function to_child(issue: OpenIssueData, repo: string): EpicChild {
|
|
144
143
|
return {
|
|
145
144
|
number: issue.number,
|
|
@@ -147,6 +146,7 @@ function to_child(issue: OpenIssueData, repo: string): EpicChild {
|
|
|
147
146
|
state: 'OPEN',
|
|
148
147
|
labels: (issue.labels ?? []).map((label) => label.name),
|
|
149
148
|
blocked_by: epic_issue.blocker_references_of(issue, repo),
|
|
149
|
+
body: issue.body,
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
|
|
@@ -4,6 +4,7 @@ import { epic_rank } from '#scripts/epic/epic-rank'
|
|
|
4
4
|
import type { EpicNextResult } from '#scripts/epic/epic-report'
|
|
5
5
|
import { epic_solo, type SoloGate, type SoloSelection } from '#scripts/epic/epic-solo'
|
|
6
6
|
import { git_next_issues } from '#scripts/issue/git-next-issues'
|
|
7
|
+
import type { LaneRecords } from '#scripts/lane/lane-state'
|
|
7
8
|
import { backlog_overlap, type Declared } from './backlog-overlap'
|
|
8
9
|
|
|
9
10
|
// What the backlog offers, in the order it is decided: rank, then the
|
|
@@ -82,15 +83,21 @@ interface OfferInput {
|
|
|
82
83
|
// The paths each issue declares; two candidates whose paths overlap are not offered together.
|
|
83
84
|
// Absent, nothing is separated.
|
|
84
85
|
declared?: Declared
|
|
86
|
+
// The issues' lane state records; a clash with a paused holder says so. Absent, none is named.
|
|
87
|
+
lanes?: LaneRecords
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
// The overlap separation runs before the cap, for the reason the gate does: the cap only ever
|
|
88
91
|
// removes what would otherwise be offered.
|
|
89
92
|
function select(input: OfferInput): SoloSelection {
|
|
90
93
|
const ranked = rank(input.candidates, input.pool)
|
|
91
|
-
const { read, repo } = input
|
|
94
|
+
const { read, repo, lanes } = input
|
|
92
95
|
const gated = epic_solo.select(ranked, read, repo)
|
|
93
|
-
const separated = backlog_overlap.separate(gated, input.declared ?? new Map(), {
|
|
96
|
+
const separated = backlog_overlap.separate(gated, input.declared ?? new Map(), {
|
|
97
|
+
read,
|
|
98
|
+
repo,
|
|
99
|
+
lanes,
|
|
100
|
+
})
|
|
94
101
|
|
|
95
102
|
return cap(separated, input.standalone)
|
|
96
103
|
}
|
|
@@ -98,6 +105,7 @@ function select(input: OfferInput): SoloSelection {
|
|
|
98
105
|
interface GateScope {
|
|
99
106
|
standalone: ReadonlySet<string>
|
|
100
107
|
declared: Declared
|
|
108
|
+
lanes?: LaneRecords
|
|
101
109
|
}
|
|
102
110
|
|
|
103
111
|
// `backlog:next`'s gate: `epic_solo.gate` with this selection in place of its bare one.
|