@joshuafolkken/kit 1.1240.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 +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 +29 -47
- 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-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
- 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-ZQGD4GBY.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-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
- 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 +216 -202
- 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 +281 -94
- 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 +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 +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 +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 +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 +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/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-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 +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 +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 +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 +58 -47
- 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
|
@@ -1,478 +1,159 @@
|
|
|
1
1
|
# `backlogrun` — the detailed procedure behind the manifest
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
carries the manifest, not the prose** (joshuafolkken/kit#2190). This file is **reference-only** and is
|
|
5
|
-
read at its point of use — it is classified point-of-use in `entry-read-set.ts`, exactly as the four
|
|
6
|
-
`backlogrun-*.md` phase documents are, so a `backlogrun` entry never opens it whole up front. Each
|
|
7
|
-
section below is the single source of the rule it carries; `backlogrun.md` points here rather than
|
|
8
|
-
restating any of it.
|
|
3
|
+
Point-of-use, read one section at a time from `backlogrun.md` → "The route table"; how the driver runs the loop on its own is `docs/maintainers/backlogrun-driver.md`.
|
|
9
4
|
|
|
10
5
|
## What one invocation approves
|
|
11
6
|
|
|
12
|
-
**One `backlogrun` approves every merge of every issue `pnpm josh backlog:next` offers** —
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
**One `backlogrun` approves every merge of every issue `pnpm josh backlog:next` offers** — `auto-ok`
|
|
8
|
+
issues, every child of an epic whose root carries it, and a run's own filing once `pnpm josh
|
|
9
|
+
epic:bundle` (Tier A, `observation-filing.md`) has placed it under such a root. **A named issue is
|
|
10
|
+
approved by the keyword and its number, not by `auto-ok`** ("Named issues run first, in order"). What
|
|
11
|
+
runs is stated by the keyword and its arguments, never inferred from a request's shape. **Two repairs
|
|
12
|
+
that would bound this the other way are prohibited** — dropping a run's own filings, and requiring a
|
|
13
|
+
person's `auto-ok` on a child; the brake below bounds it. A Tier C action inside a child still stops that child.
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
**`pnpm josh issue:file` decides the `auto-ok` default and prints it** — `auto-ok: applied` or
|
|
16
|
+
`auto-ok: not applied` with the reason; `scripts/issue/issue-auto-ok.ts` is the single source. **Pass
|
|
17
|
+
`--no-auto-ok` only when the new issue needs a person's judgement** — a Tier B toss-up or a Tier C
|
|
18
|
+
action inside it. The retrospective's filings take the same default and count against the same brake.
|
|
19
|
+
**A filing a person asked for declares `--requested` and takes no default** — `auto-ok` only when they
|
|
20
|
+
named it (`kickoff.md` → "Words typed after `new`").
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
request.
|
|
26
|
-
|
|
27
|
-
**An issue found by opted-in work is opted in by default** (joshuafolkken/kit#3213) — this file is
|
|
28
|
-
that rule's single source, and `pnpm josh issue:file` computes it (`scripts/issue/issue-auto-ok.ts`),
|
|
29
|
-
printing `auto-ok: applied` or `auto-ok: not applied` with the reason. It applies `auto-ok` while a
|
|
30
|
-
`backlogrun` carry record is live, or when the issue the current branch names carries `auto-ok`,
|
|
31
|
-
and never on a `--repo` filing to another repository. **Pass `--no-auto-ok` only when the new issue needs a person's judgement** — a Tier B toss-up or a
|
|
32
|
-
Tier C action inside it; a choice with a clear recommendation is Tier A and does not qualify.
|
|
33
|
-
Outside those signals `auto-ok` stays a person's to apply. **Which ones carry the label, that rule;
|
|
34
|
-
in what order and how many at once, the run** — the brake below bounds the quantity, not the
|
|
35
|
-
membership.
|
|
36
|
-
|
|
37
|
-
The end-of-run retrospective is no longer a separate carve-out: it files
|
|
38
|
-
while the carry record is live, so the same default opts its filings in, counted against every brake
|
|
39
|
-
in "The brake that replaces the promise" below.
|
|
40
|
-
|
|
41
|
-
A Tier C action inside a child still stops that child, exactly as it does for any batch child.
|
|
42
|
-
|
|
43
|
-
**A named issue is approved by the keyword and its number, not by `auto-ok`** (joshuafolkken/kit#1984).
|
|
44
|
-
`backlogrun #N1 #N2 …` runs those issues whether or not they carry the label. The pool that follows
|
|
45
|
-
is unchanged: still `auto-ok`, opted in as "Which ones carry the label" above says. "Named issues
|
|
46
|
-
run first, in order" below is the procedure.
|
|
47
|
-
|
|
48
|
-
Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the authorization boundary is shaped this way"
|
|
22
|
+
Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the authorization boundary is shaped this way";
|
|
23
|
+
provenance of each rule: `docs/maintainers/backlogrun-steps-rationale.md` → "Where each rule came from"
|
|
49
24
|
|
|
50
25
|
### The brake that replaces the promise
|
|
51
26
|
|
|
52
|
-
**Every bound is counted in the carry record rather than in the conversation
|
|
53
|
-
inside the invocation" below):
|
|
27
|
+
**Every bound is counted in the carry record rather than in the conversation:**
|
|
54
28
|
|
|
55
|
-
| The bound | What it limits |
|
|
29
|
+
| The bound | What it limits | Counted by |
|
|
56
30
|
| --- | --- | --- |
|
|
57
|
-
| `--max` |
|
|
58
|
-
| `--idle`, and the 8-hour whole-run bound | how long
|
|
59
|
-
| **Ten filings per invocation** |
|
|
60
|
-
| The WIP cap on open issues |
|
|
61
|
-
|
|
62
|
-
One invocation may add at most ten issues to the pool and merge at most `--max` of them, after which
|
|
63
|
-
the run ends and the next one waits for a person to type the keyword.
|
|
64
|
-
|
|
65
|
-
**Two filing routes are exempt from the depth test (`observation-filing.md`), and the ten-filings ceiling
|
|
66
|
-
still covers them:**
|
|
67
|
-
|
|
68
|
-
- **`route:tier-a` and `route:interrupt` stay exempt.** **Their number is still capped**: `prerequisite.md`'s
|
|
69
|
-
ten-filings ceiling is stated "at every entry point", and `run:carry --filed` counts it across
|
|
70
|
-
session cuts.
|
|
71
|
-
- **A review branch-2 filing stays exempt** — a confirmed defect reaching a runtime path, with a
|
|
72
|
-
written failure scenario.
|
|
31
|
+
| `--max` | merges per invocation — a run's own filing competes for it | `run:carry --merged` |
|
|
32
|
+
| `--idle`, and the 8-hour whole-run bound | how long the run looks for more | the record's `started_at` |
|
|
33
|
+
| **Ten filings per invocation** | additions to the pool on **every** filing route (`prerequisite.md`) — `route:tier-a`, `route:interrupt` and a review branch-2 filing are exempt from the depth test (`observation-filing.md`), never from this ceiling | `run:carry --filed` |
|
|
34
|
+
| The WIP cap on open issues | the pool across invocations | `prompts/collaboration-workflow/wip-cap.md` |
|
|
73
35
|
|
|
74
36
|
**This section is the single source of how the `epic:bundle` obligation and this authorization
|
|
75
37
|
boundary meet.** `observation-filing.md` points here rather than restating it.
|
|
76
38
|
|
|
77
39
|
## Named issues run first, in order
|
|
78
40
|
|
|
79
|
-
**`backlogrun #N1 #N2 …` runs the named issues before it touches the pool
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
**`pnpm josh backlog:plan #N1 #N2 …` reports the whole plan** — the named prefix first, in order, then
|
|
85
|
-
the pool. `scripts/backlog/backlog-named.ts` is the single source of that order and of the failure
|
|
86
|
-
branch below; the plan renders it rather than restating it.
|
|
87
|
-
|
|
88
|
-
**Each named issue is a full `fullrun` in a delegated unit**, exactly as a backlog child is
|
|
89
|
-
(`backlogrun-child.md` → "Each child runs in a delegated unit"), and the once-per-session steps — `josh latest`
|
|
90
|
-
on `required`, the progress watcher — run once for the whole invocation, never per issue
|
|
91
|
-
("What runs once per session, not once per issue" below). Between issues, `pnpm josh ms`
|
|
92
|
-
brings the previous merge into the checkout the next one implements in. The parent reads each issue's
|
|
93
|
-
state back from GitHub — `pnpm josh issue:state <N>` — never the unit's summary.
|
|
94
|
-
|
|
95
|
-
**A named issue that cannot finish parks, and the rest of the named list is skipped.** **The run does
|
|
96
|
-
not stop there**: it goes on to drain the opted-in backlog, and the completion report lists the named
|
|
97
|
-
issues it did not start. `backlog_named.after_failure` is the single source.
|
|
98
|
-
|
|
99
|
-
- A named issue read back `CLOSED` — merged, or already `already-done` — is finished; continue with the
|
|
100
|
-
next.
|
|
101
|
-
- A **`needs-human-review`** named issue stops the whole run before its commit (`needs-human-review.md`),
|
|
102
|
-
exactly as any child does — the named issues after it are not started and neither is the pool.
|
|
103
|
-
- Everything else about running one — the verification gate, the hand-off, the guards — is
|
|
104
|
-
this file's and is not restated here.
|
|
105
|
-
|
|
106
|
-
**`--only` runs the named list and stops there, draining no pool** (joshuafolkken/kit#1984).
|
|
107
|
-
`backlogrun #N1 #N2 … --only` runs the named issues in order and ends, and the completion report says
|
|
108
|
-
in one line that `--only` held it back from the opted-in backlog. A named issue that fails **under
|
|
109
|
-
`--only` ends the run** rather than falling through to a pool, and the issues after it are skipped as
|
|
110
|
-
ever. **`--only` with no named issues has nothing to run and is refused before anything starts.**
|
|
111
|
-
`backlog_named.startup` is the single source of both, and `pnpm josh backlog:plan #N1 #N2 … --only`
|
|
112
|
-
renders the named-only plan the run will take.
|
|
113
|
-
|
|
114
|
-
## The session cut is inside the invocation
|
|
115
|
-
|
|
116
|
-
**This section is the single source of the mechanism.** The record, the two commands, the answer table
|
|
117
|
-
and what each one means are all here. **A named-issue `backlogrun #N1 #N2 …` pins its list across the
|
|
118
|
-
cut**: the record keeps the **opening** list at every cut, and the issues it has finished live in the
|
|
119
|
-
record's `done` field rather than shrinking the string — a resumed session reads `remaining` from
|
|
120
|
-
`pnpm josh run:carry --json` and runs those, then drains the pool as ever. **`--only` rides in that
|
|
121
|
-
invocation string like every other token**, so a resumed session runs the remaining named issues and
|
|
122
|
-
**stops** rather than draining the pool the person excluded.
|
|
41
|
+
**`backlogrun #N1 #N2 …` runs the named issues before it touches the pool**,
|
|
42
|
+
in the order typed, **one at a time — no lanes**, each as a full `fullrun` in a delegated unit
|
|
43
|
+
(`backlogrun-child.md` → "Each child runs in a delegated unit"); the parent reads each one's state back
|
|
44
|
+
with `pnpm josh issue:state <N>`, never the unit's summary. `pnpm josh backlog:plan #N1 #N2 …` renders
|
|
45
|
+
the order, and `scripts/backlog/backlog-named.ts` is its single source.
|
|
123
46
|
|
|
124
|
-
**
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
47
|
+
**A named issue that cannot finish parks, and the rest of the named list is skipped**; the run then
|
|
48
|
+
drains the pool, and the report lists what was not started (`backlog_named.after_failure`). A
|
|
49
|
+
`needs-human-review` named issue stops the whole run (`needs-human-review.md`). **`--only` runs the
|
|
50
|
+
named list and stops there, draining no pool** — a failure under `--only` ends the run, and `--only`
|
|
51
|
+
with no named issues is refused before anything starts (`backlog_named.startup`).
|
|
128
52
|
|
|
129
|
-
|
|
130
|
-
`backlogrun-progress.md` → "A carried-over merge does not stand in front of the next lane" is the
|
|
131
|
-
single source.
|
|
53
|
+
## The session cut is inside the invocation
|
|
132
54
|
|
|
133
|
-
**
|
|
134
|
-
|
|
55
|
+
**Typing `backlogrun` once authorizes the declared budget, and a session cut does not end the run** —
|
|
56
|
+
the next session picks the same invocation up from the carry record (`backlogrun-progress.md` → "The
|
|
57
|
+
hand-off"). The record keeps the opening invocation string, `--only` and the named list included; a
|
|
58
|
+
resumed session runs `remaining` from `--json`. The contract is `docs/josh-commands-run.md` →
|
|
59
|
+
"`josh run:carry`".
|
|
135
60
|
|
|
136
61
|
```bash
|
|
137
62
|
pnpm josh run:carry --begin "backlogrun --max 5 --idle 30" --owner "$PPID"
|
|
138
63
|
pnpm josh run:carry --json # read it back in a resumed session
|
|
64
|
+
pnpm josh run:wake --start # same turn as --begin
|
|
139
65
|
```
|
|
140
66
|
|
|
141
|
-
**Always pass `--owner "$PPID"
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
**Ask it before the plan, in the same turn as the first `git switch main && git pull`.** The contract
|
|
146
|
-
is `docs/josh-commands-run.md` → "`josh run:carry`"; what this loop does with each answer is here:
|
|
147
|
-
|
|
148
|
-
| It answers | What the run does |
|
|
149
|
-
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
150
|
-
| `began` | Nothing was carried. This is the invocation's first session: report the plan and run the decision pass as written below |
|
|
151
|
-
| `resumed` | **This session is continuing a run that was cut** — a `--cut` handed the record off, or a `--resume` adopted it. Read the record with `--json` and take the budget figures from it, never from this session's own zero. Report the plan again — the pool has moved — and skip nothing else |
|
|
152
|
-
| `busy` | The record's **owner process is still running and no cut handed it off**: another parent is spending this budget right now. **Stop; do not open a lane.** (A record a `--cut` _did_ hand off answers `resumed` here even with its owner still alive.) Nothing here is yours to end — either that run finishes and ends its own record, or a person decides it is over |
|
|
153
|
-
| `over` | This session is over the context-cut threshold, so it claims nothing (joshuafolkken/kit#2760). **End the conversation**; retype the invocation in a fresh session |
|
|
154
|
-
| `standing` | A record is here that **no cut or supervisor handed off** — an unwatched crash, and the same command retyped over it. **Stop; do not open a lane**: the choice is the person's. Report the two commands the answer names — `pnpm josh run:carry --resume "<invocation>" --owner "$PPID"` to carry that budget on, or `pnpm josh run:carry --end` and begin again to discard it. A crash from a run-tooling defect this run has since fixed is the one you resume yourself (`upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合") |
|
|
155
|
-
| `mismatch` | A record is here for a **different** invocation — a run that never reached `--end`. **Stop; do not open a lane**, and never resume into it. End it deliberately, with `pnpm josh run:carry --end`, once you know that run is over |
|
|
156
|
-
| `expired` | The 8-hour whole-run bound is spent. **Where a `--cut` handed the record off it is this run's own bound**, so this is the verdict on standard output and the run ends: report it and stop, and clear the record with `pnpm josh run:carry --end` once it is genuinely over. Where nothing handed it off it is printed on standard error ahead of a `began` instead — a person typing the keyword again over a spent record is starting a new run, and the record is replaced. A `--resume` over a spent record answers `expired` and adopts nothing |
|
|
157
|
-
| `unreadable` | Report what it printed and **stop before opening a lane** |
|
|
158
|
-
| `unknown` | The same — the repository's git directory could not be read, so nothing was established |
|
|
159
|
-
|
|
160
|
-
**The record is the parent loop's, and a lane never touches it.** A delegated unit is briefed with its
|
|
161
|
-
child and nothing about the invocation's budget. **`--begin` claims the record exclusively and names
|
|
162
|
-
the owning process, so a second parent is answered `busy`.**
|
|
163
|
-
|
|
164
|
-
**Count into the record rather than into your head** — `--merged <N> --owner "$PPID"` at every child's
|
|
165
|
-
merge, `--filed 1 --owner "$PPID"` at every Issue this run files, and `--cut --owner "$PPID"`
|
|
166
|
-
immediately before the cut. `--merged` names the merged issue, never a count
|
|
167
|
-
(`scripts/run/carry/run-carry-args.ts`): `run:merge` records the same issue, so a merge counted on both paths counts
|
|
168
|
-
once. Every other counter is an increment. **`--owner "$PPID"` is not optional on a
|
|
169
|
-
count**: a count that does not name the record's owning process is refused.
|
|
170
|
-
|
|
171
|
-
**`--cut` hands the record off, and so does `run:wake` for a dead owner** (joshuafolkken/kit#2437): the
|
|
172
|
-
next `--begin` naming the same invocation answers `resumed` — **even while the cutting process is still
|
|
173
|
-
running**.
|
|
174
|
-
|
|
175
|
-
**So `--cut` is the session's last write to the record**: count everything the session has, then cut.
|
|
176
|
-
A `--merged` or `--filed` issued after the `--cut` is **refused**.
|
|
177
|
-
|
|
178
|
-
**`backlog:budget` is then fed from the record, never from a count kept in the conversation:**
|
|
179
|
-
`--started` takes the record's `started_at` and `--merged` its `merged`, so `--max` and the 8-hour
|
|
180
|
-
whole-run bound count **across** cuts, as one invocation's worth. **The 10-filings-per-run ceiling is
|
|
181
|
-
counted the same way**, from `filed`. **`--idle` is the one budget that is not carried**, and a cut can
|
|
182
|
-
only reach a watch that opened while this run's own children were still merging. A resumed session
|
|
183
|
-
then states its resume moment as `--active` and the watch begins again at its full budget, bounded by
|
|
184
|
-
the 8 hours as everything else is: "The cost check is not asked during a watch" below.
|
|
185
|
-
|
|
186
|
-
**How many cuts the run crossed is named in the completion report**, read from the record's `cuts`.
|
|
187
|
-
|
|
188
|
-
**End the record when the run ends** — `pnpm josh run:carry --end`, **after the final report and never
|
|
189
|
-
batched with it**: `run:report` scopes by the record `--end` removes. The next `backlogrun` then begins
|
|
190
|
-
its own budget rather than resuming a spent one. **Where the run ends by _stopping_ rather than
|
|
191
|
-
finishing** — `backlog:budget` or `epic:next` answered `stop` (a parked backlog, an unreadable listing,
|
|
192
|
-
the maximum, the whole-run bound), or the consecutive-failure guard tripped — **end it with
|
|
193
|
-
`pnpm josh run:carry --end --stopped "<one-line reason>"` instead**. That pushes one ⏸️ confirmation as
|
|
194
|
-
it clears the record; the reason is the stop verdict's, in the session language. A clean completion
|
|
195
|
-
takes the bare `--end` and stays silent, having its own report; a parked _child_ is pushed by the child
|
|
196
|
-
that parked it (`backlogrun-park.md`). Because `--end` removes the record, a re-run's second `--end`
|
|
197
|
-
finds nothing and never re-sends that confirmation — `progress-watcher.md` →
|
|
198
|
-
"Progress while the run is quiet" is the single source of the pull-versus-push split.
|
|
199
|
-
|
|
200
|
-
**The record widens nothing but the default.** It carries a budget, and its being live is what
|
|
201
|
-
opts this run's filings in ("What one invocation approves"); no other label follows from it. A pool grown across the cut by this run's own bundled filings is "What one invocation
|
|
202
|
-
approves", its ceiling counted from the record's `filed`.
|
|
203
|
-
|
|
204
|
-
**Nothing waits for a person any more — `pnpm josh run:wake` supervises the driver**. After a cut or
|
|
205
|
-
dead-owner recovery, it adopts the carry record and runs `backlog:drive` itself. The driver dispatches,
|
|
206
|
-
collects, watches and reports without starting a parent AI session. Only a returned branch that needs
|
|
207
|
-
judgment starts an AI session, with the branch result and resume flags in its prompt.
|
|
208
|
-
|
|
209
|
-
**Start it in the same turn as `--begin`, and stop it in the same turn as `--end`:**
|
|
67
|
+
**Always pass `--owner "$PPID"`**, and ask it before the plan, in the same turn as the first `pnpm josh
|
|
68
|
+
ms`. **The record is the parent loop's, and a lane never touches it**; count into it with `--merged <N>`
|
|
69
|
+
and `--filed 1`, and **`--cut` is the session's last write**.
|
|
210
70
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
8-hour whole-run bound therefore still comes from the carry record. **A new authorization is still a
|
|
220
|
-
person's**: the supervisor spends the declared budget and never declares another.
|
|
221
|
-
|
|
222
|
-
**A supervisor stopped by a run-tooling defect is restarted by the AI once the fix lands** —
|
|
223
|
-
`upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合".
|
|
224
|
-
|
|
225
|
-
**What may be run is untouched.** The driver takes named issues from the invocation and pool issues
|
|
226
|
-
from the existing offer command. The supervisor writes no label of its own; `auto-ok` arrives only
|
|
227
|
-
through `issue:file`'s default. A judgment session receives
|
|
228
|
-
the original invocation plus the driver's reason and resume state.
|
|
229
|
-
For a named epic, the driver hands off `epic #N` with the original invocation. The judgment session
|
|
230
|
-
follows the named epic procedure and dispatches its children; the epic root is never launched as a
|
|
231
|
-
standalone `fullrun` child. Once every child has merged or parked, record the root with
|
|
232
|
-
`pnpm josh run:carry --done <E> --owner "$PPID"` before continuing the invocation. This removes it
|
|
233
|
-
from the carry record's remaining named list, so the next driver pass can advance. The named prefix
|
|
234
|
-
also consults the carried maximum and whole-run bound
|
|
235
|
-
before each launch, and a failed named issue skips the remaining named prefix.
|
|
71
|
+
| It answers | What the run does |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| `began` | Report the plan and run the decision pass |
|
|
74
|
+
| `resumed` | Take the budget from `--json`, report the plan again, read `backlogrun-progress.md` → "Resuming after a cut" |
|
|
75
|
+
| `busy` / `mismatch` / `unreadable` / `unknown` | **Stop; do not open a lane** — report what it printed; never resume into another invocation's record |
|
|
76
|
+
| `over` | **End the conversation**; retype the invocation in a fresh session |
|
|
77
|
+
| `standing` | **Stop; do not open a lane**: report `pnpm josh run:carry --resume "<invocation>" --owner "$PPID"` and `pnpm josh run:carry --end` for the person to choose — a crash from a run-tooling defect this run has since fixed you resume yourself (`upstream-interrupt.md` → "実行中のリポジトリ自身のラン機構の不具合") |
|
|
78
|
+
| `expired` | On standard output: report, stop and `--end` it. On standard error ahead of `began`: a new run replaced it |
|
|
236
79
|
|
|
237
|
-
**
|
|
238
|
-
|
|
239
|
-
|
|
80
|
+
**End the record when the run ends** — `pnpm josh run:report`, then `pnpm josh run:carry --end`, **never
|
|
81
|
+
batched with it**, and `pnpm josh run:wake --stop` in the same turn. **A run that ends by _stopping_**
|
|
82
|
+
(a `stop` verdict or the consecutive-failure guard) **ends with `pnpm josh run:carry --end --stopped
|
|
83
|
+
"<one-line reason>"`** instead, which sends the one ⏸️ confirmation.
|
|
240
84
|
|
|
241
|
-
**
|
|
242
|
-
|
|
85
|
+
**A driver hand-off of `epic #N` is a named epic**: settle it by `backlogrun-progress.md` → "Running a
|
|
86
|
+
named epic's children", never the root as a standalone `fullrun`, then ask `pnpm josh epic:next <E>` —
|
|
87
|
+
a child number or `complete` continues; only `stop` or a failure records `pnpm josh run:carry --done <E>
|
|
88
|
+
--owner "$PPID"`.
|
|
243
89
|
|
|
244
|
-
**
|
|
90
|
+
**A person keeps control of the supervisor** — `pnpm josh run:wake --list` / `--stop`.
|
|
245
91
|
|
|
246
92
|
Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why a session cut does not end the run"
|
|
247
93
|
|
|
248
94
|
## The plan, before the first child starts
|
|
249
95
|
|
|
250
|
-
**
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
**The plan is one command's output, not an assembly of several:**
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
pnpm josh backlog:plan
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
**It renders the same classified pool `backlog:next` answers from**, so **the plan cannot promise an
|
|
261
|
-
order the run does not take**. Its four sections are:
|
|
96
|
+
**Report the plan before anything is dispatched. The plan is one command's output** — `pnpm josh
|
|
97
|
+
backlog:plan`, rendered from the same
|
|
98
|
+
pool `backlog:next` answers from. Report all four of its sections (Ready now, Waiting, Waiting on a
|
|
99
|
+
person, Out of scope) to the person in the session language, with any truncated-listing `⚠`.
|
|
262
100
|
|
|
263
|
-
|
|
264
|
-
a lane is per repository, so the bundles are how wide this run can go.
|
|
265
|
-
- **Waiting** — every withheld child, each naming **what it is waiting on**: the blocking issue
|
|
266
|
-
numbers, a run that already has it, or that it is ready but past the offer this ask could make.
|
|
267
|
-
- **Waiting on a person** — the `needs-decision` children, which is the next subsection's input.
|
|
268
|
-
- **Out of scope** — every open issue the backlog will **not** run, with the reason, so "not opted in"
|
|
269
|
-
is distinguished from "not reached yet".
|
|
101
|
+
### Resolve what the plan can resolve, before starting
|
|
270
102
|
|
|
271
|
-
**
|
|
272
|
-
|
|
273
|
-
`⚠` with them: the plan is then partial.
|
|
103
|
+
**Settle every `needs-decision` issue the plan listed in one pass**, from one `pnpm josh issue:read <N>
|
|
104
|
+
<N> …` call (body and comments, `issue-comments.md`):
|
|
274
105
|
|
|
275
|
-
|
|
106
|
+
- **An answer already in the issue** — record it as a comment and **remove the label** (Tier A).
|
|
107
|
+
**Never measure in order to decide**: a question needing a benchmark or a run stays labelled.
|
|
108
|
+
- **A person's judgement** — apply `needs-decision` (`backlogrun-park.md` → "Only a person's judgement
|
|
109
|
+
carries `needs-decision`"); the next plan classifies it by the label alone.
|
|
110
|
+
- **Order and isolate** — a native `blocked-by` where one must land first;
|
|
111
|
+
`run:solo` on all three `backlogrun-lanes.md` → "A solo run" conditions, **every other one `run:lane`**,
|
|
112
|
+
commenting the reason.
|
|
113
|
+
- **`priority:high`** only on a cited ground (a stated deadline, a person's written policy), commented;
|
|
114
|
+
**never remove it**.
|
|
115
|
+
- **Report `pnpm josh backlog:plan --waves`** with the plan, never an order derived by hand; then start
|
|
116
|
+
the loop, leaving whatever is still labelled parked.
|
|
276
117
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
- **Decide everything decidable from the issue itself.** Read the issue's body **and its comments**
|
|
281
|
-
(`issue-comments.md`), and where the answer is already there, record it as an Issue comment and
|
|
282
|
-
**remove the label** — `CLAUDE.md` → "Decision autonomy" already makes that Tier A. **Read them all in
|
|
283
|
-
one `pnpm josh issue:read <N> <N> …` call**, not a `gh api` pair per issue.
|
|
284
|
-
- **Never measure in order to decide.** A question needing a benchmark, a profile, or a run of the
|
|
285
|
-
thing itself is not settled here: it stays labelled and the plan says so.
|
|
286
|
-
- **Label what you find.** An issue needing a person's judgement — `backlogrun-park.md` → "Only a
|
|
287
|
-
person's judgement carries `needs-decision`" — gets the label, applied as "park and continue" does. **The next plan classifies it by the label alone**,
|
|
288
|
-
never the body.
|
|
289
|
-
- **Order and isolate the pool in the same pass** (joshuafolkken/kit#2776), from the same
|
|
290
|
-
`issue:read`: an issue that must land first (it builds what another reuses, or both edit one code
|
|
291
|
-
path) becomes a native `blocked-by`; an issue meeting all three of the `backlogrun-lanes.md` →
|
|
292
|
-
"Lanes — running more than one child at a time" conditions gets `run:solo`, **every other one `run:lane`**. Comment the reason; the offer commands enforce all
|
|
293
|
-
three, answering `triage` while an issue has neither.
|
|
294
|
-
- **`priority:high` puts an issue first** (joshuafolkken/kit#2928; ranking: `docs/josh-commands-backlog.md` →
|
|
295
|
-
`josh backlog:next`). Apply it only on a cited ground — a stated deadline or urgency, or a person's
|
|
296
|
-
written policy — commenting the ground; **never remove it**.
|
|
297
|
-
- **Report the order those labels produce — `pnpm josh backlog:plan --waves`** (joshuafolkken/kit#2778),
|
|
298
|
-
`backlog:next` played forward wave by wave. Report it with the plan, never an order derived by hand.
|
|
299
|
-
- **Then start the loop.** Whatever is still labelled is reported as parked and left standing; the
|
|
300
|
-
run does not wait on it.
|
|
301
|
-
|
|
302
|
-
**`needs-decision`, `run:solo`, `run:lane` and `priority:high` are the workflow labels a run may
|
|
303
|
-
apply by hand, and none is `auto-ok` or `needs-human-review`.** `needs-human-review` stays a
|
|
304
|
-
person's alone (`needs-human-review.md`); `auto-ok` reaches only a run's own filing, through
|
|
305
|
-
`issue:file`'s default ("What one invocation approves"). A run parks with `needs-decision` only on
|
|
306
|
-
`backlogrun-park.md` → "Only a person's judgement carries `needs-decision`", and a person clears it.
|
|
118
|
+
**`needs-decision`, `run:solo`, `run:lane` and `priority:high` are the only workflow labels a run
|
|
119
|
+
applies by hand** — never `auto-ok` or `needs-human-review` (`needs-human-review.md`).
|
|
307
120
|
|
|
308
121
|
Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the plan and the decision pass come first"
|
|
309
122
|
|
|
310
123
|
## The loop
|
|
311
124
|
|
|
312
|
-
**The loop is computed, not walked by hand
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
`pnpm josh run:carry --resume "<invocation>" --owner "$PPID"`, act on the branch, then hand the loop
|
|
318
|
-
back with `pnpm josh run:carry --cut --owner "$PPID"`:
|
|
319
|
-
|
|
320
|
-
| Handed back | What the session judges |
|
|
321
|
-
| --- | --- |
|
|
322
|
-
| `triage` | Label each issue stderr names `run:solo` or `run:lane` (with `blocked-by` where one must land first), as "Resolve what the plan can resolve" does; running children continue |
|
|
323
|
-
| `offer` | `backlog:offer` itself could not answer. Report what stderr printed; **never pick an issue by hand** |
|
|
324
|
-
| `launch #N` | A lane failed after it opened. Read the lane's log and park `#N` (`backlogrun-park.md` → "park and continue") |
|
|
325
|
-
| `merge [<token>] #N` | `run:merge` stopped on `environment`, `busy`, `retry` or `over`, or printed nothing: `environment` ends the run, the others re-read the child (`backlogrun-progress.md` → "Running a named epic's children") |
|
|
326
|
-
| `watch` | The backlog drained with nothing in flight; the retrospective is owed (`run:step`) |
|
|
327
|
-
| `window` | The driver's wait window ran out with nothing to judge; hand the loop back as is |
|
|
328
|
-
|
|
329
|
-
**`window`, `merge busy` and `merge retry` reach a session only after the supervisor's own re-runs run
|
|
330
|
-
out** (`run-wake-driver.ts`).
|
|
125
|
+
**The loop is computed, not walked by hand** — the `run:wake` supervisor runs `pnpm josh backlog:drive`
|
|
126
|
+
(`docs/josh-commands-backlog.md` → "`josh backlog:drive`"). A session reaches this section only when
|
|
127
|
+
the `Driver result:` line hands a branch back: claim with `pnpm josh run:carry --resume "<invocation>"
|
|
128
|
+
--owner "$PPID"`, act on the row, then `pnpm josh run:carry --cut --owner "$PPID"`. Read only the one
|
|
129
|
+
section the row names:
|
|
331
130
|
|
|
332
|
-
|
|
333
|
-
|
|
131
|
+
| Handed back | What the session does | Read |
|
|
132
|
+
| --- | --- | --- |
|
|
133
|
+
| `triage` | Label each issue stderr names `run:solo` or `run:lane` (`blocked-by` where one must land first) | "Resolve what the plan can resolve, before starting" above |
|
|
134
|
+
| `offer` | Report what stderr printed; **never pick an issue by hand** | — |
|
|
135
|
+
| `launch #N` | Read the lane's log and park `#N` | `backlogrun-park.md` → "park and continue" |
|
|
136
|
+
| `merge [<token>] #N` | `environment` ends the run; the others re-read the child | `backlogrun-progress.md` → "Running a named epic's children" |
|
|
137
|
+
| `epic #N` | A named epic's turn | "The session cut is inside the invocation" above |
|
|
138
|
+
| `watch` | The retrospective is owed (`run:step`) | `retrospective.md` |
|
|
139
|
+
| `window` | Hand the loop back as is | — |
|
|
140
|
+
|
|
141
|
+
**A candidate only in another repository is never a token** — report it with its checkout. The budgets,
|
|
142
|
+
verdicts and stops are the driver's own: `docs/maintainers/backlogrun-driver.md` (rationale:
|
|
143
|
+
`docs/maintainers/backlogrun-steps-rationale.md` → "Why the idle watch defaults to 30 minutes";
|
|
144
|
+
`docs/maintainers/backlogrun-steps-rationale.md` → "Why the cost check skips a watch").
|
|
334
145
|
|
|
335
146
|
Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the loop's contract is shaped this way"
|
|
336
147
|
|
|
337
|
-
### The two budgets
|
|
338
|
-
|
|
339
|
-
**A `backlogrun` may declare how long it will watch an empty backlog and how many issues it may
|
|
340
|
-
take.** Both are written on the keyword, and **the idle watch is on by default while the maximum is
|
|
341
|
-
not**:
|
|
342
|
-
|
|
343
|
-
```
|
|
344
|
-
backlogrun # watches for 30 minutes after the backlog empties
|
|
345
|
-
backlogrun --idle 0 # finishes the moment the backlog empties
|
|
346
|
-
backlogrun --idle 0 --max 5
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
| Budget | Written | Default | What it does |
|
|
350
|
-
| --- | --- | --- | --- |
|
|
351
|
-
| Idle watch | `--idle <minutes>` | **30 minutes** | After the candidates run out, keep polling this long for a new one. A candidate that appears restarts the watch from that moment |
|
|
352
|
-
| Maximum issues | `--max <count>` | unlimited | How many issues this invocation may take. On reaching it the run reports and finishes |
|
|
353
|
-
|
|
354
|
-
**`--idle 0` is how the watch is turned off, and it is the only way**: `backlogrun --idle 0` finishes
|
|
355
|
-
at the first empty backlog. The default's single source is `scripts/backlog/backlog-budget.ts` →
|
|
356
|
-
`DEFAULT_IDLE_MINUTES`. **A watch is polled every 5 minutes, not at the loop's 60-second interval** —
|
|
357
|
-
read the interval from the reason `backlog:budget` prints rather than remembering it.
|
|
358
|
-
|
|
359
|
-
**To become a candidate an issue needs `auto-ok`** — applied by a person, or by `issue:file`'s
|
|
360
|
-
default to an issue this run filed ("What one invocation approves") — or to be a child this run
|
|
361
|
-
filed and bundled under an already opted-in epic. Either is bounded by the brake there, never the
|
|
362
|
-
watch. No issue that neither a person nor that default opted in is ever picked up during a watch.
|
|
363
|
-
|
|
364
|
-
**`backlog:offer` asks `backlog:budget` for you on every iteration** — it maps `backlog:next`'s answer
|
|
365
|
-
to the word "The loop" points to and hands it over, so the loop makes the one call and reads back the
|
|
366
|
-
verdict:
|
|
367
|
-
|
|
368
|
-
```bash
|
|
369
|
-
offer=$(pnpm josh backlog:offer --started "$started" --active "$active" \
|
|
370
|
-
--merged <count> --running <count> --retries <count> [--idle <minutes>] [--max <count>])
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
**`--active` is required of every ask, because the watch is on unless it was turned off** — an
|
|
374
|
-
invocation whose watch is on and that carries no `--active` is **refused** by `backlog:budget`. Only
|
|
375
|
-
`--idle 0` excuses it. **`--running` also decides `wait` and `--retries` decides `retry`** — the two
|
|
376
|
-
context branches that mapping carries, applied inside the command from the counts the loop already
|
|
377
|
-
tracks.
|
|
378
|
-
|
|
379
|
-
| Verdict | What the loop does |
|
|
380
|
-
| --- | --- |
|
|
381
|
-
| `run` | Start what `backlog:next` offered, up to the free lanes. The reason names how many more the maximum still allows; start no more than that |
|
|
382
|
-
| `watch` | Ask both commands again — at the 5-minute idle poll while the backlog is empty **and** nothing of this run's is in flight, and at the 60-second polling interval in every other case (a blocked backlog, a drain, or a watch that opened while children were still merging). *Whether the parent keeps that interval as a clock of its own* is the in-flight test: with nothing in flight the watcher declines for the whole watch and never exits, so the parent sleeps the interval itself; with something in flight the wake is `pnpm josh lane:await` or the watcher's arrival exit — never a report — and the interval is only a floor on the re-ask (`backlogrun-progress.md` → "The wake exists only while something is in flight"). **Nothing is held while watching** — the working tree's hold and each drained lane were released at the last child's merge, so a watching run blocks no other run |
|
|
383
|
-
| `stop` | Report and finish. The reason it printed **is** the termination reason the completion report carries |
|
|
384
|
-
|
|
385
|
-
**At the drain the retrospective fires before this watch, not after it** (joshuafolkken/kit#2335):
|
|
386
|
-
`backlog:offer` marks the drain on the event stream and `run:step` fires the retrospective there, so the
|
|
387
|
-
watch that follows picks up its `auto-ok` filings. `retrospective.md` → "When it fires" is the single
|
|
388
|
-
source, read when `run:step` prints the step.
|
|
389
|
-
|
|
390
|
-
`--started` is when the invocation began; `--active` is when it last had work — the most recent ask
|
|
391
|
-
that was **not** `exhausted`, and in a resumed session the moment it picked the run up. **Refreshing
|
|
392
|
-
`--active` restarts the idle watch**, so an issue opted in mid-watch is picked up and the watch begins
|
|
393
|
-
again at its full budget. Both are ISO-8601 timestamps (`date -u +%FT%TZ`), and `--idle` without
|
|
394
|
-
`--active` is refused. `--merged` is what has merged and `--running` what is still in a lane; **both
|
|
395
|
-
count against the maximum**. **No ending abandons a lane**: whatever would have ended the run answers
|
|
396
|
-
`watch` while `--running` is above zero, so the lanes drain and their merges reach the report. The full
|
|
397
|
-
contract is `docs/josh-commands-backlog.md` → "`josh backlog:budget`".
|
|
398
|
-
|
|
399
|
-
**The completion report names three things the budgets make meaningful**: how many issues this run
|
|
400
|
-
took, how many of them were picked up during an idle watch, and the termination reason — quoted from
|
|
401
|
-
what `backlog:budget` printed rather than paraphrased.
|
|
402
|
-
|
|
403
|
-
Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the idle watch defaults to 30 minutes"
|
|
404
|
-
|
|
405
|
-
### The cost check is not asked during a watch
|
|
406
|
-
|
|
407
|
-
**A watch does not count towards the session cut.** The hand-off check — `pnpm josh cost --cut`,
|
|
408
|
-
`backlogrun-progress.md` → "The hand-off" — is asked **at a child's merge**, and a watch has no merges,
|
|
409
|
-
so a run that is only watching never reaches one. When the watch picks something up, the check is
|
|
410
|
-
asked at that child's merge in the ordinary way.
|
|
411
|
-
|
|
412
|
-
**So every cut is taken at a merge.** The one shape that puts a cut inside a watch — the backlog
|
|
413
|
-
answering `exhausted` while this run's own children are still merging — is the same, because the woken
|
|
414
|
-
session has just merged a child. A Codex parent's cut is the one taken at a dispatch instead
|
|
415
|
-
(`backlogrun-progress.md` → "A parent without a completion callback").
|
|
416
|
-
|
|
417
|
-
**The 8-hour whole-run bound is untouched and still outranks all of this** — it is measured from the
|
|
418
|
-
record's `started_at` across every cut, so a run cannot watch its way past it in 30-minute pieces.
|
|
419
|
-
|
|
420
|
-
Rationale: `docs/maintainers/backlogrun-steps-rationale.md` → "Why the cost check skips a watch"
|
|
421
|
-
|
|
422
|
-
### Where the run stops
|
|
423
|
-
|
|
424
|
-
Termination is decided by what the loop is told, never by a judgement that enough has been done:
|
|
425
|
-
|
|
426
|
-
- **`--only` ends the run once the named list is done** — there is no pool and no idle watch to fall
|
|
427
|
-
through to, so the run reports and finishes; it never enters the pool loop at all.
|
|
428
|
-
- **`pnpm josh backlog:budget` answering `stop`** — the single decision, covering an idle watch
|
|
429
|
-
running out, the backlog emptying with the watch turned off, the maximum being reached, a parked
|
|
430
|
-
backlog, an unreadable listing, and the whole-run bound.
|
|
431
|
-
- **The whole-run 8-hour bound is unchanged and outranks both budgets**, and the idle watch lives
|
|
432
|
-
inside it: `backlogrun-progress.md` → "Waiting, and never waiting forever" is still where the figure is stated,
|
|
433
|
-
and `backlog:budget` is what applies it, so a run at the bound stops with candidates in hand and a
|
|
434
|
-
watch still open.
|
|
435
|
-
- **Every one of those budgets is counted across this run's own session cuts**, from the record
|
|
436
|
-
`pnpm josh run:carry` keeps rather than from a count held in the current session — "The session cut
|
|
437
|
-
is inside the invocation" above.
|
|
438
|
-
- **The guards in `backlogrun.md` → "Guards"** apply unchanged, counted over the whole `backlogrun`
|
|
439
|
-
rather than per epic: children per run, Issues filed per run, and consecutive child failures. The
|
|
440
|
-
maximum above is a person's declaration of scale and does not replace any of them — whichever binds
|
|
441
|
-
first ends the run.
|
|
442
|
-
- **A `needs-human-review` child stops the whole run** before its commit — `needs-human-review.md`, which is
|
|
443
|
-
the single source, and `backlogrun-park.md` → "`needs-human-review` — the one stop that is not a park" for
|
|
444
|
-
what happens to its lane.
|
|
445
|
-
- **The hand-off check** — `pnpm josh cost --cut` at every child's merge, and the lane
|
|
446
|
-
hand-over that follows an `over` — is `backlogrun-progress.md` → "The hand-off", unchanged. It is
|
|
447
|
-
**not** asked during an idle watch: "The cost check is not asked during a watch" above, nor by the
|
|
448
|
-
supervisor's `backlog:drive`, which has no session to cut (joshuafolkken/kit#3156).
|
|
449
|
-
- **Parking is not stopping.** A child that needs a decision, and a delegated unit that stopped
|
|
450
|
-
without reporting, are **parked** and the run continues (`backlogrun-park.md` → "park and
|
|
451
|
-
continue"); only the consecutive-failure guard above can turn repeated parks into a stop.
|
|
452
|
-
|
|
453
148
|
## What runs once per session, not once per issue
|
|
454
149
|
|
|
455
|
-
All of these are this file's, and are reached here in the same order and for the same reasons:
|
|
456
|
-
|
|
457
150
|
| Step | Where it is defined |
|
|
458
151
|
| --- | --- |
|
|
459
|
-
| `
|
|
460
|
-
| `josh
|
|
461
|
-
| `
|
|
152
|
+
| `run:carry --begin` + `run:wake --start` before the plan; `run:carry --end` + `run:wake --stop` at the end | "The session cut is inside the invocation" above |
|
|
153
|
+
| `pnpm josh ms`, `pnpm josh latest:scope`, `lane:prune` in the primary checkout before the first lane | `backlogrun-lanes.md` → "Once per repository, before the first lane opens" |
|
|
154
|
+
| `josh latest` on `required` only, once, never in a lane | `backlogrun-child.md` → "`josh latest` runs once per session, not once per child" |
|
|
155
|
+
| `pnpm josh run:hold <N>`'s preflight, before each child not in a lane | `docs/josh-commands-run.md` → "`josh run:hold`" |
|
|
462
156
|
| `pnpm josh run:progress --wait` in the background, `--mark` at every real report | `progress-watcher.md` → "Progress while the run is quiet" |
|
|
463
|
-
| `pnpm josh release:scope` once, after the last
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
`pnpm josh run:carry --begin "<the invocation, single-spaced>" --owner "$PPID"` before the plan and
|
|
467
|
-
`pnpm josh run:carry --end` when the run finishes, and beside each of them
|
|
468
|
-
`pnpm josh run:wake --start` and `pnpm josh run:wake --stop` — the supervisor that continues the run
|
|
469
|
-
across a cut. Both pairs are "The session cut is inside the invocation" above.
|
|
470
|
-
|
|
471
|
-
**Record the invocation in the form the supervisor can rebuild: one space between tokens, and a plain
|
|
472
|
-
integer for each budget value** — `backlogrun --max 3`, never `backlogrun --max 03`. The supervisor
|
|
473
|
-
refuses to wake on a record its own rebuild would rewrite: the first cut ends the run with a `warning`
|
|
474
|
-
Telegram, so write the canonical form rather than the keystrokes.
|
|
475
|
-
|
|
476
|
-
**`pnpm josh epic:audit` is not run.** There is no epic to audit — the run began from the backlog, the
|
|
477
|
-
same reason this file skips it when it began from a bare Issue. `backlog:next` reuses `epic:next`'s
|
|
478
|
-
own read and classify and answers `error` rather than guessing when it cannot resolve one.
|
|
157
|
+
| `pnpm josh release:scope` once, after the last merge and lane close | `followup.md` → "When `pnpm josh release` runs" |
|
|
158
|
+
|
|
159
|
+
**`pnpm josh epic:audit` is not run.** There is no epic to audit — the run began from the backlog.
|