@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
|
@@ -2,27 +2,53 @@ import {
|
|
|
2
2
|
has_label_name,
|
|
3
3
|
IN_PROGRESS_LABEL,
|
|
4
4
|
NEEDS_DECISION_LABEL,
|
|
5
|
+
RUN_STALLED_LABEL,
|
|
5
6
|
} from '#scripts/issue/issue-labels'
|
|
7
|
+
import type { Span } from '#scripts/lane/lane-spans'
|
|
6
8
|
import type { PrChecks } from '#scripts/run/event/run-event-checks'
|
|
7
9
|
import { run_event_scope } from '#scripts/run/event/run-event-scope'
|
|
8
10
|
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
9
11
|
import { run_board_checks } from './run-board-checks'
|
|
10
12
|
import type { ClosedIssue } from './run-board-closed'
|
|
13
|
+
import { run_board_ending_reason } from './run-board-ending-reason'
|
|
11
14
|
import { run_board_lane_event, type LaneEvent } from './run-board-lane-event'
|
|
15
|
+
import type { BoardLanes } from './run-board-lane-state'
|
|
16
|
+
import { run_board_lane_time } from './run-board-lane-time'
|
|
12
17
|
import { run_board_phase, type Phase } from './run-board-phase'
|
|
13
18
|
import { run_board_setup, type SetupRead } from './run-board-setup'
|
|
14
19
|
|
|
15
|
-
// What each issue of a run is doing now, read from the run's own event stream and
|
|
20
|
+
// What each issue of a run is doing now, read from the run's own event stream and what each open lane's
|
|
21
|
+
// record says (`run-board-lane-state.ts`).
|
|
16
22
|
// Local reads only — no `gh` call — so `run:board` can redraw it every few seconds; the plan these
|
|
17
|
-
// statuses are laid over is the slow GitHub half, and so is what a child that left the open listing
|
|
18
|
-
// answers when read closed.
|
|
19
|
-
|
|
20
|
-
type ItemState =
|
|
23
|
+
// statuses are laid over is the slow GitHub half, and so is what a child that left the open listing,
|
|
24
|
+
// or is drawn stopped, answers when read closed.
|
|
25
|
+
|
|
26
|
+
type ItemState =
|
|
27
|
+
| 'running'
|
|
28
|
+
| 'paused'
|
|
29
|
+
| 'merged'
|
|
30
|
+
| 'parked'
|
|
31
|
+
| 'done'
|
|
32
|
+
| 'waiting'
|
|
33
|
+
| 'human'
|
|
34
|
+
| 'stopped'
|
|
35
|
+
| 'withdrawn'
|
|
36
|
+
// An open lane with no lane state record — drawn as unknown, never guessed (joshuafolkken/kit#4269).
|
|
37
|
+
| 'unknown'
|
|
21
38
|
|
|
22
39
|
interface ItemStatus {
|
|
23
40
|
state: ItemState
|
|
41
|
+
// When the child first launched in this run — a re-dispatch or a restart does not move it.
|
|
24
42
|
started_ms?: number | undefined
|
|
43
|
+
// Each launch of the child in this run until what took it off the lanes (`run-board-lane-time.ts`):
|
|
44
|
+
// the row's time is their sum, not the gaps between them.
|
|
45
|
+
spans?: ReadonlyArray<Span> | undefined
|
|
46
|
+
// The child's newest launch, present only where it launched again after `started_ms` — what the
|
|
47
|
+
// GitHub read is weighed against.
|
|
48
|
+
launched_ms?: number | undefined
|
|
25
49
|
ended_ms?: number | undefined
|
|
50
|
+
// The lane time the event that ended the child recorded (joshuafolkken/kit#4481), where it carries one.
|
|
51
|
+
elapsed_ms?: number | undefined
|
|
26
52
|
// The seat-free lane label (`lane <N>`) of a running child, when it holds one — the running test reads
|
|
27
53
|
// it; the board does not draw it.
|
|
28
54
|
lane?: string | undefined
|
|
@@ -30,6 +56,10 @@ interface ItemStatus {
|
|
|
30
56
|
track?: ReadonlyArray<Phase> | undefined
|
|
31
57
|
// When a running child entered the phase its track ends on — the event that moved it there.
|
|
32
58
|
phase_ms?: number | undefined
|
|
59
|
+
// Why the park or withdraw that ended the child ended it, where its event gives a reason.
|
|
60
|
+
reason?: string | undefined
|
|
61
|
+
// The command that paused a paused lane, read off its lane state record (`run-board-lane-state.ts`).
|
|
62
|
+
paused_by?: string | undefined
|
|
33
63
|
}
|
|
34
64
|
|
|
35
65
|
interface LatestEvent {
|
|
@@ -61,25 +91,40 @@ const ENDING_STATES: Readonly<Partial<Record<string, ItemState>>> = {
|
|
|
61
91
|
[KIND.PARK]: 'parked',
|
|
62
92
|
[KIND.SPLIT]: 'done',
|
|
63
93
|
[KIND.STOP]: 'done',
|
|
94
|
+
[KIND.WITHDRAW]: 'withdrawn',
|
|
64
95
|
}
|
|
65
96
|
// A cut or a resume says the child is still running, on whatever phase it had reached.
|
|
66
97
|
const CONTINUING_KINDS: ReadonlySet<string> = new Set([KIND.CUT, KIND.RESUME])
|
|
67
|
-
// A person's restart
|
|
68
|
-
|
|
98
|
+
// A person's restart, and a re-dispatch after an outage, start the child over in a fresh session, so
|
|
99
|
+
// its track starts over too; its time does not (`launched`).
|
|
100
|
+
const { LAUNCH_KINDS } = run_board_lane_time
|
|
69
101
|
// What the GitHub read may still settle: a running child, and one whose lane has no child left in it —
|
|
70
102
|
// a child that merged and then died is drawn merged, not stopped.
|
|
71
|
-
const UNSETTLED_STATES: ReadonlySet<ItemState> = new Set(['running', 'stopped'])
|
|
103
|
+
const UNSETTLED_STATES: ReadonlySet<ItemState> = new Set(['running', 'paused', 'stopped'])
|
|
104
|
+
// A parked child waits on a person, who may close its issue after the park; only a closed read settles
|
|
105
|
+
// it again, so one still open stays parked whatever its labels say (joshuafolkken/kit#3958).
|
|
106
|
+
const PARKED_STATE: ItemState = 'parked'
|
|
72
107
|
|
|
73
108
|
function moment(event: RunEvent): number {
|
|
74
109
|
return Date.parse(event.at)
|
|
75
110
|
}
|
|
76
111
|
|
|
77
|
-
|
|
112
|
+
// The newest launch carried on, where the child launched more than once.
|
|
113
|
+
function relaunch_of(status: ItemStatus | undefined): Pick<ItemStatus, 'launched_ms'> {
|
|
114
|
+
const launched_ms = status?.launched_ms
|
|
115
|
+
|
|
116
|
+
return launched_ms === undefined ? {} : { launched_ms }
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// joshuafolkken/kit#3971: a launch keeps the start of the child's first one in this run.
|
|
120
|
+
function launched(previous: ItemStatus | undefined, event: RunEvent): ItemStatus {
|
|
78
121
|
const at_ms = moment(event)
|
|
122
|
+
const started_ms = previous?.started_ms ?? at_ms
|
|
79
123
|
|
|
80
124
|
return {
|
|
81
125
|
state: 'running',
|
|
82
|
-
started_ms
|
|
126
|
+
started_ms,
|
|
127
|
+
...(started_ms !== at_ms && { launched_ms: at_ms }),
|
|
83
128
|
track: [run_board_phase.LAUNCHED_PHASE],
|
|
84
129
|
phase_ms: at_ms,
|
|
85
130
|
}
|
|
@@ -95,20 +140,40 @@ function moved(previous: ItemStatus, track: ReadonlyArray<Phase>, event: RunEven
|
|
|
95
140
|
|
|
96
141
|
// The status a child settles into: its start and the track it had reached, so a settled row still
|
|
97
142
|
// draws how it got there.
|
|
98
|
-
|
|
143
|
+
// What a settled child keeps of its run: its newest launch, its spans on a lane, and its track.
|
|
144
|
+
function kept_of(
|
|
145
|
+
previous: ItemStatus | undefined,
|
|
146
|
+
): Pick<ItemStatus, 'launched_ms' | 'spans' | 'track'> {
|
|
147
|
+
const spans = previous?.spans
|
|
99
148
|
const track = previous?.track
|
|
100
149
|
|
|
101
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
...relaunch_of(previous),
|
|
152
|
+
...(spans !== undefined && { spans }),
|
|
153
|
+
...(track !== undefined && { track }),
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function settled_as(previous: ItemStatus | undefined, state: ItemState): ItemStatus {
|
|
158
|
+
return { state, started_ms: previous?.started_ms, ...kept_of(previous) }
|
|
102
159
|
}
|
|
103
160
|
|
|
104
161
|
function ended(previous: ItemStatus | undefined, state: ItemState, event: RunEvent): ItemStatus {
|
|
105
|
-
return {
|
|
162
|
+
return {
|
|
163
|
+
...settled_as(previous, state),
|
|
164
|
+
ended_ms: moment(event),
|
|
165
|
+
...run_board_ending_reason.recorded_of(event),
|
|
166
|
+
}
|
|
106
167
|
}
|
|
107
168
|
|
|
108
|
-
|
|
109
|
-
|
|
169
|
+
// A cut or a resume carries on a child the stream already holds; with none it says nothing, so no
|
|
170
|
+
// status is made from it alone (joshuafolkken/kit#4269).
|
|
171
|
+
function continued(previous: ItemStatus | undefined): ItemStatus | undefined {
|
|
172
|
+
if (previous === undefined) return undefined
|
|
173
|
+
|
|
174
|
+
const { started_ms, track, phase_ms } = previous
|
|
110
175
|
|
|
111
|
-
return { state: 'running', started_ms, track, phase_ms }
|
|
176
|
+
return { state: 'running', started_ms, ...relaunch_of(previous), track, phase_ms }
|
|
112
177
|
}
|
|
113
178
|
|
|
114
179
|
// A stage line carrying its attempt redraws the track of any child launched on this stream — a settled
|
|
@@ -143,7 +208,7 @@ function advanced(previous: ItemStatus | undefined, event: RunEvent): ItemStatus
|
|
|
143
208
|
|
|
144
209
|
// One event folded into the status of the child it names; an event the board does not track keeps it.
|
|
145
210
|
function next_status(previous: ItemStatus | undefined, event: RunEvent): ItemStatus | undefined {
|
|
146
|
-
if (LAUNCH_KINDS.has(event.kind)) return launched(event)
|
|
211
|
+
if (LAUNCH_KINDS.has(event.kind)) return launched(previous, event)
|
|
147
212
|
|
|
148
213
|
const ending = ENDING_STATES[event.kind]
|
|
149
214
|
|
|
@@ -152,8 +217,13 @@ function next_status(previous: ItemStatus | undefined, event: RunEvent): ItemSta
|
|
|
152
217
|
return CONTINUING_KINDS.has(event.kind) ? continued(previous) : advanced(previous, event)
|
|
153
218
|
}
|
|
154
219
|
|
|
155
|
-
|
|
156
|
-
|
|
220
|
+
// `seed` is what each issue is doing before `events` — a lane's record, so a cut or a stage line whose
|
|
221
|
+
// launch rolled off the stream carries the child on.
|
|
222
|
+
function fold_events(
|
|
223
|
+
events: ReadonlyArray<RunEvent>,
|
|
224
|
+
seed: ReadonlyMap<number, ItemStatus> = new Map(),
|
|
225
|
+
): Map<number, ItemStatus> {
|
|
226
|
+
const statuses = new Map(seed)
|
|
157
227
|
|
|
158
228
|
for (const event of events) {
|
|
159
229
|
const issue = Number(run_event_scope.issue_named(event))
|
|
@@ -165,53 +235,89 @@ function fold_events(events: ReadonlyArray<RunEvent>): Map<number, ItemStatus> {
|
|
|
165
235
|
return statuses
|
|
166
236
|
}
|
|
167
237
|
|
|
168
|
-
//
|
|
169
|
-
// over
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
238
|
+
// joshuafolkken/kit#4267: the board redraws every second but rereads the stream every few, and a read
|
|
239
|
+
// hands over a new `events` array, so a fold keyed on the array is folded once per read, not per redraw.
|
|
240
|
+
type EventsMemo<Value> = WeakMap<ReadonlyArray<RunEvent>, Value>
|
|
241
|
+
|
|
242
|
+
function remembered<Value>(
|
|
243
|
+
memo: EventsMemo<Value>,
|
|
173
244
|
events: ReadonlyArray<RunEvent>,
|
|
174
|
-
|
|
175
|
-
):
|
|
176
|
-
|
|
245
|
+
fold: (events: ReadonlyArray<RunEvent>) => Value,
|
|
246
|
+
): Value {
|
|
247
|
+
const kept = memo.get(events)
|
|
248
|
+
|
|
249
|
+
if (kept !== undefined) return kept
|
|
250
|
+
|
|
251
|
+
const value = fold(events)
|
|
252
|
+
|
|
253
|
+
memo.set(events, value)
|
|
254
|
+
|
|
255
|
+
return value
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const FOLDED: EventsMemo<ReadonlyMap<number, ItemStatus>> = new WeakMap()
|
|
259
|
+
const SPANS: EventsMemo<ReadonlyMap<number | undefined, ReadonlyArray<Span>>> = new WeakMap()
|
|
177
260
|
|
|
178
|
-
|
|
261
|
+
// A child the stream never saw launched keeps no spans, so its row is timed from its lane record.
|
|
262
|
+
function with_spans(statuses: Map<number, ItemStatus>, events: ReadonlyArray<RunEvent>): void {
|
|
263
|
+
const spans = remembered(SPANS, events, run_board_lane_time.spans_of)
|
|
264
|
+
|
|
265
|
+
for (const [issue, status] of statuses) {
|
|
266
|
+
const issue_spans = spans.get(issue)
|
|
267
|
+
|
|
268
|
+
if (issue_spans !== undefined) statuses.set(issue, { ...status, spans: issue_spans })
|
|
269
|
+
}
|
|
179
270
|
}
|
|
180
271
|
|
|
181
|
-
// A lane no child is working in is stopped whatever the stream last said: a child that died
|
|
182
|
-
// ending, so its row would otherwise run — and its phase time grow — for as long as the lane
|
|
183
|
-
|
|
184
|
-
|
|
272
|
+
// A running lane no child is working in is stopped whatever the stream last said: a child that died
|
|
273
|
+
// writes no ending, so its row would otherwise run — and its phase time grow — for as long as the lane
|
|
274
|
+
// stays.
|
|
275
|
+
function lane_status(status: ItemStatus, is_idle: boolean): ItemStatus {
|
|
276
|
+
if (!is_idle || status.state !== 'running') return status
|
|
185
277
|
|
|
186
|
-
return
|
|
187
|
-
? { ...settled_as(status, 'stopped'), ...held }
|
|
188
|
-
: { state: 'running', ...status, ...held }
|
|
278
|
+
return { ...settled_as(status, 'stopped'), lane: status.lane }
|
|
189
279
|
}
|
|
190
280
|
|
|
191
|
-
// Every child the run has touched, with
|
|
192
|
-
//
|
|
193
|
-
//
|
|
194
|
-
// `idle` has no child working in it (`lane-spent.ts`).
|
|
281
|
+
// Every child the run has touched, with what each of this run's open lanes is doing laid over it. An
|
|
282
|
+
// earlier run's lane and one with no record are drawn apart (`run-board-earlier.ts`), so what the span
|
|
283
|
+
// says of their issues is not this run's. A lane in `idle` has no child working in it (`lane-spent.ts`).
|
|
195
284
|
function statuses_of(
|
|
196
285
|
events: ReadonlyArray<RunEvent>,
|
|
197
|
-
lanes:
|
|
198
|
-
in_run: ReadonlySet<number>,
|
|
286
|
+
lanes: BoardLanes,
|
|
199
287
|
idle: ReadonlyArray<string> = [],
|
|
200
288
|
): ReadonlyMap<number, ItemStatus> {
|
|
201
|
-
const statuses =
|
|
289
|
+
const statuses = new Map(remembered(FOLDED, events, fold_events))
|
|
290
|
+
const apart = [...lanes.earlier.keys(), ...lanes.unknown.map(Number)]
|
|
291
|
+
|
|
292
|
+
for (const issue of apart) statuses.delete(issue)
|
|
202
293
|
|
|
203
|
-
for (const
|
|
204
|
-
const
|
|
205
|
-
const status = statuses.get(issue)
|
|
294
|
+
for (const [issue, status] of lanes.own) {
|
|
295
|
+
const is_idle = idle.includes(String(issue))
|
|
206
296
|
|
|
207
|
-
|
|
208
|
-
statuses.set(issue, lane_status(status, lane, idle.includes(lane)))
|
|
209
|
-
}
|
|
297
|
+
statuses.set(issue, lane_status(status, is_idle))
|
|
210
298
|
}
|
|
211
299
|
|
|
300
|
+
with_spans(statuses, events)
|
|
301
|
+
|
|
212
302
|
return statuses
|
|
213
303
|
}
|
|
214
304
|
|
|
305
|
+
// The events naming `issue` from its newest launch on: from `launched_ms` where its lane's record holds
|
|
306
|
+
// the launch, else from the stream's newest launch of it — none where the stream holds no launch of it.
|
|
307
|
+
function since_launch(
|
|
308
|
+
events: ReadonlyArray<RunEvent>,
|
|
309
|
+
issue: string,
|
|
310
|
+
launched_ms?: number,
|
|
311
|
+
): Array<RunEvent> {
|
|
312
|
+
const named = events.filter((event) => run_event_scope.issue_named(event) === issue)
|
|
313
|
+
|
|
314
|
+
if (launched_ms !== undefined) return named.filter((event) => moment(event) >= launched_ms)
|
|
315
|
+
|
|
316
|
+
const launch = named.findLastIndex((event) => LAUNCH_KINDS.has(event.kind))
|
|
317
|
+
|
|
318
|
+
return launch === -1 ? [] : named.slice(launch)
|
|
319
|
+
}
|
|
320
|
+
|
|
215
321
|
// The open listing the plan was read with, and when it was read.
|
|
216
322
|
interface OpenRead {
|
|
217
323
|
// `undefined` when the listing was cut short, so absence from it proves nothing.
|
|
@@ -223,18 +329,14 @@ interface OpenRead {
|
|
|
223
329
|
labels: ReadonlyMap<number, ReadonlyArray<string>>
|
|
224
330
|
}
|
|
225
331
|
|
|
226
|
-
|
|
227
|
-
|
|
332
|
+
// When the child last launched — what a GitHub read is weighed against.
|
|
333
|
+
function launch_ms(status: ItemStatus): number | undefined {
|
|
334
|
+
return status.launched_ms ?? status.started_ms
|
|
228
335
|
}
|
|
229
336
|
|
|
230
|
-
// The listing was read after the child launched, so what it says about the child is
|
|
337
|
+
// The listing was read after the child last launched, so what it says about the child is current.
|
|
231
338
|
function is_read_after_launch(status: ItemStatus, read: OpenRead): boolean {
|
|
232
|
-
return read.read_ms !== undefined && (status
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// A child launched before the listing was read and missing from it has closed since.
|
|
236
|
-
function is_closed_running(issue: number, status: ItemStatus, read: OpenRead): boolean {
|
|
237
|
-
return is_listed_closed(issue, read) && is_read_after_launch(status, read)
|
|
339
|
+
return read.read_ms !== undefined && (launch_ms(status) ?? 0) <= read.read_ms
|
|
238
340
|
}
|
|
239
341
|
|
|
240
342
|
// What a running child's labels say it is doing, `undefined` where they agree it is running: the child
|
|
@@ -243,6 +345,7 @@ function is_closed_running(issue: number, status: ItemStatus, read: OpenRead): b
|
|
|
243
345
|
function labelled_state(labels: ReadonlyArray<string> | undefined): ItemState | undefined {
|
|
244
346
|
if (labels === undefined) return undefined
|
|
245
347
|
if (has_label_name(labels, NEEDS_DECISION_LABEL)) return 'human'
|
|
348
|
+
if (has_label_name(labels, RUN_STALLED_LABEL)) return 'stopped'
|
|
246
349
|
|
|
247
350
|
return has_label_name(labels, IN_PROGRESS_LABEL) ? undefined : 'stopped'
|
|
248
351
|
}
|
|
@@ -257,40 +360,56 @@ function labelled(issue: number, status: ItemStatus, read: OpenRead): ItemStatus
|
|
|
257
360
|
|
|
258
361
|
// A close dated before the launch is an earlier life of the issue, not how this run's child ended.
|
|
259
362
|
function is_closed_before_launch(status: ItemStatus, closed: ClosedIssue): boolean {
|
|
260
|
-
|
|
363
|
+
const launch = launch_ms(status)
|
|
364
|
+
|
|
365
|
+
if (launch === undefined || closed.closed_ms === undefined) return false
|
|
261
366
|
|
|
262
|
-
return closed.closed_ms <
|
|
367
|
+
return closed.closed_ms < launch
|
|
263
368
|
}
|
|
264
369
|
|
|
265
|
-
|
|
370
|
+
function closed_state(closed: ClosedIssue): ItemState {
|
|
371
|
+
if (closed.is_merged) return 'merged'
|
|
372
|
+
|
|
373
|
+
return closed.is_not_planned ? 'withdrawn' : 'done'
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// A child read closed ends when GitHub says it closed — merged, withdrawn as not planned, or done.
|
|
266
377
|
function closed_status(
|
|
267
378
|
status: ItemStatus,
|
|
268
379
|
closed: ClosedIssue | undefined,
|
|
269
380
|
): ItemStatus | undefined {
|
|
270
381
|
if (closed === undefined || is_closed_before_launch(status, closed)) return undefined
|
|
271
382
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
return { ...settled_as(status, state), ended_ms: closed.closed_ms }
|
|
383
|
+
return { ...settled_as(status, closed_state(closed)), ended_ms: closed.closed_ms }
|
|
275
384
|
}
|
|
276
385
|
|
|
277
|
-
function
|
|
278
|
-
if (!UNSETTLED_STATES.has(status.state)) return status
|
|
279
|
-
|
|
386
|
+
function unsettled(issue: number, status: ItemStatus, read: OpenRead): ItemStatus {
|
|
280
387
|
const from_closed = closed_status(status, read.closed.get(issue))
|
|
281
388
|
|
|
282
|
-
|
|
389
|
+
return from_closed ?? labelled(issue, status, read)
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// The closed read is kept for the run, so a parked child a person reopened since is told apart by the
|
|
393
|
+
// listing holding it again.
|
|
394
|
+
function parked_settled(issue: number, status: ItemStatus, read: OpenRead): ItemStatus {
|
|
395
|
+
if (read.open_numbers?.has(issue) === true) return status
|
|
396
|
+
|
|
397
|
+
return closed_status(status, read.closed.get(issue)) ?? status
|
|
398
|
+
}
|
|
283
399
|
|
|
284
|
-
|
|
400
|
+
function settled(issue: number, status: ItemStatus, read: OpenRead): ItemStatus {
|
|
401
|
+
if (status.state === PARKED_STATE) return parked_settled(issue, status, read)
|
|
285
402
|
|
|
286
|
-
return
|
|
403
|
+
return UNSETTLED_STATES.has(status.state) ? unsettled(issue, status, read) : status
|
|
287
404
|
}
|
|
288
405
|
|
|
289
|
-
// **The stream stays the source of truth;
|
|
290
|
-
// reached the stream would read as running forever, so a running child
|
|
291
|
-
//
|
|
292
|
-
//
|
|
293
|
-
// say, so a child that stopped with no parent to record it
|
|
406
|
+
// **The stream stays the source of truth; a closed read only unsticks it.** A child whose merge never
|
|
407
|
+
// reached the stream would read as running forever, so a running child GitHub reads closed is drawn
|
|
408
|
+
// finished instead — merged, withdrawn or done, and timed. Absence from the open listing alone settles
|
|
409
|
+
// nothing: a listing that came back short would draw live children finished (joshuafolkken/kit#4537).
|
|
410
|
+
// One the listing holds is drawn as its labels say, so a child that stopped with no parent to record it
|
|
411
|
+
// does not read as running. A parked child is settled again only by a closed read; one a person
|
|
412
|
+
// released is dropped after it (`run-board-released.ts`).
|
|
294
413
|
function settle_closed(
|
|
295
414
|
statuses: ReadonlyMap<number, ItemStatus>,
|
|
296
415
|
read: OpenRead,
|
|
@@ -317,9 +436,7 @@ function idle_of(events: ReadonlyArray<RunEvent>): number | undefined {
|
|
|
317
436
|
return own === undefined ? undefined : moment(own)
|
|
318
437
|
}
|
|
319
438
|
|
|
320
|
-
|
|
321
|
-
// was.
|
|
322
|
-
function activity_of(events: ReadonlyArray<RunEvent>, is_ended = false): RunActivity {
|
|
439
|
+
function stream_activity(events: ReadonlyArray<RunEvent>): RunActivity {
|
|
323
440
|
const last = events.at(-1)
|
|
324
441
|
const position = events.findLast((event) => !run_event_stream.TRACE_KINDS.has(event.kind))
|
|
325
442
|
|
|
@@ -330,11 +447,21 @@ function activity_of(events: ReadonlyArray<RunEvent>, is_ended = false): RunActi
|
|
|
330
447
|
idle_ms: idle_of(events),
|
|
331
448
|
lane_events: run_board_lane_event.newest_of(events),
|
|
332
449
|
pr_checks: run_board_checks.newest_of(events),
|
|
333
|
-
is_stopped:
|
|
450
|
+
is_stopped: is_run_stop(position),
|
|
334
451
|
}
|
|
335
452
|
}
|
|
336
453
|
|
|
337
|
-
const
|
|
454
|
+
const ACTIVITIES: EventsMemo<RunActivity> = new WeakMap()
|
|
455
|
+
|
|
456
|
+
// `is_ended` is a run `run:carry --end` closed: its record says it stopped, whatever its last event
|
|
457
|
+
// was.
|
|
458
|
+
function activity_of(events: ReadonlyArray<RunEvent>, is_ended = false): RunActivity {
|
|
459
|
+
const activity = remembered(ACTIVITIES, events, stream_activity)
|
|
460
|
+
|
|
461
|
+
return is_ended ? { ...activity, is_stopped: true } : activity
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
const run_board_status = { activity_of, fold_events, settle_closed, since_launch, statuses_of }
|
|
338
465
|
|
|
339
466
|
export { run_board_status }
|
|
340
467
|
export type { ItemState, ItemStatus, LatestEvent, OpenRead, RunActivity }
|
|
@@ -2,7 +2,7 @@ import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
|
2
2
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
3
3
|
import { json_value } from '#scripts/lib/json-value'
|
|
4
4
|
import { timed_fetch } from '#scripts/lib/timed-fetch'
|
|
5
|
-
import {
|
|
5
|
+
import { MS_PER_MINUTE } from '#scripts/lib/timeouts'
|
|
6
6
|
import { z } from 'zod'
|
|
7
7
|
import { run_board_thanks_csv, type Thanks } from './run-board-thanks-csv'
|
|
8
8
|
|
|
@@ -16,7 +16,7 @@ const ROSTER_URL =
|
|
|
16
16
|
'https://docs.google.com/spreadsheets/d/e/2PACX-1vR8Ia38Wiw6Kfyk9Or594J8ZRS8okynV30CpOtq5B6_GyJG7A1-t8Au64jTYvmzgIOlbafcKKgrNFVJ/pub?gid=0&single=true&output=csv'
|
|
17
17
|
const RECORD_PREFIX = 'josh-run-board-thanks-'
|
|
18
18
|
const TTL_MINUTES = 5
|
|
19
|
-
const TTL_MS = TTL_MINUTES *
|
|
19
|
+
const TTL_MS = TTL_MINUTES * MS_PER_MINUTE
|
|
20
20
|
|
|
21
21
|
const thanker_schema = z.object({ name: z.string(), url: z.string().optional() })
|
|
22
22
|
const record_schema = z.object({ checked_ms: z.number(), thanks: z.array(thanker_schema) })
|