@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
|
@@ -6,18 +6,16 @@ import { capped_output } from './capped-print'
|
|
|
6
6
|
import { document_section } from './document-section'
|
|
7
7
|
import { entry_read_set } from './entry-read-set'
|
|
8
8
|
|
|
9
|
-
// `josh doc:section` — print one section of a markdown document
|
|
9
|
+
// `josh doc:section` — print one section of a markdown document.
|
|
10
10
|
//
|
|
11
|
-
// **It exists because the documents
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// starts, before anything has been implemented.
|
|
11
|
+
// **It exists because the documents cite each other by section.** `` `backlogrun-progress.md` →
|
|
12
|
+
// "The hand-off" `` names one section; opening `backlogrun-progress.md` costs far more. Every entry
|
|
13
|
+
// point would pay that difference at the moment it starts, before anything has been implemented.
|
|
15
14
|
//
|
|
16
15
|
// **What it is not is a summary.** The section is printed verbatim, headings and all, so a run that
|
|
17
16
|
// reads a section has read the same words a run that opened the file would have. Nothing is deferred
|
|
18
17
|
// and nothing is condensed — the extent of the read changes, not its content, which is why this is
|
|
19
|
-
// not
|
|
20
|
-
// never firing.
|
|
18
|
+
// not a "read it later" scheme, which never fires.
|
|
21
19
|
//
|
|
22
20
|
// **A heading that does not resolve is a refusal, not an empty answer.** A pointer whose target was
|
|
23
21
|
// renamed would otherwise print nothing and read as a section with nothing in it — the one outcome
|
|
@@ -36,7 +34,7 @@ const USAGE = 'Usage: josh doc:section <file.md> "<heading>"'
|
|
|
36
34
|
// **Every branch resolves against `root`, including the first.** Left relative to the process's own
|
|
37
35
|
// directory, a bare name that happened to exist beside the caller would beat the document under
|
|
38
36
|
// `root` and print a section of the wrong file — silently, which is the failure this command exists
|
|
39
|
-
// to refuse
|
|
37
|
+
// to refuse.
|
|
40
38
|
function resolve_document(name: string, root: string = process.cwd()): string {
|
|
41
39
|
const named = path.resolve(root, name)
|
|
42
40
|
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
// Reading one **section** of a markdown document, because a section is the unit these documents
|
|
2
|
-
// cross-reference each other in
|
|
2
|
+
// cross-reference each other in.
|
|
3
3
|
//
|
|
4
|
-
// **The reference form
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// file, so a pointer at 249 lines was costing 2,121. `backlogrun.md` and its point-of-use phase
|
|
8
|
-
// documents are opened for many such references and are among the largest items an entry reads.
|
|
4
|
+
// **The reference form is a section reference.** Every workflow document points at another one as
|
|
5
|
+
// `` `backlogrun-progress.md` → "The hand-off" `` — a file *and* a heading. A reader with no way to
|
|
6
|
+
// fetch a heading has one move left, which is to open the whole file.
|
|
9
7
|
//
|
|
10
8
|
// **Nothing here defers a read.** The section is fetched in the same turn, in the main line, by the
|
|
11
|
-
// run that has to obey it — what changes is the extent of the fetch, never whether it happens.
|
|
12
|
-
// is
|
|
13
|
-
// moved to "read it later" is a rule that measurably never fires, and this moves nothing to later.
|
|
9
|
+
// run that has to obey it — what changes is the extent of the fetch, never whether it happens. A rule
|
|
10
|
+
// moved to "read it later" is a rule that never fires, and this moves nothing to later.
|
|
14
11
|
|
|
15
12
|
import { file_reader } from '#scripts/lib/read-file'
|
|
16
13
|
import { document_scan } from './document-scan'
|
|
@@ -54,8 +51,7 @@ function to_heading(line: string, index: number): Heading | undefined {
|
|
|
54
51
|
if (groups === undefined) return undefined
|
|
55
52
|
|
|
56
53
|
// Destructured rather than read as properties: `noPropertyAccessFromIndexSignature` refuses
|
|
57
|
-
// `groups.title`.
|
|
58
|
-
// `dot-notation` fix that rewrote it back — so this is a choice now rather than the only spelling.
|
|
54
|
+
// `groups.title`.
|
|
59
55
|
const { hashes = '', title = '' } = groups
|
|
60
56
|
|
|
61
57
|
return { level: hashes.length, title: title.trim(), line: index }
|
|
@@ -109,7 +105,7 @@ function line_of(starts: ReadonlyArray<number>, offset: number): number {
|
|
|
109
105
|
return starts.filter((start) => start <= offset).length
|
|
110
106
|
}
|
|
111
107
|
|
|
112
|
-
// **A bold label is an anchor too
|
|
108
|
+
// **A bold label is an anchor too**. The documents cite
|
|
113
109
|
// `- **Output language follows …**` exactly as they cite a heading, and the reference tests accepted
|
|
114
110
|
// both while this reader found only headings — so a green suite promised a section the command then
|
|
115
111
|
// refused. A label may wrap across lines, so the scan runs over the whole text, not line by line.
|
|
@@ -4,8 +4,7 @@ import path from 'node:path'
|
|
|
4
4
|
import { fileURLToPath } from 'node:url'
|
|
5
5
|
import { document_section } from './document-section'
|
|
6
6
|
|
|
7
|
-
// `josh edit:files <plan-path>` — apply several content-addressed edits in one call
|
|
8
|
-
// (joshuafolkken/kit#2366).
|
|
7
|
+
// `josh edit:files <plan-path>` — apply several content-addressed edits in one call.
|
|
9
8
|
//
|
|
10
9
|
// **This is the write-side counterpart of `read:files`, and it reverses what kit#2202 rejected.**
|
|
11
10
|
// kit#2202 folded the pre-edit *reads* into one call and left the edits to native multiple `Edit`
|
|
@@ -25,12 +24,12 @@ import { document_section } from './document-section'
|
|
|
25
24
|
// order against the running text; if any of them fails to match, that file is left exactly as it was
|
|
26
25
|
// and its failures are named. So a partial plan never leaves a file half-edited.
|
|
27
26
|
//
|
|
28
|
-
// **Only independent edits are folded
|
|
27
|
+
// **Only independent edits are folded.** An edit whose original range overlaps
|
|
29
28
|
// an earlier edit's of the same file, or whose match count that earlier edit changed, depends on it — it
|
|
30
29
|
// addresses text that edit rewrote, removed or duplicated — and is refused as `dependent`. Such an edit is
|
|
31
30
|
// issued on its own after the batch, so a fold never hides an ordering the author did not see.
|
|
32
31
|
//
|
|
33
|
-
// **`-` reads the plan from standard input
|
|
32
|
+
// **`-` reads the plan from standard input**, so a lane child passes its edits
|
|
34
33
|
// in the one call as a quoted heredoc (`pnpm josh edit:files - <<'EDITS'`) instead of writing a plan file
|
|
35
34
|
// first — the quoted delimiter expands nothing, and the call carries the old/new pairs an `Edit` would.
|
|
36
35
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// The byte ceiling on what each workflow entry reads before it starts — the primary budget, a
|
|
2
|
-
// ratchet like the per-document one
|
|
2
|
+
// ratchet like the per-document one.
|
|
3
3
|
//
|
|
4
4
|
// **The per-document ceiling was a proxy for a run's cost, not the cost.** A run does not pay "one
|
|
5
5
|
// document's size"; it pays the total its entry reads — the mandated skill files, the sections they
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// documents no entry reads (`document-reachability.ts` draws the line). A document an entry reads is
|
|
11
11
|
// held by the entry total and carries no per-document ceiling, so neither budget holds it twice.
|
|
12
12
|
//
|
|
13
|
-
// THE CEILING IS BLOCK-QUANTIZED, exactly as the per-document one is
|
|
13
|
+
// THE CEILING IS BLOCK-QUANTIZED, exactly as the per-document one is: an
|
|
14
14
|
// entry total is one number, so recording its raw size would make every lane that nudges a covered
|
|
15
15
|
// document bump this shared line. The recorded ceiling is the smallest `BLOCK_BYTES` multiple at or
|
|
16
16
|
// above the measured total, so growth within a block needs no edit and a crossing bumps to the same
|
|
@@ -44,74 +44,12 @@ interface EntryBudget {
|
|
|
44
44
|
// size. Names exactly the entries `known_entries` offers: the test fails on a stale entry and on an
|
|
45
45
|
// entry with no row, so the definition cannot rot as entries are added or removed.
|
|
46
46
|
const ENTRY_READ_BUDGET: ReadonlyArray<EntryBudget> = [
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// crossed a block downward, so the recorded ceilings drop to the block multiples the stale-ratchet
|
|
54
|
-
// message named rather than staying loose above the reduction. `kickoff` and the lane child rose one
|
|
55
|
-
// block again in joshuafolkken/kit#2312 when `pre-gate-cut.md` recorded the resume-side cost the
|
|
56
|
-
// conditional cut is built on; the other entries stayed within their block. `backlogrun` rose one
|
|
57
|
-
// block in joshuafolkken/kit#2317 when `backlogrun-child.md`'s outage section recorded the
|
|
58
|
-
// session-resume re-dispatch and the outage-fold window.
|
|
59
|
-
// Raised in joshuafolkken/kit#2328 when `retrospective.md` joined the point-of-use set and `SKILL.md`
|
|
60
|
-
// grew by `retrospective.md`: every entry that reads `SKILL.md` discovers the retrospective document, so its ~5KB
|
|
61
|
-
// and the new section crossed a block for each. The lane child is exempt — it never runs the
|
|
62
|
-
// retrospective (`run:step` answers `stop` for a child at the stop position), so it skips both.
|
|
63
|
-
// joshuafolkken/kit#2335 recorded the drain-time firing with the operational detail in
|
|
64
|
-
// `retrospective.md` (which the lane child skips) and a one-line pointer in `backlogrun-steps.md`, so
|
|
65
|
-
// every entry stayed within its block rather than climbing back to a pre-#2294 ceiling the downward
|
|
66
|
-
// ratchet holds shut. joshuafolkken/kit#2342 added the `--summary` close to `retrospective.md` in a
|
|
67
|
-
// single sentence, kept short so every entry that reads it stays within its block.
|
|
68
|
-
// Lowered for the lane child in joshuafolkken/kit#2357 — a downward move on this ratchet — when
|
|
69
|
-
// `backlogrun-steps.md` left the child's point-of-use set: the child never opened the scheduler's step
|
|
70
|
-
// list, so its ~48KB read crossed a block downward and the recorded ceiling drops to the block multiple
|
|
71
|
-
// the stale-ratchet message named. The other entries still read it, so their rows hold.
|
|
72
|
-
// joshuafolkken/kit#2345 added the `implementation-unit` delegation row (full fan-out procedure in
|
|
73
|
-
// `docs/josh-commands-backlog.md` → "`josh fanout`"); `delegation.md` gained only a one-clause mention and a
|
|
74
|
-
// pointer, folded into the existing enumeration and offset by tightening `delegation.md` prose, so every entry
|
|
75
|
-
// stayed within its block (kickoff has no block of headroom — its pre-#2294 ceiling is the next
|
|
76
|
-
// multiple, which the downward ratchet holds shut).
|
|
77
|
-
// joshuafolkken/kit#2353 wired the watcher-guard note into `backlogrun-progress.md` (read by the three
|
|
78
|
-
// planning entries): kickoff has no headroom, so the addition was offset by tightening that file's
|
|
79
|
-
// heartbeat prose, keeping every entry within its existing block.
|
|
80
|
-
// joshuafolkken/kit#2762 moved the rationale of five point-of-use documents to
|
|
81
|
-
// `docs/maintainers/*-rationale.md`, and the ratchet holds the reduction. joshuafolkken/kit#2895 did
|
|
82
|
-
// the same for eight more, lowering fullrun, halfrun and backlogrun one block each.
|
|
83
|
-
// joshuafolkken/kit#2998 split the command reference, so every reference to an automation command
|
|
84
|
-
// now names `josh-commands-automation.md`; the longer path tipped backlogrun one block over.
|
|
85
|
-
// joshuafolkken/kit#2994 moved `CLAUDE.md`'s explanations to `docs/maintainers/claude-md-history.md`,
|
|
86
|
-
// lowering backlogrun one block; kickoff's reduction was offset by joshuafolkken/kit#3024's longer
|
|
87
|
-
// `wip-cap.md`, so its ceiling stays.
|
|
88
|
-
// joshuafolkken/kit#3023 added the `prrun` keyword to `SKILL.md` and `CLAUDE.md`, tipping backlogrun
|
|
89
|
-
// one block over; `prrun` reads `fullrun`'s set plus its own short manifest.
|
|
90
|
-
// Lowered in joshuafolkken/kit#3078 — a correction of an over-count, not a trim: every entry was
|
|
91
|
-
// charged for every global point-of-use document, so `kickoff` paid for `followup.md` and the
|
|
92
|
-
// `backlogrun-*` phase documents it never opens. Each total now counts only what its path reaches.
|
|
93
|
-
// joshuafolkken/kit#3077 trimmed non-resident rule bodies from `CLAUDE.md`, lowering fullrun, prrun
|
|
94
|
-
// and backlogrun one block each.
|
|
95
|
-
// Lowered in joshuafolkken/kit#3172: the heartbeat left `backlogrun-progress.md` for its own
|
|
96
|
-
// `progress-watcher.md`, and `pre-gate-cut.md` became the lane child's alone, so fullrun, halfrun
|
|
97
|
-
// and prrun stop paying for ~50KB of batch and lane procedure; backlogrun lost the moved prose.
|
|
98
|
-
// Lowered in joshuafolkken/kit#3174: `SKILL.md` was cut to a manifest (~21KB → ~11KB) and the entry
|
|
99
|
-
// sequence `fullrun`, `halfrun` and `prrun` shared moved into one `entry-sequence.md`.
|
|
100
|
-
// Lowered in joshuafolkken/kit#3175: the loop became the driver's hand-backs, the supervisor and
|
|
101
|
-
// provider prose moved to `docs/josh-commands-automation.md`, and the failure-only sections moved to
|
|
102
|
-
// `backlogrun-recovery.md`, which the parent's reach still charges whole.
|
|
103
|
-
// joshuafolkken/kit#3171 cut `CLAUDE.md` to triggers and pointers (~12 KB), lowering every entry.
|
|
104
|
-
// joshuafolkken/kit#3256 moved `CLAUDE.md`'s residency prose to `residency.md`, lowering kickoff and
|
|
105
|
-
// halfrun one block each.
|
|
106
|
-
{ entry: 'kickoff', bytes: 40_960 },
|
|
107
|
-
// Raised in joshuafolkken/kit#3177: #3173, #3181 and #3183 merged in parallel and together tipped
|
|
108
|
-
// fullrun 12 bytes over its block; none of #3177's documents are in its read set.
|
|
109
|
-
// Lowered back in joshuafolkken/kit#3180: the history and lint-settled proofs left its read set.
|
|
110
|
-
{ entry: 'fullrun', bytes: 57_344 },
|
|
111
|
-
{ entry: 'halfrun', bytes: 53_248 },
|
|
112
|
-
{ entry: 'prrun', bytes: 61_440 },
|
|
113
|
-
{ entry: 'backlogrun', bytes: 176_128 },
|
|
114
|
-
{ entry: LANE_CHILD, bytes: 57_344 },
|
|
47
|
+
{ entry: 'kickoff', bytes: 36_864 },
|
|
48
|
+
{ entry: 'fullrun', bytes: 53_248 },
|
|
49
|
+
{ entry: 'halfrun', bytes: 49_152 },
|
|
50
|
+
{ entry: 'prrun', bytes: 57_344 },
|
|
51
|
+
{ entry: 'backlogrun', bytes: 90_112 },
|
|
52
|
+
{ entry: LANE_CHILD, bytes: 49_152 },
|
|
115
53
|
]
|
|
116
54
|
|
|
117
55
|
function byte_size(root: string, relative_path: string): number {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
// What a workflow entry point reads before it does anything, and what that costs
|
|
2
|
-
// (joshuafolkken/kit#1776).
|
|
1
|
+
// What a workflow entry point reads before it does anything, and what that costs.
|
|
3
2
|
//
|
|
4
3
|
// **The entry read was the largest fixed cost a run had, and nothing measured it.** Measured on the
|
|
5
4
|
// `queue` parent of 2026-09-11: 159,323 billed input tokens per request at 16 requests, with the
|
|
@@ -28,13 +27,15 @@ const SKILL_DIRECTORY = path.join('.claude', 'skills', 'workflow-commands')
|
|
|
28
27
|
const SKILL_FILE = 'SKILL.md'
|
|
29
28
|
const TABLE_SECTION = '1. Which file to read'
|
|
30
29
|
const NOTHING = 0
|
|
30
|
+
// How `read:set` names the union a point-of-use document is charged at: `file → "A" + "B"`.
|
|
31
|
+
const HEADING_JOINER = '" + "'
|
|
31
32
|
|
|
32
33
|
// The point-of-use classification — which documents an entry names but reads only at a later step —
|
|
33
|
-
// is its own concern,
|
|
34
|
+
// is its own concern, held in `read-set-point-of-use.ts`. This file
|
|
34
35
|
// reads that classification to drop those files from the entry read and to cost them separately.
|
|
35
36
|
|
|
36
37
|
// The fetch cap a `cat` truncates at, and the harness default it falls back to, are read from
|
|
37
|
-
// `bash-output-cap.ts
|
|
38
|
+
// `bash-output-cap.ts`.
|
|
38
39
|
// `section()` hands back a `##` heading's `###` children with it, so the table parse has to say
|
|
39
40
|
// where it stops — see `table_rows`.
|
|
40
41
|
const SUBSECTION_PREFIX = '### '
|
|
@@ -120,12 +121,6 @@ function unique(names: ReadonlyArray<string>): Array<string> {
|
|
|
120
121
|
|
|
121
122
|
// **Scanned with `exec` rather than collected from `matchAll`.** A fresh `RegExp` rather than the
|
|
122
123
|
// shared one, so the caller's `lastIndex` is never carried between two scans of different documents.
|
|
123
|
-
//
|
|
124
|
-
// This spelling used to be forced rather than chosen: `unicorn/prefer-iterator-to-array` rejected
|
|
125
|
-
// the spread while the `--fix` for a `for…of` push loop put the spread straight back, so neither
|
|
126
|
-
// form was green. joshuafolkken/kit#1783 removed that contradiction — the spread is accepted now —
|
|
127
|
-
// and rewriting this helper was left outside that Issue's scope, so the loop stands on the
|
|
128
|
-
// `lastIndex` isolation above alone.
|
|
129
124
|
function all_matches(text: string, pattern: RegExp): Array<RegExpExecArray> {
|
|
130
125
|
const scanner = new RegExp(pattern.source, pattern.flags)
|
|
131
126
|
const found: Array<RegExpExecArray> = []
|
|
@@ -153,8 +148,7 @@ function columns_of(line: string): { entry: string; files: string } | undefined
|
|
|
153
148
|
if (groups === undefined) return undefined
|
|
154
149
|
|
|
155
150
|
// Destructured rather than read as properties: `noPropertyAccessFromIndexSignature` refuses
|
|
156
|
-
// `groups.entry`.
|
|
157
|
-
// `dot-notation` fix that rewrote it back — so this is a choice now rather than the only spelling.
|
|
151
|
+
// `groups.entry`.
|
|
158
152
|
const { entry = '', files = '' } = groups
|
|
159
153
|
|
|
160
154
|
return { entry, files }
|
|
@@ -181,11 +175,9 @@ function push_row(rows: Map<string, ReadonlyArray<string>>, line: string): void
|
|
|
181
175
|
// section: every other table in the document would otherwise contribute rows of its own.
|
|
182
176
|
//
|
|
183
177
|
// **And it stops at the section's first subsection.** `section()` returns a `##` heading's `###`
|
|
184
|
-
// children with it, and
|
|
185
|
-
//
|
|
186
|
-
//
|
|
187
|
-
// to a trigger cell would have registered them as entry points. The stop makes that explicit rather
|
|
188
|
-
// than incidental.
|
|
178
|
+
// children with it, and one of them holds a second two-column table — the point-of-use triggers.
|
|
179
|
+
// Its rows would parse as entry rows, and one edit adding a document name to a trigger cell would
|
|
180
|
+
// register them as entry points. The stop makes that explicit rather than incidental.
|
|
189
181
|
function table_rows(root: string): Map<string, ReadonlyArray<string>> {
|
|
190
182
|
const rows = new Map<string, ReadonlyArray<string>>()
|
|
191
183
|
const found = document_section.section(read_document(root, SKILL_FILE), TABLE_SECTION)
|
|
@@ -226,7 +218,7 @@ function is_sibling_document(root: string, name: string): boolean {
|
|
|
226
218
|
// resident on every request already, and one at a `prompts/` topic names a file reached on its own
|
|
227
219
|
// step rather than at the entry.
|
|
228
220
|
//
|
|
229
|
-
// **A pointer into a point-of-use document is not an entry cost either
|
|
221
|
+
// **A pointer into a point-of-use document is not an entry cost either**.
|
|
230
222
|
// Counting one would put `followup.md` straight back into the entry figure under another name, when
|
|
231
223
|
// the whole point is that the run reaches it half an hour later — and then only by fetching it whole
|
|
232
224
|
// at that moment, which is a cost of that step rather than of the entry.
|
|
@@ -327,38 +319,62 @@ function file_costs(root: string, names: ReadonlyArray<string>): Array<FileCost>
|
|
|
327
319
|
return names.map((file) => ({ file, cost: cost_of(read_document(root, file)) }))
|
|
328
320
|
}
|
|
329
321
|
|
|
322
|
+
// **A point-of-use document is charged at the union of the sections its entry's path names, and whole
|
|
323
|
+
// only where nothing names a section**. `SKILL.md` → §1 makes a pointer
|
|
324
|
+
// written `` `X.md` → "Heading" `` a read of that section alone, so a route table whose every row names
|
|
325
|
+
// one section reads those sections, never the file — and charging the file anyway made a router that
|
|
326
|
+
// trims its routes measure exactly as heavy as one that reads everything.
|
|
330
327
|
function point_of_use_cost(
|
|
331
328
|
root: string,
|
|
332
329
|
file: string,
|
|
333
330
|
references: ReadonlyArray<SectionReference>,
|
|
334
331
|
): SectionCost {
|
|
335
|
-
const
|
|
332
|
+
const markdown = read_document(root, file)
|
|
333
|
+
const headings = unique(references.filter((one) => one.file === file).map((one) => one.heading))
|
|
336
334
|
|
|
337
|
-
if (
|
|
335
|
+
if (headings.length === NOTHING) {
|
|
336
|
+
return { file, heading: '', cost: cost_of(markdown), is_resolved: true }
|
|
337
|
+
}
|
|
338
338
|
|
|
339
|
-
return {
|
|
339
|
+
return {
|
|
340
|
+
file,
|
|
341
|
+
heading: headings.join(HEADING_JOINER),
|
|
342
|
+
cost: scoped_file_cost(markdown, headings),
|
|
343
|
+
is_resolved: headings.every(
|
|
344
|
+
(heading) => document_section.section(markdown, heading) !== undefined,
|
|
345
|
+
),
|
|
346
|
+
}
|
|
340
347
|
}
|
|
341
348
|
|
|
342
|
-
// **What an entry's path names: its own manifests, and the §1 trigger rows that name the entry
|
|
343
|
-
//
|
|
349
|
+
// **What an entry's path names: its own manifests, and the §1 trigger rows that name the entry**.
|
|
350
|
+
// `SKILL.md`'s other text is left out for the reason `sections_for` gives —
|
|
344
351
|
// §2 names every document, so counting it would charge a `kickoff` for `followup.md`. One hop only:
|
|
345
352
|
// the point-of-use documents cite one another, and following them would reach the whole set again.
|
|
346
|
-
|
|
347
|
-
function cited_by(
|
|
348
|
-
root: string,
|
|
349
|
-
entry: string,
|
|
350
|
-
table_text: string,
|
|
351
|
-
also: ReadonlySet<string>,
|
|
352
|
-
): Set<string> {
|
|
353
|
+
function path_texts(root: string, entry: string, table_text: string): Array<string> {
|
|
353
354
|
const manifests = files_for(root, entry).filter((file) => file !== SKILL_FILE)
|
|
354
355
|
const rows = table_text
|
|
355
356
|
.split('\n')
|
|
356
357
|
.filter((line) => line.startsWith('|') && line.includes(`\`${entry}\``))
|
|
357
|
-
const texts = [...manifests.map((file) => read_document(root, file)), ...rows]
|
|
358
358
|
|
|
359
|
-
return
|
|
359
|
+
return [...manifests.map((file) => read_document(root, file)), ...rows]
|
|
360
360
|
}
|
|
361
361
|
|
|
362
|
+
// The sections a point-of-use document is read by: every pointer in §1's table, and every one the
|
|
363
|
+
// entry's own manifests carry — the route a run follows into that document.
|
|
364
|
+
function point_of_use_references(
|
|
365
|
+
root: string,
|
|
366
|
+
entry: string,
|
|
367
|
+
table_text: string,
|
|
368
|
+
): Array<SectionReference> {
|
|
369
|
+
const manifests = files_for(root, entry).filter((file) => file !== SKILL_FILE)
|
|
370
|
+
const texts = [table_text, ...manifests.map((file) => read_document(root, file))]
|
|
371
|
+
|
|
372
|
+
return texts.flatMap((text) =>
|
|
373
|
+
all_matches(text, SECTION_REFERENCE).map((match) => to_reference(match)),
|
|
374
|
+
)
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// `also` is what a role reaches beside its base entry's path (`read-set-trim.ts`).
|
|
362
378
|
function point_of_use_costs(
|
|
363
379
|
root: string,
|
|
364
380
|
entry: string,
|
|
@@ -366,8 +382,9 @@ function point_of_use_costs(
|
|
|
366
382
|
): Array<SectionCost> {
|
|
367
383
|
const table_text =
|
|
368
384
|
document_section.section(read_document(root, SKILL_FILE), TABLE_SECTION)?.text ?? ''
|
|
369
|
-
const references =
|
|
370
|
-
const
|
|
385
|
+
const references = point_of_use_references(root, entry, table_text)
|
|
386
|
+
const named = path_texts(root, entry, table_text).flatMap((text) => names_in(text))
|
|
387
|
+
const cited = new Set([...also, ...named])
|
|
371
388
|
|
|
372
389
|
return point_of_use_files(entry, cited).map((file) => point_of_use_cost(root, file, references))
|
|
373
390
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// What a dispatched lane child reads, and what that costs
|
|
1
|
+
// What a dispatched lane child reads, and what that costs.
|
|
2
2
|
//
|
|
3
3
|
// **A lane child is the largest fixed cost a `backlogrun` has.** Measured on the batch of
|
|
4
|
-
// 2026-09-13, the lane child sessions were 72% of the run's whole input
|
|
4
|
+
// 2026-09-13, the lane child sessions were 72% of the run's whole input,
|
|
5
5
|
// and each `claude -p fullrun #N` child read the `fullrun` entry set in full — around 227KB. Most of
|
|
6
6
|
// that is spent on procedure a leaf child never carries out: it dispatches no child of its own, opens
|
|
7
7
|
// no lane, runs no progress watcher and performs no hand-off, so the point-of-use documents that
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// **This models the child as a trimmed `fullrun`, derived rather than transcribed.** The set is the
|
|
11
11
|
// `fullrun` entry read with two subtractions — the `SKILL.md` sections a child never uses read at the
|
|
12
12
|
// section level, and the point-of-use documents a leaf never reaches dropped — applied by the shared
|
|
13
|
-
// `read-set-trim`, which the `backlogrun` parent trim uses too
|
|
13
|
+
// `read-set-trim`, which the `backlogrun` parent trim uses too.
|
|
14
14
|
|
|
15
15
|
import type { ReadSetCost } from './entry-read-set'
|
|
16
16
|
import { read_set_trim } from './read-set-trim'
|
|
@@ -22,7 +22,7 @@ const FULLRUN = 'fullrun'
|
|
|
22
22
|
// than in full. A child never edits these documents (§3), and its dispatch is already an explicit
|
|
23
23
|
// workflow invocation, so §0 cannot decide anything for it either. The other rules it never uses — the
|
|
24
24
|
// `into` target, delegation, the repository prefix, the scout, observation filing, the retrospective —
|
|
25
|
-
// are single rows of §2's table
|
|
25
|
+
// are single rows of §2's table, so no section of them is left to trim.
|
|
26
26
|
const UNUSED_SKILL_SECTIONS: ReadonlyArray<string> = [
|
|
27
27
|
'0. The rule that fires before any of them — explicit invocation',
|
|
28
28
|
'3. What stays resident, and what is read from here',
|
|
@@ -30,15 +30,15 @@ const UNUSED_SKILL_SECTIONS: ReadonlyArray<string> = [
|
|
|
30
30
|
|
|
31
31
|
// **The point-of-use documents a leaf child never reaches**: child dispatch, lane opening and the
|
|
32
32
|
// progress watcher / hand-off are the parent's, so their single-source documents are dropped from
|
|
33
|
-
// the child's read. **`latest-gate.md` is the parent's too
|
|
33
|
+
// the child's read. **`latest-gate.md` is the parent's too**: the dependency
|
|
34
34
|
// update runs once per session in the outermost run, never in a dispatched lane child (`latest:scope`
|
|
35
35
|
// answers `skip` in a lane via the lane guard), so the child never opens `latest-gate.md`. The gate documents
|
|
36
36
|
// (`chain-rule.md`, `background-commands.md`), `followup.md` and `backlogrun-park.md` stay — a child
|
|
37
37
|
// runs the gate, opens its PR, and may park on a decision, so it does reach every one of those.
|
|
38
|
-
// **`retrospective.md` is the parent's too
|
|
38
|
+
// **`retrospective.md` is the parent's too**: the end-of-run retrospective
|
|
39
39
|
// runs once at the batch's own end, never in a leaf child, so `run:step` answers `stop` for a child at
|
|
40
40
|
// the stop position and the child never opens it.
|
|
41
|
-
// **`backlogrun-steps.md` is the parent's too
|
|
41
|
+
// **`backlogrun-steps.md` is the parent's too**: it is the scheduler's step
|
|
42
42
|
// list — what one invocation approves, the named-issue order, the session-cut record, the loop and the
|
|
43
43
|
// once-per-session tail — none of which a leaf child performs. Every reference to it lives in a
|
|
44
44
|
// document the child never reads (`backlogrun.md`, `backlogrun-progress.md`, `retrospective.md`) or in a
|
|
@@ -46,7 +46,7 @@ const UNUSED_SKILL_SECTIONS: ReadonlyArray<string> = [
|
|
|
46
46
|
// that opens it. It was the child's single largest read — ~16,000 tokens read whole — charged for a
|
|
47
47
|
// document it never reaches, so dropping it is a correction of an over-count, not a loss of any rule the
|
|
48
48
|
// child needs. The parent still reads it in full.
|
|
49
|
-
// **`progress-watcher.md` is the parent's too
|
|
49
|
+
// **`progress-watcher.md` is the parent's too**: a dispatched child is refused
|
|
50
50
|
// a watcher by its `JOSH_LANE_CHILD` mark, so it never opens the watcher's document.
|
|
51
51
|
const SKIPPED_POINT_OF_USE: ReadonlySet<string> = new Set([
|
|
52
52
|
'backlogrun-child.md',
|
|
@@ -62,7 +62,7 @@ const SKIPPED_POINT_OF_USE: ReadonlySet<string> = new Set([
|
|
|
62
62
|
|
|
63
63
|
// **A child that parks reads `backlogrun-park.md`** (`SKILL.md` §1, "A lane child that parks"), a
|
|
64
64
|
// document a standalone `fullrun`'s path never names — so the child's reach adds it to its base
|
|
65
|
-
// entry's
|
|
65
|
+
// entry's. **`pre-gate-cut.md` is the child's alone**:
|
|
66
66
|
// only a lane child resumes or takes the pre-gate cut, so `fullrun.md` stopped naming it and the
|
|
67
67
|
// child's reach carries it instead.
|
|
68
68
|
const REACHED_POINT_OF_USE: ReadonlySet<string> = new Set(['backlogrun-park.md', 'pre-gate-cut.md'])
|
|
@@ -4,8 +4,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
4
4
|
import { bash_output_cap_reader } from './bash-output-cap'
|
|
5
5
|
import { document_section } from './document-section'
|
|
6
6
|
|
|
7
|
-
// `josh read:files <path> [<path> ...]` — read several files in one call
|
|
8
|
-
// (joshuafolkken/kit#2202).
|
|
7
|
+
// `josh read:files <path> [<path> ...]` — read several files in one call.
|
|
9
8
|
//
|
|
10
9
|
// **This is the mid-implementation counterpart of `run:prep`.** `run:prep` folds a run's pre-edit
|
|
11
10
|
// reads into one call at a *pre-determined* point (before implementing), and kit#2165 / kit#2162
|
|
@@ -5,14 +5,11 @@ import { entry_read_set, type ReadSetCost, type SectionCost } from './entry-read
|
|
|
5
5
|
import { lane_child_read_set } from './lane-child-read-set'
|
|
6
6
|
import { read_set_pricing } from './read-set-pricing'
|
|
7
7
|
|
|
8
|
-
// `josh read:set` — what this entry point reads before it starts, and what that costs
|
|
9
|
-
// (joshuafolkken/kit#1776).
|
|
8
|
+
// `josh read:set` — what this entry point reads before it starts, and what that costs.
|
|
10
9
|
//
|
|
11
|
-
// **The entry cost
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// transcript. This prints it per entry point, from the documents themselves, as often as anyone
|
|
15
|
-
// wants to ask.
|
|
10
|
+
// **The entry cost has a reading of its own.** `josh cost` measures a whole session and cannot say
|
|
11
|
+
// which part of it was the mandated read; this prints it per entry point, from the documents
|
|
12
|
+
// themselves, as often as anyone wants to ask.
|
|
16
13
|
//
|
|
17
14
|
// **Two figures under one definition, which is what makes a before and an after comparable.**
|
|
18
15
|
// `whole` is every file in the set read in full — what a run pays with no way to fetch a heading.
|
|
@@ -34,7 +31,7 @@ const DOLLAR_WIDTH = 7
|
|
|
34
31
|
const DOLLAR_DECIMALS = 2
|
|
35
32
|
// The premise the dollar column is read against: each figure is what that read costs *per run of this
|
|
36
33
|
// size*, because an entry-read token rides every request as cached context. Printed rather than
|
|
37
|
-
// assumed, so a reader checks the assumption instead of guessing it
|
|
34
|
+
// assumed, so a reader checks the assumption instead of guessing it.
|
|
38
35
|
const PREMISE = ` $ = cost per run, assuming a ${String(read_set_pricing.ASSUMED_REQUESTS)}-request run (each entry-read token re-read from cache per request)`
|
|
39
36
|
const USAGE = 'Usage: josh read:set [<entry>] [--json]'
|
|
40
37
|
const WHOLE_LABEL = 'whole — every referenced file read in full'
|
|
@@ -44,15 +41,15 @@ const SECTION_LABEL = '-- sections referenced out of the set --'
|
|
|
44
41
|
const POINT_OF_USE_LABEL = '-- read at the point of use, not at the entry --'
|
|
45
42
|
// **The dispatched lane child reads a trimmed `fullrun` set** — the point-of-use documents the parent
|
|
46
43
|
// owns are dropped and the entry-only `SKILL.md` sections are read section by section, so `total read`
|
|
47
|
-
// falls well below a normal `fullrun`'s
|
|
44
|
+
// falls well below a normal `fullrun`'s.
|
|
48
45
|
const LANE_CHILD_NOTE: ReadonlyArray<string> = [
|
|
49
46
|
' a dispatched lane child (`JOSH_LANE_CHILD`) reads this trimmed set:',
|
|
50
47
|
' - skips the point-of-use documents the parent owns — child dispatch, lane opening, the progress watcher and the hand-off',
|
|
51
48
|
' - omits SKILL.md §0/§3 — dispatch already authorized the run and a leaf child edits no rule',
|
|
52
49
|
]
|
|
53
50
|
// **The `backlogrun` parent reads a trimmed set of its own** — a scheduler that never implements, so
|
|
54
|
-
// the implementer-only `SKILL.md` sections are read section by section rather than whole
|
|
55
|
-
//
|
|
51
|
+
// the implementer-only `SKILL.md` sections are read section by section rather than whole.
|
|
52
|
+
// A *different* trim from the lane child's: the parent keeps §0, which is the
|
|
56
53
|
// scheduler's own, and drops no point-of-use document.
|
|
57
54
|
const BACKLOGRUN_PARENT_NOTE: ReadonlyArray<string> = [
|
|
58
55
|
' the backlogrun parent (scheduler) reads this trimmed set:',
|
|
@@ -70,7 +67,7 @@ function to_number(value: number): string {
|
|
|
70
67
|
|
|
71
68
|
// The per-run dollar cost of a row, from its token count. Priced by `read-set-pricing`, which reads
|
|
72
69
|
// `cost-pricing.ts`'s rates rather than carrying its own, so this column never becomes a second price
|
|
73
|
-
// list
|
|
70
|
+
// list.
|
|
74
71
|
function to_dollars(tokens: number): string {
|
|
75
72
|
return `$${read_set_pricing.dollars_per_run(tokens).toFixed(DOLLAR_DECIMALS)}`.padStart(
|
|
76
73
|
DOLLAR_WIDTH,
|
|
@@ -78,8 +75,8 @@ function to_dollars(tokens: number): string {
|
|
|
78
75
|
}
|
|
79
76
|
|
|
80
77
|
// The column is sized from the longest label in this report rather than from a constant: the section
|
|
81
|
-
// labels carry a file name *and* a heading, so a fixed width
|
|
82
|
-
// columns
|
|
78
|
+
// labels carry a file name *and* a heading, so a fixed width would push them past it and the `tok` /
|
|
79
|
+
// `B` columns would stop lining up with the file rows above.
|
|
83
80
|
function row(
|
|
84
81
|
label: string,
|
|
85
82
|
cost: { tokens: number; bytes: number },
|
|
@@ -92,7 +89,7 @@ function row(
|
|
|
92
89
|
// **The tool is printed per file rather than left to be judged, and it is `Read` on every row.** A
|
|
93
90
|
// file larger than the Bash output cap cannot be delivered by `cat` at all — what comes back is a
|
|
94
91
|
// middle-truncated preview, which is how one measured entry paid for the same five files twice
|
|
95
|
-
//
|
|
92
|
+
// — and a file under the cap is still fetched with `Read`, because the rule
|
|
96
93
|
// beneath the report is one `Read` per file rather than a size judgement made row by row. Printing
|
|
97
94
|
// `cat` as an option for the small rows would have the report contradict its own closing line the
|
|
98
95
|
// first time anyone raised `BASH_MAX_OUTPUT_LENGTH` past the smallest document in the set.
|
|
@@ -129,7 +126,7 @@ function labels_of(report: ReadSetCost): Array<string> {
|
|
|
129
126
|
|
|
130
127
|
// **The total the entry actually reads**: the scoped entry plus each point-of-use section (or whole
|
|
131
128
|
// file where no section is named). It is the figure a before/after compares — a lane
|
|
132
|
-
// child's set is smaller here, not in `scoped` alone
|
|
129
|
+
// child's set is smaller here, not in `scoped` alone.
|
|
133
130
|
function total_read(report: ReadSetCost): { tokens: number; bytes: number } {
|
|
134
131
|
return entry_read_set.total([report.scoped, ...report.point_of_use.map((one) => one.cost)])
|
|
135
132
|
}
|
|
@@ -230,10 +227,10 @@ function wanted_entries(argv: ReadonlyArray<string>, root: string): Array<string
|
|
|
230
227
|
return named.length > NOTHING ? named : known_entries(root)
|
|
231
228
|
}
|
|
232
229
|
|
|
233
|
-
// **An unrecognized keyword is refused, never reported on.** Left to fall through it
|
|
230
|
+
// **An unrecognized keyword is refused, never reported on.** Left to fall through it would produce a
|
|
234
231
|
// complete, plausible report — the skill file, the gate documents, `whole` equal to `scoped` and a
|
|
235
|
-
// saving of zero — and
|
|
236
|
-
//
|
|
232
|
+
// saving of zero — and exit 0, answering "nothing to save" instead of "no such entry" for a mistyped
|
|
233
|
+
// keyword. That is the silent wrong answer
|
|
237
234
|
// `doc:section` refuses for an unresolvable heading, and this is the same refusal.
|
|
238
235
|
function unknown_entries(wanted: ReadonlyArray<string>, root: string): Array<string> {
|
|
239
236
|
const known = known_entries(root)
|
|
@@ -2,7 +2,7 @@ import { cost_tokens } from '#scripts/cost-runtime/cost-tokens'
|
|
|
2
2
|
import { document_section, type Section } from './document-section'
|
|
3
3
|
|
|
4
4
|
// What a read costs, and the scoped union that charges one file's cited sections once — split out
|
|
5
|
-
// of `entry-read-set.ts` when it reached its line limit
|
|
5
|
+
// of `entry-read-set.ts` when it reached its line limit. `entry_read_set`
|
|
6
6
|
// re-exports `cost_of`, `total` and `Cost` under the names they always had, so the move changed no
|
|
7
7
|
// call site.
|
|
8
8
|
|
|
@@ -52,8 +52,8 @@ function charged_lines(markdown: string, headings: ReadonlyArray<string>): Set<n
|
|
|
52
52
|
// **The union's charged lines are split into contiguous runs, and each run is costed on its own
|
|
53
53
|
// natural text.** Joining non-adjacent lines with `\n` into one string fabricates a token boundary at
|
|
54
54
|
// every gap the union skipped, so the estimate could drift a token *above* the per-reference sum even
|
|
55
|
-
// with no real overlap — a false negative saving the measurement must never print
|
|
56
|
-
//
|
|
55
|
+
// with no real overlap — a false negative saving the measurement must never print.
|
|
56
|
+
// A run is a maximal stretch of consecutive charged lines, which is exactly
|
|
57
57
|
// the contiguous text a reader of that section actually reads, so summing the runs both mirrors the
|
|
58
58
|
// real read and keeps `scoped` at or below the per-reference sum by construction.
|
|
59
59
|
function extend_or_start(runs: Array<Array<number>>, index: number): void {
|
|
@@ -81,7 +81,7 @@ function run_text(lines: ReadonlyArray<string>, run: ReadonlyArray<number>): str
|
|
|
81
81
|
// unresolved headings each charged at the whole file, and a `##` section cited beside one of its own
|
|
82
82
|
// `###` children, which `section()` already returns inside the parent. Either one could push the
|
|
83
83
|
// scoped figure above the whole one and print a *negative* saving, which is the single direction this
|
|
84
|
-
// measurement must not be able to move
|
|
84
|
+
// measurement must not be able to move.
|
|
85
85
|
function scoped_file_cost(markdown: string, headings: ReadonlyArray<string>): Cost {
|
|
86
86
|
const charged = charged_lines(markdown, headings)
|
|
87
87
|
|