@joshuafolkken/kit 1.1240.0 → 1.1373.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +52 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +19 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +23 -66
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +43 -11
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-7UBFU3CL.js} +18 -20
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-7WKYHEGU.js} +8 -44
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-AKGCP4LX.js} +285 -363
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-BZMPVFDY.js} +7 -5
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-JCRDBQXB.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-JGW24KKM.js} +4 -4
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-SLSFIWTX.js} +550 -875
- package/dist/hooks/chunk-UTHMB4O2.js +1590 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-V4TKZHER.js} +4 -4
- package/dist/hooks/chunk-YLBBSSTF.js +3705 -0
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +195 -181
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -187
- package/dist/josh.js +282 -95
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +17 -11
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +3 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +30 -5
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +168 -30
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +53 -51
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +7 -7
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +1 -1
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +24 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +30 -35
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +25 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +21 -7
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +6 -7
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +12 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +2 -2
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +1 -1
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cross-file-recheck.ts +155 -0
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +35 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-runs.ts +1 -1
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +6 -7
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +54 -36
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +9 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +171 -46
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +26 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +64 -18
- package/scripts/run/run-step.ts +107 -51
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +9 -9
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -279
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +26 -26
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -4,7 +4,7 @@ import { prior_comment_read } from './prior-comment-read'
|
|
|
4
4
|
import { shell_segments } from './shell-segments'
|
|
5
5
|
|
|
6
6
|
// The trigger and the delivered text behind the `issue-comments` row of `delivered-rules.ts`, moved
|
|
7
|
-
// out of the enumeration so the list stays a list
|
|
7
|
+
// out of the enumeration so the list stays a list.
|
|
8
8
|
|
|
9
9
|
// **A shell line carries several commands, and the subcommand has to be the one being invoked.**
|
|
10
10
|
// Each segment is judged on its own, anchored at its start, so `gh issue comment <N> -b "… gh issue
|
|
@@ -29,7 +29,7 @@ const ISSUES_PATH = /repos\/[^\s'"]*\/issues\//u
|
|
|
29
29
|
|
|
30
30
|
// A field projection — `--jq` for `gh api`, `--json` for `gh issue view` — whose value never names the
|
|
31
31
|
// body. `gh api …/issues/<N> --jq '{state, labels}'` fetches the Issue only to read its state or its
|
|
32
|
-
// labels, which is a state check and not the body read this rule guards
|
|
32
|
+
// labels, which is a state check and not the body read this rule guards; a
|
|
33
33
|
// `--jq '.body'` still names the body and stays a body read. The value is taken quoted or bare, so the
|
|
34
34
|
// comma list `--json state,labels` and the expression `'{state, labels}'` are read the same way.
|
|
35
35
|
const FIELD_PROJECTION = /(?:--jq|--json)[= ]\s*('[^']*'|"[^"]*"|\S+)/u
|
|
@@ -78,20 +78,26 @@ function reads_issue_comments(command: string): boolean {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
// **The refusal hands over the command that fixes it**, because reading is not the same as
|
|
81
|
-
// obeying: a sentence saying "also read the comments" is prose
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
81
|
+
// obeying: a sentence saying "also read the comments" is prose that moves nothing, while a refused
|
|
82
|
+
// body read leaves the run holding the reissue that makes the comments *present*. The conflict rule
|
|
83
|
+
// ships with it — a delivery that said only "read them" would hand back the deciding at the moment
|
|
84
|
+
// nothing else is open to read.
|
|
85
|
+
//
|
|
86
|
+
// **The command comes first, the reason after**. The first line is the guard's
|
|
87
|
+
// label and then the call itself — `issue:read` prints the body and every comment in one read, `<N>`
|
|
88
|
+
// being the Issue the refused call named — so a run that reads only the opening still leaves holding
|
|
89
|
+
// the fix. The label keeps `time_transcript_line.guard_from_refusal` naming this guard, not the command.
|
|
86
90
|
const ISSUE_COMMENTS_REASON =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
'
|
|
91
|
+
'⛔ issue comments: pnpm josh issue:read <N>\n' +
|
|
92
|
+
"Run that in place of this read: <N> is the Issue it names, and an Issue's comments are part of " +
|
|
93
|
+
'the Issue, so the body and every comment come back together. Without josh, add ' +
|
|
94
|
+
"`gh api repos/{owner}/{repo}/issues/<N>/comments --jq '.[] | {user: .user.login, created_at, " +
|
|
95
|
+
"body}'` beside the body read, or `gh issue view <N> --comments` where GraphQL is reachable.\n" +
|
|
96
|
+
'Why: a decision recorded after the body was written lives only in a comment — a corrected ' +
|
|
97
|
+
'diagnosis (joshuafolkken/kit#1537), a changed default and an added acceptance criterion ' +
|
|
90
98
|
'(joshuafolkken/kit#1520), a scope handed to another Issue (joshuafolkken/kit#1304) — and ' +
|
|
91
99
|
'nothing in the body says it was superseded, so a body-only reader builds the wrong thing and ' +
|
|
92
|
-
'sees no contradiction.
|
|
93
|
-
"`gh api repos/{owner}/{repo}/issues/<N>/comments --jq '.[] | {user: .user.login, created_at, " +
|
|
94
|
-
"body}'` beside the body read, or `gh issue view <N> --comments` where GraphQL is reachable. " +
|
|
100
|
+
'sees no contradiction. ' +
|
|
95
101
|
'Then the later text is the agreement in force — a comment supersedes the body it contradicts — ' +
|
|
96
102
|
"except for two answers that are not the run's to make: work a comment reassigns to another " +
|
|
97
103
|
'Issue is out of scope and is not implemented, and a comment saying the Issue no longer has a ' +
|
|
@@ -107,6 +113,8 @@ const ROW = {
|
|
|
107
113
|
reason: ISSUE_COMMENTS_REASON,
|
|
108
114
|
already_satisfied: prior_comment_read.already_read_for_call,
|
|
109
115
|
keeps: bash_triggers.on_bash_command(reads_issue_comments),
|
|
116
|
+
// The opening the reason carried before it led with the command.
|
|
117
|
+
former_reasons: ["⛔ an Issue's comments are part of the Issue: read them before implementing"],
|
|
110
118
|
}
|
|
111
119
|
|
|
112
120
|
const issue_comments = {
|
|
@@ -2,8 +2,8 @@ import { time_shell } from '#scripts/time-runtime/time-shell'
|
|
|
2
2
|
import { bash_triggers } from './bash-triggers'
|
|
3
3
|
import { shell_segments } from './shell-segments'
|
|
4
4
|
|
|
5
|
-
// The trigger and the delivered text behind the `josh-git-bare` row of `delivered-rules.ts
|
|
6
|
-
//
|
|
5
|
+
// The trigger and the delivered text behind the `josh-git-bare` row of `delivered-rules.ts`:
|
|
6
|
+
// a `pnpm josh git` issued without `-y` / `--yes`.
|
|
7
7
|
//
|
|
8
8
|
// **A bare `pnpm josh git` cannot succeed from an agent, and it wastes the time it takes to fail.** The
|
|
9
9
|
// command prompts to confirm the staging, and with no TTY the prompt falls to its cancel branch —
|
|
@@ -9,26 +9,24 @@ import {
|
|
|
9
9
|
} from '#scripts/time-runtime/time-transcript-line'
|
|
10
10
|
import { run_tail_rule } from './run-tail-rule'
|
|
11
11
|
|
|
12
|
-
// A dispatched lane child is stopped from backgrounding a long-running josh command
|
|
12
|
+
// A dispatched lane child is stopped from backgrounding a long-running josh command.
|
|
13
13
|
//
|
|
14
14
|
// **A headless child's turn-end is its process's end.** A lane child runs as `claude -p`, and there the
|
|
15
15
|
// background Bash tasks die with the turn — so "a background command's exit re-invokes the session"
|
|
16
|
-
// (`background-commands.md`) does not hold.
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
// scoped checks, a review round and the live verification all done — parked instead of merged.
|
|
16
|
+
// (`background-commands.md`) does not hold. A child that backgrounds `pnpm josh gate && pnpm josh git
|
|
17
|
+
// -y …` and ends its turn sees the gate die at `exit code 143` with the implementation, the scoped
|
|
18
|
+
// checks, a review round and the live verification all done — parked instead of merged.
|
|
20
19
|
//
|
|
21
20
|
// **So the refusal is put at the launch, and it names the detached route.** The region from the gate to
|
|
22
21
|
// the merge belongs to `pnpm josh ship --detach` in a child (`chain-rule.md` step 0), whose supervisor
|
|
23
22
|
// outlives the turn.
|
|
24
23
|
//
|
|
25
|
-
// **`ship` is in the set too, `--detach` or not
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
// another long command is still refused.
|
|
24
|
+
// **`ship` is in the set too, `--detach` or not**. It detaches in a child, but only after its
|
|
25
|
+
// preflight — the scoped checks — has passed in the calling process, so a backgrounded `ship` is
|
|
26
|
+
// killed at the turn's end before any supervisor exists. Issued in the foreground it returns at
|
|
27
|
+
// `launched` within the tool timeout, and the supervisor carries the rest. A backgrounded `ship` alone
|
|
28
|
+
// is not refused but rewritten into that foreground call (`foreground_input`); one chained after
|
|
29
|
+
// another long command is refused.
|
|
32
30
|
//
|
|
33
31
|
// **Its stop-time half reads the same fact from the other side.** A backgrounded task the transcript
|
|
34
32
|
// launched but never saw finish is still running, and in a child the stop about to happen kills it —
|
|
@@ -60,7 +58,7 @@ function long_commands_of(command: string): Array<string> {
|
|
|
60
58
|
|
|
61
59
|
// A call whose long-running work is `ship` alone. In a child a foreground `ship` already detaches
|
|
62
60
|
// itself after its preflight (`run-ship-cli.ts` → `should_detach`), so the only fault in backgrounding
|
|
63
|
-
// it is the flag — and the flag is what the hook rewrites
|
|
61
|
+
// it is the flag — and the flag is what the hook rewrites.
|
|
64
62
|
function ships_alone(command: string): boolean {
|
|
65
63
|
const names = long_commands_of(command)
|
|
66
64
|
|
|
@@ -103,7 +101,7 @@ function is_background_long_run(
|
|
|
103
101
|
return is_candidate(call) && is_lane_child()
|
|
104
102
|
}
|
|
105
103
|
|
|
106
|
-
// **A backgrounded `ship` in a child is rewritten, not refused
|
|
104
|
+
// **A backgrounded `ship` in a child is rewritten, not refused**. The refusal
|
|
107
105
|
// asked for nothing but the same call in the foreground — 14 of 41 lane `ship` refusals in one measured
|
|
108
106
|
// backlogrun were that round trip, paid at the run's largest context. The input with the flag cleared,
|
|
109
107
|
// or `undefined` for every call this does not apply to.
|
|
@@ -137,8 +135,8 @@ function unfinished_ids(
|
|
|
137
135
|
return launched.filter((id) => id !== '' && !finished.has(id))
|
|
138
136
|
}
|
|
139
137
|
|
|
140
|
-
// The background tasks the tail launched and never saw finish — commands and subagents alike
|
|
141
|
-
//
|
|
138
|
+
// The background tasks the tail launched and never saw finish — commands and subagents alike,
|
|
139
|
+
// since a lane child's turn-end kills either.
|
|
142
140
|
function pending_background_ids(tail: string): ReadonlyArray<string> {
|
|
143
141
|
return unfinished_ids(tail, (block) => [block.background_id, block.agent_id])
|
|
144
142
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { platform_temporary } from '#scripts/josh/platform-temporary'
|
|
1
2
|
import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
2
3
|
import { bash_triggers } from './bash-triggers'
|
|
3
4
|
import { shell_segments } from './shell-segments'
|
|
4
5
|
|
|
5
6
|
// A dispatched lane child is stopped from running its parent's budget commands, and told the live
|
|
6
|
-
// carry record is its parent's rather than a competing run
|
|
7
|
+
// carry record is its parent's rather than a competing run.
|
|
7
8
|
//
|
|
8
9
|
// **A child read its own parent as a competitor and refused to implement.** On 2026-09-21, inside
|
|
9
10
|
// `backlogrun #2252`, a lane launched for #2258 stopped before touching a line: the child ran
|
|
@@ -32,13 +33,46 @@ import { shell_segments } from './shell-segments'
|
|
|
32
33
|
// canonical form only — `shell_segments.is_josh_command` canonicalizes an alias before the match.
|
|
33
34
|
const RUN_BUDGET_COMMANDS: ReadonlySet<string> = new Set(['run:merge', 'run:carry'])
|
|
34
35
|
|
|
36
|
+
// **A `run:carry` call prefixed with a non-empty `JOSH_TEMP_ROOT` cannot reach the parent's record**,
|
|
37
|
+
// because every record it keeps is a `stamp_path` under that root. It is how
|
|
38
|
+
// live evidence of it is taken, so it is let through rather than refused — refusing it is what sent a
|
|
39
|
+
// child round the guard to the bare CLI, which then ended its parent's record. `run:merge` stays
|
|
40
|
+
// refused under any root: besides its record it syncs main, closes lanes and writes to GitHub, none of
|
|
41
|
+
// which a redirected root moves. Only a leading
|
|
42
|
+
// assignment counts: an `export` in an earlier segment is not read, and is refused as before. A bare
|
|
43
|
+
// variable is refused too: shell state does not survive between tool calls, so `$EV` set in an
|
|
44
|
+
// earlier call expands to nothing here, and an empty root is the live run's default one.
|
|
45
|
+
//
|
|
46
|
+
// One leading assignment, its value read as the shell reads it: a run of quoted strings, `$(…)`
|
|
47
|
+
// substitutions (one nested level) and plain characters, so a space inside a quote or a substitution
|
|
48
|
+
// does not end it. Cut at the first space, `JOSH_TEMP_ROOT=$(mktemp -d -t ev) pnpm josh run:merge`
|
|
49
|
+
// left `ev) pnpm …` behind, whose head the command reader rejects, and slipped the refusal.
|
|
50
|
+
const LEADING_ASSIGNMENT = String.raw`[A-Za-z_]\w*=(?:"[^"]*"|'[^']*'|\$\((?:[^()]|\([^()]*\))*\)|[^\s"'])*\s+`
|
|
51
|
+
|
|
52
|
+
const REDIRECTED_PREFIX = new RegExp(
|
|
53
|
+
String.raw`^(?:${LEADING_ASSIGNMENT})*${platform_temporary.TEMP_ROOT_KEY}=(?!""|''|\s|$|"?\$\{?[A-Za-z_])`,
|
|
54
|
+
'u',
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
// The budget commands with an effect outside the temp root, so a redirected root does not isolate them.
|
|
58
|
+
const SHARED_STATE_COMMANDS: ReadonlySet<string> = new Set(['run:merge'])
|
|
59
|
+
|
|
60
|
+
// The leading assignments, stripped before the command is read. The shared command reader unwraps
|
|
61
|
+
// `$(…)` into the command position — the subshell is the real work in a cost row — so without this
|
|
62
|
+
// `JOSH_TEMP_ROOT="$(mktemp -d)" pnpm josh run:merge` read as `mktemp` and slipped the refusal.
|
|
63
|
+
const LEADING_ASSIGNMENTS = new RegExp(`^(?:${LEADING_ASSIGNMENT})*`, 'u')
|
|
64
|
+
|
|
65
|
+
function is_budget_segment(segment: string): boolean {
|
|
66
|
+
const commands = REDIRECTED_PREFIX.test(segment) ? SHARED_STATE_COMMANDS : RUN_BUDGET_COMMANDS
|
|
67
|
+
|
|
68
|
+
return shell_segments.is_josh_command(segment.replace(LEADING_ASSIGNMENTS, ''), commands)
|
|
69
|
+
}
|
|
70
|
+
|
|
35
71
|
// A segment that invokes one of the parent's budget commands. Segment-wise and alias-expanded for the
|
|
36
72
|
// reason every command predicate in this directory is: one shell line carries several commands, and a
|
|
37
73
|
// name quoted inside a body is not the command being invoked.
|
|
38
74
|
function invokes_budget_command(command: string): boolean {
|
|
39
|
-
return shell_segments
|
|
40
|
-
.segments_of(command)
|
|
41
|
-
.some((segment) => shell_segments.is_josh_command(segment, RUN_BUDGET_COMMANDS))
|
|
75
|
+
return shell_segments.segments_of(command).some((segment) => is_budget_segment(segment))
|
|
42
76
|
}
|
|
43
77
|
|
|
44
78
|
// **The command test comes first and the world is consulted second**, so the `is_child_of` read — the
|
|
@@ -71,7 +105,9 @@ const LANE_CARRY_CONFLICT_REASON =
|
|
|
71
105
|
'dispatched child cannot ask, and there is nothing to decide. Continue implementing this Issue; the ' +
|
|
72
106
|
'parent owns the budget and counts the outcome at the return. The procedure is ' +
|
|
73
107
|
'`.claude/skills/workflow-commands/pre-gate-cut.md` and `backlogrun-progress.md` → "The hand-off". ' +
|
|
74
|
-
'
|
|
108
|
+
'Live evidence of `run:carry` is taken with a fresh `JOSH_TEMP_ROOT` prefixed to the call, which this ' +
|
|
109
|
+
'rule lets through (joshuafolkken/kit#3458); `run:merge` is refused under any root, because it also ' +
|
|
110
|
+
'syncs main, closes lanes and writes to GitHub. This rule fires on every occurrence, not once per run.'
|
|
75
111
|
|
|
76
112
|
// The row itself, so `delivered-rules.ts` spreads one entry. `is_trigger` reads the input through
|
|
77
113
|
// `on_bash_command` — the `Bash` tool-name gate every command row shares — and `decide` returns true
|
|
@@ -3,16 +3,13 @@ import { lane_child_marker } from '#scripts/lane/lane-child-marker'
|
|
|
3
3
|
import type { GuardedCall } from '#scripts/time-runtime/time-batch-guard'
|
|
4
4
|
|
|
5
5
|
// A dispatched lane child's interactive ask is refused and routed to the park procedure, delivered at
|
|
6
|
-
// the call it binds on
|
|
6
|
+
// the call it binds on.
|
|
7
7
|
//
|
|
8
|
-
// **This is
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
// `AskUserQuestion`, was refused, and died with the question stranded in its exit record's
|
|
14
|
-
// `permission_denials`. So the trigger is the ask itself, not the stop that a routed child would have
|
|
15
|
-
// reached afterward.
|
|
8
|
+
// **This is `lane-park.ts`'s rule, moved one tool-call earlier.** That rule parks the question on the
|
|
9
|
+
// Issue before the `confirmation` notify. A child that reaches for `AskUserQuestion` never gets that
|
|
10
|
+
// far: the ask is refused by the harness, the turn ends there with the question stranded in its exit
|
|
11
|
+
// record's `permission_denials`, and the park guard never fires. So the trigger is the ask itself,
|
|
12
|
+
// not the stop that a routed child would have reached afterward.
|
|
16
13
|
//
|
|
17
14
|
// **A hook denial is guidance, where the harness's own denial is death.** The harness refuses an
|
|
18
15
|
// interactive ask in a headless session by ending the turn; this rule refuses the same call with a
|
|
@@ -4,18 +4,15 @@ import { lane_handoff } from '#scripts/lane/lane-handoff'
|
|
|
4
4
|
import { bash_triggers } from './bash-triggers'
|
|
5
5
|
import { shell_segments } from './shell-segments'
|
|
6
6
|
|
|
7
|
-
// A dispatched lane child records its park before it stops, delivered at the call it binds on
|
|
8
|
-
// (joshuafolkken/kit#2034).
|
|
7
|
+
// A dispatched lane child records its park before it stops, delivered at the call it binds on.
|
|
9
8
|
//
|
|
10
|
-
// **A lane child that
|
|
11
|
-
// child as a detached `fullrun #<N>` process, and its only route to ask a person
|
|
12
|
-
// the Issue — `needs-decision` plus a comment carrying the question.
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
// to answer. The child is the one process that knows the question, the options and whether it stashed,
|
|
18
|
-
// and that knowledge died with its turn.
|
|
9
|
+
// **A lane child that stops for a decision must leave the question behind.** A `backlogrun`
|
|
10
|
+
// dispatches a child as a detached `fullrun #<N>` process, and its only route to ask a person
|
|
11
|
+
// anything is to park the Issue — `needs-decision` plus a comment carrying the question. A child that
|
|
12
|
+
// writes the question only into its final message leaves the parent an OPEN Issue with `in-progress`
|
|
13
|
+
// and no question, and a person looking at the Issue cannot tell what to answer. The child is the one
|
|
14
|
+
// process that knows the question, the options and whether it stashed, and that knowledge dies with
|
|
15
|
+
// its turn.
|
|
19
16
|
//
|
|
20
17
|
// **The stop is one shell call, so the rule is delivered rather than resident.** `CLAUDE.md` mandates
|
|
21
18
|
// a `confirmation` Telegram before any mid-workflow stop, so `pnpm josh notify --task-type
|
|
@@ -53,7 +50,7 @@ function is_confirmation_notify(command: string): boolean {
|
|
|
53
50
|
}
|
|
54
51
|
|
|
55
52
|
// The josh notify invocation in either spelling, anywhere in a blob of text. The stop guard
|
|
56
|
-
//
|
|
53
|
+
// asks whether a confirmation notify was issued *this turn* by scanning the
|
|
57
54
|
// transcript tail rather than one command, so the "is it a stop notification" judgement stays here —
|
|
58
55
|
// the same `CONFIRMATION_TASK_TYPE` regex, never a second copy of it.
|
|
59
56
|
const NOTIFY_INVOCATION = /josh\s+(?:notify|nf)\b/u
|
|
@@ -64,7 +61,7 @@ const NOTIFY_INVOCATION = /josh\s+(?:notify|nf)\b/u
|
|
|
64
61
|
// on purpose — the guard's safe direction is to read a real stop notification as present, so a run
|
|
65
62
|
// that sent one is never told it did not.
|
|
66
63
|
//
|
|
67
|
-
// **A command that sent the Telegram itself prints this line instead
|
|
64
|
+
// **A command that sent the Telegram itself prints this line instead**:
|
|
68
65
|
// `run:entry` notifies from inside its own stop, so no `josh notify` invocation reaches the transcript,
|
|
69
66
|
// and the line it prints is what the tail carries. One constant, printed there and matched here.
|
|
70
67
|
const COMMAND_NOTIFY_MARKER = 'stop notified: a confirmation Telegram was sent by this command'
|
|
@@ -81,7 +78,7 @@ function mentions_confirmation_notify(text: string): boolean {
|
|
|
81
78
|
// human-or-child fact the pre-gate cut reads: a person working in a lane carries no mark and sees no
|
|
82
79
|
// refusal, and a mark that leaked in naming another issue is read as a person too.
|
|
83
80
|
//
|
|
84
|
-
// **A child that handed its region to the detached ship is not parking
|
|
81
|
+
// **A child that handed its region to the detached ship is not parking**: its
|
|
85
82
|
// stop waits on nobody, so the park checklist is the wrong advice. `lane_handoff.is_handed_off` is the
|
|
86
83
|
// reading the `Stop` hook stands its notify demand down on, so the two hooks cannot disagree.
|
|
87
84
|
function is_parking_child(directory: string = process.cwd()): boolean {
|
|
@@ -126,8 +123,7 @@ const LANE_PARK_REASON =
|
|
|
126
123
|
'before it stops", and the park itself is `backlogrun-park.md` → "park and continue".'
|
|
127
124
|
|
|
128
125
|
// The row itself, so `delivered-rules.ts` spreads one entry. **Once per run rather than `decide`, and
|
|
129
|
-
// no `already_satisfied`.** The stop ends the turn, so it is not the recurring act
|
|
130
|
-
// wrote `decide` for. It carries no `already_satisfied` because the park it asks for is a GitHub label a
|
|
126
|
+
// no `already_satisfied`.** The stop ends the turn, so it is not the recurring act `decide` is for. It carries no `already_satisfied` because the park it asks for is a GitHub label a
|
|
131
127
|
// synchronous guard cannot read, and the transcript-tail alternative would read a child that merely
|
|
132
128
|
// *read* `backlogrun-park.md` — whose prose carries the `labels[]=needs-decision` command — as
|
|
133
129
|
// compliant and fall silent on a real violation (the header above). `keeps` reads an actual
|
|
@@ -6,8 +6,7 @@ import { lane_park } from './lane-park'
|
|
|
6
6
|
import { shell_segments } from './shell-segments'
|
|
7
7
|
import { tail_commands } from './tail-commands'
|
|
8
8
|
|
|
9
|
-
// A dispatched lane child that split its own Issue is stopped from parking the epic it promoted
|
|
10
|
-
// (joshuafolkken/kit#3296).
|
|
9
|
+
// A dispatched lane child that split its own Issue is stopped from parking the epic it promoted.
|
|
11
10
|
//
|
|
12
11
|
// **A split is not a park.** On 2026-10-06, inside a `backlogrun`, the lane child for #3255 promoted
|
|
13
12
|
// its Issue to an epic with `pnpm josh epic --promote 3255`, filed #3291–#3294, then applied
|
|
@@ -4,24 +4,21 @@ import { bash_triggers } from './bash-triggers'
|
|
|
4
4
|
import { git_argv } from './git-argv'
|
|
5
5
|
import { shell_segments } from './shell-segments'
|
|
6
6
|
|
|
7
|
-
// A dispatched lane child is stopped from running `git switch main` —
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// already used by worktree at '<the primary checkout>'`. It was measured 11 times in the 2026-09-21
|
|
12
|
-
// backlogrun, always in a lane child.
|
|
7
|
+
// A dispatched lane child is stopped from running `git switch main` — a call that always fails. A
|
|
8
|
+
// lane is a linked work tree, `main` is checked out by the primary work tree, and git allows one
|
|
9
|
+
// branch in one work tree at a time — so the call is **structurally guaranteed to fail** with
|
|
10
|
+
// `fatal: 'main' is already used by worktree at '<the primary checkout>'`.
|
|
13
11
|
//
|
|
14
12
|
// **The source is the parent's step, not the child's.** The distributed procedures write
|
|
15
|
-
// `
|
|
13
|
+
// `pnpm josh ms` as the step before reading the dependency scope, and that is *correct in
|
|
16
14
|
// the primary checkout* (`backlogrun-lanes.md` → "Once per repository, before the first lane opens"). A
|
|
17
15
|
// child that runs the same line verbatim fails every time, and the failure is not free: a refused call
|
|
18
|
-
// drops the independent calls batched beside it
|
|
16
|
+
// drops the independent calls batched beside it, so a batching child loses the
|
|
19
17
|
// most. `josh main:sync` (`main-sync.ts`) already refuses inside a linked work tree for the same reason;
|
|
20
18
|
// this is the *raw* form of the same call, refused before it fails rather than after.
|
|
21
19
|
//
|
|
22
20
|
// **It refuses rather than rewrites, because a `PreToolUse` guard can only `allow` / `deny` a command,
|
|
23
|
-
// never substitute a different one
|
|
24
|
-
// the next command, exactly as #2297 required of `test:declared`: the lane is already on its own issue
|
|
21
|
+
// never substitute a different one**. So the refusal hands back the next command: the lane is already on its own issue
|
|
25
22
|
// branch, branched from a fresh default before it opened, and the latest default is brought in during the
|
|
26
23
|
// gate by `pnpm josh main:merge` — so skip the step and keep implementing on the current branch.
|
|
27
24
|
//
|
|
@@ -30,8 +27,8 @@ import { shell_segments } from './shell-segments'
|
|
|
30
27
|
// differs per repository — so hardcoding `main` would both miss a renamed default and need an async
|
|
31
28
|
// `get_default_branch`. A lane child belongs on its own `<issue>-lane` branch; a `git switch` to anything
|
|
32
29
|
// else is the misfire. Its own branch is read synchronously from the checkout path
|
|
33
|
-
// (`lane_paths.lane_issue_of`), the weaker-but-synchronous lane test a guard is bound to
|
|
34
|
-
//
|
|
30
|
+
// (`lane_paths.lane_issue_of`), the weaker-but-synchronous lane test a guard is bound to.
|
|
31
|
+
// `git switch` alone is covered — it never means a pathspec, so there is no
|
|
35
32
|
// ambiguity — and `git checkout -- <path>` stays `worktree-guard.ts`'s.
|
|
36
33
|
//
|
|
37
34
|
// **The command test comes first and the world is consulted second**, so the lane read runs only on the
|
|
@@ -113,7 +110,7 @@ const LANE_SWITCH_MAIN_REASON =
|
|
|
113
110
|
'and the latest default is brought in during the gate by `pnpm josh main:merge`. So skip this step ' +
|
|
114
111
|
'and keep implementing on the current branch — no `git switch`, no `git pull`. `pnpm josh main:sync` ' +
|
|
115
112
|
'(`josh ms`) is refused in a lane for the same reason, and a lane is finished with `pnpm josh ' +
|
|
116
|
-
'lane:close <issue-number>`. The parent runs `
|
|
113
|
+
'lane:close <issue-number>`. The parent runs `pnpm josh ms` in the primary checkout ' +
|
|
117
114
|
'before each lane opens, never the child — `backlogrun-lanes.md` and `backlogrun-child.md` are the ' +
|
|
118
115
|
'single sources. This rule fires on every occurrence, not once per run.'
|
|
119
116
|
|
|
@@ -4,7 +4,7 @@ import { z } from 'zod'
|
|
|
4
4
|
import { filing_cap } from './filing-cap'
|
|
5
5
|
|
|
6
6
|
// The text of the person's last prompt on a transcript tail — what the stop guard's citation row
|
|
7
|
-
// reads to tell a `#N` the person quoted from one the run brought in itself
|
|
7
|
+
// reads to tell a `#N` the person quoted from one the run brought in itself.
|
|
8
8
|
//
|
|
9
9
|
// **A prompt is `filing_cap`'s prompt line, minus what the harness wrote there.** A skill's body is a
|
|
10
10
|
// `user` line with no tool result too, but it carries `isMeta`; a background task's completion notice
|
|
@@ -6,15 +6,15 @@ import { oracle_firing, type FiringPoint } from './oracle-firing'
|
|
|
6
6
|
import { shell_segments } from './shell-segments'
|
|
7
7
|
import { tail_commands } from './tail-commands'
|
|
8
8
|
|
|
9
|
-
// The one generic rule that turns a declared firing point into a delivered guard
|
|
9
|
+
// The one generic rule that turns a declared firing point into a delivered guard.
|
|
10
10
|
// `oracle-firing.ts` records, per oracle, the action that must consult it first; this generates a
|
|
11
11
|
// `DeliveredRule` for each such oracle — refused when the run performs the governed action without
|
|
12
12
|
// having run the oracle's command earlier, stood down once it has.
|
|
13
13
|
//
|
|
14
14
|
// **It is `issue-scout`'s shape, generalized.** Each generated row refuses until its
|
|
15
|
-
// `already_satisfied` stand-down reads the command off the tail — refuse the governed call, hand back
|
|
16
|
-
// stand down once that command is on the tail. What `issue-scout`
|
|
17
|
-
//
|
|
15
|
+
// `already_satisfied` stand-down reads the command off the tail — refuse the governed call, hand back
|
|
16
|
+
// the command, stand down once that command is on the tail. What `issue-scout` hand-wrote per oracle,
|
|
17
|
+
// this reads from the registry: the refusal is assembled from the oracle's decision, command,
|
|
18
18
|
// answer vocabulary and single source, so no oracle carries a hand-written refusal of its own. **No new
|
|
19
19
|
// delivery path** — the rows join `DELIVERED_RULES` and fire through the same `create_transcript_guard`
|
|
20
20
|
// shell every other row uses.
|
|
@@ -71,7 +71,7 @@ function row_for(oracle: Oracle, firing_point: FiringPoint): DeliveredRule {
|
|
|
71
71
|
|
|
72
72
|
// One row per oracle that declared a firing point, in registry order. Spread into `DELIVERED_RULES`
|
|
73
73
|
// after the filing rows, so a firing point that overlaps a filing (`issue:lint`) delivers on the
|
|
74
|
-
// reissue rather than ahead of `
|
|
74
|
+
// reissue rather than ahead of `filing-cap`.
|
|
75
75
|
const ROWS: ReadonlyArray<DeliveredRule> = oracle_firing
|
|
76
76
|
.firing_oracles()
|
|
77
77
|
.map(({ oracle, firing_point }) => row_for(oracle, firing_point))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { decision_oracle } from './decision-oracle'
|
|
2
2
|
import { shell_segments } from './shell-segments'
|
|
3
3
|
|
|
4
|
-
// The firing-point declaration every decision oracle owes
|
|
4
|
+
// The firing-point declaration every decision oracle owes. An oracle records a
|
|
5
5
|
// *decision*, but nothing on the oracle entry says which action must consult it first — so the 32
|
|
6
6
|
// oracles have a command each and a firing point almost never. This module is the missing half: for
|
|
7
7
|
// every oracle name, either the governed action (a `FiringPoint`, matched as a Bash command) or the
|
|
@@ -32,8 +32,8 @@ function is_package_add(command: string): boolean {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// The firing point wired — the oracle whose governed call can be named without guessing: the package
|
|
35
|
-
// add. The Issue filing
|
|
36
|
-
//
|
|
35
|
+
// add. The Issue filing needs no `issue:lint` point, because `josh issue:file` runs the lint itself.
|
|
36
|
+
// The rest declare why none can be named, so the unenforced oracles are
|
|
37
37
|
// visible rather than silently missing.
|
|
38
38
|
const FIRING: ReadonlyMap<string, FiringPoint> = new Map([
|
|
39
39
|
[
|
|
@@ -49,7 +49,7 @@ const FIRING: ReadonlyMap<string, FiringPoint> = new Map([
|
|
|
49
49
|
// oracles already gated or sequenced elsewhere. `PHASE` — the governed act is a run phase, not one
|
|
50
50
|
// shell call. `READ` — it answers a status question and governs no action of its own. `SELF` — the
|
|
51
51
|
// command is itself the act, with nothing earlier to gate. A guard for any of these would fire on the
|
|
52
|
-
// wrong turn or double-gate a call another rule already claims; `release:scope`
|
|
52
|
+
// wrong turn or double-gate a call another rule already claims; `release:scope`
|
|
53
53
|
// is the one that *trails* rather than gates — it reads state that only exists after the merge.
|
|
54
54
|
const PHASE =
|
|
55
55
|
'the act it governs is a phase of a run, not a single shell call a trigger can anchor on'
|
|
@@ -60,7 +60,7 @@ const LATEST_SCOPE_REASON =
|
|
|
60
60
|
'the run it governs (`pnpm josh latest`) is already gated at its point of use by the latest-gate; ' +
|
|
61
61
|
'a firing here would double-gate it'
|
|
62
62
|
// `josh issue:file` runs the scout, the lint and `epic:bundle` itself, and a filing made any other way
|
|
63
|
-
// is refused by the `direct-filing` row
|
|
63
|
+
// is refused by the `direct-filing` row — so none of the three has a call left
|
|
64
64
|
// to gate before.
|
|
65
65
|
const FILING_STEP_REASON =
|
|
66
66
|
'`pnpm josh issue:file` runs it as one of its filing steps, and a direct filing is refused by the ' +
|
|
@@ -83,10 +83,7 @@ const NOT_NAMED: ReadonlyMap<string, string> = new Map([
|
|
|
83
83
|
['epic:bundle', FILING_STEP_REASON],
|
|
84
84
|
['issue:scout', FILING_STEP_REASON],
|
|
85
85
|
['issue:lint', FILING_STEP_REASON],
|
|
86
|
-
[
|
|
87
|
-
'issue:fold',
|
|
88
|
-
'the second filing it governs is already gated by the `issue-fold` delivered rule',
|
|
89
|
-
],
|
|
86
|
+
['issue:fold', '`issue:file` asks the fold question itself on the second filing it governs'],
|
|
90
87
|
['cases', READ],
|
|
91
88
|
['issue:state', READ],
|
|
92
89
|
['run:cut:resume', SELF],
|
|
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { decision_oracle } from './decision-oracle'
|
|
4
4
|
import { oracle_firing } from './oracle-firing'
|
|
5
5
|
|
|
6
|
-
// `josh oracle:list` — print the decision oracles enumeration
|
|
6
|
+
// `josh oracle:list` — print the decision oracles enumeration.
|
|
7
7
|
//
|
|
8
8
|
// A command rather than a paragraph: the criterion is `prompts/collaboration-workflow/residency.md`
|
|
9
9
|
// → question 0, and the list is what it points at. Adding an oracle here is the whole action;
|
|
@@ -18,7 +18,7 @@ function pad_field(label: string): string {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
// The firing point an oracle governs, or the reason none is named — one line either way, so `oracle:list`
|
|
21
|
-
// shows at a glance which oracles a guard enforces and which stay visibly unenforced
|
|
21
|
+
// shows at a glance which oracles a guard enforces and which stay visibly unenforced.
|
|
22
22
|
function firing_line(oracle: (typeof decision_oracle.DECISION_ORACLES)[0]): string {
|
|
23
23
|
const declaration = oracle_firing.declaration_for(oracle.name)
|
|
24
24
|
|
|
@@ -3,12 +3,12 @@ import { direct_pr_create } from './direct-pr-create'
|
|
|
3
3
|
import { index_guard } from './index-guard'
|
|
4
4
|
import { protected_files } from './protected-files'
|
|
5
5
|
|
|
6
|
-
// The three rows that close the deny-list bypasses
|
|
6
|
+
// The three rows that close the deny-list bypasses, gathered so
|
|
7
7
|
// `delivered-rules.ts` spreads one entry. Each reads argv or a file path rather than a glob: an index
|
|
8
8
|
// mutation in any git spelling, a recursive forced `rm` or a destructive `gh` call, and a Read of
|
|
9
9
|
// `.env` or an edit of a consumer's `.claude/settings.json`. Their triggers are disjoint from every
|
|
10
10
|
// other row's — `git restore` is split with `worktree-mutation` by `--staged` alone. The fourth row,
|
|
11
|
-
// `direct-pr-create
|
|
11
|
+
// `direct-pr-create`, closes the same kind of gap for `gh pr create`, which
|
|
12
12
|
// the deny list never listed: it claims `gh pr create` and a `gh api` write to the pulls collection.
|
|
13
13
|
const ROWS = [
|
|
14
14
|
index_guard.ROW,
|