@joshuafolkken/kit 1.1229.0 → 1.1370.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 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +50 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +24 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +27 -16
- package/.claude/skills/workflow-commands/latest-gate.md +18 -29
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.github/workflows/publish.yml +2 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +38 -57
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +42 -10
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
- package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +213 -197
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -201
- package/dist/josh.js +540 -137
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +16 -10
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +4 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +26 -2
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +162 -0
- package/scripts/gate/core-budget.ts +134 -91
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +103 -35
- package/scripts/gate/gate-report.ts +39 -21
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +313 -0
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +60 -53
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +12 -8
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +35 -0
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +49 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +75 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +14 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +46 -37
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +165 -0
- package/scripts/issue/issue-release.ts +58 -0
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +32 -34
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +33 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +11 -5
- package/scripts/josh/josh-commands-lane.ts +16 -5
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-maintenance.ts +2 -2
- package/scripts/josh/josh-commands-run.ts +20 -6
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +10 -10
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +20 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +44 -30
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +25 -24
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +22 -8
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +27 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +140 -0
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/cycle-recheck.ts +122 -0
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +34 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-environment.ts +1 -0
- package/scripts/release/github-release-runs.ts +115 -0
- package/scripts/release/github-release.ts +13 -67
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +5 -6
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +68 -37
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +10 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +172 -43
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +25 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +13 -15
- package/scripts/run/run-step.ts +62 -48
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -33
- package/scripts/run/wake/run-wake-describe.ts +76 -29
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +13 -21
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -328
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +129 -98
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/templates/workflows/github-release.yml +4 -0
- package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -2,17 +2,18 @@ import { backlog_budget } from '#scripts/backlog/backlog-budget'
|
|
|
2
2
|
import { git_command } from '#scripts/git/git-command'
|
|
3
3
|
import { process_identity } from '#scripts/josh/process-identity'
|
|
4
4
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
5
|
+
import { stamp_record, type StampRecordSpec } from '#scripts/josh/stamp-record'
|
|
6
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
5
7
|
import { run_invocation } from '#scripts/run/run-invocation'
|
|
6
8
|
import { z } from 'zod'
|
|
9
|
+
import { run_carry_added, type CarryAddition } from './run-carry-added'
|
|
7
10
|
import { run_carry_change } from './run-carry-change'
|
|
8
11
|
import { run_carry_conversation } from './run-carry-conversation'
|
|
9
12
|
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// the
|
|
13
|
-
//
|
|
14
|
-
// repository persisted a run across sessions before: `backlogrun-progress.md` → "What carries over" reads its
|
|
15
|
-
// state back off GitHub, and there is no epic to read it off when the run began from the backlog.
|
|
13
|
+
// A `backlogrun` declares a budget — `--max`, `--idle` and the 8-hour whole-run bound — and the session
|
|
14
|
+
// cut ends the session, so the next one would start from nothing. **The cut is an execution detail of
|
|
15
|
+
// the same authorization**, so the budget has to survive it: this record carries it across sessions,
|
|
16
|
+
// where there is no epic to read progress back off when the run began from the backlog.
|
|
16
17
|
//
|
|
17
18
|
// **The unit is the repository, not the working tree.** `run-hold.ts` keys on the work tree's own git
|
|
18
19
|
// directory because what it guards is one branch, one index and one diff. What this record guards is
|
|
@@ -24,10 +25,10 @@ import { run_carry_conversation } from './run-carry-conversation'
|
|
|
24
25
|
// obeys. A run that reads `expired` has spent the bound whatever any count says.
|
|
25
26
|
//
|
|
26
27
|
// **Whose record it is, is decided by liveness and by a declared hand-off — never by the invocation
|
|
27
|
-
// text
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
28
|
+
// text**. Comparing the `invocation` string alone walks straight through the case that happens most: a
|
|
29
|
+
// run dies, a person retypes the same command, and the string matches, so the fresh session would
|
|
30
|
+
// inherit the dead run's counters and a `started_at` hours old. Two things decide instead. The record
|
|
31
|
+
// names the **long-lived process spending the budget**
|
|
31
32
|
// — `owner_pid` with the start time that tells a reused pid apart, the identity pair
|
|
32
33
|
// `process-identity.ts` already keeps for every other record — so a second parent asking for a
|
|
33
34
|
// record whose owner is still running is refused rather than told it may count into it. And a
|
|
@@ -41,18 +42,19 @@ const REPOSITORY_DIRECTORY_INDEX = 1
|
|
|
41
42
|
// "Waiting, and never waiting forever" states the figure and that module applies it; a second copy
|
|
42
43
|
// here would drift, and the drift is silent in exactly the direction that matters — raised there and
|
|
43
44
|
// still 8 here, this record answers `expired`, `--begin` replaces it, and the budget restarts at
|
|
44
|
-
// zero
|
|
45
|
+
// zero — the loss this record exists to prevent.
|
|
45
46
|
const CARRY_MAX_AGE_HOURS = backlog_budget.WHOLE_RUN_BUDGET_HOURS
|
|
46
47
|
const CARRY_MAX_AGE_MS = backlog_budget.WHOLE_RUN_BUDGET_MS
|
|
47
48
|
const NO_INCREMENT = 0
|
|
48
49
|
|
|
49
|
-
// The most session cuts one invocation may take
|
|
50
|
+
// The most session cuts one invocation may take. This bounds `cuts`, which
|
|
50
51
|
// only `run:carry --cut` increments — a `backlogrun`'s session hand-off at a child's merge (~one per
|
|
51
52
|
// 50 minutes over the 8-hour whole-run budget), not the `run:cut` phase cuts a lane child takes. Each
|
|
52
53
|
// cut drops the context it accumulated but pays a cold preamble to resume, so past a point the
|
|
53
54
|
// re-establishment costs more than the accumulation it sheds; six sits well under the ~10 an 8-hour run
|
|
54
55
|
// could otherwise take and refuses a run that has begun to churn. `is_at_cut_cap` reads it, and the
|
|
55
|
-
// `--cut` count is refused at it rather than incrementing past it
|
|
56
|
+
// `--cut` count is refused at it rather than incrementing past it — except a headless judgment
|
|
57
|
+
// session's hand-back to the driver, which `run_headless.is_cut_capped` exempts.
|
|
56
58
|
const MAX_CUTS = 6
|
|
57
59
|
|
|
58
60
|
const END_COMMAND = 'pnpm josh run:carry --end'
|
|
@@ -63,8 +65,8 @@ const READ_COMMAND = 'pnpm josh run:carry --json'
|
|
|
63
65
|
const OWNER_ARGUMENT = '--owner "$PPID"'
|
|
64
66
|
|
|
65
67
|
interface RunCarry {
|
|
66
|
-
// The invocation
|
|
67
|
-
// one it inferred. `CLAUDE.md` → "Explicit invocation required" forbids inferring; naming the
|
|
68
|
+
// The invocation the person typed — a `backlogrun` one in `run_invocation.rebuild`'s spelling — so
|
|
69
|
+
// a resumed session runs the same command rather than one it inferred. `CLAUDE.md` → "Explicit invocation required" forbids inferring; naming the
|
|
68
70
|
// invocation is what leaves nothing to infer. **It is not the ownership test** — that is
|
|
69
71
|
// `classify_claim` below, for the reason the header gives.
|
|
70
72
|
invocation: string
|
|
@@ -75,22 +77,21 @@ interface RunCarry {
|
|
|
75
77
|
merged_issues?: ReadonlyArray<number> | undefined
|
|
76
78
|
filed: number
|
|
77
79
|
cuts: number
|
|
78
|
-
// The consecutive-failure streak
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
// single source and the comment is generated from it. **A merge resets it to zero**: three failures
|
|
80
|
+
// The consecutive-failure streak. It is the count the stopped-unit guard leans on to notice the
|
|
81
|
+
// environment is at fault, kept in the record so the record is the single source and the epic
|
|
82
|
+
// progress comment is generated from it. **A merge resets it to zero**: three failures
|
|
82
83
|
// in a row stop the run, and a child that merged in between breaks the streak. Read through
|
|
83
84
|
// `apply_change`, never bumped from outside, so the reset stays with the increment.
|
|
84
85
|
failures: number
|
|
85
|
-
// The consecutive-API-outage streak
|
|
86
|
+
// The consecutive-API-outage streak. It is kept apart from `failures`
|
|
86
87
|
// because a child that could not reach the API is not a child that failed: an outage is not counted
|
|
87
88
|
// against the consecutive-failure guard, and this streak is its own environment-broken guard — a run
|
|
88
89
|
// of outages stops the run rather than re-dispatching into a dead API forever. **A merge or a genuine
|
|
89
90
|
// child failure resets it**, because both prove the API was reachable; only a further outage adds to
|
|
90
|
-
// it.
|
|
91
|
+
// it.
|
|
91
92
|
outages: number
|
|
92
93
|
// When the last *counted* outage was booked, so a burst of outages from one network event folds into
|
|
93
|
-
// a single streak step rather than several
|
|
94
|
+
// a single streak step rather than several. Read by `run-carry-streak.ts`
|
|
94
95
|
// against its fold window; set only when an outage counts, cleared when the API proves reachable.
|
|
95
96
|
// Optional and `| undefined` for the same disk round-trip reason the owner fields carry.
|
|
96
97
|
last_outage_at?: string | undefined
|
|
@@ -98,8 +99,7 @@ interface RunCarry {
|
|
|
98
99
|
// a pid it explicitly does not read back, because the process that claims a work tree is the
|
|
99
100
|
// short-lived `josh run:hold` itself; here the owner is the parent loop's own session, which
|
|
100
101
|
// outlives every command it issues, so the pid is what a second parent is refused against. Both
|
|
101
|
-
// halves are optional: a record
|
|
102
|
-
// owner, is simply not provably live.
|
|
102
|
+
// halves are optional: a record by a caller that named no owner is simply not provably live.
|
|
103
103
|
//
|
|
104
104
|
// **`| undefined` explicitly, rather than the bare optional `exactOptionalPropertyTypes` prefers.**
|
|
105
105
|
// The record round-trips through `JSON.stringify`, which drops a property whose value is
|
|
@@ -108,28 +108,35 @@ interface RunCarry {
|
|
|
108
108
|
owner_pid?: number | undefined
|
|
109
109
|
owner_start?: string | undefined
|
|
110
110
|
// The owner conversation's transcript, which outlives a restart of its process
|
|
111
|
-
// (`run-carry-conversation.ts
|
|
111
|
+
// (`run-carry-conversation.ts`). Optional for the same reason as the pid.
|
|
112
112
|
owner_transcript?: string | undefined
|
|
113
113
|
// Set by `--cut`, and by nothing else. A crash never reaches `--cut`, which is what makes a
|
|
114
114
|
// declared cut the only standing record carried without a person deciding.
|
|
115
115
|
is_handed_off?: boolean | undefined
|
|
116
|
-
// The issues this invocation has already finished, as `--done <N>` recorded them
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
// and the run stops. Pinning the string to the opening list and keeping the progress here leaves
|
|
122
|
-
// that comparison, and joshuafolkken/kit#1722's single-writer guarantee with it, exactly as it was.
|
|
116
|
+
// The issues this invocation has already finished, as `--done <N>` recorded them. **It exists
|
|
117
|
+
// because a named-issue invocation must not shrink.** Resuming `backlogrun #1 #2 #3` after #1 merged
|
|
118
|
+
// as `backlogrun #2 #3` would answer `mismatch`, because `classify_claim` compares the invocation
|
|
119
|
+
// character for character. Pinning the string to the opening list and keeping the progress here
|
|
120
|
+
// leaves that comparison, and the single-writer guarantee with it, intact.
|
|
123
121
|
// `merged` cannot serve: it is a count of merges rather than a set of issues, so a child that ended
|
|
124
122
|
// without one — `already-done`, or a park — would shift every remaining position by one.
|
|
125
123
|
done?: ReadonlyArray<number> | undefined
|
|
126
|
-
// Whether this invocation's end-of-run retrospective has already run
|
|
124
|
+
// Whether this invocation's end-of-run retrospective has already run. It
|
|
127
125
|
// is the state the two run-ending points hold so `run:step` prints the retrospective exactly once:
|
|
128
126
|
// the record is one per invocation and survives every session cut, so a run cannot repeat it after a
|
|
129
127
|
// resume, and `--end` removes the record so it cannot leak into the next invocation. Set by
|
|
130
128
|
// `--retrospective`, and carried across a hand-off like `done`. Optional and `| undefined` for the
|
|
131
129
|
// same disk round-trip reason the owner fields carry.
|
|
132
130
|
retrospective?: boolean | undefined
|
|
131
|
+
// The issues `pnpm josh run:add` put into a named run after it began,
|
|
132
|
+
// kept beside `invocation` so the ownership comparison never sees them. Optional and `| undefined`
|
|
133
|
+
// for the same disk round-trip reason the owner fields carry.
|
|
134
|
+
added?: ReadonlyArray<CarryAddition> | undefined
|
|
135
|
+
// The lane limit `josh lane:limit` set on this live run. It outranks
|
|
136
|
+
// `JOSH_LANE_LIMIT` in `lane_capacity.lane_limit`: a running parent keeps the environment it started
|
|
137
|
+
// with, and the record is the one place both it and a person's shell read. Carried across a hand-off
|
|
138
|
+
// like `done`; optional and `| undefined` for the same disk round-trip reason.
|
|
139
|
+
lane_limit?: number | undefined
|
|
133
140
|
}
|
|
134
141
|
|
|
135
142
|
// The identity of a process, as `process-identity.ts` keeps it: the pid plus an opaque start-time
|
|
@@ -155,18 +162,17 @@ interface CarryClaimRequest {
|
|
|
155
162
|
}
|
|
156
163
|
|
|
157
164
|
// Every counter is an increment rather than a total: a run that sent a total would be sending an
|
|
158
|
-
// arithmetic it had done in its head,
|
|
159
|
-
// measured a run walking past.
|
|
165
|
+
// arithmetic it had done in its head, a one-shot judgement a run can walk past.
|
|
160
166
|
interface CarryChange {
|
|
161
167
|
merged?: number
|
|
162
168
|
merged_issue?: number
|
|
163
169
|
filed?: number
|
|
164
170
|
cuts?: number
|
|
165
|
-
// One failed child to add to the streak
|
|
171
|
+
// One failed child to add to the streak. It is never sent in the same
|
|
166
172
|
// change as `merged` — a child either merged or it did not — and a change that carries `merged`
|
|
167
173
|
// resets the streak regardless of this field.
|
|
168
174
|
failures?: number
|
|
169
|
-
// One API-outage child to add to the outage streak
|
|
175
|
+
// One API-outage child to add to the outage streak. Never sent with
|
|
170
176
|
// `merged` or `failures` — a child either merged, failed, or could not reach the API — and both of
|
|
171
177
|
// those reset this streak.
|
|
172
178
|
outages?: number
|
|
@@ -174,7 +180,7 @@ interface CarryChange {
|
|
|
174
180
|
// thing rather than an amount, because what a resumed named-issue run needs is *which* issues are
|
|
175
181
|
// finished.
|
|
176
182
|
done?: number
|
|
177
|
-
// Marks the end-of-run retrospective as run
|
|
183
|
+
// Marks the end-of-run retrospective as run. It only ever sets the flag,
|
|
178
184
|
// never clears it: a retrospective that has run stays run for the rest of the invocation.
|
|
179
185
|
retrospective?: boolean
|
|
180
186
|
}
|
|
@@ -185,10 +191,10 @@ type CarryRead =
|
|
|
185
191
|
| { kind: 'expired'; carry: RunCarry }
|
|
186
192
|
| { kind: 'unreadable' }
|
|
187
193
|
|
|
188
|
-
const NONE_READ: CarryRead = { kind: 'none' }
|
|
189
|
-
const UNREADABLE_READ: CarryRead = { kind: 'unreadable' }
|
|
190
194
|
const NO_OWNER: CarryOwner = {}
|
|
191
195
|
|
|
196
|
+
const carry_addition_schema = z.object({ issue: z.number(), is_priority: z.boolean() })
|
|
197
|
+
|
|
192
198
|
const run_carry_schema = z.object({
|
|
193
199
|
invocation: z.string(),
|
|
194
200
|
started_at: z.string(),
|
|
@@ -196,22 +202,20 @@ const run_carry_schema = z.object({
|
|
|
196
202
|
merged_issues: z.array(z.number()).optional(),
|
|
197
203
|
filed: z.number(),
|
|
198
204
|
cuts: z.number(),
|
|
199
|
-
// Defaulted, so a record
|
|
200
|
-
// failing to read — the same backward-compatibility the optional owner fields below carry.
|
|
205
|
+
// Defaulted, so a record that lacks the streak parses with a zero streak rather than failing to read.
|
|
201
206
|
failures: z.number().default(0),
|
|
202
|
-
// Defaulted for the same backward-compatibility as `failures` (joshuafolkken/kit#2240).
|
|
203
207
|
outages: z.number().default(0),
|
|
204
|
-
// Optional, so a record written before the outage fold existed still parses (joshuafolkken/kit#2317).
|
|
205
208
|
last_outage_at: z.string().optional(),
|
|
206
|
-
//
|
|
207
|
-
//
|
|
209
|
+
// An absent owner reads as "no owner declared", which is the not-provably-live answer rather than a
|
|
210
|
+
// live one.
|
|
208
211
|
owner_pid: z.number().optional(),
|
|
209
212
|
owner_start: z.string().optional(),
|
|
210
213
|
owner_transcript: z.string().optional(),
|
|
211
214
|
is_handed_off: z.boolean().optional(),
|
|
212
215
|
done: z.array(z.number()).optional(),
|
|
213
|
-
// Optional, so a record written before the retrospective existed still parses (joshuafolkken/kit#2328).
|
|
214
216
|
retrospective: z.boolean().optional(),
|
|
217
|
+
added: z.array(carry_addition_schema).optional(),
|
|
218
|
+
lane_limit: z.number().int().positive().optional(),
|
|
215
219
|
})
|
|
216
220
|
|
|
217
221
|
function carry_path(git_directory: string): string {
|
|
@@ -227,34 +231,31 @@ async function repository_directory(): Promise<string | undefined> {
|
|
|
227
231
|
}
|
|
228
232
|
|
|
229
233
|
function parse_carry(raw: string): RunCarry | undefined {
|
|
230
|
-
|
|
231
|
-
const parsed = run_carry_schema.safeParse(JSON.parse(raw))
|
|
232
|
-
|
|
233
|
-
return parsed.success ? parsed.data : undefined
|
|
234
|
-
} catch {
|
|
235
|
-
return undefined
|
|
236
|
-
}
|
|
234
|
+
return json_value.parse_with(raw, run_carry_schema)
|
|
237
235
|
}
|
|
238
236
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
function is_expired(carry: RunCarry, now: Date): boolean {
|
|
243
|
-
const started = Date.parse(carry.started_at)
|
|
237
|
+
function started_at_of(carry: RunCarry): string {
|
|
238
|
+
return carry.started_at
|
|
239
|
+
}
|
|
244
240
|
|
|
245
|
-
|
|
241
|
+
// The expiry and the classification are `stamp-record.ts`'s, shared with `run-cut.ts` and
|
|
242
|
+
// `run-hold.ts`; what a `started_at` that is not a date means is decided there.
|
|
243
|
+
const CARRY_SPEC: StampRecordSpec<RunCarry> = {
|
|
244
|
+
parse: parse_carry,
|
|
245
|
+
timestamp_of: started_at_of,
|
|
246
|
+
max_age_ms: CARRY_MAX_AGE_MS,
|
|
247
|
+
}
|
|
246
248
|
|
|
247
|
-
|
|
249
|
+
function is_expired(carry: RunCarry, now: Date): boolean {
|
|
250
|
+
return stamp_record.is_older_than(started_at_of(carry), CARRY_MAX_AGE_MS, now)
|
|
248
251
|
}
|
|
249
252
|
|
|
250
253
|
function classify(raw: string | undefined, now: Date): CarryRead {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
const carry = parse_carry(raw)
|
|
254
|
+
const read = stamp_record.classify(raw, CARRY_SPEC, now)
|
|
254
255
|
|
|
255
|
-
if (
|
|
256
|
+
if (!('record' in read)) return read
|
|
256
257
|
|
|
257
|
-
return { kind:
|
|
258
|
+
return { kind: read.kind, carry: read.record }
|
|
258
259
|
}
|
|
259
260
|
|
|
260
261
|
function read_carry(target: string, now: Date = new Date()): CarryRead {
|
|
@@ -330,8 +331,7 @@ function adopt_carry(
|
|
|
330
331
|
carry: RunCarry,
|
|
331
332
|
owner: CarryOwner = NO_OWNER,
|
|
332
333
|
): RunCarry | undefined {
|
|
333
|
-
// The run's own fields carry across untouched — the counters, the outage fold timestamp
|
|
334
|
-
// (joshuafolkken/kit#2317), `done` so the successor does not re-run what the cut session finished,
|
|
334
|
+
// The run's own fields carry across untouched — the counters, the outage fold timestamp, `done` so the successor does not re-run what the cut session finished,
|
|
335
335
|
// and `retrospective` so a run resumed after a cut does not repeat its retrospective. Only the three
|
|
336
336
|
// ownership fields are overridden: the new owner replaces the old — a caller that declared none
|
|
337
337
|
// writes `undefined`, so the previous owner cannot survive — and the declared hand-off is spent.
|
|
@@ -366,7 +366,7 @@ function is_owned_by(carry: RunCarry, owner: CarryOwner): boolean {
|
|
|
366
366
|
|
|
367
367
|
// The one case that is not this caller's to touch: the record's owner is still running and it is
|
|
368
368
|
// somebody else. **The invocation text is not consulted** — a live owner holds the budget whatever
|
|
369
|
-
// either command line says
|
|
369
|
+
// either command line says.
|
|
370
370
|
function is_foreign_live_owner(carry: RunCarry, owner: CarryOwner): boolean {
|
|
371
371
|
return is_owner_live(carry) && !is_owned_by(carry, owner)
|
|
372
372
|
}
|
|
@@ -375,21 +375,19 @@ function is_handed_off_to(carry: RunCarry, invocation: string): boolean {
|
|
|
375
375
|
return carry.is_handed_off === true && carry.invocation === invocation
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
-
// **The order is the rule, and a declared hand-off comes first
|
|
379
|
-
//
|
|
380
|
-
//
|
|
381
|
-
//
|
|
382
|
-
//
|
|
383
|
-
//
|
|
384
|
-
//
|
|
385
|
-
//
|
|
386
|
-
// `--cut` flag a crash never reaches, so the cross-run inheritance joshuafolkken/kit#1722 removes still
|
|
387
|
-
// cannot arise: a retyped command over a crashed record has no hand-off to match. Uniqueness is
|
|
378
|
+
// **The order is the rule, and a declared hand-off comes first.** The cutting process does not always
|
|
379
|
+
// die after `--cut`: a `backlogrun` cut from an interactive session never ends its process, and a lane
|
|
380
|
+
// child cut before the gate can be woken again by a background task's notification — in both the live
|
|
381
|
+
// owner *is* the session that cut, so checking liveness first would answer `busy` forever and no
|
|
382
|
+
// successor could take over. Reading the hand-off first hands the record to exactly one successor
|
|
383
|
+
// regardless of whether the cutting process is still alive, and it is safe because a hand-off requires
|
|
384
|
+
// the explicit `--cut` flag a crash never reaches, so cross-run inheritance cannot arise: a retyped
|
|
385
|
+
// command over a crashed record has no hand-off to match. Uniqueness is
|
|
388
386
|
// `adopt_carry`'s — it spends `is_handed_off` and rewrites the owner, so the *second* would-be
|
|
389
387
|
// successor reads a record no longer handed off, owned by a live foreign process, and is answered
|
|
390
388
|
// `busy`. Then: a live foreign owner over a record no cut handed off is refused, a different invocation
|
|
391
389
|
// is named as such, and what is left — the same command retyped over a record no cut handed off — is
|
|
392
|
-
// `standing
|
|
390
|
+
// `standing`.
|
|
393
391
|
function classify_claim(carry: RunCarry, request: CarryClaimRequest): CarryClaim {
|
|
394
392
|
if (is_handed_off_to(carry, request.invocation)) return 'resume'
|
|
395
393
|
|
|
@@ -400,19 +398,18 @@ function classify_claim(carry: RunCarry, request: CarryClaimRequest): CarryClaim
|
|
|
400
398
|
return request.is_adoption ? 'resume' : 'standing'
|
|
401
399
|
}
|
|
402
400
|
|
|
403
|
-
// **A budget count is refused unless this session is the record's live owner
|
|
404
|
-
// (joshuafolkken/kit#1935). Two records reach here that are not this session's to advance: one the
|
|
401
|
+
// **A budget count is refused unless this session is the record's live owner.** Two records reach here that are not this session's to advance: one the
|
|
405
402
|
// cutting session handed off but no successor has adopted yet — `is_handed_off` still set, so a stray
|
|
406
403
|
// count from the cutting session would spend the hand-off back to `false` and strand the successor —
|
|
407
404
|
// and one a successor has already adopted, now owned by a live foreign process, whose budget is that
|
|
408
|
-
// successor's. Both keep
|
|
405
|
+
// successor's. Both keep a single writer: only the owner advances the counters.
|
|
409
406
|
// The hand-off is read first because a cut does not change the owner, so the cutting session is still
|
|
410
407
|
// its *own* owner between the cut and the adoption, and the foreign check would let it through.
|
|
411
408
|
function is_count_refused(carry: RunCarry, owner: CarryOwner): boolean {
|
|
412
409
|
return carry.is_handed_off === true || is_foreign_live_owner(carry, owner)
|
|
413
410
|
}
|
|
414
411
|
|
|
415
|
-
// Whether the invocation has already taken its maximum cuts
|
|
412
|
+
// Whether the invocation has already taken its maximum cuts. Read by the CLI
|
|
416
413
|
// before a `--cut` count so a run that has begun to churn is refused another cut rather than paying a
|
|
417
414
|
// cold preamble the accumulation it sheds no longer covers.
|
|
418
415
|
function is_at_cut_cap(carry: RunCarry): boolean {
|
|
@@ -423,7 +420,7 @@ function end_carry(target: string): void {
|
|
|
423
420
|
stamp_file.remove_stamp(target)
|
|
424
421
|
}
|
|
425
422
|
|
|
426
|
-
// Whether the read record marks its retrospective as already run
|
|
423
|
+
// Whether the read record marks its retrospective as already run. A read with
|
|
427
424
|
// no record — `none` or `unreadable` — is not a run whose retrospective has run, so it answers `false`;
|
|
428
425
|
// `run:step` reads it to decide whether the stop position still owes a retrospective.
|
|
429
426
|
function retrospective_done_of(read: CarryRead): boolean {
|
|
@@ -436,8 +433,7 @@ function retrospective_done_of(read: CarryRead): boolean {
|
|
|
436
433
|
// be a second copy of a subtraction the record already determines, free to disagree with it; computed
|
|
437
434
|
// here, `--json` answers the successor's one question — which issues are left, in the order they were
|
|
438
435
|
// declared — so nothing downstream has to subtract two lists by hand. An invocation that named no
|
|
439
|
-
// issues answers `undefined`, which `JSON.stringify` drops
|
|
440
|
-
// unchanged by this.
|
|
436
|
+
// issues answers `undefined`, which `JSON.stringify` drops. The issues `run:add` put in are folded in by `run_carry_added.ordered`.
|
|
441
437
|
function remaining_of(carry: RunCarry | undefined): ReadonlyArray<number> | undefined {
|
|
442
438
|
if (carry === undefined) return undefined
|
|
443
439
|
|
|
@@ -447,7 +443,7 @@ function remaining_of(carry: RunCarry | undefined): ReadonlyArray<number> | unde
|
|
|
447
443
|
|
|
448
444
|
const done = carry.done ?? []
|
|
449
445
|
|
|
450
|
-
return declared.filter((issue) => !done.includes(issue))
|
|
446
|
+
return run_carry_added.ordered(declared, carry.added).filter((issue) => !done.includes(issue))
|
|
451
447
|
}
|
|
452
448
|
|
|
453
449
|
// The finished issues are named rather than counted, because the reader of a `busy` or `standing`
|
|
@@ -498,7 +494,7 @@ function standing_message(carry: RunCarry): string {
|
|
|
498
494
|
|
|
499
495
|
// The count refusal reads differently by cause: a record awaiting its successor, or one a successor
|
|
500
496
|
// already holds. Both say nothing was counted, so a loop that believed it was advancing a budget stops
|
|
501
|
-
// rather than keeping its own tally over a record it does not own
|
|
497
|
+
// rather than keeping its own tally over a record it does not own.
|
|
502
498
|
function count_refused_message(carry: RunCarry): string {
|
|
503
499
|
if (carry.is_handed_off === true) {
|
|
504
500
|
return `This budget was handed off at a cut and is waiting for its successor — ${describe_carry(carry)}. Nothing was counted; the cutting session must not advance a handed-off budget.`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
1
2
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
2
|
-
import { run_issue_number } from '#scripts/run/run-issue-number'
|
|
3
3
|
|
|
4
4
|
// `josh run:cut` turns its `argv` into one of four requests. The contract mirrors `run-carry-args.ts`:
|
|
5
5
|
// parsing lives here, acting on the record lives in `run-cut-cli.ts`, and a malformed command line is
|
|
@@ -11,12 +11,12 @@ const USAGE =
|
|
|
11
11
|
|
|
12
12
|
const OPTIONS = {
|
|
13
13
|
end: { type: 'boolean' },
|
|
14
|
-
// The path to the handoff file the cut carries — the run's instruction and work state
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
14
|
+
// The path to the handoff file the cut carries — the run's instruction and work state. A value
|
|
15
|
+
// rather than a boolean: the body is passed by path, never inlined on the command line, so a
|
|
16
|
+
// backtick or `$` in the instruction is not executed. It modifies the bare cut like `--impl`, so it
|
|
17
|
+
// is refused only when paired with a mode that asks about a cut.
|
|
18
18
|
handoff: { type: 'string' },
|
|
19
|
-
// The implementation-phase cut
|
|
19
|
+
// The implementation-phase cut. It modifies the bare cut rather than being
|
|
20
20
|
// a mode of its own — `run:cut --impl <issue>` still takes a cut — so it is refused only when it is
|
|
21
21
|
// paired with `--resume`, `--json` or `--end`, which ask about a cut rather than take one.
|
|
22
22
|
impl: { type: 'boolean' },
|
|
@@ -58,7 +58,7 @@ function issue_of(positionals: ReadonlyArray<string>): string | undefined {
|
|
|
58
58
|
if (issue === undefined) return undefined
|
|
59
59
|
|
|
60
60
|
try {
|
|
61
|
-
|
|
61
|
+
issue_number_shape.require_issue_number(issue)
|
|
62
62
|
} catch {
|
|
63
63
|
return undefined
|
|
64
64
|
}
|