@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,20 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
+
import { agent_session_role } from '#scripts/agent/agent-session-role'
|
|
3
4
|
import { cost_cli } from '#scripts/cost-runtime/cost-cli'
|
|
4
5
|
import { cost_verdict } from '#scripts/cost-runtime/cost-verdict'
|
|
5
6
|
import { git_command } from '#scripts/git/git-command'
|
|
7
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
8
|
+
import { session_cite } from '#scripts/issue/session-cite'
|
|
6
9
|
import { lane_registry, type LaneInfo } from '#scripts/lane/lane-registry'
|
|
7
10
|
import { lane_relaunch } from '#scripts/lane/lane-relaunch'
|
|
8
11
|
import { openai_lane_supervisor } from '#scripts/lane/openai-lane-supervisor'
|
|
9
12
|
import { run_event_stream } from '#scripts/run/event/run-event-stream'
|
|
10
13
|
import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
14
|
+
import { run_cli_fault } from '#scripts/run/run-cli-fault'
|
|
11
15
|
import { run_cut, type CutState, type RunCut } from './run-cut'
|
|
12
16
|
import { run_cut_args, type Request } from './run-cut-args'
|
|
13
17
|
import { run_cut_handoff } from './run-cut-handoff'
|
|
14
18
|
import { run_cut_report } from './run-cut-report'
|
|
15
19
|
|
|
16
20
|
// `josh run:cut` — the record that lets a lane child end its process before the gate and a fresh one
|
|
17
|
-
// resume from it
|
|
21
|
+
// resume from it. `run:cut <N>` writes the record and relaunches a fresh
|
|
18
22
|
// `fullrun #<N>`; the fresh process runs `run:cut --resume <N>` at its entry, which verifies the tree
|
|
19
23
|
// against the record and hands the run on to the gate. **Turning `argv` into a request is
|
|
20
24
|
// `run-cut-args.ts`'s**; what is here acts on the record and relaunches.
|
|
@@ -25,6 +29,7 @@ import { run_cut_report } from './run-cut-report'
|
|
|
25
29
|
// session.
|
|
26
30
|
|
|
27
31
|
const ARGV_OFFSET = 2
|
|
32
|
+
const COMMAND = 'run:cut'
|
|
28
33
|
|
|
29
34
|
const {
|
|
30
35
|
BAD_HANDOFF_VERDICT,
|
|
@@ -50,20 +55,21 @@ const {
|
|
|
50
55
|
report,
|
|
51
56
|
report_bad_handoff,
|
|
52
57
|
report_busy,
|
|
58
|
+
report_fault,
|
|
53
59
|
report_handed_off,
|
|
54
60
|
report_incomplete,
|
|
55
61
|
report_over,
|
|
62
|
+
report_reviewer,
|
|
56
63
|
report_stale,
|
|
57
64
|
report_under_threshold,
|
|
58
65
|
report_unknown,
|
|
59
66
|
report_unreadable,
|
|
60
67
|
} = run_cut_report
|
|
61
68
|
|
|
62
|
-
// **The pre-gate cut is conditional on the same statistic the implementation-phase cut reads
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
// relies on. Only the pre-gate phase is checked here; the implementation-phase caller gates its own
|
|
69
|
+
// **The pre-gate cut is conditional on the same statistic the implementation-phase cut reads**.
|
|
70
|
+
// `cost_cli.session_verdict` prices the newest request against `CONTEXT_CUT_THRESHOLD`, so no second
|
|
71
|
+
// threshold is introduced — an `under` session skips the cut, and an unmeasurable one still cuts as
|
|
72
|
+
// the safety net. Only the pre-gate phase is checked here; the implementation-phase caller gates its own
|
|
67
73
|
// `--impl` cut on `pnpm josh cost --cut` before it is ever issued.
|
|
68
74
|
function skips_pre_gate_cut(phase: string): boolean {
|
|
69
75
|
if (phase !== run_cut.PRE_GATE_PHASE) return false
|
|
@@ -96,14 +102,14 @@ function report_relaunch_failure(target: string, note: string): number {
|
|
|
96
102
|
|
|
97
103
|
function report_missing_supervisor(issue: string): number {
|
|
98
104
|
console.error(
|
|
99
|
-
`The OpenAI supervisor for
|
|
105
|
+
`The OpenAI supervisor for ${session_cite.issue(issue)} is not live, so this nested process was not cut and can continue. Re-dispatch the lane to recover the supervisor.`,
|
|
100
106
|
)
|
|
101
107
|
|
|
102
108
|
return report(FAILED_VERDICT, FAILURE_EXIT_CODE)
|
|
103
109
|
}
|
|
104
110
|
|
|
105
|
-
// **The relaunched child is started at the effort of the phase it is resuming into
|
|
106
|
-
//
|
|
111
|
+
// **The relaunched child is started at the effort of the phase it is resuming into**.
|
|
112
|
+
// A pre-gate resume drives the gate, commit, PR and merge — the mechanical
|
|
107
113
|
// ship/bookkeeping region, lowered — while an implementation resume keeps the role default. The
|
|
108
114
|
// phase-aware profile is `agent_argv.resume_argv`'s; a person's `JOSH_WORKER_EFFORT` still wins over it.
|
|
109
115
|
function relaunch(target: string, lane: LaneInfo, phase: string): number {
|
|
@@ -142,18 +148,18 @@ interface CutRequest {
|
|
|
142
148
|
issue: string
|
|
143
149
|
phase: string
|
|
144
150
|
// The `--handoff` path whose instruction and work state the record carries, absent for a pre-gate
|
|
145
|
-
// cut that resumes into the gate rather than into implementation
|
|
151
|
+
// cut that resumes into the gate rather than into implementation.
|
|
146
152
|
handoff_path?: string | undefined
|
|
147
153
|
}
|
|
148
154
|
|
|
149
|
-
// **Every cut appends a `cut` event to the run's stream
|
|
155
|
+
// **Every cut appends a `cut` event to the run's stream**. It is what advances
|
|
150
156
|
// `run:step` past the phase boundary — a cut emitted here is why the run's next position reads as
|
|
151
157
|
// `run:cut --resume`. Best-effort by the stream's contract, so a failed append never fails the cut it
|
|
152
158
|
// reports.
|
|
153
159
|
async function emit_cut_event(request: CutRequest): Promise<void> {
|
|
154
160
|
await run_event_stream_emit.emit(
|
|
155
161
|
run_event_stream.EVENT_KIND.CUT,
|
|
156
|
-
|
|
162
|
+
`${issue_cite.plain(request.issue)} cut (${request.phase})`,
|
|
157
163
|
)
|
|
158
164
|
}
|
|
159
165
|
|
|
@@ -202,16 +208,16 @@ async function finish_cut(target: string, lane: LaneInfo, request: CutRequest):
|
|
|
202
208
|
// person is watching, so the run is handed on the way `fullrun`'s entry `over` stop hands it on.
|
|
203
209
|
function report_held_cut(issue: string): number {
|
|
204
210
|
console.error(
|
|
205
|
-
`The cut is recorded for
|
|
211
|
+
`The cut is recorded for ${session_cite.issue(issue)} outside a lane, so nothing was relaunched. Keep the hold, send a \`confirmation\` Telegram whose body names the resume command \`fullrun ${issue_cite.plain(issue)}\`, and end the turn; the fresh session's \`pnpm josh run:cut --resume ${issue}\` answers \`resume-impl\` with the handoff.`,
|
|
206
212
|
)
|
|
207
213
|
|
|
208
214
|
return report(CUT_VERDICT, SUCCESS_EXIT_CODE)
|
|
209
215
|
}
|
|
210
216
|
|
|
211
|
-
// **A `fullrun` held in its own checkout takes the implementation cut too
|
|
212
|
-
//
|
|
213
|
-
//
|
|
214
|
-
//
|
|
217
|
+
// **A `fullrun` held in its own checkout takes the implementation cut too**, so a run a person started
|
|
218
|
+
// has a bound on its context mid-implementation. The hold naming this issue is what marks the run — a
|
|
219
|
+
// tree nobody holds for it, and the pre-gate phase (which a held run's gate reaches in the same
|
|
220
|
+
// session), stay `not-a-lane`.
|
|
215
221
|
async function cut_outside_lane(
|
|
216
222
|
target: string,
|
|
217
223
|
request: Omit<CutRequest, 'branch'>,
|
|
@@ -256,18 +262,16 @@ async function cut(
|
|
|
256
262
|
// **The adoption is the resume-uniqueness guarantee**: it removes and creates exclusively, so of two
|
|
257
263
|
// racing resumes only one wins the create and the loser is answered `busy`.
|
|
258
264
|
// An implementation cut resumes back into implementation; a pre-gate one into the gate. The resuming
|
|
259
|
-
// child is told which by the verdict rather than reconstructing it from the record
|
|
260
|
-
// (joshuafolkken/kit#1933).
|
|
265
|
+
// child is told which by the verdict rather than reconstructing it from the record.
|
|
261
266
|
function resume_verdict_for(cut_record: RunCut): string {
|
|
262
267
|
return run_cut.resumes_into_implementation(cut_record.phase)
|
|
263
268
|
? RESUME_IMPL_VERDICT
|
|
264
269
|
: RESUME_VERDICT
|
|
265
270
|
}
|
|
266
271
|
|
|
267
|
-
// **An implementation resume removes the record; a pre-gate one marks it handed off
|
|
268
|
-
//
|
|
269
|
-
// record
|
|
270
|
-
// `handed-off` (joshuafolkken/kit#1935); the implementation cut is guarded by the run's
|
|
272
|
+
// **An implementation resume removes the record; a pre-gate one marks it handed off**.
|
|
273
|
+
// The cuts have different multiplicities sharing one record: the pre-gate cut fires once per lane, so
|
|
274
|
+
// its record must survive to answer a second resume `handed-off`; the implementation cut is guarded by the run's
|
|
271
275
|
// event stream rather than the cut record, so its record is cleared on resume — a lingering record
|
|
272
276
|
// would keep the pre-gate guard, which reads `carried_cut_sync`, silent for the rest of the run. A double
|
|
273
277
|
// cut stays impossible either way: `begin_cut`'s exclusive create is what prevents it.
|
|
@@ -282,21 +286,24 @@ function take_over(target: string, cut_record: RunCut): RunCut | undefined {
|
|
|
282
286
|
}
|
|
283
287
|
|
|
284
288
|
// The carried instruction and work state, printed to standard error so the resumed session continues
|
|
285
|
-
// on what the run was told to do rather than on the tree alone
|
|
286
|
-
//
|
|
289
|
+
// on what the run was told to do rather than on the tree alone. The record is cleared
|
|
290
|
+
// on adoption, so this is where it reaches the fresh process.
|
|
287
291
|
function announce_handoff(cut_record: RunCut): void {
|
|
288
292
|
if (cut_record.handoff !== undefined) {
|
|
289
293
|
console.error(run_cut_handoff.describe_handoff(cut_record.handoff))
|
|
290
294
|
}
|
|
291
295
|
}
|
|
292
296
|
|
|
293
|
-
// **An implementation resume appends a `resume` event
|
|
297
|
+
// **An implementation resume appends a `resume` event**. It clears the record
|
|
294
298
|
// the `cut` event stood for, so the stream is what moves `run:step` back to implementation; a pre-gate
|
|
295
299
|
// resume keeps its record and appends nothing. Best-effort, as the cut's own append is.
|
|
296
300
|
async function emit_resume_event(issue: string, verdict: string): Promise<void> {
|
|
297
301
|
if (verdict !== RESUME_IMPL_VERDICT) return
|
|
298
302
|
|
|
299
|
-
await run_event_stream_emit.emit(
|
|
303
|
+
await run_event_stream_emit.emit(
|
|
304
|
+
run_event_stream.EVENT_KIND.RESUME,
|
|
305
|
+
`${issue_cite.plain(issue)} resumed`,
|
|
306
|
+
)
|
|
300
307
|
}
|
|
301
308
|
|
|
302
309
|
async function adopt(target: string, cut_record: RunCut): Promise<number> {
|
|
@@ -314,7 +321,7 @@ async function adopt(target: string, cut_record: RunCut): Promise<number> {
|
|
|
314
321
|
}
|
|
315
322
|
|
|
316
323
|
// A relaunched lane child and a fresh session both measure `under`, so only the session that took an
|
|
317
|
-
// implementation cut resumes over the threshold
|
|
324
|
+
// implementation cut resumes over the threshold; unmeasurable is not refused.
|
|
318
325
|
function is_over_threshold_resume(cut_record: RunCut): boolean {
|
|
319
326
|
if (!run_cut.resumes_into_implementation(cut_record.phase)) return false
|
|
320
327
|
|
|
@@ -372,15 +379,25 @@ function end(target: string): number {
|
|
|
372
379
|
return report(ENDED_VERDICT, SUCCESS_EXIT_CODE)
|
|
373
380
|
}
|
|
374
381
|
|
|
375
|
-
|
|
382
|
+
type CutCommand = Extract<Request, { kind: 'cut' }>
|
|
383
|
+
|
|
384
|
+
// A bare cut is the pre-gate boundary and `--impl` the implementation-phase one.
|
|
376
385
|
function cut_phase(request: { is_implementation: boolean }): string {
|
|
377
386
|
return request.is_implementation ? run_cut.IMPLEMENTATION_PHASE : run_cut.PRE_GATE_PHASE
|
|
378
387
|
}
|
|
379
388
|
|
|
389
|
+
// **A ship reviewer's cut is answered before the lane is looked up**: it
|
|
390
|
+
// runs in the implementing child's lane and under its hold, so every check below would read it as the
|
|
391
|
+
// run and relaunch a second child beside it. Asking about a cut (`--resume`, `--json`, `--end`) is
|
|
392
|
+
// untouched — only taking one is refused.
|
|
393
|
+
async function take_cut(target: string, request: CutCommand): Promise<number> {
|
|
394
|
+
if (agent_session_role.is_reviewer()) return report_reviewer()
|
|
395
|
+
|
|
396
|
+
return await cut(target, request.issue, cut_phase(request), request.handoff_path)
|
|
397
|
+
}
|
|
398
|
+
|
|
380
399
|
async function act(target: string, request: Request): Promise<number> {
|
|
381
|
-
if (request.kind === 'cut')
|
|
382
|
-
return await cut(target, request.issue, cut_phase(request), request.handoff_path)
|
|
383
|
-
}
|
|
400
|
+
if (request.kind === 'cut') return await take_cut(target, request)
|
|
384
401
|
|
|
385
402
|
if (request.kind === 'resume') return await resume(target, request.issue)
|
|
386
403
|
|
|
@@ -390,7 +407,7 @@ async function act(target: string, request: Request): Promise<number> {
|
|
|
390
407
|
}
|
|
391
408
|
|
|
392
409
|
async function answer(request: Request): Promise<number> {
|
|
393
|
-
const directory = await run_cut.worktree_directory
|
|
410
|
+
const directory = await run_cli_fault.directory_of(COMMAND, run_cut.worktree_directory)
|
|
394
411
|
|
|
395
412
|
if (directory === undefined) return report_unknown()
|
|
396
413
|
|
|
@@ -405,7 +422,8 @@ function refuse(): number {
|
|
|
405
422
|
|
|
406
423
|
// Every path out prints exactly one token, including the ones nobody planned: an empty standard
|
|
407
424
|
// output matches no verdict, which a resume entry check reads as "not a resume" and would let a fresh
|
|
408
|
-
// process re-implement over a cut it should have carried.
|
|
425
|
+
// process re-implement over a cut it should have carried. The token stays `unknown`, and the failure
|
|
426
|
+
// says what it was rather than borrowing the unreadable-git-directory message.
|
|
409
427
|
async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
410
428
|
const parsed = run_cut_args.read_arguments(argv)
|
|
411
429
|
|
|
@@ -417,8 +435,8 @@ async function run(argv: ReadonlyArray<string>): Promise<number> {
|
|
|
417
435
|
|
|
418
436
|
try {
|
|
419
437
|
return await answer(request)
|
|
420
|
-
} catch {
|
|
421
|
-
return
|
|
438
|
+
} catch (error) {
|
|
439
|
+
return report_fault(run_cli_fault.message(COMMAND, error))
|
|
422
440
|
}
|
|
423
441
|
}
|
|
424
442
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs'
|
|
2
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
2
3
|
import { z } from 'zod'
|
|
3
4
|
|
|
4
|
-
// The session state a cut carries across the process boundary
|
|
5
|
+
// The session state a cut carries across the process boundary. `RunCut`'s six
|
|
5
6
|
// scalar fields say *which* tree a fresh process resumes into — the branch, the issue, that a declared
|
|
6
7
|
// cut put it here. This says *what the run was told to do* there, which nothing else recovers: the
|
|
7
8
|
// user's instruction is not on GitHub, and what was done — or deliberately left alone — is not written
|
|
@@ -9,8 +10,8 @@ import { z } from 'zod'
|
|
|
9
10
|
// instruction, and is put under the refactoring limits `CLAUDE.md` sets, so the shortest path out is to
|
|
10
11
|
// restructure or delete code it does not understand.
|
|
11
12
|
//
|
|
12
|
-
// **This is not the conversation the cut exists to drop.**
|
|
13
|
-
//
|
|
13
|
+
// **This is not the conversation the cut exists to drop.** Most of a lane's output is accumulated
|
|
14
|
+
// thinking, and the cut's whole point is to shed it. The instruction
|
|
14
15
|
// and a curated list of what is done, left, and untouched is the irreducible intent under that
|
|
15
16
|
// thinking — a few short lines, bounded by `MAX_HANDOFF_BYTES` in `run-cut.ts` — so carrying it keeps
|
|
16
17
|
// the resume on course without re-establishing the context the cut dropped.
|
|
@@ -50,21 +51,15 @@ function describe_key(key: HandoffKey): string {
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
// The shape a handoff file must have, derived from `handoff_schema` so the refusal that asks for the file
|
|
53
|
-
// and the error that rejects it can never name a key the parser does not read
|
|
54
|
-
//
|
|
54
|
+
// and the error that rejects it can never name a key the parser does not read — a refusal listing the
|
|
55
|
+
// items in prose invites Markdown, which `parse_handoff` rejects.
|
|
55
56
|
const HANDOFF_FORMAT = `a JSON object {${handoff_schema
|
|
56
57
|
.keyof()
|
|
57
58
|
.options.map((key) => describe_key(key))
|
|
58
59
|
.join(', ')}}`
|
|
59
60
|
|
|
60
61
|
function parse_handoff(raw: string): Handoff | undefined {
|
|
61
|
-
|
|
62
|
-
const parsed = handoff_schema.safeParse(JSON.parse(raw))
|
|
63
|
-
|
|
64
|
-
return parsed.success ? parsed.data : undefined
|
|
65
|
-
} catch {
|
|
66
|
-
return undefined
|
|
67
|
-
}
|
|
62
|
+
return json_value.parse_with(raw, handoff_schema)
|
|
68
63
|
}
|
|
69
64
|
|
|
70
65
|
// A path given but unreadable, or holding text that is not a well-formed handoff, is `undefined` — the
|
|
@@ -78,8 +73,7 @@ function read_handoff_file(handoff_path: string): Handoff | undefined {
|
|
|
78
73
|
}
|
|
79
74
|
|
|
80
75
|
// A complete handoff carries a non-empty instruction; the lists may be empty. This is the required
|
|
81
|
-
// field the resume checks so a session is never silently continued without the instruction it needs
|
|
82
|
-
// (joshuafolkken/kit#2354).
|
|
76
|
+
// field the resume checks so a session is never silently continued without the instruction it needs.
|
|
83
77
|
function is_complete_handoff(handoff: Handoff | undefined): boolean {
|
|
84
78
|
return handoff !== undefined && handoff.instruction.trim() !== ''
|
|
85
79
|
}
|
|
@@ -93,7 +87,7 @@ function is_within_bound(handoff: Handoff, max_bytes: number): boolean {
|
|
|
93
87
|
}
|
|
94
88
|
|
|
95
89
|
// A path is read into a handoff, refused when it will not parse or would push the record past its
|
|
96
|
-
// bound — the cut is only worth its resume while the record stays small
|
|
90
|
+
// bound — the cut is only worth its resume while the record stays small.
|
|
97
91
|
function load_handoff(handoff_path: string | undefined, max_bytes: number): HandoffLoad {
|
|
98
92
|
if (handoff_path === undefined) return { kind: 'ok', handoff: undefined }
|
|
99
93
|
|
|
@@ -132,8 +126,14 @@ function describe_handoff(handoff: Handoff): string {
|
|
|
132
126
|
].join('\n\n')
|
|
133
127
|
}
|
|
134
128
|
|
|
129
|
+
// Where a handoff file is written: `.claude/tmp/` is ignored, so `josh git`, which stages every
|
|
130
|
+
// untracked non-ignored file, cannot commit the note with the code. A refusal that asked for "a file"
|
|
131
|
+
// and named no place got one written beside the code and committed (joshuafolkken/kit#3603).
|
|
132
|
+
const HANDOFF_PATH = '.claude/tmp/handoff-<N>.json'
|
|
133
|
+
|
|
135
134
|
const run_cut_handoff = {
|
|
136
135
|
HANDOFF_FORMAT,
|
|
136
|
+
HANDOFF_PATH,
|
|
137
137
|
describe_handoff,
|
|
138
138
|
handoff_schema,
|
|
139
139
|
is_complete_handoff,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { run_cut, type CutState, type RunCut } from './run-cut'
|
|
2
|
+
import { run_cut_handoff } from './run-cut-handoff'
|
|
2
3
|
|
|
3
|
-
// The verdict tokens `josh run:cut` answers with and the reports that print them,
|
|
4
|
-
// `run-cut-cli.ts` so the CLI keeps to acting on the record.
|
|
5
|
-
//
|
|
4
|
+
// The verdict tokens `josh run:cut` answers with and the reports that print them, kept apart from
|
|
5
|
+
// `run-cut-cli.ts` so the CLI keeps to acting on the record. **Standard output carries exactly one
|
|
6
|
+
// token** and every explanation goes to standard error.
|
|
6
7
|
|
|
7
8
|
const SUCCESS_EXIT_CODE = 0
|
|
8
9
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -10,17 +11,16 @@ const FAILURE_EXIT_CODE = 1
|
|
|
10
11
|
const CUT_VERDICT = 'cut'
|
|
11
12
|
const RESUME_VERDICT = 'resume'
|
|
12
13
|
// An implementation-phase resume: the fresh process continues implementing rather than going to the
|
|
13
|
-
// gate
|
|
14
|
-
// re-reading the record.
|
|
14
|
+
// gate. It is a distinct token so the resuming child branches on it without re-reading the record.
|
|
15
15
|
const RESUME_IMPL_VERDICT = 'resume-impl'
|
|
16
16
|
const FRESH_VERDICT = 'fresh'
|
|
17
17
|
// The current context is under the shared cut threshold, so the pre-gate cut was not worth its
|
|
18
|
-
// resume and nothing was cut
|
|
18
|
+
// resume and nothing was cut. A benign, non-failing answer: the run carries
|
|
19
19
|
// on to the gate itself, exactly as `not-a-lane` does.
|
|
20
20
|
const UNDER_THRESHOLD_VERDICT = 'under-threshold'
|
|
21
21
|
const STALE_VERDICT = 'stale'
|
|
22
22
|
// The record matched the tree but carried no instruction to resume on, so the run was refused rather
|
|
23
|
-
// than continued blind to what it was told to do
|
|
23
|
+
// than continued blind to what it was told to do.
|
|
24
24
|
const INCOMPLETE_VERDICT = 'incomplete'
|
|
25
25
|
// The `--handoff` path was given but could not be read as a handoff, or was too large for the record;
|
|
26
26
|
// the cut is refused rather than taken without the instruction it was meant to carry.
|
|
@@ -34,7 +34,7 @@ const ENDED_VERDICT = 'ended'
|
|
|
34
34
|
const UNREADABLE_VERDICT = 'unreadable'
|
|
35
35
|
const UNKNOWN_VERDICT = 'unknown'
|
|
36
36
|
// The asking session is over the shared context-cut threshold, so an implementation cut was not
|
|
37
|
-
// resumed into it
|
|
37
|
+
// resumed into it — the same refusal `run:carry` answers `over` with.
|
|
38
38
|
const OVER_VERDICT = 'over'
|
|
39
39
|
|
|
40
40
|
function report(verdict: string, code: number): number {
|
|
@@ -56,7 +56,7 @@ function report_busy(cut_record: RunCut): number {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// The record matched the tree but carried no instruction; the run is refused rather than continued
|
|
59
|
-
// without what it was told to do
|
|
59
|
+
// without what it was told to do.
|
|
60
60
|
function report_incomplete(cut_record: RunCut): number {
|
|
61
61
|
console.error(run_cut.incomplete_message(cut_record))
|
|
62
62
|
|
|
@@ -64,21 +64,23 @@ function report_incomplete(cut_record: RunCut): number {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
// The `--handoff` file parsed but the assembled record would not fit the byte bound — the scalar fields
|
|
67
|
-
// carry a handoff that fit alone past the cap
|
|
67
|
+
// carry a handoff that fit alone past the cap.
|
|
68
68
|
const HANDOFF_OVERFLOW_NOTE = '--handoff <path> would grow the cut record past its byte bound'
|
|
69
69
|
// An implementation cut resumes into implementation, and that resume refuses a record with no
|
|
70
70
|
// instruction (`incomplete`) — so the cut is refused here instead of relaunching a successor that can
|
|
71
|
-
// only stop
|
|
71
|
+
// only stop.
|
|
72
72
|
const HANDOFF_MISSING_NOTE = 'this cut resumes into implementation and needs --handoff <path>'
|
|
73
73
|
|
|
74
74
|
function report_bad_handoff(note: string): number {
|
|
75
|
-
console.error(
|
|
75
|
+
console.error(
|
|
76
|
+
`${note}. Nothing was cut; write the handoff file at ${run_cut_handoff.HANDOFF_PATH} and reissue.`,
|
|
77
|
+
)
|
|
76
78
|
|
|
77
79
|
return report(BAD_HANDOFF_VERDICT, FAILURE_EXIT_CODE)
|
|
78
80
|
}
|
|
79
81
|
|
|
80
82
|
// A successor already resumed this cut; a process woken after its own hand-off is told to stop rather
|
|
81
|
-
// than to investigate
|
|
83
|
+
// than to investigate. It is a benign, non-failing stop.
|
|
82
84
|
function report_handed_off(cut_record: RunCut): number {
|
|
83
85
|
console.error(run_cut.handed_off_message(cut_record))
|
|
84
86
|
|
|
@@ -91,12 +93,17 @@ function report_unreadable(): number {
|
|
|
91
93
|
return report(UNREADABLE_VERDICT, FAILURE_EXIT_CODE)
|
|
92
94
|
}
|
|
93
95
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
+
// `unknown` with the reason it was answered: nothing was established, so nothing may be concluded.
|
|
97
|
+
function report_fault(message: string): number {
|
|
98
|
+
console.error(message)
|
|
96
99
|
|
|
97
100
|
return report(UNKNOWN_VERDICT, FAILURE_EXIT_CODE)
|
|
98
101
|
}
|
|
99
102
|
|
|
103
|
+
function report_unknown(): number {
|
|
104
|
+
return report_fault(run_cut.unknown_message())
|
|
105
|
+
}
|
|
106
|
+
|
|
100
107
|
// A cut is only meaningful on a lane branch whose implementation is uncommitted. On the default
|
|
101
108
|
// branch, or with a clean tree, there is nothing to carry across the boundary.
|
|
102
109
|
function refuse_unready(state: CutState): number {
|
|
@@ -117,7 +124,19 @@ function report_under_threshold(): number {
|
|
|
117
124
|
return report(UNDER_THRESHOLD_VERDICT, SUCCESS_EXIT_CODE)
|
|
118
125
|
}
|
|
119
126
|
|
|
120
|
-
// **
|
|
127
|
+
// **A ship reviewer takes no cut, of either phase** (joshuafolkken/kit#3623). Its supervisor is waiting
|
|
128
|
+
// on the findings file it has yet to write, so a relaunch would stand a second child in the lane beside
|
|
129
|
+
// the one the supervisor repairs with. Answered `not-a-lane`, the verdict that already means "nothing
|
|
130
|
+
// was cut and this process carries on".
|
|
131
|
+
function report_reviewer(): number {
|
|
132
|
+
console.error(
|
|
133
|
+
'This session is a ship reviewer, which its supervisor is waiting on, so nothing was cut and nothing was relaunched. Write the findings file and finish the review in this process.',
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
return report(NOT_A_LANE_VERDICT, SUCCESS_EXIT_CODE)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// **An implementation cut is never resumed by a session over the threshold**.
|
|
121
140
|
// The cut outside a lane leaves the session that took it open, so a person retyping `fullrun #N` there
|
|
122
141
|
// would be answered `resume-impl`, keep implementing over the threshold, and be cut again on the next
|
|
123
142
|
// edit — a loop that sheds no context. The record is left intact for a fresh session.
|
|
@@ -155,9 +174,11 @@ const run_cut_report = {
|
|
|
155
174
|
report,
|
|
156
175
|
report_bad_handoff,
|
|
157
176
|
report_busy,
|
|
177
|
+
report_fault,
|
|
158
178
|
report_handed_off,
|
|
159
179
|
report_incomplete,
|
|
160
180
|
report_over,
|
|
181
|
+
report_reviewer,
|
|
161
182
|
report_stale,
|
|
162
183
|
report_under_threshold,
|
|
163
184
|
report_unknown,
|