@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
|
@@ -4,18 +4,19 @@ import { CONTEXT_CUT_THRESHOLD } from '#scripts/cost-runtime/context-cut-thresho
|
|
|
4
4
|
import { git_command } from '#scripts/git/git-command'
|
|
5
5
|
import { git_common_directory } from '#scripts/git/git-common-directory'
|
|
6
6
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
7
|
+
import { stamp_record, type StampRecordSpec } from '#scripts/josh/stamp-record'
|
|
7
8
|
import { lane_child_invocation } from '#scripts/lane/lane-child-invocation'
|
|
9
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
8
10
|
import { run_hold, type RunHold } from '#scripts/run/hold/run-hold'
|
|
9
11
|
import { z } from 'zod'
|
|
10
12
|
import { run_cut_handoff, type Handoff } from './run-cut-handoff'
|
|
11
13
|
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// GitHub and finds the implementation still sitting in the lane's own working tree.
|
|
14
|
+
// A lane child is a detached `fullrun #<N>` process, and the thinking it accumulates while
|
|
15
|
+
// implementing rides on every later API call in the same session. This record lets that child **end
|
|
16
|
+
// its process before the gate** and have a fresh one resume from the gate onward, so the accumulated
|
|
17
|
+
// thinking is dropped rather than carried. The conversation is not persisted — a compaction does not
|
|
18
|
+
// reduce billing — so the fresh session reads the plan and the recorded decisions back off GitHub and
|
|
19
|
+
// finds the implementation still sitting in the lane's own working tree.
|
|
19
20
|
//
|
|
20
21
|
// **The unit is the working tree, exactly as `run-hold.ts` keys itself** — one branch and one
|
|
21
22
|
// uncommitted diff, a single lane — so the key is the work tree's own git directory (index 0), reused
|
|
@@ -28,7 +29,7 @@ import { run_cut_handoff, type Handoff } from './run-cut-handoff'
|
|
|
28
29
|
// recover on its own — which issue, which branch, and that a declared cut (not a crash) put it here —
|
|
29
30
|
// and the resume *verifies* the tree against it rather than restoring it.
|
|
30
31
|
//
|
|
31
|
-
// **No owner is recorded, and that is deliberate
|
|
32
|
+
// **No owner is recorded, and that is deliberate.** A cut relaunches
|
|
32
33
|
// exactly one fresh process — `begin_cut`'s exclusive create refuses a second cut — so there is no
|
|
33
34
|
// live owner a resume must be blocked against, and recording the cutting session's pid would only
|
|
34
35
|
// stall the resume against a process that is on its way out. **Resume uniqueness rests on the
|
|
@@ -37,17 +38,15 @@ import { run_cut_handoff, type Handoff } from './run-cut-handoff'
|
|
|
37
38
|
// adopter.
|
|
38
39
|
|
|
39
40
|
const CUT_PREFIX = 'josh-run-cut-'
|
|
40
|
-
// **The two phase names are `agent-role-profile.ts`'s
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
// `IMPLEMENTATION_PHASE`
|
|
45
|
-
//
|
|
46
|
-
// into the gate. The setup-phase cut (joshuafolkken/kit#2346) was retired by joshuafolkken/kit#2489.
|
|
41
|
+
// **The two phase names are `agent-role-profile.ts`'s**: a lane child resumes into a phase, and that
|
|
42
|
+
// module resolves the effort the resumed child runs at from the same name. Reading them from there
|
|
43
|
+
// rather than restating the literals here is what keeps the phase a cut records and the phase the
|
|
44
|
+
// effort table is keyed on from drifting. `PRE_GATE_PHASE` is the boundary before the gate;
|
|
45
|
+
// `IMPLEMENTATION_PHASE` drops the thinking accumulated *during* implementation and resumes back into
|
|
46
|
+
// implementation (`resumes_into_implementation`); only the pre-gate cut resumes into the gate.
|
|
47
47
|
const { PRE_GATE_PHASE, IMPLEMENTATION_PHASE } = agent_role_profile
|
|
48
|
-
// **The measurement is the parent hand-off's, never a second one
|
|
49
|
-
//
|
|
50
|
-
// — the same per-request billed-input measurement (`cost_verdict.per_request_cost`) the parent's
|
|
48
|
+
// **The measurement is the parent hand-off's, never a second one.** The lane child decides whether
|
|
49
|
+
// to take this cut with `pnpm josh cost --cut` — the same per-request billed-input measurement (`cost_verdict.per_request_cost`) the parent's
|
|
51
50
|
// `pnpm josh cost --cut` hand-off uses (`backlogrun-progress.md` → "The hand-off"). The shared
|
|
52
51
|
// threshold prevents the scheduler and worker boundaries from drifting apart.
|
|
53
52
|
const IMPLEMENTATION_CONTEXT_THRESHOLD = CONTEXT_CUT_THRESHOLD
|
|
@@ -61,12 +60,11 @@ const CUT_MAX_AGE_HOURS = backlog_budget.WHOLE_RUN_BUDGET_HOURS
|
|
|
61
60
|
const END_COMMAND = 'pnpm josh run:cut --end'
|
|
62
61
|
const READ_COMMAND = 'pnpm josh run:cut --json'
|
|
63
62
|
|
|
64
|
-
// The mechanical bound on the hand-off record's serialized size
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
// carries the user's instruction and a curated list of what is done, left and untouched — the
|
|
63
|
+
// The mechanical bound on the hand-off record's serialized size. The cut is only worth its resume
|
|
64
|
+
// while the record a fresh process reads back stays small — a record that grew to carry the
|
|
65
|
+
// conversation would defeat the whole point, re-establishing at the resume the context the cut
|
|
66
|
+
// dropped. The scalar fields are each tiny (an issue number, a branch name, a phase, an ISO timestamp,
|
|
67
|
+
// a flag); the `handoff` carries the user's instruction and a curated list of what is done, left and untouched — the
|
|
70
68
|
// irreducible intent, not the conversation, so it stays a few short lines. The cap is set to hold that
|
|
71
69
|
// and refuse a field that ever grew unbounded at the write rather than carrying it. `begin_cut`
|
|
72
70
|
// enforces it.
|
|
@@ -75,7 +73,7 @@ const MAX_HANDOFF_BYTES = 8192
|
|
|
75
73
|
interface RunCut {
|
|
76
74
|
// The identity of the run this cut belongs to — `fullrun #<N>`, built through
|
|
77
75
|
// `lane_child_invocation.child_invocation` so it is single-sourced with the dispatch that first launched the
|
|
78
|
-
// child. **It is the resume-matching key, not the relaunch prompt
|
|
76
|
+
// child. **It is the resume-matching key, not the relaunch prompt**: the
|
|
79
77
|
// relaunch gives the fresh process `lane_child_invocation.resume_invocation` instead, while
|
|
80
78
|
// `is_declared_cut` / `is_adopted_cut` still compare this field against `invocation_for(issue)` to
|
|
81
79
|
// confirm the record belongs to the resuming issue.
|
|
@@ -84,20 +82,18 @@ interface RunCut {
|
|
|
84
82
|
// The branch the implementation sits on. The resume refuses to continue on any other branch, so a
|
|
85
83
|
// fresh process that started in the wrong tree is caught rather than gating someone else's work.
|
|
86
84
|
branch: string
|
|
87
|
-
// Where in the run the cut happened
|
|
88
|
-
// second one can be told apart rather than guessed.
|
|
85
|
+
// Where in the run the cut happened — `PRE_GATE_PHASE` or `IMPLEMENTATION_PHASE`.
|
|
89
86
|
phase: string
|
|
90
87
|
cut_at: string
|
|
91
88
|
// Set by the cut, and spent by the adoption. A crash never sets it, which is what makes a declared
|
|
92
89
|
// cut the only state that resumes, and spending it is what makes a resume unique.
|
|
93
90
|
is_handed_off?: boolean | undefined
|
|
94
|
-
// The instruction and work state the run was told to carry across the cut
|
|
95
|
-
//
|
|
96
|
-
// legacy shape — while a resume into implementation refuses to continue without it (`classify_resume`
|
|
91
|
+
// The instruction and work state the run was told to carry across the cut. Optional so a pre-gate
|
|
92
|
+
// record of the scalar fields alone parses, while a resume into implementation refuses to continue without it (`classify_resume`
|
|
97
93
|
// → `incomplete`), so a session is never silently continued lacking the instruction it needs.
|
|
98
94
|
handoff?: Handoff | undefined
|
|
99
95
|
// Set when `run:merge` found this cut still unadopted after every process of the lane had gone and
|
|
100
|
-
// relaunched its successor itself
|
|
96
|
+
// relaunched its successor itself. The fallback fires once per cut: a
|
|
101
97
|
// successor that dies again before adopting is not relaunched a second time, so a lane that keeps
|
|
102
98
|
// failing its resume is parked rather than relaunched forever.
|
|
103
99
|
is_merge_relaunched?: boolean | undefined
|
|
@@ -108,20 +104,20 @@ interface CutState {
|
|
|
108
104
|
branch: string
|
|
109
105
|
is_dirty: boolean
|
|
110
106
|
is_held: boolean
|
|
111
|
-
// The issue a `fullrun` hold names, absent when the tree is not held by one
|
|
107
|
+
// The issue a `fullrun` hold names, absent when the tree is not held by one.
|
|
112
108
|
held_issue?: string | undefined
|
|
113
109
|
}
|
|
114
110
|
|
|
115
111
|
// The fields a cut is written from, bundled so `begin_cut` stays within the parameter limit. `phase`
|
|
116
112
|
// is which boundary the cut was taken at — `PRE_GATE_PHASE` or `IMPLEMENTATION_PHASE` — and it is what
|
|
117
113
|
// the resume reads to decide whether the fresh process continues to the gate or back into
|
|
118
|
-
// implementation
|
|
114
|
+
// implementation.
|
|
119
115
|
interface CutSpec {
|
|
120
116
|
issue: string
|
|
121
117
|
branch: string
|
|
122
118
|
phase: string
|
|
123
119
|
// The instruction and work state to carry, absent for a pre-gate cut that resumes into the gate
|
|
124
|
-
// rather than into implementation
|
|
120
|
+
// rather than into implementation.
|
|
125
121
|
handoff?: Handoff | undefined
|
|
126
122
|
}
|
|
127
123
|
|
|
@@ -138,9 +134,9 @@ interface CutResumeRequest {
|
|
|
138
134
|
// resume failure — wrong branch, a clean tree, an expired record, no declared cut, or a tree no longer
|
|
139
135
|
// under its hold — is `stale`. A record a successor has already adopted — `is_handed_off` spent back to
|
|
140
136
|
// `false` — is `handed-off`, so a process woken after its own cut is told to stop rather than sent to
|
|
141
|
-
// investigate a tree that is not wrong
|
|
142
|
-
//
|
|
143
|
-
//
|
|
137
|
+
// investigate a tree that is not wrong. A record that matches the tree but resumes into implementation
|
|
138
|
+
// without an instruction is `incomplete` — the run is not silently continued lacking what it was told
|
|
139
|
+
// to do.
|
|
144
140
|
type CutResume = 'resume' | 'stale' | 'handed-off' | 'incomplete'
|
|
145
141
|
|
|
146
142
|
type CutRead =
|
|
@@ -149,9 +145,6 @@ type CutRead =
|
|
|
149
145
|
| { kind: 'expired'; cut: RunCut }
|
|
150
146
|
| { kind: 'unreadable' }
|
|
151
147
|
|
|
152
|
-
const NONE_READ: CutRead = { kind: 'none' }
|
|
153
|
-
const UNREADABLE_READ: CutRead = { kind: 'unreadable' }
|
|
154
|
-
|
|
155
148
|
const run_cut_schema = z.object({
|
|
156
149
|
invocation: z.string(),
|
|
157
150
|
issue: z.string(),
|
|
@@ -178,42 +171,39 @@ function invocation_for(issue: string): string {
|
|
|
178
171
|
}
|
|
179
172
|
|
|
180
173
|
function parse_cut(raw: string): RunCut | undefined {
|
|
181
|
-
|
|
182
|
-
const parsed = run_cut_schema.safeParse(JSON.parse(raw))
|
|
183
|
-
|
|
184
|
-
return parsed.success ? parsed.data : undefined
|
|
185
|
-
} catch {
|
|
186
|
-
return undefined
|
|
187
|
-
}
|
|
174
|
+
return json_value.parse_with(raw, run_cut_schema)
|
|
188
175
|
}
|
|
189
176
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
function is_expired(cut: RunCut, now: Date): boolean {
|
|
194
|
-
const started = Date.parse(cut.cut_at)
|
|
177
|
+
function cut_at_of(cut: RunCut): string {
|
|
178
|
+
return cut.cut_at
|
|
179
|
+
}
|
|
195
180
|
|
|
196
|
-
|
|
181
|
+
// The expiry and the classification are `stamp-record.ts`'s, shared with `run-carry.ts` and
|
|
182
|
+
// `run-hold.ts`; what a `cut_at` that is not a date means is decided there.
|
|
183
|
+
const CUT_SPEC: StampRecordSpec<RunCut> = {
|
|
184
|
+
parse: parse_cut,
|
|
185
|
+
timestamp_of: cut_at_of,
|
|
186
|
+
max_age_ms: CUT_MAX_AGE_MS,
|
|
187
|
+
}
|
|
197
188
|
|
|
198
|
-
|
|
189
|
+
function is_expired(cut: RunCut, now: Date): boolean {
|
|
190
|
+
return stamp_record.is_older_than(cut_at_of(cut), CUT_MAX_AGE_MS, now)
|
|
199
191
|
}
|
|
200
192
|
|
|
201
193
|
function classify(raw: string | undefined, now: Date): CutRead {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const cut = parse_cut(raw)
|
|
194
|
+
const read = stamp_record.classify(raw, CUT_SPEC, now)
|
|
205
195
|
|
|
206
|
-
if (
|
|
196
|
+
if (!('record' in read)) return read
|
|
207
197
|
|
|
208
|
-
return { kind:
|
|
198
|
+
return { kind: read.kind, cut: read.record }
|
|
209
199
|
}
|
|
210
200
|
|
|
211
201
|
function read_cut(target: string, now: Date = new Date()): CutRead {
|
|
212
202
|
return classify(stamp_file.read_stamp_text(target), now)
|
|
213
203
|
}
|
|
214
204
|
|
|
215
|
-
// **The same read as `read_cut(cut_path(await worktree_directory()))`, taken synchronously
|
|
216
|
-
//
|
|
205
|
+
// **The same read as `read_cut(cut_path(await worktree_directory()))`, taken synchronously**.
|
|
206
|
+
// The pre-gate cut is enforced from a `PreToolUse` guard, and a guard
|
|
217
207
|
// answers synchronously or not at all — so the one git call the path derivation needs is
|
|
218
208
|
// `git_common_directory.own()`, the synchronous twin of the asynchronous reader, rather than a second
|
|
219
209
|
// spelling of it. Everything after the path is already shared: `cut_path` keys the record and
|
|
@@ -247,7 +237,7 @@ function carried_cut_sync(
|
|
|
247
237
|
return read.kind === 'carried' ? read.cut : undefined
|
|
248
238
|
}
|
|
249
239
|
|
|
250
|
-
// A lane's carried cut, read from outside the lane
|
|
240
|
+
// A lane's carried cut, read from outside the lane. The record is keyed to the
|
|
251
241
|
// lane's own git directory, so the parent — standing in the main checkout — resolves that directory
|
|
252
242
|
// from the lane's path rather than its own, and gets the record path back to mark it.
|
|
253
243
|
function lane_cut_sync(lane_directory: string): { target: string; cut: RunCut } | undefined {
|
|
@@ -272,15 +262,15 @@ function fresh_cut(spec: CutSpec, now: Date): RunCut {
|
|
|
272
262
|
}
|
|
273
263
|
}
|
|
274
264
|
|
|
275
|
-
// **The implementation cut resumes back into implementation; the pre-gate cut resumes into the gate
|
|
276
|
-
//
|
|
265
|
+
// **The implementation cut resumes back into implementation; the pre-gate cut resumes into the gate**.
|
|
266
|
+
// The resume shape — the `resume-impl` verdict and the record cleared on
|
|
277
267
|
// adoption — is named once here rather than spelled as a phase comparison at each call site.
|
|
278
268
|
function resumes_into_implementation(phase: string): boolean {
|
|
279
269
|
return phase === IMPLEMENTATION_PHASE
|
|
280
270
|
}
|
|
281
271
|
|
|
282
272
|
// Whether a record serializes within the hand-off bound. The record a fresh process reads back must
|
|
283
|
-
// stay small, or the resume re-establishes the very context the cut dropped
|
|
273
|
+
// stay small, or the resume re-establishes the very context the cut dropped.
|
|
284
274
|
function within_handoff_bound(cut: RunCut): boolean {
|
|
285
275
|
return Buffer.byteLength(JSON.stringify(cut), 'utf8') <= MAX_HANDOFF_BYTES
|
|
286
276
|
}
|
|
@@ -288,7 +278,7 @@ function within_handoff_bound(cut: RunCut): boolean {
|
|
|
288
278
|
// Whether the record a spec would write fits the bound. `load_handoff` bounds the handoff alone, but the
|
|
289
279
|
// record also carries the scalar fields, so a handoff just under the cap can still overflow once
|
|
290
280
|
// assembled — the caller checks this before `begin_cut` so that case reports `bad-handoff` rather than
|
|
291
|
-
// the exclusive-create's `busy
|
|
281
|
+
// the exclusive-create's `busy`.
|
|
292
282
|
function record_within_bound(spec: CutSpec, now: Date = new Date()): boolean {
|
|
293
283
|
return within_handoff_bound(fresh_cut(spec, now))
|
|
294
284
|
}
|
|
@@ -327,22 +317,19 @@ function matches_state(cut: RunCut, request: CutResumeRequest): boolean {
|
|
|
327
317
|
|
|
328
318
|
// A record a successor already adopted — the hand-off spent back to `false` for this issue's
|
|
329
319
|
// invocation. It is told apart from a crash record (`is_handed_off` never set) so a process woken after
|
|
330
|
-
// its own cut learns the run was carried on rather than being sent to investigate
|
|
331
|
-
// (joshuafolkken/kit#1935).
|
|
320
|
+
// its own cut learns the run was carried on rather than being sent to investigate.
|
|
332
321
|
function is_adopted_cut(cut: RunCut, issue: string): boolean {
|
|
333
322
|
return cut.is_handed_off === false && cut.invocation === invocation_for(issue)
|
|
334
323
|
}
|
|
335
324
|
|
|
336
325
|
// A cut that resumes into implementation must carry the instruction; a pre-gate cut resumes into the
|
|
337
|
-
// gate and needs none, so it always passes
|
|
338
|
-
//
|
|
339
|
-
// (joshuafolkken/kit#2484) with the same predicate the resume answers `incomplete` on.
|
|
326
|
+
// gate and needs none, so it always passes. It reads a spec as well as a record, so `run:cut` refuses
|
|
327
|
+
// to write the cut its resume would refuse with the same predicate the resume answers `incomplete` on.
|
|
340
328
|
function has_required_handoff(cut: Pick<RunCut, 'phase' | 'handoff'>): boolean {
|
|
341
329
|
return !resumes_into_implementation(cut.phase) || run_cut_handoff.is_complete_handoff(cut.handoff)
|
|
342
330
|
}
|
|
343
331
|
|
|
344
|
-
// Whether `run:merge` may relaunch the successor of a lane whose processes have all gone
|
|
345
|
-
// (joshuafolkken/kit#2484): a cut this issue declared and no successor adopted, carrying what its resume
|
|
332
|
+
// Whether `run:merge` may relaunch the successor of a lane whose processes have all gone: a cut this issue declared and no successor adopted, carrying what its resume
|
|
346
333
|
// needs, and not relaunched by the fallback before. The tree itself is verified by the resume.
|
|
347
334
|
function is_relaunchable(cut: RunCut, issue: string): boolean {
|
|
348
335
|
return (
|
|
@@ -399,7 +386,7 @@ function hold_of(directory: string | undefined): RunHold | undefined {
|
|
|
399
386
|
}
|
|
400
387
|
|
|
401
388
|
// The issue a `fullrun` holds this tree for — what tells a `fullrun` held in its own checkout apart from
|
|
402
|
-
// a person's tree
|
|
389
|
+
// a person's tree. A `halfrun` or an in-session `backlogrun` child holds it
|
|
403
390
|
// too, but its cut would be resumed as `fullrun #N`, so only a hold `run:entry` marked names an issue.
|
|
404
391
|
function fullrun_issue(hold: RunHold | undefined): string | undefined {
|
|
405
392
|
return hold?.is_fullrun === true ? hold.issue : undefined
|
|
@@ -429,7 +416,7 @@ function busy_message(cut: RunCut): string {
|
|
|
429
416
|
}
|
|
430
417
|
|
|
431
418
|
// A successor already resumed this cut, so a process that reaches `--resume` after its own hand-off is
|
|
432
|
-
// told to stop quietly rather than to investigate a tree that is not wrong
|
|
419
|
+
// told to stop quietly rather than to investigate a tree that is not wrong.
|
|
433
420
|
function handed_off_message(cut: RunCut): string {
|
|
434
421
|
return `This cut was already handed off to a successor — ${describe_cut(cut)}. Nothing was resumed here; the run is being carried on by the process that adopted it, so this one has nothing to do.`
|
|
435
422
|
}
|
|
@@ -442,8 +429,7 @@ function stale_message(cut: RunCut): string {
|
|
|
442
429
|
}
|
|
443
430
|
|
|
444
431
|
// The record matches the tree but resumes into implementation without an instruction, so the run would
|
|
445
|
-
// be continued blind to what it was told to do
|
|
446
|
-
// It is reported as a failure rather than a success, so the fresh process recovers the instruction
|
|
432
|
+
// be continued blind to what it was told to do. It is reported as a failure rather than a success, so the fresh process recovers the instruction
|
|
447
433
|
// rather than restructuring a tree it does not understand.
|
|
448
434
|
function incomplete_message(cut: RunCut): string {
|
|
449
435
|
return `This cut carries no instruction to resume on — ${describe_cut(cut)}. Resume was refused rather than continuing without it; recover the run's instruction and work state before implementing, and clear the record with \`${END_COMMAND}\` if the run is over.`
|
|
@@ -7,13 +7,11 @@ import { stamp_file } from '#scripts/josh/stamp-file'
|
|
|
7
7
|
|
|
8
8
|
// Starting a process that outlives this one, and keeping what it writes.
|
|
9
9
|
//
|
|
10
|
-
// **It
|
|
11
|
-
// supervisor
|
|
12
|
-
// `
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
// drifts is the one that forgets to strip the parent session's environment and dies at its first API
|
|
16
|
-
// request with nothing naming the cause (joshuafolkken/kit#1760).
|
|
10
|
+
// **It is its own module because two callers need the launcher and only one the parsing.** The
|
|
11
|
+
// supervisor and a delegated child launched into a lane both launch detached sessions. A copy would be
|
|
12
|
+
// the clone `CLAUDE.md` prohibits — and this is the shape of clone that fails silently, because the
|
|
13
|
+
// copy that drifts is the one that forgets to strip the parent session's environment and dies at its
|
|
14
|
+
// first API request with nothing naming the cause.
|
|
17
15
|
//
|
|
18
16
|
// **What is shared is the mechanism, never the argument vector.** Each caller composes its own
|
|
19
17
|
// `LaunchArgv` out of its own constants and validated values — `run-wake-session.ts` rebuilds a
|
|
@@ -52,13 +50,13 @@ type AttachedLaunchResult =
|
|
|
52
50
|
interface LaunchRequest {
|
|
53
51
|
argv: LaunchArgv
|
|
54
52
|
cwd: string
|
|
55
|
-
// Where to keep what the child writes. **Absent means the output is discarded**, which is what
|
|
56
|
-
//
|
|
57
|
-
//
|
|
53
|
+
// Where to keep what the child writes. **Absent means the output is discarded**, which is what a
|
|
54
|
+
// caller with nowhere to write gets — the log is an improvement on the diagnosis, never a
|
|
55
|
+
// precondition for starting a session.
|
|
58
56
|
log_path?: string | undefined
|
|
59
57
|
// Extra variables to set on the child, spread **after** the parent-session strip below, so a caller
|
|
60
58
|
// can hand the child a fact the inherited environment does not carry — a dispatched lane child's mark
|
|
61
|
-
// among them
|
|
59
|
+
// among them. Setting it here rather than mutating `process.env` keeps the
|
|
62
60
|
// launcher's own environment untouched, and spreading it last means an explicit value wins over an
|
|
63
61
|
// inherited one of the same name.
|
|
64
62
|
env?: Readonly<Record<string, string | undefined>>
|
|
@@ -127,16 +125,13 @@ function opened_log(log_path: string, on_error: (note: string) => void): number
|
|
|
127
125
|
}
|
|
128
126
|
|
|
129
127
|
// **The header is written by the launch and by nothing else.** Opening the file and announcing a
|
|
130
|
-
// launch into it
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
// is named, and a log nothing has launched into stays empty rather than carrying a header for a
|
|
134
|
-
// session that never ran.
|
|
128
|
+
// launch into it are separate, so `ensure_log` below can create the file the moment its path is named,
|
|
129
|
+
// and a log nothing has launched into stays empty rather than carrying a header for a session that
|
|
130
|
+
// never ran.
|
|
135
131
|
//
|
|
136
|
-
// **It swallows its own failure, because a log failure is never a failed launch.**
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
// `backlogrun` asleep — the one outcome `open_log`'s comment below rules out.
|
|
132
|
+
// **It swallows its own failure, because a log failure is never a failed launch.** Reached from
|
|
133
|
+
// `launch`'s `try` it would answer `failed` instead and leave a cut `backlogrun` asleep — the one
|
|
134
|
+
// outcome `open_log`'s comment below rules out.
|
|
140
135
|
function stamped(
|
|
141
136
|
descriptor: number | undefined,
|
|
142
137
|
argv: LaunchArgv,
|
|
@@ -154,13 +149,10 @@ function stamped(
|
|
|
154
149
|
|
|
155
150
|
// **Opening the log is allowed to fail, and a failure is not a failed launch.** A temp directory that
|
|
156
151
|
// cannot be written to is a reason to lose the diagnosis, never a reason to leave the run asleep — so
|
|
157
|
-
// this answers `undefined` and the spawn goes ahead discarding output
|
|
158
|
-
// joshuafolkken/kit#1746.
|
|
152
|
+
// this answers `undefined` and the spawn goes ahead discarding output.
|
|
159
153
|
//
|
|
160
154
|
// **It says so rather than failing quietly, though.** `--list` and every warning name this path
|
|
161
|
-
// unconditionally, so a silent failure would send a person
|
|
162
|
-
// nothing of this run — the silent diagnosis joshuafolkken/kit#1746 was filed about, arrived at from
|
|
163
|
-
// the other side.
|
|
155
|
+
// unconditionally, so a silent failure would send a person to a file holding nothing of this run.
|
|
164
156
|
function open_log(
|
|
165
157
|
log_path: string | undefined,
|
|
166
158
|
on_error: (note: string) => void,
|
|
@@ -176,15 +168,11 @@ function open_log(
|
|
|
176
168
|
}
|
|
177
169
|
}
|
|
178
170
|
|
|
179
|
-
// **The file exists because its path was resolved, not because something launched into it
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
// named for the whole run with nothing ever at it, and the one report a failure could make went to
|
|
185
|
-
// that same absent file. Creating it where it is named is what makes the name a promise the reader
|
|
186
|
-
// can check: an empty log says "this supervisor started nothing", which is an answer, where a
|
|
187
|
-
// missing one said nothing at all.
|
|
171
|
+
// **The file exists because its path was resolved, not because something launched into it.**
|
|
172
|
+
// `--list`, the already-running branch of `--start` and every warning name this path unconditionally,
|
|
173
|
+
// so creating it where it is named is what makes the name a promise the reader can check: an empty
|
|
174
|
+
// log says "this supervisor started nothing", which is an answer, where a missing one says nothing at
|
|
175
|
+
// all.
|
|
188
176
|
//
|
|
189
177
|
// **No header is written here**, because nothing has been launched — see `stamped` above.
|
|
190
178
|
function ensure_log(log_path: string, on_error: (note: string) => void): void {
|
|
@@ -193,17 +181,16 @@ function ensure_log(log_path: string, on_error: (note: string) => void): void {
|
|
|
193
181
|
if (descriptor !== undefined) closeSync(descriptor)
|
|
194
182
|
}
|
|
195
183
|
|
|
196
|
-
// **`detached` is what puts the child outside the conversation, and discarding its output
|
|
197
|
-
//
|
|
184
|
+
// **`detached` is what puts the child outside the conversation, and discarding its output is no part
|
|
185
|
+
// of that.** A process left attached is a child of the agent session,
|
|
198
186
|
// and the session cut is exactly the moment this has to survive — so a supervisor that the harness
|
|
199
187
|
// backgrounds, the way `run:progress` is backgrounded, would die at the one event it exists to handle.
|
|
200
|
-
// That argument is about the parent link alone. `stdio: 'ignore'`
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
// detached and the output survives it.
|
|
188
|
+
// That argument is about the parent link alone. `stdio: 'ignore'` would throw away the one record that
|
|
189
|
+
// can say why a woken session exited without claiming the carry record; pointed at a file, the child is
|
|
190
|
+
// just as detached and the output survives it.
|
|
204
191
|
//
|
|
205
192
|
// **The parent session's environment is removed here, and that is why it is here rather than at each
|
|
206
|
-
// call site
|
|
193
|
+
// call site**. A detached child outlives the invocation that spawned it, so a
|
|
207
194
|
// loopback proxy exported into that invocation is a dead address by the time the child dials it —
|
|
208
195
|
// `ConnectionRefused` at the first API request, with nothing anywhere naming the cause. A second
|
|
209
196
|
// launcher that composed its own `SpawnOptions` would be one edit away from that failure.
|
|
@@ -279,16 +266,14 @@ function ignore_spawn(_pid: number): void {
|
|
|
279
266
|
// that array is a constant or an integer the caller composed, because each caller takes the text it was
|
|
280
267
|
// handed apart and rebuilds it rather than passing it on.
|
|
281
268
|
//
|
|
282
|
-
// **It is what
|
|
283
|
-
//
|
|
284
|
-
//
|
|
285
|
-
//
|
|
286
|
-
//
|
|
287
|
-
// file that was read, and that shape is the design: starting a process from a record is the whole of
|
|
288
|
-
// what a supervisor does.
|
|
269
|
+
// **It is what is left after the flow is actually broken, not something used instead of breaking it.**
|
|
270
|
+
// Inspecting the string harder does not satisfy the rule; the rebuild is what severs the flow —
|
|
271
|
+
// **`js/redos` is absent from this file rather than suppressed, and this marker covers nothing of
|
|
272
|
+
// it.** What the rule still sees is the shape of a `spawn` reached from a file that was read, and that
|
|
273
|
+
// shape is the design: starting a process from a record is the whole of what a supervisor does.
|
|
289
274
|
//
|
|
290
|
-
// Scoped to that one line on the user's explicit instruction
|
|
291
|
-
//
|
|
275
|
+
// Scoped to that one line on the user's explicit instruction. No project-wide exclusion and no change
|
|
276
|
+
// to the Sonar configuration.
|
|
292
277
|
function spawned(
|
|
293
278
|
request: LaunchRequest,
|
|
294
279
|
log: number | undefined,
|