@joshuafolkken/kit 1.1240.0 → 1.1373.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 +52 -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 +19 -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 +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- 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/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +23 -66
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +43 -11
- 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-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
- package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
- package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
- 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 +195 -181
- 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 -187
- package/dist/josh.js +282 -95
- 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 +17 -11
- 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 +3 -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 +30 -5
- 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 +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- 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 +168 -30
- 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 +53 -51
- 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 +7 -7
- 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 +1 -1
- 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 +24 -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 +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- 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 +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- 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 +30 -35
- 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 +25 -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 +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +21 -7
- 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 +6 -7
- 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 +12 -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 +2 -2
- 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 +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -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 +1 -1
- 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/cross-file-recheck.ts +155 -0
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +35 -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-runs.ts +1 -1
- 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 +6 -7
- 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 +54 -36
- 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 +9 -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 +171 -46
- 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 +26 -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 +64 -18
- package/scripts/run/run-step.ts +107 -51
- 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 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- 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 +9 -9
- 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 -279
- 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 +26 -26
- 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/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- 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
|
@@ -4,6 +4,9 @@ import { cost_cli } from '#scripts/cost-runtime/cost-cli'
|
|
|
4
4
|
import { cost_verdict } from '#scripts/cost-runtime/cost-verdict'
|
|
5
5
|
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
6
6
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
7
|
+
import { run_merge_collect } from '#scripts/run/merge/run-merge-collect'
|
|
8
|
+
import { run_cli_fault } from '#scripts/run/run-cli-fault'
|
|
9
|
+
import { run_headless } from '#scripts/run/run-headless'
|
|
7
10
|
import { run_stop_notify } from '#scripts/run/run-stop-notify'
|
|
8
11
|
import {
|
|
9
12
|
run_carry,
|
|
@@ -14,10 +17,11 @@ import {
|
|
|
14
17
|
} from './run-carry'
|
|
15
18
|
import { run_carry_args, type CountRequest, type Request } from './run-carry-args'
|
|
16
19
|
import { run_carry_conversation } from './run-carry-conversation'
|
|
20
|
+
import { run_carry_ended } from './run-carry-ended'
|
|
17
21
|
import { run_carry_stash } from './run-carry-stash'
|
|
18
22
|
|
|
19
|
-
// `josh run:carry` — the record that carries one invocation's budget across its own session cuts
|
|
20
|
-
//
|
|
23
|
+
// `josh run:carry` — the record that carries one invocation's budget across its own session cuts.
|
|
24
|
+
// A `backlogrun` begins it, counts a merge and a filing into it, marks each
|
|
21
25
|
// cut, and ends it; a session that resumes after a cut reads the same budget back rather than
|
|
22
26
|
// starting a new one. **Turning `argv` into a request is `run-carry-args.ts`'s**; what is here acts
|
|
23
27
|
// on the record and prints.
|
|
@@ -42,12 +46,12 @@ const MISMATCH_VERDICT = 'mismatch'
|
|
|
42
46
|
const BUSY_VERDICT = 'busy'
|
|
43
47
|
const STANDING_VERDICT = 'standing'
|
|
44
48
|
const UNKNOWN_VERDICT = 'unknown'
|
|
45
|
-
|
|
49
|
+
const COMMAND = 'run:carry'
|
|
50
|
+
// The invocation has taken its maximum cuts. A benign, non-failing refusal:
|
|
46
51
|
// the run carries on uncut rather than paying a cold preamble the accumulation it would shed no longer
|
|
47
52
|
// covers, exactly as an under-threshold pre-gate cut carries on to the gate.
|
|
48
53
|
const CAPPED_VERDICT = 'capped'
|
|
49
|
-
// The asking session is over the shared context-cut threshold, so nothing was claimed
|
|
50
|
-
// (joshuafolkken/kit#2760).
|
|
54
|
+
// The asking session is over the shared context-cut threshold, so nothing was claimed.
|
|
51
55
|
const OVER_VERDICT = 'over'
|
|
52
56
|
const NO_CUTS = 0
|
|
53
57
|
|
|
@@ -67,9 +71,8 @@ function report(
|
|
|
67
71
|
// **`remaining` rides along with the record rather than behind a flag of its own.** `--json` is
|
|
68
72
|
// already the one answer a resumed session reads back in full, and the question it has to answer
|
|
69
73
|
// there — which of a `backlogrun`'s named issues are still outstanding — is determined by two fields
|
|
70
|
-
// of the record it is already printing
|
|
71
|
-
//
|
|
72
|
-
// the key entirely.
|
|
74
|
+
// of the record it is already printing. A budget-only `backlogrun` names no issues, so the value is
|
|
75
|
+
// `undefined` and `JSON.stringify` drops the key entirely.
|
|
73
76
|
console.info(
|
|
74
77
|
is_json
|
|
75
78
|
? JSON.stringify({ verdict, carry, remaining: run_carry.remaining_of(carry) })
|
|
@@ -180,8 +183,7 @@ function start_fresh(
|
|
|
180
183
|
|
|
181
184
|
// **The bound ends *that* run, so a spent record whose owner is still running is not replaced
|
|
182
185
|
// either.** Replacing it would delete a live parent's budget and answer `began` — two parents on one
|
|
183
|
-
// record
|
|
184
|
-
// or a person who knows it is over, ends it.
|
|
186
|
+
// record. Only that run, or a person who knows it is over, ends it.
|
|
185
187
|
function begin_over_expired(
|
|
186
188
|
target: string,
|
|
187
189
|
carry: RunCarry,
|
|
@@ -204,7 +206,7 @@ function begin_over_expired(
|
|
|
204
206
|
|
|
205
207
|
// **A live record is never replaced, and never resumed into by something else.** Replacing one would
|
|
206
208
|
// restart the budget the cut exists to carry, and resuming into one would put two parents on a single
|
|
207
|
-
// budget
|
|
209
|
+
// budget. An expired one is replaced,
|
|
208
210
|
// because its run has spent the whole-run bound and a person typing the keyword again is starting a
|
|
209
211
|
// new run — unless its owner is still running, which is the case above.
|
|
210
212
|
function begin(target: string, request: CarryClaimRequest, is_json: boolean): number {
|
|
@@ -240,10 +242,9 @@ function adopt(target: string, request: CarryClaimRequest, is_json: boolean): nu
|
|
|
240
242
|
return report_claim(target, read.carry, request, is_json)
|
|
241
243
|
}
|
|
242
244
|
|
|
243
|
-
// **A session already over the shared cut threshold claims nothing
|
|
244
|
-
//
|
|
245
|
-
//
|
|
246
|
-
// twice, at 232k and 258k. The verdict is `pnpm josh cost --cut`'s, so no second threshold exists; only a
|
|
245
|
+
// **A session already over the shared cut threshold claims nothing**: a `backlogrun` parent that has
|
|
246
|
+
// taken its cut could otherwise retype the keyword in the same conversation and be answered `resumed`
|
|
247
|
+
// by its own hand-off. The verdict is `pnpm josh cost --cut`'s, so no second threshold exists; only a
|
|
247
248
|
// measured `over` refuses, because a provider with no transcript cannot be priced at all.
|
|
248
249
|
function report_over(is_json: boolean): number {
|
|
249
250
|
console.error(
|
|
@@ -260,7 +261,7 @@ function claim_record(target: string, request: CarryClaimRequest, is_json: boole
|
|
|
260
261
|
}
|
|
261
262
|
|
|
262
263
|
// The record is no longer this session's to advance — handed off at a cut, or taken over by a live
|
|
263
|
-
// successor. It is a refusal exit, said without applying the change
|
|
264
|
+
// successor. It is a refusal exit, said without applying the change.
|
|
264
265
|
function report_count_refused(carry: RunCarry, is_json: boolean): number {
|
|
265
266
|
console.error(run_carry.count_refused_message(carry))
|
|
266
267
|
|
|
@@ -268,9 +269,8 @@ function report_count_refused(carry: RunCarry, is_json: boolean): number {
|
|
|
268
269
|
}
|
|
269
270
|
|
|
270
271
|
// The retrospective's result on the run's event stream, so a run that filed zero improvements reads
|
|
271
|
-
// apart from one whose retrospective never ran
|
|
272
|
-
//
|
|
273
|
-
// action; the emit is best-effort, the same contract every other append on this stream keeps, and it
|
|
272
|
+
// apart from one whose retrospective never ran. It rides the `--retrospective` mark rather than a call
|
|
273
|
+
// of its own, so closing the retrospective and recording what it found are one action; the emit is best-effort, the same contract every other append on this stream keeps, and it
|
|
274
274
|
// happens only after the mark applied — a refused count records nothing.
|
|
275
275
|
async function record_retrospective(request: CountRequest): Promise<void> {
|
|
276
276
|
if (request.summary === undefined) return
|
|
@@ -278,7 +278,7 @@ async function record_retrospective(request: CountRequest): Promise<void> {
|
|
|
278
278
|
await run_event_stream_emit.emit(run_event_stream.EVENT_KIND.RETROSPECTIVE, request.summary)
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
// A cut count is the one increment with a ceiling
|
|
281
|
+
// A cut count is the one increment with a ceiling; a merge or a filing has
|
|
282
282
|
// none. `--cut` sets `cuts` to one, so a positive count is what marks this count a cut.
|
|
283
283
|
function is_cut_count(request: CountRequest): boolean {
|
|
284
284
|
return (request.change.cuts ?? NO_CUTS) > NO_CUTS
|
|
@@ -295,9 +295,8 @@ function report_cut_capped(carry: RunCarry, is_json: boolean): number {
|
|
|
295
295
|
}
|
|
296
296
|
|
|
297
297
|
// The refusals read before a count is applied: a record this session no longer owns (handed off or
|
|
298
|
-
// taken over) keeps
|
|
299
|
-
//
|
|
300
|
-
// lands.
|
|
298
|
+
// taken over) keeps a single writer across a cut, and a cut past the cap carries on uncut. `undefined`
|
|
299
|
+
// when neither applies, so the count lands.
|
|
301
300
|
function blocked_count(
|
|
302
301
|
carry: RunCarry,
|
|
303
302
|
request: CountRequest,
|
|
@@ -305,7 +304,7 @@ function blocked_count(
|
|
|
305
304
|
): number | undefined {
|
|
306
305
|
if (run_carry.is_count_refused(carry, request.owner)) return report_count_refused(carry, is_json)
|
|
307
306
|
|
|
308
|
-
if (is_cut_count(request) &&
|
|
307
|
+
if (is_cut_count(request) && run_headless.is_cut_capped(carry)) {
|
|
309
308
|
return report_cut_capped(carry, is_json)
|
|
310
309
|
}
|
|
311
310
|
|
|
@@ -315,7 +314,7 @@ function blocked_count(
|
|
|
315
314
|
// A count against a record that is not there is `none` and exits non-zero: the loop believed it was
|
|
316
315
|
// carrying a budget and it was not, and a silent zero would let the run keep its own tally instead. A
|
|
317
316
|
// count against a record this session no longer owns is refused, and a cut past the cap carries on
|
|
318
|
-
// uncut, both before the change is applied
|
|
317
|
+
// uncut, both before the change is applied.
|
|
319
318
|
async function count(
|
|
320
319
|
target: string,
|
|
321
320
|
read: CarryRead,
|
|
@@ -340,29 +339,47 @@ async function count(
|
|
|
340
339
|
: report_carry(COUNTED_VERDICT, carry, is_json)
|
|
341
340
|
}
|
|
342
341
|
|
|
343
|
-
// **A stop over a record that is still there pushes one ⏸️ confirmation before the record goes
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
//
|
|
348
|
-
//
|
|
349
|
-
// **No ledger flush rides it any more** (joshuafolkken/kit#2919): each lane merges its own ledger
|
|
350
|
-
// lines with its own pull request, so there is nothing left in the primary checkout to flush.
|
|
342
|
+
// **A stop over a record that is still there pushes one ⏸️ confirmation before the record goes**.
|
|
343
|
+
// `plan` is read from the record `--end` is about to remove, so the second `--end` reads `none` and
|
|
344
|
+
// plans nothing — one stop never notifies twice. A clean `--end` passes no reason and stays silent,
|
|
345
|
+
// because a completed run has its own notification. The closed-issue stash report
|
|
346
|
+
// (`run-carry-stash.ts`) is once per invocation on the same read.
|
|
351
347
|
async function report_end(read: CarryRead): Promise<void> {
|
|
352
348
|
if (read.kind === 'none') return
|
|
353
349
|
|
|
354
350
|
await run_carry_stash.report_orphans()
|
|
355
351
|
}
|
|
356
352
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
)
|
|
353
|
+
// Best-effort: the board's record of the ended run never stands between `--end` and the carry record it
|
|
354
|
+
// clears, so a failed write goes to stderr rather than leaving the run carried.
|
|
355
|
+
function keep_ended(directory: string, read: CarryRead, stopped: string | undefined): void {
|
|
356
|
+
try {
|
|
357
|
+
run_carry_ended.record_ended(run_carry_ended.ended_path(directory), read, new Date(), stopped)
|
|
358
|
+
} catch (error) {
|
|
359
|
+
console.error(`run:carry: the ended run was not recorded for run:board: ${String(error)}`)
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// The record goes, and the run it held stays readable as the last ended run, so `run:board` keeps the
|
|
364
|
+
// finished run on screen until the next one begins — a stopped one with the session to resume it from.
|
|
365
|
+
function close_record(directory: string, stopped: string | undefined): CarryRead {
|
|
366
|
+
const target = run_carry.carry_path(directory)
|
|
362
367
|
const read = run_carry.read_carry(target)
|
|
363
368
|
|
|
369
|
+
keep_ended(directory, read, stopped)
|
|
364
370
|
run_carry.end_carry(target)
|
|
365
371
|
|
|
372
|
+
return read
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// The merges the run ended with are recorded while its record can still count them.
|
|
376
|
+
async function finish(
|
|
377
|
+
directory: string,
|
|
378
|
+
stopped: string | undefined,
|
|
379
|
+
is_json: boolean,
|
|
380
|
+
): Promise<number> {
|
|
381
|
+
await run_merge_collect.collect_merged(directory)
|
|
382
|
+
const read = close_record(directory, stopped)
|
|
366
383
|
const notice = run_stop_notify.plan(read, stopped)
|
|
367
384
|
|
|
368
385
|
if (notice !== undefined) await run_stop_notify.announce(notice)
|
|
@@ -378,11 +395,13 @@ async function finish(
|
|
|
378
395
|
return report_carry(ENDED_VERDICT, read.carry, is_json)
|
|
379
396
|
}
|
|
380
397
|
|
|
381
|
-
async function act(
|
|
398
|
+
async function act(
|
|
399
|
+
target: string,
|
|
400
|
+
request: Exclude<Request, { kind: 'end' }>,
|
|
401
|
+
is_json: boolean,
|
|
402
|
+
): Promise<number> {
|
|
382
403
|
if (request.kind === 'claim') return claim_record(target, request.claim, is_json)
|
|
383
404
|
|
|
384
|
-
if (request.kind === 'end') return await finish(target, request.stopped, is_json)
|
|
385
|
-
|
|
386
405
|
const read = run_carry.read_carry(target)
|
|
387
406
|
|
|
388
407
|
if (request.kind === 'read') return report_read(read, is_json)
|
|
@@ -390,16 +409,19 @@ async function act(target: string, request: Request, is_json: boolean): Promise<
|
|
|
390
409
|
return await count(target, read, request, is_json)
|
|
391
410
|
}
|
|
392
411
|
|
|
393
|
-
|
|
394
|
-
|
|
412
|
+
// `unknown` with the reason it was answered: nothing was established, so nothing may be concluded.
|
|
413
|
+
function report_unknown(message: string, is_json: boolean): number {
|
|
414
|
+
console.error(message)
|
|
395
415
|
|
|
396
416
|
return report(UNKNOWN_VERDICT, undefined, is_json, FAILURE_EXIT_CODE)
|
|
397
417
|
}
|
|
398
418
|
|
|
399
419
|
async function answer(request: Request, is_json: boolean): Promise<number> {
|
|
400
|
-
const directory = await run_carry.repository_directory
|
|
420
|
+
const directory = await run_cli_fault.directory_of(COMMAND, run_carry.repository_directory)
|
|
421
|
+
|
|
422
|
+
if (directory === undefined) return report_unknown(run_carry.unknown_message(), is_json)
|
|
401
423
|
|
|
402
|
-
if (
|
|
424
|
+
if (request.kind === 'end') return await finish(directory, request.stopped, is_json)
|
|
403
425
|
|
|
404
426
|
return await act(run_carry.carry_path(directory), request, is_json)
|
|
405
427
|
}
|
|
@@ -412,7 +434,8 @@ function refuse(): number {
|
|
|
412
434
|
|
|
413
435
|
// Every path out of here prints exactly one token, including the ones nobody planned: an empty
|
|
414
436
|
// standard output matches none of the verdicts, which a loop reads as "nothing to carry" before
|
|
415
|
-
// starting a second budget over the first one's.
|
|
437
|
+
// starting a second budget over the first one's. The token stays `unknown`, and the failure says what
|
|
438
|
+
// it was rather than borrowing the unreadable-git-directory message.
|
|
416
439
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
417
440
|
const values = run_carry_args.read_arguments(argv)
|
|
418
441
|
|
|
@@ -424,8 +447,8 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
424
447
|
|
|
425
448
|
try {
|
|
426
449
|
return await answer(request, values.json === true)
|
|
427
|
-
} catch {
|
|
428
|
-
return report_unknown(values.json === true)
|
|
450
|
+
} catch (error) {
|
|
451
|
+
return report_unknown(run_cli_fault.message(COMMAND, error), values.json === true)
|
|
429
452
|
}
|
|
430
453
|
}
|
|
431
454
|
|
|
@@ -4,13 +4,12 @@ import { cost_transcript } from '#scripts/cost-runtime/cost-transcript'
|
|
|
4
4
|
import { own_session } from '#scripts/cost-runtime/own-session'
|
|
5
5
|
import type { CarryOwner, RunCarry } from './run-carry'
|
|
6
6
|
|
|
7
|
-
// **A conversation outlives its process, so an owner named by a pid alone dies too early
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
// a second lane child for the issue the conversation was still running.
|
|
7
|
+
// **A conversation outlives its process, so an owner named by a pid alone dies too early.** The carry
|
|
8
|
+
// record names the agent process spending the budget, and that is right while the process lives — but
|
|
9
|
+
// an interactive conversation is not its process. An extension-host restart ends the process and the
|
|
10
|
+
// same conversation resumes seconds later in a new one (`--resume=<id>`), writing on into the same
|
|
11
|
+
// transcript; read by pid alone, `run:wake` would recover the record as a crash and dispatch a second
|
|
12
|
+
// lane child for the issue the conversation is still running.
|
|
14
13
|
//
|
|
15
14
|
// **The transcript is what persists across the restart, so it is the second half of the identity.**
|
|
16
15
|
// Every resume path — the extension's `--resume=<id>`, a person's `claude -c` — appends to the one
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
3
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
4
|
+
import { z } from 'zod'
|
|
5
|
+
import type { CarryRead } from './run-carry'
|
|
6
|
+
|
|
7
|
+
// The run `run:carry --end` last ended. `--end` removes the carry record, whose `started_at` is the only
|
|
8
|
+
// mark of where an invocation began on the shared event stream, so without this `run:board` would lose
|
|
9
|
+
// the finished run the moment it ended. This keeps the three facts the board needs to redraw that run —
|
|
10
|
+
// what it was asked to do, when it began and when it ended — read from a record rather than guessed on
|
|
11
|
+
// screen.
|
|
12
|
+
//
|
|
13
|
+
// **A stopped run also keeps why it stopped and the session that ran it**, so the board can offer the command that resumes that session to the person the stop waits on. The
|
|
14
|
+
// session is the owner's transcript name, which is the Claude session id; a run with no transcript —
|
|
15
|
+
// a Codex parent — keeps none.
|
|
16
|
+
//
|
|
17
|
+
// **One record, overwritten by the next `--end`**: the board keeps only the run before the next one, and
|
|
18
|
+
// a run that begins replaces nothing here — its carry record is what the board reads while it runs.
|
|
19
|
+
|
|
20
|
+
const ENDED_PREFIX = 'josh-run-ended-'
|
|
21
|
+
const TRANSCRIPT_SUFFIX = '.jsonl'
|
|
22
|
+
|
|
23
|
+
const ended_run_schema = z.object({
|
|
24
|
+
invocation: z.string(),
|
|
25
|
+
started_at: z.string(),
|
|
26
|
+
ended_at: z.string(),
|
|
27
|
+
stopped: z.string().optional(),
|
|
28
|
+
session: z.string().optional(),
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
type EndedRun = z.infer<typeof ended_run_schema>
|
|
32
|
+
|
|
33
|
+
// Keyed on the common git directory, as the carry record is, so every lane reads the same one.
|
|
34
|
+
function ended_path(git_directory: string): string {
|
|
35
|
+
return stamp_file.stamp_path(ENDED_PREFIX, git_directory)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function session_of(transcript: string | undefined): string | undefined {
|
|
39
|
+
return transcript === undefined ? undefined : path.basename(transcript, TRANSCRIPT_SUFFIX)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// The stop's reason and session, only for a run that stopped: a clean end has nobody to resume for.
|
|
43
|
+
function stop_of(
|
|
44
|
+
transcript: string | undefined,
|
|
45
|
+
stopped: string | undefined,
|
|
46
|
+
): Pick<EndedRun, 'stopped' | 'session'> {
|
|
47
|
+
return stopped === undefined ? {} : { stopped, session: session_of(transcript) }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Records the run a `--end` is about to remove. A read with no record — `none` or `unreadable` — names
|
|
51
|
+
// no run, so it leaves the previous record standing rather than erasing it.
|
|
52
|
+
function record_ended(
|
|
53
|
+
target: string,
|
|
54
|
+
read: CarryRead,
|
|
55
|
+
now: Date = new Date(),
|
|
56
|
+
stopped?: string,
|
|
57
|
+
): void {
|
|
58
|
+
if (read.kind !== 'carried' && read.kind !== 'expired') return
|
|
59
|
+
|
|
60
|
+
const { invocation, started_at, owner_transcript } = read.carry
|
|
61
|
+
const ended_at = now.toISOString()
|
|
62
|
+
|
|
63
|
+
stamp_file.replace_stamp(target, {
|
|
64
|
+
invocation,
|
|
65
|
+
started_at,
|
|
66
|
+
ended_at,
|
|
67
|
+
...stop_of(owner_transcript, stopped),
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function parse_ended(raw: string): EndedRun | undefined {
|
|
72
|
+
return json_value.parse_with(raw, ended_run_schema)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// `undefined` when no run has ended here, or the record does not read.
|
|
76
|
+
function read_ended(target: string): EndedRun | undefined {
|
|
77
|
+
const raw = stamp_file.read_stamp_text(target)
|
|
78
|
+
|
|
79
|
+
return raw === undefined ? undefined : parse_ended(raw)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const run_carry_ended = { ended_path, read_ended, record_ended }
|
|
83
|
+
|
|
84
|
+
export { run_carry_ended }
|
|
85
|
+
export type { EndedRun }
|
|
@@ -2,7 +2,7 @@ import { stamp_file } from '#scripts/josh/stamp-file'
|
|
|
2
2
|
import { run_carry, type CarryOwner } from './run-carry'
|
|
3
3
|
import { run_carry_conversation } from './run-carry-conversation'
|
|
4
4
|
|
|
5
|
-
// **A resumed conversation has to take its record back before it falls quiet
|
|
5
|
+
// **A resumed conversation has to take its record back before it falls quiet**.
|
|
6
6
|
// A count moves the owner to the conversation's new process, but a parent waiting on a lane child
|
|
7
7
|
// counts nothing — `lane:await` blocks in the background and the transcript stays unwritten — so a
|
|
8
8
|
// restart followed by a long wait outlasts the quiet window with the record still naming the dead
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { git_stash } from '#scripts/git/stash/git-stash'
|
|
2
2
|
import { stash_orphans } from '#scripts/git/stash/stash-orphans'
|
|
3
3
|
import { issue_state_cli } from '#scripts/issue/issue-state-cli'
|
|
4
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
4
5
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
5
6
|
|
|
6
|
-
// The stash check a `backlogrun` makes at its end
|
|
7
|
+
// The stash check a `backlogrun` makes at its end: the entries whose issue has
|
|
7
8
|
// closed, and those with no readable owner, printed for a person to revive or discard. It rides
|
|
8
9
|
// `run:carry --end` for the ledger flush's reason — `--end` is the invocation's one end across every
|
|
9
10
|
// session cut, where `--begin` repeats on each resume. Standard output is `run:carry`'s one-token
|
|
@@ -47,7 +48,7 @@ async function read_closed(issues: ReadonlyArray<string>): Promise<ClosedRead> {
|
|
|
47
48
|
// `read_issue` answers a failed `gh` call as `unreadable` rather than throwing, so a missing `gh` or a
|
|
48
49
|
// rate limit would otherwise empty the closed set and print a report that looks complete.
|
|
49
50
|
function unreadable_note(unreadable: ReadonlyArray<string>): string {
|
|
50
|
-
const issues = unreadable.map((issue) =>
|
|
51
|
+
const issues = unreadable.map((issue) => session_cite.issue(issue)).join(', ')
|
|
51
52
|
|
|
52
53
|
return `Could not read ${issues}, so a stash of theirs may be missing above; ${FAILURE_NOTE}`
|
|
53
54
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
// The pure streak arithmetic behind `run-carry.ts` → `apply_change`,
|
|
2
|
-
//
|
|
3
|
-
// It owns the two consecutive-streak counters — the failure streak and the API-outage streak — and the
|
|
1
|
+
// The pure streak arithmetic behind `run-carry.ts` → `apply_change`, kept apart so the record's file
|
|
2
|
+
// stays under its line bound and the outage fold has a test of its own. It owns the two consecutive-streak counters — the failure streak and the API-outage streak — and the
|
|
4
3
|
// one timestamp the outage fold reads. Nothing here touches disk: it is arithmetic over the values a
|
|
5
4
|
// change carries and the counters already on the record.
|
|
6
5
|
//
|
|
@@ -15,8 +14,8 @@ const NO_INCREMENT = 0
|
|
|
15
14
|
// two minutes covers that burst with room to spare. **A genuinely dead API is different**: an outage
|
|
16
15
|
// child is re-dispatched and spends its ten connection retries before the next child returns, so two
|
|
17
16
|
// consecutive *real* outages land minutes apart — outside this window — and still accumulate toward the
|
|
18
|
-
// environment guard
|
|
19
|
-
//
|
|
17
|
+
// environment guard, while one network event booking several outages within seconds cannot trip the
|
|
18
|
+
// limit in a single stroke though the API is alive.
|
|
20
19
|
const OUTAGE_FOLD_WINDOW_MS = 120_000
|
|
21
20
|
|
|
22
21
|
interface StreakCarry {
|
|
@@ -48,7 +47,7 @@ function has_increment(value: number | undefined): boolean {
|
|
|
48
47
|
|
|
49
48
|
// **A merge resets the streak; every other change adds to it.** The consecutive-failure guard trips on
|
|
50
49
|
// children failing one after another, so a child that merged in between is what breaks the run — the
|
|
51
|
-
// reset lives with the increment rather than in a caller that could forget it
|
|
50
|
+
// reset lives with the increment rather than in a caller that could forget it.
|
|
52
51
|
function next_failures(carry: StreakCarry, change: StreakChange): number {
|
|
53
52
|
if (has_increment(change.merged)) return NO_INCREMENT
|
|
54
53
|
|
|
@@ -81,10 +80,9 @@ function counted_outage(carry: StreakCarry, change: StreakChange, now: Date): Ou
|
|
|
81
80
|
return { outages, last_outage_at: now.toISOString() }
|
|
82
81
|
}
|
|
83
82
|
|
|
84
|
-
// **An outage adds to the streak unless it folds; a merge or a genuine child failure resets it
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
// the fold timestamp. A change that touches none of the three leaves the streak untouched.
|
|
83
|
+
// **An outage adds to the streak unless it folds; a merge or a genuine child failure resets it**.
|
|
84
|
+
// Anything that proves the API *was* reachable — a merge, or a child that failed on its own after
|
|
85
|
+
// reaching it — breaks the run and clears the fold timestamp. A change that touches none of the three leaves the streak untouched.
|
|
88
86
|
function next_outage(carry: StreakCarry, change: StreakChange, now: Date): OutageState {
|
|
89
87
|
if (has_increment(change.outages)) {
|
|
90
88
|
return is_within_fold_window(carry.last_outage_at, now)
|