@joshuafolkken/kit 1.1229.0 → 1.1370.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +50 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +24 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +27 -16
- package/.claude/skills/workflow-commands/latest-gate.md +18 -29
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.github/workflows/publish.yml +2 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +38 -57
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +42 -10
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-6HJJXRBX.js → chunk-KPM4YIIX.js} +8 -44
- package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/{chunk-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +213 -197
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -201
- package/dist/josh.js +540 -137
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +16 -10
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +4 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +26 -2
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +162 -0
- package/scripts/gate/core-budget.ts +134 -91
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +103 -35
- package/scripts/gate/gate-report.ts +39 -21
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +313 -0
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +60 -53
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +12 -8
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +35 -0
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +49 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +75 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +14 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +46 -37
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +165 -0
- package/scripts/issue/issue-release.ts +58 -0
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +32 -34
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +33 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +11 -5
- package/scripts/josh/josh-commands-lane.ts +16 -5
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-maintenance.ts +2 -2
- package/scripts/josh/josh-commands-run.ts +20 -6
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +10 -10
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +20 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +44 -30
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +25 -24
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +22 -8
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +27 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +140 -0
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/cycle-recheck.ts +122 -0
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +34 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-environment.ts +1 -0
- package/scripts/release/github-release-runs.ts +115 -0
- package/scripts/release/github-release.ts +13 -67
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +5 -6
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +68 -37
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +10 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +172 -43
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +25 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +13 -15
- package/scripts/run/run-step.ts +62 -48
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -33
- package/scripts/run/wake/run-wake-describe.ts +76 -29
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +13 -21
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -328
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +129 -98
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/templates/workflows/github-release.yml +4 -0
- package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -1,377 +1,127 @@
|
|
|
1
1
|
# `backlogrun` — progress, the hand-off, resume and waiting
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
child's merge (`pnpm josh cost --cut`). It is a point-of-use document, never an entry read: the entry
|
|
5
|
-
procedure is `backlogrun.md`, which points here at those steps (joshuafolkken/kit#2010). This file is
|
|
6
|
-
the single source of the session hand-off and cut/resume, waiting without waiting forever, and the
|
|
7
|
-
end-of-run summary and propagate. **The heartbeat is not here** — it binds every implementing run, so
|
|
8
|
-
its single source is `progress-watcher.md` → "Progress while the run is quiet" (joshuafolkken/kit#3172),
|
|
9
|
-
read before the watcher starts.
|
|
10
|
-
|
|
11
|
-
After a carry hand-off, the detached `run:wake` supervisor runs the deterministic `backlog:drive`
|
|
12
|
-
loop. References below to a parent's mechanical polling and lane collection describe work now done
|
|
13
|
-
by that supervisor; an AI parent is started only for a driver branch that requires judgment.
|
|
3
|
+
Point-of-use, read one section at a time from `backlogrun.md` → "The route table"; the heartbeat is `progress-watcher.md` → "Progress while the run is quiet".
|
|
14
4
|
|
|
15
5
|
## Running a named epic's children
|
|
16
6
|
|
|
17
|
-
`
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
**`backlog:drive` walks this loop on its own; a session runs it when the driver hands back `epic #N`**
|
|
8
|
+
(the loop: `docs/maintainers/backlogrun-driver.md`; rationale:
|
|
9
|
+
`docs/maintainers/backlogrun-progress-rationale.md` → "Why a named epic's children run in lanes";
|
|
10
|
+
`docs/maintainers/backlogrun-progress-rationale.md` → "Why state lives in records, not the
|
|
11
|
+
conversation"). Each child runs as `fullrun #<N>` in a lane —
|
|
12
|
+
`pnpm josh lane:launch <N>` (`backlogrun-lanes.md` → "Opening one lane and dispatching its child"),
|
|
13
|
+
then `pnpm josh lane:await <N...> --owner "$PPID"` in the background — and every ending is read by one
|
|
14
|
+
command:
|
|
21
15
|
|
|
22
16
|
```bash
|
|
23
|
-
|
|
24
|
-
# one issue number per line, up to the number of free lanes; a verdict token when there is none
|
|
25
|
-
answers=$(pnpm josh epic:next 858 909 --repo joshuafolkken/kit --lanes)
|
|
26
|
-
# every named epic, merged into the same pool — "Several epics in one run" above
|
|
17
|
+
next=$(pnpm josh run:merge <N> --epic <E> --repo <owner/repo> --owner "$PPID" --output <path>)
|
|
27
18
|
```
|
|
28
19
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
recovered and `run:hold` asked again, `park` parks this child and returns to step 1, `unknown` stops
|
|
37
|
-
the session, `resume` starts the child on the branch that is there with the whole verification gate
|
|
38
|
-
re-run, and `hold` starts it. **In a lane the check is skipped**, and `lane:open`'s own answer
|
|
39
|
-
replaces it. **Everything from here on is per child**:
|
|
40
|
-
with several in flight each is confirmed, counted and closed on its own, and step 1 is asked again
|
|
41
|
-
once a lane comes free rather than once the last child returns. Either way the child runs as
|
|
42
|
-
`fullrun #<N>` does, **in a delegated unit where one is available** (`pnpm josh delegate epic-child`
|
|
43
|
-
→ `delegate`) and **in this session's own context where none is**, **except that `josh latest` is
|
|
44
|
-
not run** and **no progress watcher is started**. `git switch main && git pull` runs per child in
|
|
45
|
-
whichever context implements it, **and again in this session afterwards** when the child was
|
|
46
|
-
delegated. **In a lane the child cannot run it at all**, so it is the parent's, immediately before
|
|
47
|
-
that lane's `lane:open`.
|
|
48
|
-
|
|
49
|
-
**Start the unit without blocking on it — `pnpm josh lane:dispatch <N>` when the child runs in a
|
|
50
|
-
lane — and in the same turn start `pnpm josh lane:await <N...> --owner "$PPID"` in the background** (joshuafolkken/kit#2113).
|
|
51
|
-
`lane:await` watches local process presence and exits when any named child confirms-complete. **The
|
|
52
|
-
re-confirm delay and poll interval are the command's, not the agent's** — pass only the issue
|
|
53
|
-
numbers and `--owner` (why: `docs/josh-commands-run.md` → `josh lane:await`). Without that wake (Codex), hand off instead — "A parent without a completion callback".
|
|
54
|
-
|
|
55
|
-
**A `lane:await` wake is a confirmed-gone process, so classify the ending at once — do not wait out
|
|
56
|
-
the silent-unit window** (joshuafolkken/kit#2277). On a `lane:await` wake go straight to `pnpm josh run:merge <N> --output <path>` — the composite reads the child's **exit
|
|
57
|
-
record**, decisive whether the child merged, died on an outage, or abandoned mid-implementation
|
|
58
|
-
("Running a named epic's children" reads its tokens). An outage child is re-dispatched in the same run
|
|
59
|
-
and a run of them trips the environment guard; nothing waits for a person. Rationale:
|
|
60
|
-
`docs/maintainers/backlogrun-progress-rationale.md` → "Why a child's ending is classified at once".
|
|
61
|
-
|
|
62
|
-
**`run:liveness` stays the fallback for a lane no `lane:await` is watching** — a handed-over lane a
|
|
63
|
-
resumed session polls ("Picking the lanes up in the fresh session"). Ask
|
|
64
|
-
`pnpm josh run:liveness <N> --output <path> --process <what `pgrep -laf "(fullrun|run-ship-cli\.ts .*) #<N>$"` found>` where
|
|
65
|
-
that file has been unchanged for the silent-unit window; on `stopped` its own advice routes the child
|
|
66
|
-
through the same `run:merge --output` classification. **The flag is what you saw, never what kind of
|
|
67
|
-
child it is.**
|
|
68
|
-
|
|
69
|
-
**When the unit reports back, a merge is one event, and one call of the parent's — `pnpm josh
|
|
70
|
-
run:merge <N>`** (joshuafolkken/kit#2024). It is the only reading of how the child ended: never
|
|
71
|
-
classify `pnpm josh issue:state` by hand, and never ask `epic:next` in its place. Rationale:
|
|
72
|
-
`docs/maintainers/backlogrun-progress-rationale.md` → "Why a child's ending is read by `run:merge` alone".
|
|
73
|
-
The composite command confirms the child from GitHub, does the post-merge steps, folds in the hand-off check, and prints
|
|
74
|
-
the next child number — or a control verdict — for the parent to read. Pass the merged child's
|
|
75
|
-
number and the offer's source — `--epic <E> --repo <owner/repo>` for a named epic,
|
|
76
|
-
nothing for the opted-in backlog — with `--owner "$PPID"` so it counts into the carry record under
|
|
77
|
-
the ownership guard.
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
next=$(pnpm josh run:merge <N> --epic <E> --repo <owner/repo> --owner "$PPID" --output <path>)
|
|
81
|
-
# a child number (or several, one per free lane) to run next, or a verdict token
|
|
82
|
-
```
|
|
20
|
+
**`pnpm josh run:merge <N>` is the only reading of how a child ended** — never
|
|
21
|
+
classify `issue:state` by hand or ask `epic:next` in its place. **Pass `--output <path>`, the child's
|
|
22
|
+
transcript**; the named-epic flags are dropped for the opted-in backlog. It classifies, counts, closes
|
|
23
|
+
the lane and comments itself; act on the token. Rationale:
|
|
24
|
+
`docs/maintainers/backlogrun-progress-rationale.md` → "Why a child's ending is read by `run:merge` alone";
|
|
25
|
+
`docs/maintainers/backlogrun-progress-rationale.md` → "Why a child's ending is classified at once";
|
|
26
|
+
provenance of each rule: `docs/maintainers/backlogrun-progress-rationale.md` → "Where each rule came from".
|
|
83
27
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
**not** parked and **not** counted against the consecutive-failure guard, and stays re-dispatchable
|
|
95
|
-
(joshuafolkken/kit#2240); a **failed** child (OPEN, neither label, not an outage) has its stale
|
|
96
|
-
`in-progress` dropped, is parked with `needs-decision`, and is counted against the consecutive-failure
|
|
97
|
-
guard. The label stays only once its reason passes `backlogrun-park.md` → "Only a person's judgement
|
|
98
|
-
carries `needs-decision`".
|
|
99
|
-
|
|
100
|
-
**Beyond the offer `epic:next` prints** (`run` becomes numbers; `wait` / `stop` / `complete` /
|
|
101
|
-
`error` pass through), the composite adds six verdict tokens: `over` — the merge crossed the budget,
|
|
102
|
-
so hand the lanes over and take the cut ("The hand-off" below); `human-review` — the child stopped
|
|
103
|
-
before its commit, the run's own ending (needs-human-review.md), so stop — leave `in-progress` on, and send
|
|
104
|
-
no second `confirmation` Telegram, since the unit already sent one (where the child ran in this
|
|
105
|
-
session's own context, that first notification is yours to send); `stop` — the consecutive-failure
|
|
106
|
-
guard tripped; `environment` — the consecutive-**outage** guard tripped, so the API is down and the
|
|
107
|
-
run stops as an environment failure rather than the children's (joshuafolkken/kit#2240); `resumed` —
|
|
108
|
-
an unadopted cut was relaunched; `lane:await <N>` it again (joshuafolkken/kit#2484); and `retry` — the child's state could not be read, so re-read it.
|
|
28
|
+
| It prints | What the run does |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| numbers | Run the children it offers next. A kept `needs-decision` answers to `backlogrun-park.md` → "Only a person's judgement carries `needs-decision`" |
|
|
31
|
+
| `wait` | Wait for the next wake |
|
|
32
|
+
| `complete` | Record the root done (`backlogrun-steps.md` → "The session cut is inside the invocation") and post the epic summary |
|
|
33
|
+
| `over` | Hand the lanes over and take the cut — "The hand-off" below |
|
|
34
|
+
| `human-review` | Stop, leave `in-progress` on; send a `confirmation` only where the child ran in this session's own context (`needs-human-review.md`) |
|
|
35
|
+
| `stop` / `environment` | Report the parked children (or the outage) and stop |
|
|
36
|
+
| `resumed` | `lane:await <N>` it again |
|
|
37
|
+
| `retry` / `busy` | Re-read the child |
|
|
109
38
|
|
|
110
|
-
|
|
111
|
-
counters live in the record" below). **The hand-off check is folded into the merge branch of the one
|
|
112
|
-
call** — `pnpm josh cost --cut`, run after `pnpm josh ms`; `under` offers the next child,
|
|
113
|
-
`over` prints `over` so the parent hands its lanes over and takes the cut ("The hand-off" below), and
|
|
114
|
-
a session that cannot measure is read as `over`. **Never read the condition off `pnpm josh delegate
|
|
115
|
-
epic-child`** ("The check is asked at every merge" below).
|
|
116
|
-
3. **`wait`** — go back to step 1. **With something of this run's own in flight, that happens on the
|
|
117
|
-
wake `lane:await` or the progress watcher's arrival exit delivers** and the parent starts no sleep
|
|
118
|
-
of its own; the 60 s figure bounds how soon the ask may be repeated. **A scheduled report is not one
|
|
119
|
-
of those wakes** (joshuafolkken/kit#3102). **With nothing in flight neither wake comes, so the parent
|
|
120
|
-
keeps the interval** — the case for "another repository has work but this one does not", and for a
|
|
121
|
-
cross-repository publish wait. "The wake exists only while something is in flight" below decides
|
|
122
|
-
which.
|
|
123
|
-
4. **`stop`** — report the parked children and finish.
|
|
124
|
-
5. **`complete`** — post the epic summary and finish.
|
|
125
|
-
6. **Exit code 1** — `epic:next` refused a cyclic or contradictory graph, or could not read a child.
|
|
126
|
-
Report and finish.
|
|
39
|
+
**Exit code 1** — a cyclic or unreadable graph: report and finish.
|
|
127
40
|
|
|
128
41
|
## After a named epic completes
|
|
129
42
|
|
|
130
43
|
**When a named epic's children are all processed — merged or parked — the run advances to the next
|
|
131
44
|
named item, and then drains the opted-in backlog** (unless `--only`, which stops after the named
|
|
132
|
-
list). A completed epic is one step of the invocation, never its end
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
up ("Nothing found means no epic"). The epic's own completion summary is sent by the session standing
|
|
136
|
-
in the repository that owns it ("Who sends the summary, and who propagates" below).
|
|
45
|
+
list). A completed epic is one step of the invocation, never its end. A named item that is a bare,
|
|
46
|
+
non-epic Issue reaches the same point when it merges. The epic's own completion summary is sent by the
|
|
47
|
+
session standing in the repository that owns it ("Who sends the summary, and who propagates" below).
|
|
137
48
|
|
|
138
49
|
## The hand-off — one session does not have to run the whole batch
|
|
139
50
|
|
|
140
|
-
**The
|
|
141
|
-
merge
|
|
142
|
-
(`backlogrun-steps.md` → "The session cut is inside the invocation")
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
pnpm josh cost --cut
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
It prints `over` or `under` on standard output and the measured figure on standard error. `over` means
|
|
151
|
-
the next turn of this session costs more than the threshold in billed input.
|
|
152
|
-
|
|
153
|
-
**135,000 is shared by the scheduler entry, scheduler hand-off and lane worker implementation cut.**
|
|
154
|
-
The value is `CONTEXT_CUT_THRESHOLD` in `scripts/cost-runtime/context-cut-threshold.ts`; `cost --cut`,
|
|
155
|
-
`run:merge`, `run_cut.IMPLEMENTATION_CONTEXT_THRESHOLD` and the parent hand-off guard all read it. The
|
|
156
|
-
output ceiling and the entry-read figure are a separate 150,000, not this threshold.
|
|
51
|
+
**The check is asked at every merge, and delegation does not excuse it** — `pnpm josh cost --cut`
|
|
52
|
+
after every child's merge and `pnpm josh ms`, never wired to `pnpm josh delegate epic-child`. Crossing it **hands the session off to a fresh one,
|
|
53
|
+
carrying the budget** (`backlogrun-steps.md` → "The session cut is inside the invocation"); it is not a
|
|
54
|
+
stop. The threshold is `CONTEXT_CUT_THRESHOLD` in `scripts/cost-runtime/context-cut-threshold.ts`
|
|
55
|
+
(135,000, shared by the scheduler entry, hand-off and the lane worker cut, `pre-gate-cut.md` → "The
|
|
56
|
+
implementation-phase cut"). Rationale: `docs/maintainers/backlogrun-progress-rationale.md` → "Why the
|
|
57
|
+
hand-off check is asked at every merge".
|
|
157
58
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
`delegate` everywhere.
|
|
164
|
-
|
|
165
|
-
`over` and `under` are not the only answers: the command **exits 1 with empty standard output** when
|
|
166
|
-
there is no transcript, or no request in it. **Neither is `under`** — report that the check could not
|
|
167
|
-
answer, and take `over`'s branch at that child.
|
|
168
|
-
|
|
169
|
-
### When to ask, and what to do
|
|
170
|
-
|
|
171
|
-
**Ask once per child, immediately after its merge and `pnpm josh ms`**; mid-child, a hook asks (#2947).
|
|
172
|
-
|
|
173
|
-
### A parent without a completion callback hands off at its first dispatch
|
|
174
|
-
|
|
175
|
-
**A finished command never re-invokes a Codex parent, so after a dispatch `run:step` prints the `--cut`
|
|
176
|
-
below the cut cap, `wait` at it** (joshuafolkken/kit#2653): dispatch the wave, run it, end the turn.
|
|
177
|
-
|
|
178
|
-
### The lane child reuses this measurement mid-implementation
|
|
179
|
-
|
|
180
|
-
**The same `pnpm josh cost --over` measurement bounds a lane child's context _during_ implementation, not
|
|
181
|
-
only the parent's between children**. The child measures its own per-request
|
|
182
|
-
context with **this command** at the shared `CONTEXT_CUT_THRESHOLD`, 135_000, and cuts with
|
|
183
|
-
`pnpm josh run:cut --impl <N> --handoff <path>`. **The measurement and threshold are single-sourced**:
|
|
184
|
-
`cost_verdict.per_request_cost` is what both seams compare, and `cost --cut` selects the same constant
|
|
185
|
-
for both. The boundary and the resume: `pre-gate-cut.md` → "The implementation-phase cut".
|
|
186
|
-
|
|
187
|
-
**A merge is not by itself a safe seam, because another lane may still be running.** **Read the lanes rather than judging them:**
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
pnpm josh lane:list # `none`, or one line per lane with its state and its recorded output path
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**Every lane in flight is handed over, and the last column is what makes that possible.**
|
|
194
|
-
`pnpm josh lane:output <N>` prints the same path on its own, so the next session polls a lane it never
|
|
195
|
-
opened with two:
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
unit_output=$(pnpm josh lane:output <N>) &&
|
|
199
|
-
pnpm josh run:liveness <N> --output "$unit_output" --process alive
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**`--process` carries what `pgrep` found, and with a dispatched child that is the whole answer.** Run
|
|
203
|
-
`pgrep -laf "(fullrun|run-ship-cli\.ts .*) #<N>$"` first and pass `alive` where it found the child and `none` where it did not
|
|
204
|
-
— **never `alive` because the child was dispatched**, and never from a `pgrep` on the lane's directory.
|
|
59
|
+
| It answers | What the run does |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `under` | Back to the loop |
|
|
62
|
+
| `over` | Open no new lane, take no new child, and read the lanes below in the same turn |
|
|
63
|
+
| exit 1, empty output | Report that the check could not answer, and take `over`'s branch |
|
|
205
64
|
|
|
206
|
-
**
|
|
207
|
-
|
|
208
|
-
ever.
|
|
65
|
+
**A parent without a completion callback (Codex) dispatches the wave and ends the turn** — `run:step`
|
|
66
|
+
prints the `--cut`.
|
|
209
67
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
new child. Confirm every lane still in flight records an output path — one missing is filled in with
|
|
213
|
-
`pnpm josh lane:output <N> <path>` — then take one of the next two bullets in the same turn. **There
|
|
214
|
-
is no waiting here at all**: the lanes keep running as processes of their own.
|
|
215
|
-
- **A lane nobody could poll** — `unreadable`, or `open` with no recorded path and none that can be
|
|
216
|
-
supplied — **and the cut does not happen.** Name that lane in the progress comment and go back to
|
|
217
|
-
step 1 of the loop; the reading is asked again at the next merge.
|
|
218
|
-
- **Every in-flight lane records a path** — **record the cut and hand the session off.** `backlogrun`
|
|
219
|
-
declares a budget — `--max`, `--idle` and the 8-hour bound — so the cut is an execution detail: count
|
|
220
|
-
everything the session has, then run `pnpm josh run:carry --cut --owner "$PPID"`. **Unless it answers
|
|
221
|
-
`capped`** (below), `pnpm josh run:wake` then starts the next session, which polls the still-running
|
|
222
|
-
lanes from `lane:list`. Post the progress comment naming **every lane in flight and the path each
|
|
223
|
-
records**, name `pnpm josh run:event --watch` for a pane, and end the turn — nothing is relayed (#2492).
|
|
224
|
-
`backlogrun-steps.md` → "The session cut is inside the invocation" is the single source of the
|
|
225
|
-
carry; this reading is only where the cut is *taken*.
|
|
226
|
-
- **`capped`** — the invocation has taken its `MAX_CUTS` cuts (joshuafolkken/kit#2346), so `--cut`
|
|
227
|
-
refused and left the record un-handed-off. **Do not `run:wake` or hand off.** Carry **this** session on
|
|
228
|
-
uncut and re-ask at the next merge.
|
|
68
|
+
**On `over`, read the lanes rather than judging them** — `pnpm josh lane:list` prints each lane's state
|
|
69
|
+
and output path; fill a missing path with `pnpm josh lane:output <N> <path>`:
|
|
229
70
|
|
|
230
|
-
|
|
231
|
-
|
|
71
|
+
- **A lane nobody can poll** (`unreadable`, or `open` with no path) — **the cut does not happen**: name
|
|
72
|
+
it in the progress comment and re-ask at the next merge. **Never assume idle.** A `stranded` lane is
|
|
73
|
+
closed by `pnpm josh lane:prune`.
|
|
74
|
+
- **Every in-flight lane records a path** — count everything, run `pnpm josh run:carry --cut --owner
|
|
75
|
+
"$PPID"`, post the progress comment naming every lane and its path with `pnpm josh run:board`, and end
|
|
76
|
+
the turn; the `run:wake` driver polls the lanes. Rationale:
|
|
77
|
+
`docs/maintainers/backlogrun-progress-rationale.md` → "Why lanes are handed over rather than drained".
|
|
78
|
+
- **`--cut` answers `capped`** (`MAX_CUTS`) — **do not `run:wake` or hand off**;
|
|
79
|
+
carry this session on and re-ask at the next merge.
|
|
232
80
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
so no running child — `pnpm josh lane:prune` closes it. An **`unreadable`** one cannot be told apart
|
|
236
|
-
from a running child, and an `open` lane recording **no path** is the same: **the cut does not happen**,
|
|
237
|
-
the lane is named in the epic progress comment, and the run goes back to step 1. **Never assume idle.**
|
|
81
|
+
The hand-off report's format is `backlogrun-handoff-report.md`. **This is not a failure and not a
|
|
82
|
+
park** — nothing is labelled, stashed or filed.
|
|
238
83
|
|
|
239
|
-
|
|
240
|
-
an `unreadable` lane, or an `open` one recording no path — the run goes back to step 1 and writes no
|
|
241
|
-
hand-off report; the epic progress comment is the record. `report-format.md` → "区切りの報告" states it
|
|
242
|
-
from the format's side.
|
|
84
|
+
## Resuming after a cut
|
|
243
85
|
|
|
244
|
-
**
|
|
245
|
-
|
|
86
|
+
**A session woken by the driver** — `Driver result:` in its prompt — acts on its branch and cuts as its
|
|
87
|
+
`Next:` line says. A session resumed by hand reads the subsections below.
|
|
246
88
|
|
|
247
89
|
### Picking the lanes up in the fresh session
|
|
248
90
|
|
|
249
|
-
**
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
**Restart the progress watcher by name** — `pnpm josh run:progress --wait --output <handed-over paths>`
|
|
258
|
-
in the background, in the same turn as that first `lane:list`. The wired `run:watcher:guard` stops a resume that skips this (joshuafolkken/kit#2353).
|
|
91
|
+
**Start no child again and open no lane already open.** In one turn: `pnpm josh lane:list` (every line
|
|
92
|
+
with a path is a handed-over child, polled per `backlogrun-recovery.md` → "A delegated unit that stopped
|
|
93
|
+
without reporting"), `pnpm josh run:progress --wait --output <handed-over paths>` in the background
|
|
94
|
+
(the `run:watcher:guard` enforces it), `pnpm josh run:liveness`, and
|
|
95
|
+
`epic:next --lanes` with a lane for each child it offers. **A carried-over child finishes in its own
|
|
96
|
+
unit — never run its `followup` yourself**; one that did not survive the cut is re-dispatched with
|
|
97
|
+
`pnpm josh lane:open <N>` then `pnpm josh lane:dispatch <N>`, never adopted.
|
|
259
98
|
|
|
260
|
-
|
|
261
|
-
result:` in its prompt, the `run:wake` driver watches the lanes, so it acts on its branch and cuts as
|
|
262
|
-
its `Next:` line says. The watcher guard and the headless stop rule stand aside for it.
|
|
99
|
+
### What carries over
|
|
263
100
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
of its merge.** A lane handed over at the cut is still running its own `fullrun` — the foreground
|
|
268
|
-
`pnpm josh followup` and the CI wait included — in a process of its own (`background-commands.md` →
|
|
269
|
-
"Background the gate and push": foreground is *within the unit*, the background from the parent).
|
|
270
|
-
**So the parent never runs a carried-over child's `followup` itself**: it polls the handed-over lane and
|
|
271
|
-
opens new work beside it. **The reads and the dispatches go out together, in one turn** — `pnpm josh lane:list`,
|
|
272
|
-
`pnpm josh run:liveness`, `epic:next --lanes`, and opening a lane for a child it offers take none of each
|
|
273
|
-
other's results (the turn-batching rule this file states for a merge event, applied at the resume).
|
|
274
|
-
**Independence is the offer command's answer**: a new child `blocked-by` a carried-over Issue is
|
|
275
|
-
withheld, one that is not is dispatched into a free lane beside it. **A carried-over child that did not
|
|
276
|
-
survive the cut is re-dispatched, never adopted** — `pnpm josh lane:open <N>` then
|
|
277
|
-
`pnpm josh lane:dispatch <N>`, never picked up into the parent's own context.
|
|
278
|
-
|
|
279
|
-
### The counters live in the record
|
|
280
|
-
|
|
281
|
-
**The single source of the run's counters is the carry record (`pnpm josh run:carry`), and the epic
|
|
282
|
-
progress comment is generated from it** (joshuafolkken/kit#2024) — children run, Issues filed,
|
|
283
|
-
**consecutive failures**, and the time the run started. `pnpm josh run:merge` writes the merge into
|
|
284
|
-
the record and mirrors the counters onto the epic comment at every child's merge. **The
|
|
285
|
-
consecutive-failure count is the one that matters**, and a merge resets it. Rationale:
|
|
286
|
-
`docs/maintainers/backlogrun-progress-rationale.md` → "Why state lives in records, not the
|
|
287
|
-
conversation".
|
|
288
|
-
|
|
289
|
-
### What carries over, and where it lives
|
|
290
|
-
|
|
291
|
-
**Nothing is carried in the conversation.** Everything the next session needs it reads back:
|
|
292
|
-
|
|
293
|
-
| What the next session needs | Where it reads it |
|
|
294
|
-
| --- | --- |
|
|
295
|
-
| Which children remain, and which is runnable | `pnpm josh epic:next <E>` |
|
|
296
|
-
| The order and the dependencies | the epic body |
|
|
297
|
-
| What each remaining child is | the child Issue body |
|
|
298
|
-
| What already merged | the epic's task list, and the closed children |
|
|
299
|
-
|
|
300
|
-
**A resumed session is a new session**, so it asks `pnpm josh latest:scope` once before its first child.
|
|
101
|
+
**Nothing is carried in the conversation**: the budget, counters and named list are
|
|
102
|
+
`pnpm josh run:carry --json`; the remaining and runnable children `pnpm josh epic:next <E>`; the order
|
|
103
|
+
the epic body; what merged the epic's task list.
|
|
301
104
|
|
|
302
105
|
## Waiting, and never waiting forever
|
|
303
106
|
|
|
304
107
|
| Setting | Value | Meaning |
|
|
305
108
|
| --- | --- | --- |
|
|
306
|
-
| Polling interval | 60 s | **
|
|
109
|
+
| Polling interval | 60 s | **In flight, a floor between two asks, never a clock** — the wake is `lane:await`'s completion or the watcher's arrival exit, never a report. **With nothing in flight no wake comes: it is the parent's own clock.** |
|
|
307
110
|
| `backlogrun` idle-watch poll | 5 min | Not the interval above, and a floor in the same sense. |
|
|
308
|
-
| Silent delegated unit | 30 min | Not the child's duration — the time its output has gone **unchanged**. Past it, run
|
|
111
|
+
| Silent delegated unit | 30 min | Not the child's duration — the time its output has gone **unchanged**. Past it, ask `run:liveness` and book a stopped unit as a failure. |
|
|
309
112
|
| Stale `in-progress` | 90 min | Past it, the other session is gone. |
|
|
310
113
|
| Publish wait | 10 min | `josh propagate`'s own budget. A failed publish never appears. |
|
|
311
114
|
| Whole run | 8 h | Past it, the run needs a person. |
|
|
312
115
|
|
|
313
116
|
Each timeout **ends the wait and reports** — none is retried indefinitely. Rationale for the figures:
|
|
314
117
|
`docs/maintainers/backlogrun-progress-rationale.md` → "Why the parent waits on classification, not a
|
|
315
|
-
clock". A stale child's label is
|
|
316
|
-
|
|
317
|
-
to untangle**: `epic:next` detects it and exits with an error.
|
|
318
|
-
|
|
319
|
-
### The parent keeps no clock of its own — a child's completion or an arrival is the wake
|
|
320
|
-
|
|
321
|
-
**After hand-off, the supervisor's driver owns the mechanical clock.** `backlog:drive` polls lane
|
|
322
|
-
completion and the backlog inside the detached process, without waking an AI parent; the parent-turn
|
|
323
|
-
instructions below apply only to a returned judgment branch. `run:progress --wait` stays the heartbeat
|
|
324
|
-
source and `run:report` the final report.
|
|
325
|
-
|
|
326
|
-
**The numbers above are floors between asks, not a timer the parent sets.** Rationale:
|
|
327
|
-
`docs/maintainers/backlogrun-progress-rationale.md` → "Why the parent waits on classification, not a
|
|
328
|
-
clock".
|
|
329
|
-
|
|
330
|
-
The watcher reports on its own interval to the event stream and exits only on an arrival, so a judgment
|
|
331
|
-
session takes that exit — or a `lane:await` completion — as its prompt to act, never a report.
|
|
332
|
-
|
|
333
|
-
#### The wake exists only while something is in flight
|
|
334
|
-
|
|
335
|
-
`lane:await` wakes on a child's completion and `run:progress --wait` on an arrival; its reports wake
|
|
336
|
-
nobody. With no child in flight it may decline; the driver still polls for new work and enforces the
|
|
337
|
-
idle and whole-run bounds. A GitHub
|
|
338
|
-
listing failure stays a retry or unreadable answer from the offer command, never an empty backlog.
|
|
339
|
-
|
|
340
|
-
`epic:next` does not report when a label was applied, so read that from the issue's timeline:
|
|
341
|
-
|
|
342
|
-
```bash
|
|
343
|
-
gh api "repos/{owner}/{repo}/issues/<N>/timeline" \
|
|
344
|
-
--jq '[.[] | select(.event == "labeled" and .label.name == "in-progress") | .created_at] | last'
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
An empty answer means the label predates what the timeline returns, which is itself past the window —
|
|
348
|
-
treat it as stale.
|
|
349
|
-
|
|
350
|
-
Waiting is decided by `epic:next`'s classification, never by reading labels:
|
|
351
|
-
|
|
352
|
-
| `epic:next` says | `backlogrun` does |
|
|
353
|
-
| --- | --- |
|
|
354
|
-
| Something is runnable | Run it |
|
|
355
|
-
| Nothing runnable, something resolves on its own | **Wait** |
|
|
356
|
-
| Nothing runnable, nothing resolves on its own, children remain | **Stop and report the parked children** |
|
|
357
|
-
| No open child | Post the epic summary and finish |
|
|
118
|
+
clock". A stale child's label is removed first, so the next poll can offer it. **A graph that has
|
|
119
|
+
deadlocked on a cycle is not this loop's to untangle**: `epic:next` detects it and exits with an error.
|
|
358
120
|
|
|
359
121
|
## Who sends the summary, and who propagates
|
|
360
122
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
Per-child completion notifications are unchanged: `pnpm josh followup` sends one each. Send an epic
|
|
367
|
-
**start** notification when the run begins, and an epic **completion** summary at the end. **Do not
|
|
368
|
-
compose that summary by hand — `pnpm josh run:report` generates it from this invocation's events**
|
|
369
|
-
(joshuafolkken/kit#2249, scoped in #2393): it renders what merged, what parked and why, and what was cut,
|
|
370
|
-
closing with the release tail below. Its output is the Telegram body too — pass it to
|
|
371
|
-
`pnpm josh notify --body-file`.
|
|
372
|
-
|
|
373
|
-
**That same session asks `pnpm josh release:scope` once, after the last child has merged** — in the
|
|
374
|
-
primary checkout, after the last lane is closed, and never once per child. `followup.md` →
|
|
375
|
-
"When `pnpm josh release` runs" is the single source for the position and the three answers. `run:report`
|
|
376
|
-
appends that answer as the summary's closing line: on `required` the request and the exact command, on
|
|
377
|
-
`unknown` the word `unknown`, never rounded to `skip`.
|
|
123
|
+
**Exactly one session does the end-of-epic work: the one standing in the repository that owns the
|
|
124
|
+
epic** — the start and completion notifications, `josh propagate`, and `pnpm josh release:scope` once
|
|
125
|
+
after the last merge (`followup.md` → "When `pnpm josh release` runs"). **Never compose the summary by
|
|
126
|
+
hand — `pnpm josh run:report` generates it**; pass it to `pnpm josh notify
|
|
127
|
+
--body-file`.
|