@joshuafolkken/kit 1.1240.0 → 1.1370.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/investigator.md +1 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/dependency-update/SKILL.md +5 -3
- package/.claude/skills/epic-commands/SKILL.md +82 -113
- package/.claude/skills/epic-commands/epic-bundle.md +38 -63
- package/.claude/skills/epic-commands/execution-waves.md +30 -51
- package/.claude/skills/verify-ui/SKILL.md +13 -20
- package/.claude/skills/workflow-commands/SKILL.md +10 -10
- package/.claude/skills/workflow-commands/background-commands.md +4 -4
- package/.claude/skills/workflow-commands/backlogrun-child.md +30 -105
- package/.claude/skills/workflow-commands/backlogrun-handoff-report.md +29 -0
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +45 -131
- package/.claude/skills/workflow-commands/backlogrun-park.md +36 -53
- package/.claude/skills/workflow-commands/backlogrun-progress.md +81 -331
- package/.claude/skills/workflow-commands/backlogrun-recovery.md +29 -83
- package/.claude/skills/workflow-commands/backlogrun-steps.md +105 -424
- package/.claude/skills/workflow-commands/backlogrun.md +50 -61
- package/.claude/skills/workflow-commands/chain-rule.md +36 -40
- package/.claude/skills/workflow-commands/entry-sequence.md +6 -6
- package/.claude/skills/workflow-commands/followup.md +19 -20
- package/.claude/skills/workflow-commands/fullrun-steps.md +23 -27
- package/.claude/skills/workflow-commands/fullrun.md +10 -10
- package/.claude/skills/workflow-commands/halfrun.md +9 -8
- package/.claude/skills/workflow-commands/into-target.md +12 -18
- package/.claude/skills/workflow-commands/issue-comments.md +11 -26
- package/.claude/skills/workflow-commands/kickoff.md +26 -16
- package/.claude/skills/workflow-commands/latest-gate.md +17 -28
- package/.claude/skills/workflow-commands/needs-human-review.md +13 -24
- package/.claude/skills/workflow-commands/observation-filing.md +37 -28
- package/.claude/skills/workflow-commands/observation-ledger.md +48 -38
- package/.claude/skills/workflow-commands/pre-gate-cut.md +9 -9
- package/.claude/skills/workflow-commands/prerequisite.md +23 -15
- package/.claude/skills/workflow-commands/progress-watcher.md +17 -11
- package/.claude/skills/workflow-commands/prrun.md +3 -3
- package/.claude/skills/workflow-commands/retrospective.md +13 -18
- package/.claude/skills/workflow-commands/split-assessment.md +6 -4
- package/.claude/skills/workflow-commands/target-repository.md +25 -28
- package/.claude/skills/workflow-commands/working-tree-hold.md +11 -17
- package/.gitattributes +2 -1
- package/.github/workflows/ci.yml +14 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +29 -47
- package/SECURITY.md +1 -1
- package/dist/CLAUDE.md +10 -61
- package/dist/commands/document-section-cli.js +42 -10
- package/dist/config-merge/index.js +11 -2
- package/dist/hooks/audit-provision.js +2 -2
- package/dist/hooks/batch-guard.js +7 -7
- package/dist/hooks/{chunk-KHGB5S3Y.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-4TZVB44A.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-XZYKEM6J.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-F3ELQ2AF.js → chunk-DZWZ3DKY.js} +4 -4
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-GPTFMK5E.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-ZQGD4GBY.js → chunk-KPM4YIIX.js} +8 -44
- package/dist/hooks/chunk-MXVQMLDP.js +3705 -0
- package/dist/hooks/{chunk-ELCN5LCH.js → chunk-NEC4AT4Z.js} +34 -12
- package/dist/hooks/{chunk-QVSWU24O.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-KRBERBBI.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-WK2XSHSI.js → chunk-TLJYAGZK.js} +549 -874
- package/dist/hooks/chunk-Z5TMJIPW.js +45 -0
- package/dist/hooks/codex-hook-adapter.js +26 -21
- package/dist/hooks/duplicate-read-guard.js +8 -8
- package/dist/hooks/format-edited.js +4 -4
- package/dist/hooks/inputs.json +216 -202
- package/dist/hooks/investigation-guard.js +8 -8
- package/dist/hooks/pretool-guard.js +15 -15
- package/dist/hooks/session-lang.js +406 -8
- package/dist/hooks/stop-guard.js +122 -187
- package/dist/josh.js +281 -94
- package/dist/version/index.js +15 -13
- package/eslint/base.js +43 -5
- package/eslint/rules/english-only-prose.js +3 -3
- package/eslint/rules/import.js +12 -0
- package/eslint/rules/namespace-object-export.js +2 -2
- package/package.json +16 -10
- package/pnpm-workspace.yaml +2 -4
- package/prompts/coding-standards.md +14 -48
- package/prompts/collaboration-workflow/file-edits.md +1 -1
- package/prompts/collaboration-workflow/issue-citation.md +1 -1
- package/prompts/collaboration-workflow/issue-template.md +3 -10
- package/prompts/collaboration-workflow/operating-rules.md +7 -8
- package/prompts/collaboration-workflow/output-bounds.md +1 -1
- package/prompts/collaboration-workflow/overview.md +1 -1
- package/prompts/collaboration-workflow/plan-comment.md +2 -1
- package/prompts/collaboration-workflow/principles.md +21 -3
- package/prompts/collaboration-workflow/report-format.md +16 -29
- package/prompts/collaboration-workflow/residency.md +1 -1
- package/prompts/collaboration-workflow/rule-delivery.md +7 -95
- package/prompts/collaboration-workflow/shell-body.md +3 -23
- package/prompts/collaboration-workflow/turn-batching.md +4 -13
- package/prompts/collaboration-workflow/wip-cap.md +5 -11
- package/prompts/refactoring.md +1 -1
- package/prompts/review-rubric.md +3 -22
- package/prompts/review.md +15 -38
- package/prompts/testing-guide.md +2 -4
- package/scripts/adopt/adopt-logic.ts +5 -5
- package/scripts/adopt/adopt-toolkits.ts +4 -5
- package/scripts/adopt/adopt.ts +2 -3
- package/scripts/agent/agent-argv.ts +7 -7
- package/scripts/agent/agent-diagnostics.ts +2 -2
- package/scripts/agent/agent-exit-record.ts +1 -1
- package/scripts/agent/agent-headless.ts +1 -1
- package/scripts/agent/agent-launch-environment.ts +6 -1
- package/scripts/agent/agent-role-profile.ts +49 -22
- package/scripts/agent/agent-session-role.ts +32 -0
- package/scripts/agent/api-outage.ts +1 -1
- package/scripts/agent/claude-agent-argv.ts +4 -4
- package/scripts/agent/claude-result-event.ts +4 -4
- package/scripts/agent/codex-hooks.ts +2 -2
- package/scripts/agent/interactive-ask.ts +3 -6
- package/scripts/auto-ok/auto-ok-cli.ts +46 -60
- package/scripts/backlog/backlog-arrival-added.ts +34 -0
- package/scripts/backlog/backlog-arrival.ts +54 -17
- package/scripts/backlog/backlog-budget-cli.ts +34 -6
- package/scripts/backlog/backlog-budget.ts +17 -24
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-drive-args.ts +5 -4
- package/scripts/backlog/backlog-drive-cli.ts +14 -10
- package/scripts/backlog/backlog-drive-epic.ts +85 -0
- package/scripts/backlog/backlog-drive-launch.ts +1 -1
- package/scripts/backlog/backlog-drive-named-offer.ts +60 -9
- package/scripts/backlog/backlog-drive-named.ts +39 -9
- package/scripts/backlog/backlog-drive-offer-argv.ts +1 -1
- package/scripts/backlog/backlog-drive-restore.ts +1 -1
- package/scripts/backlog/backlog-drive-retrospective.ts +2 -2
- package/scripts/backlog/backlog-drive.ts +43 -28
- package/scripts/backlog/backlog-idle.ts +88 -0
- package/scripts/backlog/backlog-named.ts +11 -15
- package/scripts/backlog/backlog-next.ts +26 -30
- package/scripts/backlog/backlog-offer-cli.ts +28 -23
- package/scripts/backlog/backlog-offer.ts +7 -7
- package/scripts/backlog/backlog-overlap.ts +178 -0
- package/scripts/backlog/backlog-plan-cli.ts +14 -90
- package/scripts/backlog/backlog-plan-read.ts +111 -0
- package/scripts/backlog/backlog-plan.ts +11 -10
- package/scripts/backlog/backlog-pool.ts +13 -14
- package/scripts/backlog/backlog-rank.ts +11 -11
- package/scripts/backlog/backlog-ready.ts +15 -10
- package/scripts/backlog/backlog-scope.ts +14 -15
- package/scripts/backlog/backlog-stalled-cli.ts +2 -2
- package/scripts/backlog/backlog-stalled-detect.ts +4 -4
- package/scripts/backlog/backlog-stalled.ts +5 -6
- package/scripts/backlog/backlog-waves.ts +4 -4
- package/scripts/backlog/backlogrun-args.ts +74 -0
- package/scripts/backlog/backlogrun-cli.ts +113 -0
- package/scripts/backlog/backlogrun-launch.ts +178 -0
- package/scripts/behavior/behavior-assertion.ts +6 -8
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/behavior/behavior-rules.ts +3 -3
- package/scripts/build/build-claude-md.ts +4 -4
- package/scripts/build/build-codex-hooks.ts +2 -2
- package/scripts/build/build-commands.ts +1 -1
- package/scripts/build/build-hooks.ts +5 -5
- package/scripts/build/build.ts +1 -1
- package/scripts/build/hook-bundle-stamp.ts +109 -7
- package/scripts/build/local-bin.ts +2 -2
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +2 -2
- package/scripts/ci/composite-actions.ts +1 -2
- package/scripts/ci/pr-classification.ts +2 -2
- package/scripts/claude/workflow-destination.ts +1 -1
- package/scripts/clone/clone-aggregate.ts +1 -1
- package/scripts/clone/clone-fingerprint.ts +1 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/index.ts +1 -1
- package/scripts/config-merge/json-format.ts +1 -3
- package/scripts/config-merge/patch-json-array.ts +90 -0
- package/scripts/config-merge/patch-json-key.ts +6 -3
- package/scripts/config-merge/patch-json-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +1 -1
- package/scripts/cost-runtime/context-cut-payback.ts +4 -5
- package/scripts/cost-runtime/context-cut-threshold.ts +4 -6
- package/scripts/cost-runtime/cost-attribute.ts +3 -3
- package/scripts/cost-runtime/cost-blocks.ts +3 -4
- package/scripts/cost-runtime/cost-cli.ts +14 -11
- package/scripts/cost-runtime/cost-corpus.ts +11 -11
- package/scripts/cost-runtime/cost-pricing.ts +4 -4
- package/scripts/cost-runtime/cost-tokens.ts +1 -2
- package/scripts/cost-runtime/cost-transcript.ts +29 -29
- package/scripts/cost-runtime/cost-usage.ts +6 -7
- package/scripts/cost-runtime/cost-verdict.ts +10 -11
- package/scripts/cost-runtime/own-session.ts +1 -1
- package/scripts/cost-runtime/transcript-cwd.ts +2 -2
- package/scripts/delegation/delegation-cli.ts +4 -4
- package/scripts/delegation/delegation-policy.ts +13 -15
- package/scripts/delegation/duplicate-read-guard.ts +9 -10
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +1 -1
- package/scripts/delegation/investigation-guard.ts +18 -22
- package/scripts/delegation/investigation-reads.ts +48 -238
- package/scripts/discovery/repo-discovery.ts +1 -1
- package/scripts/discovery/repo-map-logic.ts +1 -2
- package/scripts/discovery/repo-origin.ts +3 -3
- package/scripts/discovery/repo-party-cli.ts +2 -2
- package/scripts/discovery/repo-party.ts +2 -2
- package/scripts/doctor/doctor-consumer.ts +1 -1
- package/scripts/doctor/doctor-io.ts +6 -7
- package/scripts/doctor/doctor-logic.ts +1 -1
- package/scripts/doctor/doctor-ports.ts +1 -1
- package/scripts/doctor/doctor.ts +8 -9
- package/scripts/document/backlogrun-parent-read-set.ts +5 -6
- package/scripts/document/bash-output-cap.ts +5 -7
- package/scripts/document/capped-print-part.ts +1 -1
- package/scripts/document/capped-print.ts +1 -1
- package/scripts/document/document-byte-budget.ts +33 -64
- package/scripts/document/document-byte-check.ts +4 -4
- package/scripts/document/document-reachability.ts +7 -8
- package/scripts/document/document-read-cli.ts +2 -2
- package/scripts/document/document-scan.ts +26 -2
- package/scripts/document/document-section-cli.ts +6 -8
- package/scripts/document/document-section.ts +8 -12
- package/scripts/document/edit-files-cli.ts +3 -4
- package/scripts/document/entry-read-budget.ts +8 -70
- package/scripts/document/entry-read-set.ts +51 -34
- package/scripts/document/lane-child-read-set.ts +9 -9
- package/scripts/document/read-files-cli.ts +1 -2
- package/scripts/document/read-set-cli.ts +16 -19
- package/scripts/document/read-set-cost.ts +4 -4
- package/scripts/document/read-set-point-of-use.ts +28 -38
- package/scripts/document/read-set-pricing.ts +1 -1
- package/scripts/document/read-set-trim.ts +3 -3
- package/scripts/document/resident-budget.ts +8 -10
- package/scripts/epic/epic-add-body.ts +15 -18
- package/scripts/epic/epic-add-plan.ts +26 -28
- package/scripts/epic/epic-add.ts +32 -25
- package/scripts/epic/epic-audit-checks.ts +27 -37
- package/scripts/epic/epic-audit-cli.ts +21 -22
- package/scripts/epic/epic-audit-orphans.ts +16 -17
- package/scripts/epic/epic-audit-rationale.ts +10 -15
- package/scripts/epic/epic-audit-report.ts +2 -5
- package/scripts/epic/epic-audit.ts +18 -14
- package/scripts/epic/epic-body.ts +10 -10
- package/scripts/epic/epic-bundle-cli.ts +36 -34
- package/scripts/epic/epic-bundle-evidence.ts +5 -5
- package/scripts/epic/epic-bundle-gaps.ts +6 -9
- package/scripts/epic/epic-bundle-poll.ts +1 -1
- package/scripts/epic/epic-bundle-referenced.ts +11 -14
- package/scripts/epic/epic-bundle.ts +19 -20
- package/scripts/epic/epic-busy.ts +44 -21
- package/scripts/epic/epic-candidate-confirm.ts +15 -18
- package/scripts/epic/epic-chains.ts +18 -23
- package/scripts/epic/epic-classify.ts +11 -12
- package/scripts/epic/epic-cli-argv.ts +5 -6
- package/scripts/epic/epic-cli-remove.ts +9 -4
- package/scripts/epic/epic-cli.ts +38 -26
- package/scripts/epic/epic-close-comment.ts +14 -15
- package/scripts/epic/epic-close.ts +25 -29
- package/scripts/epic/epic-cross-repo.ts +18 -21
- package/scripts/epic/epic-decision.ts +14 -18
- package/scripts/epic/epic-fetch.ts +25 -31
- package/scripts/epic/epic-graph.ts +15 -17
- package/scripts/epic/epic-index.ts +14 -16
- package/scripts/epic/epic-issue.ts +9 -11
- package/scripts/epic/epic-label-age.ts +74 -0
- package/scripts/epic/epic-lane-offer.ts +35 -24
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +8 -8
- package/scripts/epic/epic-next-views.ts +12 -12
- package/scripts/epic/epic-next.ts +29 -33
- package/scripts/epic/epic-outside-blocker.ts +11 -10
- package/scripts/epic/epic-parse.ts +22 -24
- package/scripts/epic/epic-promote.ts +3 -2
- package/scripts/epic/epic-rank.ts +1 -1
- package/scripts/epic/epic-read.ts +10 -8
- package/scripts/epic/epic-reconcile.ts +8 -6
- package/scripts/epic/epic-reference.ts +5 -4
- package/scripts/epic/epic-relation-recheck.ts +10 -11
- package/scripts/epic/epic-relations.ts +9 -8
- package/scripts/epic/epic-remove-plan.ts +4 -5
- package/scripts/epic/epic-remove.ts +7 -5
- package/scripts/epic/epic-report.ts +18 -20
- package/scripts/epic/epic-run.ts +6 -5
- package/scripts/epic/epic-sections.ts +2 -2
- package/scripts/epic/epic-shape.ts +3 -3
- package/scripts/epic/epic-solo-stale.ts +3 -2
- package/scripts/epic/epic-solo.ts +8 -8
- package/scripts/epic/epic-triage.ts +5 -4
- package/scripts/epic/epic-validate.ts +8 -7
- package/scripts/epic/epic.ts +5 -5
- package/scripts/exports/unused-members-cli.ts +1 -1
- package/scripts/followup/followup-issue-number.ts +1 -2
- package/scripts/followup/git-followup-cleanup.ts +6 -7
- package/scripts/followup/git-followup-finish.ts +11 -13
- package/scripts/followup/git-followup-flush.ts +11 -7
- package/scripts/followup/git-followup-issue-close.ts +16 -13
- package/scripts/followup/git-followup-label.ts +9 -6
- package/scripts/followup/git-followup-merged.ts +1 -1
- package/scripts/followup/git-followup-pending.ts +7 -9
- package/scripts/followup/git-followup-stages.ts +28 -17
- package/scripts/followup/git-followup-workflow.ts +19 -21
- package/scripts/followup/git-pr-followup-checks.ts +13 -20
- package/scripts/followup/git-pr-followup-wrapup.ts +7 -7
- package/scripts/followup/git-pr-followup.ts +18 -17
- package/scripts/gate/core-admission.ts +2 -2
- package/scripts/gate/core-budget.ts +15 -26
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +70 -35
- package/scripts/gate/gate-report.ts +14 -15
- package/scripts/gate/gate-skip.ts +11 -13
- package/scripts/gate/gate-steps.ts +5 -1
- package/scripts/gate/gate-tree.ts +3 -4
- package/scripts/gate/hook-gate-reuse.ts +9 -9
- package/scripts/gate/machine-capacity.ts +168 -30
- package/scripts/gate/pre-commit-type-check.ts +4 -4
- package/scripts/gate/project-checks.ts +12 -4
- package/scripts/gate/scoped-green.ts +11 -18
- package/scripts/gate/type-check-command.ts +2 -2
- package/scripts/gate/type-check-step.ts +4 -4
- package/scripts/gate/verification-gate.ts +53 -51
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/gh/git-ai-review-scan.ts +3 -2
- package/scripts/gh/git-gh-api-path.ts +10 -11
- package/scripts/gh/git-gh-exec.ts +43 -48
- package/scripts/gh/git-gh-failure.ts +6 -9
- package/scripts/gh/git-gh-helpers.ts +1 -1
- package/scripts/gh/git-gh-issue-list.ts +15 -19
- package/scripts/gh/git-gh-issue-read.ts +43 -60
- package/scripts/gh/git-gh-issue-rest.ts +14 -15
- package/scripts/gh/git-gh-issue-write.ts +52 -40
- package/scripts/gh/git-gh-issue.ts +23 -24
- package/scripts/gh/git-gh-pr-auto-merge.ts +3 -3
- package/scripts/gh/git-gh-pr-read.ts +46 -50
- package/scripts/gh/git-gh-pr-rest.ts +23 -26
- package/scripts/gh/git-gh-pr-review.ts +2 -2
- package/scripts/gh/git-gh-pr-rollup.ts +4 -4
- package/scripts/gh/git-gh-pr-snapshot.ts +8 -10
- package/scripts/gh/git-gh-pr.ts +16 -16
- package/scripts/gh/git-gh-reachability.ts +11 -12
- package/scripts/gh/git-gh-repo.ts +2 -3
- package/scripts/gh/git-gh-rest-state.ts +1 -1
- package/scripts/gh/git-pr-ai-review.ts +6 -5
- package/scripts/gh/git-pr-checks-eval.ts +28 -30
- package/scripts/gh/git-pr-checks-parse.ts +14 -16
- package/scripts/gh/git-pr-checks-watch.ts +17 -17
- package/scripts/gh/git-pr-checks.ts +20 -23
- package/scripts/gh/git-pr-coderabbit.ts +8 -6
- package/scripts/gh/git-pr-confirmation.ts +5 -5
- package/scripts/gh/git-pr-managed-config.ts +7 -9
- package/scripts/gh/git-pr-messages.ts +1 -1
- package/scripts/gh/git-pr.ts +15 -16
- package/scripts/gh/github-issue-url.ts +8 -9
- package/scripts/git/base-tree.ts +66 -0
- package/scripts/git/change-base.ts +42 -2
- package/scripts/git/changed-file-scope.ts +5 -5
- package/scripts/git/changed-paths.ts +1 -2
- package/scripts/git/constants.ts +2 -2
- package/scripts/git/git-branch.ts +1 -1
- package/scripts/git/git-closes-keyword.ts +3 -3
- package/scripts/git/git-command.ts +53 -41
- package/scripts/git/git-common-directory.ts +3 -3
- package/scripts/git/git-diff-reads.ts +14 -15
- package/scripts/git/git-error.ts +1 -1
- package/scripts/git/git-execa-error.ts +1 -2
- package/scripts/git/git-issue.ts +10 -8
- package/scripts/git/git-location-environment.ts +3 -4
- package/scripts/git/git-ls-remote.ts +6 -8
- package/scripts/git/git-pre-push-hook.ts +11 -10
- package/scripts/git/git-preflight.ts +5 -5
- package/scripts/git/git-push-transport.ts +2 -2
- package/scripts/git/git-remote-branch.ts +1 -2
- package/scripts/git/git-schemas.ts +16 -23
- package/scripts/git/git-spawn-sync.ts +1 -1
- package/scripts/git/git-spawn.ts +37 -14
- package/scripts/git/git-ssh-keepalive.ts +12 -5
- package/scripts/git/git-staging.ts +7 -8
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/git-worktree.ts +35 -27
- package/scripts/git/gone-branch.ts +2 -2
- package/scripts/git/listing-cutoff.ts +1 -2
- package/scripts/git/lockfile-sync.ts +65 -0
- package/scripts/git/main-merge-guard.ts +1 -2
- package/scripts/git/main-merge.ts +7 -7
- package/scripts/git/main-sync.ts +23 -8
- package/scripts/git/parse-json-array.ts +18 -23
- package/scripts/git/repository-lock.ts +34 -2
- package/scripts/git/stash/git-stash.ts +4 -5
- package/scripts/git/stash/stash-orphans.ts +5 -3
- package/scripts/git/stash/stash-pop-args.ts +1 -1
- package/scripts/git/stash/stash-pop-cli.ts +3 -3
- package/scripts/git/stash/stash-sweep-lock.ts +2 -2
- package/scripts/hooks/batch-guard.ts +11 -13
- package/scripts/hooks/check-commit-message.ts +12 -9
- package/scripts/hooks/codex-hook-adapter.ts +16 -10
- package/scripts/hooks/edited-cspell.ts +3 -4
- package/scripts/hooks/format-edited-cli.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +11 -17
- package/scripts/hooks/format-rewrite-notice.ts +19 -17
- package/scripts/hooks/pre-push-unit.ts +10 -14
- package/scripts/hooks/pretool-guard-cli.ts +4 -4
- package/scripts/hooks/pretool-guard.ts +93 -18
- package/scripts/hooks/reserved-run.ts +2 -2
- package/scripts/hooks/step-zero-notice.ts +1 -1
- package/scripts/hooks/stop-guard.ts +21 -10
- package/scripts/init/basic-path-migration.ts +2 -2
- package/scripts/init/claude-kit-only-settings.ts +2 -2
- package/scripts/init/claude-plugin-config.ts +2 -2
- package/scripts/init/distributed-paths.ts +4 -4
- package/scripts/init/hook-command-rewrite.ts +3 -3
- package/scripts/init/hook-launch.ts +5 -5
- package/scripts/init/init-actions.ts +13 -0
- package/scripts/init/init-ai-copy.ts +11 -11
- package/scripts/init/init-bootstrap.ts +3 -3
- package/scripts/init/init-copy-content.ts +4 -4
- package/scripts/init/init-logic-json-merge.ts +7 -9
- package/scripts/init/init-logic-migrate.ts +1 -1
- package/scripts/init/init-logic-templates.ts +1 -1
- package/scripts/init/init-logic-workspace.ts +4 -4
- package/scripts/init/init-logic-yaml-merge.ts +2 -2
- package/scripts/init/init-logic.ts +19 -22
- package/scripts/init/init.ts +7 -7
- package/scripts/init/kit-base-preset.ts +1 -1
- package/scripts/init/kit-setup-state.ts +1 -1
- package/scripts/init/kit-written-paths.ts +1 -2
- package/scripts/init/package-manager-pin.ts +1 -1
- package/scripts/init/project-profile-cli.ts +1 -1
- package/scripts/init/project-profile.ts +3 -3
- package/scripts/init/session-language-environment.ts +1 -1
- package/scripts/init/start-exec.ts +3 -4
- package/scripts/init/start-plan.ts +2 -2
- package/scripts/init/start-setup-pr.ts +3 -2
- package/scripts/init/start-steps.ts +2 -2
- package/scripts/init/tsconfig-preset-migration.ts +1 -1
- package/scripts/init/vscode-tasks.ts +62 -0
- package/scripts/issue/baseline-measure.ts +2 -2
- package/scripts/issue/behavior-change-lint.ts +2 -2
- package/scripts/issue/defect-rate-cli.ts +6 -7
- package/scripts/issue/defect-rate.ts +37 -27
- package/scripts/issue/git-next-issues.ts +9 -8
- package/scripts/issue/issue-auto-ok.ts +24 -11
- package/scripts/issue/issue-backlinks-cli.ts +5 -5
- package/scripts/issue/issue-backlinks.ts +6 -6
- package/scripts/issue/issue-cite-cli.ts +20 -18
- package/scripts/issue/issue-cite.ts +18 -8
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +6 -4
- package/scripts/issue/issue-file-cli.ts +52 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +9 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +34 -38
- package/scripts/issue/issue-lint-cli.ts +2 -2
- package/scripts/issue/issue-lint.ts +1 -1
- package/scripts/issue/issue-merged.ts +10 -4
- package/scripts/issue/issue-number-shape.ts +27 -0
- package/scripts/issue/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +4 -5
- package/scripts/issue/issue-read.ts +4 -5
- package/scripts/issue/issue-reference.ts +5 -5
- package/scripts/issue/issue-release-cli.ts +17 -7
- package/scripts/issue/issue-release.ts +3 -3
- package/scripts/issue/issue-report-failures.ts +7 -4
- package/scripts/issue/issue-scout-cli.ts +11 -11
- package/scripts/issue/issue-scout-closed.ts +4 -4
- package/scripts/issue/issue-scout.ts +4 -5
- package/scripts/issue/issue-state-cli.ts +17 -10
- package/scripts/issue/issue-state.ts +12 -13
- package/scripts/issue/issue-wip.ts +7 -7
- package/scripts/issue/markdown-section.ts +3 -3
- package/scripts/issue/measure-rerun-cli.ts +10 -9
- package/scripts/issue/reproduction-measure.ts +3 -3
- package/scripts/issue/session-cite.ts +56 -0
- package/scripts/josh/agent-session-environment.ts +10 -8
- package/scripts/josh/cli-body.ts +2 -2
- package/scripts/josh/command-suggest.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +20 -23
- package/scripts/josh/hook-decision.ts +24 -28
- package/scripts/josh/josh-command-map.ts +4 -1
- package/scripts/josh/josh-command-types.ts +30 -35
- package/scripts/josh/josh-commands-ai.ts +6 -6
- package/scripts/josh/josh-commands-backlog.ts +15 -3
- package/scripts/josh/josh-commands-clone.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +25 -4
- package/scripts/josh/josh-commands-document.ts +3 -3
- package/scripts/josh/josh-commands-guard.ts +3 -3
- package/scripts/josh/josh-commands-issue.ts +4 -5
- package/scripts/josh/josh-commands-lane.ts +14 -4
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-run.ts +20 -6
- package/scripts/josh/josh-commands-split.ts +1 -2
- package/scripts/josh/josh-commands-versioning.ts +5 -5
- package/scripts/josh/josh-commands-workflow.ts +30 -22
- package/scripts/josh/josh-environment-file.ts +1 -1
- package/scripts/josh/josh-in-process.ts +3 -3
- package/scripts/josh/josh-logic.ts +6 -7
- package/scripts/josh/josh-run.ts +3 -3
- package/scripts/josh/josh-verdict.ts +9 -12
- package/scripts/josh/josh.ts +3 -3
- package/scripts/josh/kit-only.ts +2 -2
- package/scripts/josh/path-decision.ts +3 -3
- package/scripts/josh/platform-temporary.ts +7 -5
- package/scripts/josh/process-identity.ts +24 -6
- package/scripts/josh/process-owner.ts +4 -4
- package/scripts/josh/session-language-cli.ts +53 -11
- package/scripts/josh/session-language.ts +1 -1
- package/scripts/josh/stamp-file.ts +48 -29
- package/scripts/josh/stamp-record.ts +57 -0
- package/scripts/lane/lane-await.ts +35 -11
- package/scripts/lane/lane-cache.ts +6 -6
- package/scripts/lane/lane-capacity.ts +32 -17
- package/scripts/lane/lane-child-invocation.ts +17 -15
- package/scripts/lane/lane-child-marker.ts +12 -12
- package/scripts/lane/lane-cli.ts +12 -13
- package/scripts/lane/lane-close.ts +6 -6
- package/scripts/lane/lane-dispatch.ts +61 -72
- package/scripts/lane/lane-environment.ts +5 -5
- package/scripts/lane/lane-guard-policy.ts +7 -21
- package/scripts/lane/lane-handoff.ts +2 -2
- package/scripts/lane/lane-install.ts +9 -10
- package/scripts/lane/lane-launch-cli.ts +13 -8
- package/scripts/lane/lane-ledger.ts +73 -11
- package/scripts/lane/lane-leftover.ts +2 -2
- package/scripts/lane/lane-limit-cli.ts +160 -0
- package/scripts/lane/lane-limit-override.ts +74 -0
- package/scripts/lane/lane-load.ts +19 -68
- package/scripts/lane/lane-measure-cli.ts +15 -25
- package/scripts/lane/lane-occupancy.ts +6 -4
- package/scripts/lane/lane-open.ts +20 -19
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +12 -11
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +16 -15
- package/scripts/lane/lane-relaunch.ts +9 -9
- package/scripts/lane/lane-report.ts +5 -4
- package/scripts/lane/lane-resume.ts +2 -2
- package/scripts/lane/lane-sampler.ts +55 -0
- package/scripts/lane/lane-seed.ts +7 -7
- package/scripts/lane/lane-stage-stats.ts +135 -0
- package/scripts/lane/lane-start-point.ts +8 -11
- package/scripts/lane/lane-stats.ts +60 -15
- package/scripts/lane/lane-stray.ts +1 -1
- package/scripts/lane/lane-vacant.ts +1 -1
- package/scripts/lane/openai-lane-supervisor-decision.ts +3 -7
- package/scripts/lane/openai-lane-supervisor-owner.ts +3 -9
- package/scripts/lane/openai-review-broker.ts +2 -4
- package/scripts/lib/ancestor-directories.ts +1 -1
- package/scripts/lib/bounded-pool.ts +2 -2
- package/scripts/lib/buffered-process.ts +4 -6
- package/scripts/lib/caddy-logs.sh +0 -0
- package/scripts/lib/cli-flags.ts +39 -6
- package/scripts/lib/error-message.ts +1 -1
- package/scripts/lib/json-value.ts +17 -3
- package/scripts/lib/poll.ts +1 -1
- package/scripts/lib/status-icons.ts +3 -3
- package/scripts/lib/timed-fetch.ts +1 -1
- package/scripts/lib/timeouts.ts +1 -1
- package/scripts/lines/bytes-command.ts +3 -4
- package/scripts/lines/effective-limit.ts +25 -12
- package/scripts/lines/line-budget.ts +47 -55
- package/scripts/lines/line-targets.ts +6 -2
- package/scripts/lines/lines-command.ts +3 -3
- package/scripts/lint/cspell-cached.ts +1 -1
- package/scripts/lint/cycle-recheck.ts +122 -0
- package/scripts/lint/format.ts +1 -2
- package/scripts/lint/lint-parallel.ts +34 -19
- package/scripts/lint/lint-related-scope.ts +25 -15
- package/scripts/lint/lint-related.ts +6 -7
- package/scripts/managed-marker/index.ts +1 -1
- package/scripts/managed-marker/managed-marker-logic.ts +1 -2
- package/scripts/notify/git-notify.ts +9 -7
- package/scripts/notify/telegram-notify.ts +53 -37
- package/scripts/notify/telegram-test-logic.ts +3 -3
- package/scripts/notify/telegram-test.ts +45 -30
- package/scripts/observations/observation-ledger-home.ts +14 -8
- package/scripts/observations/observation-ledger-line.ts +3 -2
- package/scripts/observations/observation-ledger-migrate.ts +3 -4
- package/scripts/observations/observation-ledger-prepare.ts +4 -4
- package/scripts/observations/observation-ledger.ts +14 -15
- package/scripts/observations/observation-record-cli.ts +83 -0
- package/scripts/observations/observation-record.ts +91 -0
- package/scripts/observations/observations-flush-cli.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +7 -6
- package/scripts/observations/observations-flush.ts +26 -27
- package/scripts/overrides/overrides-check.ts +18 -8
- package/scripts/package/package-scout-cli.ts +1 -1
- package/scripts/package/package-scout-format.ts +2 -2
- package/scripts/package/package-scout.ts +1 -1
- package/scripts/propagate/propagate-git-failure.ts +1 -1
- package/scripts/propagate/propagate-git.ts +7 -7
- package/scripts/propagate/propagate-plan.ts +2 -2
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +5 -7
- package/scripts/propagate/propagate-select.ts +1 -1
- package/scripts/propagate/propagate-steps.ts +19 -20
- package/scripts/propagate/propagate-targets.ts +6 -10
- package/scripts/propagate/propagate.ts +5 -5
- package/scripts/refactor/import-graph.ts +1 -1
- package/scripts/refactor/refactor-lint.ts +4 -10
- package/scripts/refactor/refactor-scan-cli.ts +1 -1
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +1 -1
- package/scripts/release/github-release-cli.ts +25 -3
- package/scripts/release/github-release-runs.ts +1 -1
- package/scripts/release/release-cli.ts +21 -4
- package/scripts/release/release-history.ts +6 -10
- package/scripts/release/release-plan.ts +3 -3
- package/scripts/release/release-progress.ts +3 -4
- package/scripts/release/release-publish.ts +8 -9
- package/scripts/release/release-scope-cli.ts +8 -10
- package/scripts/release/release-tag.ts +6 -8
- package/scripts/release/release-worktree.ts +5 -5
- package/scripts/repo/auto-merge-setting-logic.ts +7 -9
- package/scripts/repo/auto-merge-setting.ts +1 -1
- package/scripts/repo/repo-setting.ts +4 -4
- package/scripts/repo/repository-labels.ts +1 -1
- package/scripts/repo/required-checks-logic.ts +3 -3
- package/scripts/repo/required-checks-report.ts +1 -1
- package/scripts/repo/ruleset-check-cli.ts +1 -1
- package/scripts/repo/ruleset-check.ts +1 -1
- package/scripts/report/report-format-reference.ts +26 -0
- package/scripts/report/report-lint-cli.ts +2 -2
- package/scripts/report/report-lint.ts +16 -2
- package/scripts/review/disposition-cli.ts +2 -2
- package/scripts/review/disposition-logic.ts +1 -1
- package/scripts/review/live-evidence.ts +9 -6
- package/scripts/review/review-attest-cli.ts +1 -2
- package/scripts/review/review-attest.ts +3 -3
- package/scripts/review/review-brief-cli.ts +19 -20
- package/scripts/review/review-brief.ts +29 -32
- package/scripts/review/review-checkout.ts +2 -2
- package/scripts/review/review-diff-parts.ts +3 -5
- package/scripts/review/review-diff-write.ts +1 -1
- package/scripts/review/review-finding-ledger.ts +7 -4
- package/scripts/review/review-findings-cli.ts +2 -2
- package/scripts/review/review-level.ts +4 -7
- package/scripts/review/review-record-cli.ts +73 -16
- package/scripts/review/review-record.ts +5 -4
- package/scripts/review/review-round2-cli.ts +2 -3
- package/scripts/review/review-round2.ts +13 -21
- package/scripts/review/review-stamps.ts +9 -71
- package/scripts/review/review-tree.ts +4 -5
- package/scripts/rules/bash-triggers.ts +4 -4
- package/scripts/rules/decision-oracle-batch.ts +5 -6
- package/scripts/rules/decision-oracle-stage.ts +1 -1
- package/scripts/rules/decision-oracle-tokens.ts +1 -2
- package/scripts/rules/decision-oracle.ts +2 -2
- package/scripts/rules/delivered-rules.ts +61 -406
- package/scripts/rules/destructive-command.ts +2 -2
- package/scripts/rules/direct-filing.ts +4 -4
- package/scripts/rules/direct-pr-create.ts +2 -2
- package/scripts/rules/early-heartbeat.ts +15 -19
- package/scripts/rules/file-body.ts +5 -6
- package/scripts/rules/filing-cap.ts +6 -7
- package/scripts/rules/filing-offer.ts +1 -1
- package/scripts/rules/firing-point.ts +6 -6
- package/scripts/rules/gh-api.ts +2 -2
- package/scripts/rules/git-argv.ts +3 -3
- package/scripts/rules/git-force.ts +2 -2
- package/scripts/rules/hook-context-line.ts +31 -0
- package/scripts/rules/implementation-cut-verdict.ts +5 -8
- package/scripts/rules/implementation-cut.ts +35 -32
- package/scripts/rules/index-guard.ts +2 -2
- package/scripts/rules/issue-citation.ts +7 -7
- package/scripts/rules/issue-comments.ts +21 -13
- package/scripts/rules/josh-git-bare.ts +2 -2
- package/scripts/rules/lane-background.ts +14 -16
- package/scripts/rules/lane-carry-conflict.ts +41 -5
- package/scripts/rules/lane-interactive-ask.ts +6 -9
- package/scripts/rules/lane-park.ts +12 -16
- package/scripts/rules/lane-split-park.ts +1 -2
- package/scripts/rules/lane-switch-main.ts +10 -13
- package/scripts/rules/last-prompt.ts +1 -1
- package/scripts/rules/oracle-consulted.ts +5 -5
- package/scripts/rules/oracle-firing.ts +6 -9
- package/scripts/rules/oracle-list-cli.ts +2 -2
- package/scripts/rules/permission-guards.ts +2 -2
- package/scripts/rules/piped-verification.ts +79 -9
- package/scripts/rules/poll-loop.ts +9 -11
- package/scripts/rules/pre-gate-cut.ts +33 -30
- package/scripts/rules/prior-comment-read.ts +3 -3
- package/scripts/rules/protected-files.ts +25 -13
- package/scripts/rules/raw-field-body.ts +3 -4
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +10 -12
- package/scripts/rules/rule-guard.ts +1 -1
- package/scripts/rules/rule-list.ts +51 -0
- package/scripts/rules/rule-registry-rows.ts +282 -0
- package/scripts/rules/rule-registry.ts +109 -0
- package/scripts/rules/rule-value-cache.ts +2 -2
- package/scripts/rules/rule-value-cli.ts +6 -4
- package/scripts/rules/rule-value.ts +61 -22
- package/scripts/rules/run-tail-rule.ts +11 -15
- package/scripts/rules/shell-body-trigger.ts +7 -7
- package/scripts/rules/shell-segments.ts +2 -4
- package/scripts/rules/stop-rules.ts +54 -41
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +2 -2
- package/scripts/rules/third-party-write.ts +3 -3
- package/scripts/rules/worktree-guard.ts +12 -5
- package/scripts/run/add/run-add-cli.ts +165 -0
- package/scripts/run/add/run-add.ts +124 -0
- package/scripts/run/board/run-board-cli.ts +207 -0
- package/scripts/run/board/run-board-closed.ts +95 -0
- package/scripts/run/board/run-board-every.ts +60 -0
- package/scripts/run/board/run-board-fetch.ts +38 -0
- package/scripts/run/board/run-board-fit.ts +219 -0
- package/scripts/run/board/run-board-github.ts +162 -0
- package/scripts/run/board/run-board-header.ts +275 -0
- package/scripts/run/board/run-board-kind.ts +35 -0
- package/scripts/run/board/run-board-labels.ts +299 -0
- package/scripts/run/board/run-board-layout.ts +222 -0
- package/scripts/run/board/run-board-link.ts +31 -0
- package/scripts/run/board/run-board-machine.ts +198 -0
- package/scripts/run/board/run-board-notes.ts +103 -0
- package/scripts/run/board/run-board-phase.ts +136 -0
- package/scripts/run/board/run-board-plan.ts +129 -0
- package/scripts/run/board/run-board-read.ts +62 -0
- package/scripts/run/board/run-board-render-legend.ts +82 -0
- package/scripts/run/board/run-board-render-notes.ts +77 -0
- package/scripts/run/board/run-board-render-slot.ts +50 -0
- package/scripts/run/board/run-board-render.ts +407 -0
- package/scripts/run/board/run-board-scope.ts +17 -0
- package/scripts/run/board/run-board-screen.ts +43 -0
- package/scripts/run/board/run-board-span.ts +66 -0
- package/scripts/run/board/run-board-spin.ts +115 -0
- package/scripts/run/board/run-board-state.ts +113 -0
- package/scripts/run/board/run-board-status.ts +279 -0
- package/scripts/run/board/run-board-tick.ts +210 -0
- package/scripts/run/board/run-board-track.ts +22 -0
- package/scripts/run/board/run-board-usage-read.ts +255 -0
- package/scripts/run/board/run-board-usage-rusage.ts +124 -0
- package/scripts/run/board/run-board-usage-text.ts +80 -0
- package/scripts/run/board/run-board-usage.ts +165 -0
- package/scripts/run/carry/run-carry-added.ts +62 -0
- package/scripts/run/carry/run-carry-args.ts +25 -22
- package/scripts/run/carry/run-carry-change.ts +1 -1
- package/scripts/run/carry/run-carry-cli.ts +71 -48
- package/scripts/run/carry/run-carry-conversation.ts +6 -7
- package/scripts/run/carry/run-carry-ended.ts +85 -0
- package/scripts/run/carry/run-carry-reclaim.ts +1 -1
- package/scripts/run/carry/run-carry-stash.ts +3 -2
- package/scripts/run/carry/run-carry-streak.ts +8 -10
- package/scripts/run/carry/run-carry.ts +85 -89
- package/scripts/run/cut/run-cut-args.ts +7 -7
- package/scripts/run/cut/run-cut-cli.ts +54 -36
- package/scripts/run/cut/run-cut-handoff.ts +15 -15
- package/scripts/run/cut/run-cut-report.ts +37 -16
- package/scripts/run/cut/run-cut.ts +63 -77
- package/scripts/run/detached-launch.ts +35 -50
- package/scripts/run/entry/run-entry-cli.ts +48 -27
- package/scripts/run/entry/run-entry-stop.ts +7 -9
- package/scripts/run/entry/run-entry.ts +5 -6
- package/scripts/run/event/run-event-cli.ts +5 -6
- package/scripts/run/event/run-event-filed.ts +69 -0
- package/scripts/run/event/run-event-follow.ts +3 -3
- package/scripts/run/event/run-event-plan.ts +38 -0
- package/scripts/run/event/run-event-render.ts +9 -4
- package/scripts/run/event/run-event-scope.ts +47 -18
- package/scripts/run/event/run-event-stream-emit.ts +64 -11
- package/scripts/run/event/run-event-stream.ts +171 -46
- package/scripts/run/event/run-event-watch.ts +4 -6
- package/scripts/run/hold/run-hold-cli.ts +65 -62
- package/scripts/run/hold/run-hold.ts +88 -46
- package/scripts/run/merge/run-merge-cli.ts +116 -77
- package/scripts/run/merge/run-merge-collect.ts +107 -0
- package/scripts/run/merge/run-merge-steps.ts +112 -65
- package/scripts/run/merge/run-merge-token.ts +30 -0
- package/scripts/run/merge/run-merge.ts +31 -22
- package/scripts/run/progress/run-progress-args.ts +4 -4
- package/scripts/run/progress/run-progress-cli.ts +39 -50
- package/scripts/run/progress/run-progress-clock.ts +25 -32
- package/scripts/run/progress/run-progress-config.ts +6 -9
- package/scripts/run/progress/run-progress-read.ts +9 -10
- package/scripts/run/progress/run-progress.ts +48 -53
- package/scripts/run/review/run-review-cli.ts +6 -6
- package/scripts/run/review/run-review-steps.ts +6 -6
- package/scripts/run/review/run-review.ts +9 -11
- package/scripts/run/run-cli-fault.ts +29 -0
- package/scripts/run/run-ending-cli.ts +3 -3
- package/scripts/run/run-ending.ts +10 -14
- package/scripts/run/run-halfrun-resume.ts +6 -8
- package/scripts/run/run-headless.ts +25 -12
- package/scripts/run/run-invocation.ts +17 -22
- package/scripts/run/run-label.ts +7 -5
- package/scripts/run/run-liveness-cli.ts +19 -6
- package/scripts/run/run-liveness.ts +27 -38
- package/scripts/run/run-next-cli.ts +5 -9
- package/scripts/run/run-next.ts +4 -5
- package/scripts/run/run-parent-cut-hook.ts +10 -12
- package/scripts/run/run-preflight.ts +25 -29
- package/scripts/run/run-prep-cli.ts +17 -13
- package/scripts/run/run-prep-locate.ts +4 -5
- package/scripts/run/run-prep.ts +7 -10
- package/scripts/run/run-prrun-resume.ts +2 -2
- package/scripts/run/run-report-cli.ts +4 -4
- package/scripts/run/run-report.ts +9 -14
- package/scripts/run/run-retrospective.ts +3 -3
- package/scripts/run/run-section.ts +42 -0
- package/scripts/run/run-stage-read.ts +2 -2
- package/scripts/run/run-stage.ts +6 -4
- package/scripts/run/run-status-cli.ts +7 -5
- package/scripts/run/run-status.ts +6 -7
- package/scripts/run/run-step-cli.ts +13 -15
- package/scripts/run/run-step.ts +58 -47
- package/scripts/run/run-stop-notify.ts +7 -8
- package/scripts/run/run-stranded-cli.ts +1 -1
- package/scripts/run/run-stranded-detect.ts +4 -4
- package/scripts/run/run-stranded.ts +11 -13
- package/scripts/run/run-tail-cli.ts +15 -16
- package/scripts/run/run-tail.ts +14 -33
- package/scripts/run/run-watcher-guard-cli.ts +3 -4
- package/scripts/run/run-watcher-guard.ts +11 -12
- package/scripts/run/run-watcher-hook.ts +6 -12
- package/scripts/run/ship/run-ship-cli.ts +67 -33
- package/scripts/run/ship/run-ship-detach.ts +15 -13
- package/scripts/run/ship/run-ship-lock.ts +1 -1
- package/scripts/run/ship/run-ship-next.ts +7 -8
- package/scripts/run/ship/run-ship-pre-detach.ts +27 -11
- package/scripts/run/ship/run-ship-preflight.ts +10 -11
- package/scripts/run/ship/run-ship-probe.ts +4 -4
- package/scripts/run/ship/run-ship-return.ts +1 -1
- package/scripts/run/ship/run-ship-review-steps.ts +43 -24
- package/scripts/run/ship/run-ship-review.ts +12 -14
- package/scripts/run/ship/run-ship-scoped.ts +15 -6
- package/scripts/run/ship/run-ship-stage.ts +80 -26
- package/scripts/run/ship/run-ship-steps.ts +26 -16
- package/scripts/run/ship/run-ship-stop-text.ts +4 -2
- package/scripts/run/ship/run-ship-sync.ts +9 -8
- package/scripts/run/ship/run-ship.ts +17 -32
- package/scripts/run/tidy/run-tidy-cli.ts +9 -5
- package/scripts/run/tidy/run-tidy-lanes.ts +18 -7
- package/scripts/run/tidy/run-tidy-stashes.ts +8 -8
- package/scripts/run/tidy/run-tidy.ts +4 -3
- package/scripts/run/wake/run-wake-cli.ts +27 -32
- package/scripts/run/wake/run-wake-describe.ts +24 -28
- package/scripts/run/wake/run-wake-driver.ts +14 -14
- package/scripts/run/wake/run-wake-handoff.ts +6 -6
- package/scripts/run/wake/run-wake-loop.ts +9 -9
- package/scripts/run/wake/run-wake-restart.ts +4 -5
- package/scripts/run/wake/run-wake-session.ts +23 -27
- package/scripts/run/wake/run-wake.ts +57 -279
- package/scripts/safe-chain/ci-installer-pin.ts +3 -3
- package/scripts/safe-chain/pack-hook.ts +2 -2
- package/scripts/safe-chain/preinstall-command.ts +2 -2
- package/scripts/security/security-audit-logic.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +1 -1
- package/scripts/security/security-audit-provision.ts +2 -2
- package/scripts/security/security-audit.ts +5 -5
- package/scripts/security/security-updates-logic.ts +2 -3
- package/scripts/security/security-updates.ts +2 -4
- package/scripts/self-sync-guard/index.ts +1 -1
- package/scripts/self-sync-guard/self-sync-guard-logic.ts +2 -2
- package/scripts/self-sync-guard/self-sync-refusal.ts +1 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +1 -1
- package/scripts/sonar/sonar-hotspots.ts +1 -1
- package/scripts/sonar/sonar-new-code-cli.ts +1 -1
- package/scripts/sonar/sonar-new-code.ts +1 -1
- package/scripts/sonar/sonar-project.ts +1 -1
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +3 -3
- package/scripts/sync/directory-copy-guard.ts +2 -3
- package/scripts/sync/managed-config-scope-cli.ts +1 -2
- package/scripts/sync/managed-config-scope.ts +4 -4
- package/scripts/sync/plugin-skill-directories.ts +2 -2
- package/scripts/sync/reconcile-templates.ts +17 -8
- package/scripts/sync/removed-skill-manifest.ts +2 -3
- package/scripts/sync/sync-ai-files.ts +7 -7
- package/scripts/sync/sync-configs.ts +30 -3
- package/scripts/sync/sync-hook-safety.ts +2 -2
- package/scripts/sync/sync.ts +23 -10
- package/scripts/sync/synced-paths.ts +2 -1
- package/scripts/sync/workflow-pin-logic.ts +1 -1
- package/scripts/test/test-declared-changed.ts +4 -4
- package/scripts/test/test-declared-logic.ts +2 -3
- package/scripts/test/test-declared-match.ts +25 -4
- package/scripts/test/test-declared.ts +26 -9
- package/scripts/test/test-red-commit.ts +3 -2
- package/scripts/test/test-red-logic.ts +7 -14
- package/scripts/test/test-red.ts +12 -47
- package/scripts/test/test-related-scope.ts +2 -3
- package/scripts/test/test-related.ts +3 -3
- package/scripts/test/test-type-logic.ts +1 -2
- package/scripts/test/test-unit-guard.ts +13 -17
- package/scripts/test/unit-worker-share.ts +7 -8
- package/scripts/time-runtime/time-agent-bundles.ts +2 -4
- package/scripts/time-runtime/time-background.ts +17 -21
- package/scripts/time-runtime/time-batch-guard.ts +67 -342
- package/scripts/time-runtime/time-bundle-call.ts +26 -28
- package/scripts/time-runtime/time-bundles.ts +11 -12
- package/scripts/time-runtime/time-call-identity.ts +1 -1
- package/scripts/time-runtime/time-command-key.ts +2 -2
- package/scripts/time-runtime/time-density-hook.ts +8 -11
- package/scripts/time-runtime/time-density.ts +5 -5
- package/scripts/time-runtime/time-followup-stage.ts +7 -7
- package/scripts/time-runtime/time-format.ts +5 -5
- package/scripts/time-runtime/time-hook-transcript.ts +3 -3
- package/scripts/time-runtime/time-instant.ts +1 -1
- package/scripts/time-runtime/time-markers.ts +15 -19
- package/scripts/time-runtime/time-phase-names.ts +3 -3
- package/scripts/time-runtime/time-reported-failure.ts +15 -19
- package/scripts/time-runtime/time-round-trips.ts +20 -23
- package/scripts/time-runtime/time-shell.ts +8 -8
- package/scripts/time-runtime/time-single-check.ts +1 -2
- package/scripts/time-runtime/time-spans.ts +35 -40
- package/scripts/time-runtime/time-tool-call.ts +15 -16
- package/scripts/time-runtime/time-transcript-line.ts +53 -34
- package/scripts/time-runtime/time-writes.ts +5 -5
- package/scripts/ui/ui-routes-cli.ts +1 -2
- package/scripts/ui/ui-routes.ts +1 -2
- package/scripts/version/bump-version.ts +1 -1
- package/scripts/version/fresh-metadata-cache.ts +2 -2
- package/scripts/version/latest-corepack.ts +26 -26
- package/scripts/version/latest-lane-guard.ts +1 -1
- package/scripts/version/latest-scope-cli.ts +2 -2
- package/scripts/version/latest-stamp.ts +1 -2
- package/scripts/version/latest-update.ts +2 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/package-manager-version.ts +18 -0
- package/scripts/version/publishable-range-check.ts +2 -1
- package/scripts/version/publishable-range.ts +1 -1
- package/scripts/version/release-age.ts +11 -11
- package/scripts/version/release-hold.ts +2 -2
- package/scripts/version/safe-chain-version-update.ts +3 -3
- package/scripts/version/version-check-logic.ts +2 -3
- package/scripts/version/version-check.ts +1 -2
- package/scripts/version/version-command-config.ts +2 -2
- package/scripts/version/version-commands.ts +3 -3
- package/scripts/version/version-remote.ts +4 -4
- package/scripts/version/version-targets.ts +2 -2
- package/templates/gitignore +7 -0
- package/dist/hooks/chunk-KHX4U3BG.js +0 -6400
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Kept separate from the map that consumes it (`repo-map-logic.ts`) because the shapes a remote can
|
|
4
4
|
// take are the part with real variety: a single machine's siblings were measured carrying SSH,
|
|
5
5
|
// an SSH host alias, HTTPS with embedded credentials and a trailing slash, and plain HTTPS — all
|
|
6
|
-
// four pointing at the same repository
|
|
6
|
+
// four pointing at the same repository.
|
|
7
7
|
|
|
8
8
|
// A repository's identity on GitHub. The `owner` half is what the discovery map filters on, so it is
|
|
9
9
|
// derived here from the remote and never from a directory name.
|
|
@@ -88,7 +88,7 @@ function parse_url_like(url: string): RepoIdentity | undefined {
|
|
|
88
88
|
|
|
89
89
|
// `owner/repo` for a GitHub remote, or nothing for every other remote. Returning nothing is the
|
|
90
90
|
// exclusion the owner restriction depends on: a self-hosted or third-party host never reaches the
|
|
91
|
-
// owner comparison at all
|
|
91
|
+
// owner comparison at all.
|
|
92
92
|
function parse_origin_url(url: string): RepoIdentity | undefined {
|
|
93
93
|
const trimmed = url.trim()
|
|
94
94
|
if (trimmed === '') return undefined
|
|
@@ -147,7 +147,7 @@ function section_groups(lines: ReadonlyArray<string>): Array<Array<string>> {
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
// The `url` of every `[remote "…"]` section, in config order — the candidates `gh` picks its base
|
|
150
|
-
// repository from when it expands the `{owner}` placeholder
|
|
150
|
+
// repository from when it expands the `{owner}` placeholder.
|
|
151
151
|
function parse_remote_urls_from_config(content: string): Array<string> {
|
|
152
152
|
const lines = content.split('\n').map((line) => line.trim())
|
|
153
153
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { repo_party, type Party } from './repo-party'
|
|
4
4
|
|
|
5
|
-
// `josh repo:party [<owner/repo>]` — say whether a repository is first-party or third-party
|
|
6
|
-
//
|
|
5
|
+
// `josh repo:party [<owner/repo>]` — say whether a repository is first-party or third-party.
|
|
6
|
+
// A command rather than a paragraph, for the reason `josh latest:scope` is
|
|
7
7
|
// one: a rule an agent applies from memory is a rule an agent can talk itself out of, and this one is
|
|
8
8
|
// argued against at exactly the moment a workflow wants to write to another repository.
|
|
9
9
|
//
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { repo_discovery } from './repo-discovery'
|
|
2
2
|
import { repo_origin } from './repo-origin'
|
|
3
3
|
|
|
4
|
-
// **First-party vs third-party, computed rather than judged
|
|
4
|
+
// **First-party vs third-party, computed rather than judged**. `CLAUDE.md`
|
|
5
5
|
// and `upstream-interrupt.md` both declared the test mechanical — owner equality between the target
|
|
6
6
|
// repository and the session's — yet nothing computed it: three prose spots restated the manual
|
|
7
7
|
// `gh api … --jq .owner.login`, and whether an owner had actually been read was left to trust. This is
|
|
@@ -56,7 +56,7 @@ function remote_owners(repository_path: string): Array<string | undefined> {
|
|
|
56
56
|
.map((url) => repo_origin.parse_origin_url(url)?.owner)
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
// Every owner `gh` could expand the `{owner}` placeholder to
|
|
59
|
+
// Every owner `gh` could expand the `{owner}` placeholder to. `GH_REPO`
|
|
60
60
|
// (`[HOST/]OWNER/REPO`) overrides the remotes outright; otherwise `gh` picks its base repository among
|
|
61
61
|
// the GitHub remotes — `upstream` ahead of `origin`, or a `gh repo set-default` choice — so in a fork
|
|
62
62
|
// checkout it can expand to the upstream owner. Answering the whole candidate set rather than
|
|
@@ -7,7 +7,7 @@ import { PROBE_TIMEOUT_MS } from '#scripts/lib/timeouts'
|
|
|
7
7
|
import { KIT_PACKAGE_NAME } from '#scripts/version/kit-descriptor'
|
|
8
8
|
import { z } from 'zod'
|
|
9
9
|
|
|
10
|
-
// The consumer-setup checks `josh doctor` runs in a repository that installs kit
|
|
10
|
+
// The consumer-setup checks `josh doctor` runs in a repository that installs kit.
|
|
11
11
|
// Each failure was a way the distribution went silently wrong: the plugin never installed so skills
|
|
12
12
|
// were missing, `core.hooksPath` set so lefthook installed nothing, the `CLAUDE.md` pointer resolving
|
|
13
13
|
// to a file that is not there before `pnpm install`, and secretlint not runnable so the pre-commit
|
|
@@ -16,8 +16,7 @@ const AUTO_MERGE_WORKFLOW_PATH = '.github/workflows/dependabot-auto-merge.yml'
|
|
|
16
16
|
// The command that needs the repository's "Allow auto-merge" setting, and the only thing in the
|
|
17
17
|
// workflow that does. Matching it rather than the filename is what keeps the report tied to the
|
|
18
18
|
// prerequisite: a file of that name which never calls `--auto` creates no prerequisite, and a
|
|
19
|
-
// consumer's own auto-merge workflow which does creates the same one kit's does
|
|
20
|
-
// (joshuafolkken/kit#834).
|
|
19
|
+
// consumer's own auto-merge workflow which does creates the same one kit's does.
|
|
21
20
|
const AUTO_MERGE_COMMAND = 'gh pr merge --auto'
|
|
22
21
|
const YAML_COMMENT_PREFIX = '#'
|
|
23
22
|
|
|
@@ -45,7 +44,7 @@ function resolve_pnpm_global_josh(): string | undefined {
|
|
|
45
44
|
|
|
46
45
|
// Whether the working directory is provably *outside* a git work tree. Purely local — no network,
|
|
47
46
|
// and it does not depend on `gh` being installed or authenticated, which is what makes it usable to
|
|
48
|
-
// decide whether a repository-scoped check applies at all
|
|
47
|
+
// decide whether a repository-scoped check applies at all.
|
|
49
48
|
//
|
|
50
49
|
// An empty root from a successful run is not an answer, so it is undetermined rather than inside.
|
|
51
50
|
function classify_top_level(top_level: string): GitTopLevel {
|
|
@@ -67,8 +66,8 @@ function classify_git_failure(exit_code: number | undefined, stderr: string): Gi
|
|
|
67
66
|
// directory instead would skip the check in every subdirectory of a consumer repository.
|
|
68
67
|
//
|
|
69
68
|
// `outside` and `undetermined` are kept apart deliberately: only proof of absence may skip the
|
|
70
|
-
// caller's check, because reporting an unknown as a clean result is
|
|
71
|
-
//
|
|
69
|
+
// caller's check, because reporting an unknown as a clean result is a false all-clear. See the two
|
|
70
|
+
// classifiers above for what proves what.
|
|
72
71
|
function resolve_git_top_level(): GitTopLevel {
|
|
73
72
|
// The C locale `toplevel` asks under is what keeps the stderr match below from failing on a
|
|
74
73
|
// translated message and bringing the spurious warning back.
|
|
@@ -162,7 +161,7 @@ function has_marked_project_file(
|
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
// Whether the project has received kit's `.github/dependabot.yml`. The npm entry's
|
|
165
|
-
// `open-pull-requests-limit: 0` is what creates the prerequisite
|
|
164
|
+
// `open-pull-requests-limit: 0` is what creates the prerequisite, so that is
|
|
166
165
|
// what is matched.
|
|
167
166
|
function has_distributed_dependabot_config(start: string, boundary?: string): boolean {
|
|
168
167
|
return has_marked_project_file(start, DEPENDABOT_CONFIG_PATH, boundary, (content) =>
|
|
@@ -181,7 +180,7 @@ function is_auto_merge_command_line(line: string): boolean {
|
|
|
181
180
|
}
|
|
182
181
|
|
|
183
182
|
// Whether the project runs a Dependabot auto-merge workflow. `gh pr merge --auto` is what needs the
|
|
184
|
-
// repository's "Allow auto-merge" setting, so that is what is matched
|
|
183
|
+
// repository's "Allow auto-merge" setting, so that is what is matched.
|
|
185
184
|
function has_auto_merge_workflow(start: string, boundary?: string): boolean {
|
|
186
185
|
return has_marked_project_file(start, AUTO_MERGE_WORKFLOW_PATH, boundary, (content) =>
|
|
187
186
|
content.split('\n').some((line) => is_auto_merge_command_line(line)),
|
|
@@ -79,7 +79,7 @@ function decide_reclaim(
|
|
|
79
79
|
|
|
80
80
|
// The discovered map, as `josh doctor` prints it. Printing it is what makes a wrong map noticeable:
|
|
81
81
|
// the map decides which checkouts other commands write to, and a silent one would only be found by
|
|
82
|
-
// the write landing in the wrong place
|
|
82
|
+
// the write landing in the wrong place.
|
|
83
83
|
function format_repository_map(map: ReadonlyMap<string, string>): string {
|
|
84
84
|
if (map.size === 0) return [REPOSITORY_MAP_HEADING, NO_REPOSITORIES_FOUND].join('\n')
|
|
85
85
|
const rows: Array<string> = []
|
|
@@ -4,7 +4,7 @@ import { lane_environment } from '#scripts/lane/lane-environment'
|
|
|
4
4
|
import { file_reader } from '#scripts/lib/read-file'
|
|
5
5
|
|
|
6
6
|
// Each discovered repository's port seed and the dev / preview ports it resolves to, plus which
|
|
7
|
-
// repositories share a seed
|
|
7
|
+
// repositories share a seed.
|
|
8
8
|
//
|
|
9
9
|
// The formula `seed × 10 + lane` makes distinct seeds occupy disjoint bands, but two repositories on
|
|
10
10
|
// the *same* seed still collide — as do the many that never set one and sit together on seed 0. That
|
package/scripts/doctor/doctor.ts
CHANGED
|
@@ -21,8 +21,7 @@ const NOT_ON_PATH = '(not on PATH)'
|
|
|
21
21
|
const SELF_DIR = path.dirname(fileURLToPath(import.meta.url))
|
|
22
22
|
// Deliberately smaller than the setting query's budget: the two run back to back, so `doctor`'s
|
|
23
23
|
// worst case is the git probe plus this plus GH_TIMEOUT_MS — 2000 + 3000 + 5000, ten seconds. That
|
|
24
|
-
// keeps
|
|
25
|
-
// stay usable when the network is unreachable.
|
|
24
|
+
// keeps the command prompt enough to stay usable when the network is unreachable.
|
|
26
25
|
const REPO_LOOKUP_TIMEOUT_MS = 3000
|
|
27
26
|
|
|
28
27
|
// Where the local applicability gates look for the artifacts that decide whether a report applies.
|
|
@@ -108,7 +107,7 @@ function resolve_gate_scope(git: GitTopLevel): GateScope | undefined {
|
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
// Which prerequisites this repository actually has, decided locally so the answer does not depend on
|
|
111
|
-
// `gh` working. The two are independent: a consumer synced
|
|
110
|
+
// `gh` working. The two are independent: a consumer synced from an older kit can have the
|
|
112
111
|
// Dependabot config and no auto-merge workflow, and a repository that only ever added an auto-merge
|
|
113
112
|
// workflow of its own has the second prerequisite and not the first.
|
|
114
113
|
function resolve_applicable(scope: GateScope): ApplicableSettings {
|
|
@@ -125,7 +124,7 @@ function has_any_applicable(applicable: ApplicableSettings): boolean {
|
|
|
125
124
|
}
|
|
126
125
|
|
|
127
126
|
// Everything past the gate reports, including a failed lookup: `could not be read` is informative
|
|
128
|
-
// while silence
|
|
127
|
+
// while silence would be a false all-clear.
|
|
129
128
|
function report_applicable_settings(
|
|
130
129
|
applicable: ApplicableSettings,
|
|
131
130
|
repo: string | undefined,
|
|
@@ -140,7 +139,7 @@ function report_applicable_settings(
|
|
|
140
139
|
|
|
141
140
|
// Last, and after the local diagnosis: this is the only part of `doctor` that touches the network,
|
|
142
141
|
// and `doctor` is what a user runs when the install is already broken. Offline or behind a hanging
|
|
143
|
-
// proxy the PATH report and `--fix` must still complete
|
|
142
|
+
// proxy the PATH report and `--fix` must still complete.
|
|
144
143
|
//
|
|
145
144
|
// Applicability is decided by the artifact rather than by the directory. `doctor` diagnoses the
|
|
146
145
|
// global install and is routinely run from a home directory or from a clone of an unrelated project;
|
|
@@ -166,7 +165,7 @@ function report_repository_settings(git: GitTopLevel): void {
|
|
|
166
165
|
|
|
167
166
|
// The discovery map, printed for whichever repository `doctor` is standing in. Nothing is printed
|
|
168
167
|
// from outside a repository: discovery is anchored on the current repository's own owner, so without
|
|
169
|
-
// one there is no map to be right or wrong about
|
|
168
|
+
// one there is no map to be right or wrong about.
|
|
170
169
|
function report_repository_map(git: GitTopLevel): void {
|
|
171
170
|
if (git.state !== 'inside') return
|
|
172
171
|
|
|
@@ -177,7 +176,7 @@ function report_repository_map(git: GitTopLevel): void {
|
|
|
177
176
|
}
|
|
178
177
|
|
|
179
178
|
// Each discovered repository's port seed and the ports it resolves to, and any seed shared by more
|
|
180
|
-
// than one of them
|
|
179
|
+
// than one of them. Anchored on the same map as `report_repository_map`, so
|
|
181
180
|
// it prints from inside a repository and nowhere else.
|
|
182
181
|
function report_port_seeds(git: GitTopLevel): void {
|
|
183
182
|
if (git.state !== 'inside') return
|
|
@@ -203,7 +202,7 @@ function consumer_root(git: GitTopLevel): string {
|
|
|
203
202
|
return git.state === 'inside' ? git.top_level : PROJECT_ROOT
|
|
204
203
|
}
|
|
205
204
|
|
|
206
|
-
// The port seed table is opt-in
|
|
205
|
+
// The port seed table is opt-in: it discovers every sibling repository
|
|
207
206
|
// and was the slowest, least diagnostic part of the default output. `--ports` brings it back.
|
|
208
207
|
function run_reports(ctx: DoctorContext, git: GitTopLevel, options: DoctorOptions): void {
|
|
209
208
|
print_report(ctx)
|
|
@@ -220,7 +219,7 @@ function main(): void {
|
|
|
220
219
|
|
|
221
220
|
// Resolved once and shared: `doctor` is what a user runs when things are already broken, and a
|
|
222
221
|
// second `git rev-parse` would add a second timeout to a command whose whole contract is to stay
|
|
223
|
-
// responsive when git itself is hanging
|
|
222
|
+
// responsive when git itself is hanging.
|
|
224
223
|
const git = doctor_io.resolve_git_top_level()
|
|
225
224
|
|
|
226
225
|
run_reports(ctx, git, options)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// What a `backlogrun` parent reads, and what that trims from a full read
|
|
1
|
+
// What a `backlogrun` parent reads, and what that trims from a full read.
|
|
2
2
|
//
|
|
3
3
|
// **The parent is the scheduler, and it never implements.** It reads `backlog:next`, dispatches each
|
|
4
4
|
// child in its own delegated `fullrun` unit, opens lanes, runs the progress watcher and the hand-off,
|
|
@@ -17,9 +17,8 @@ import { read_set_trim } from './read-set-trim'
|
|
|
17
17
|
const BACKLOGRUN = 'backlogrun'
|
|
18
18
|
|
|
19
19
|
// **The `SKILL.md` sections the `backlogrun` parent never uses.** It edits no rule mid-run (§3, read
|
|
20
|
-
// only on an editing turn). The implementer-only rules
|
|
21
|
-
//
|
|
22
|
-
// so there is no section of them left to trim.
|
|
20
|
+
// only on an editing turn). The implementer-only rules — the `into` target, the working-tree hold,
|
|
21
|
+
// the Issue's comments — are single rows of §2's table, so there is no section of them to trim.
|
|
23
22
|
const UNUSED_SKILL_SECTIONS: ReadonlyArray<string> = [
|
|
24
23
|
'3. What stays resident, and what is read from here',
|
|
25
24
|
]
|
|
@@ -30,9 +29,9 @@ const SKIPPED_POINT_OF_USE: ReadonlySet<string> = new Set<string>()
|
|
|
30
29
|
|
|
31
30
|
// **The parent runs the end-of-run retrospective** (`retrospective.md`) when `run:step` prints it, but its
|
|
32
31
|
// manifest names `retrospective.md` only through `backlogrun-steps.md` — one hop further than the
|
|
33
|
-
// derivation follows — so the parent's reach names it
|
|
32
|
+
// derivation follows — so the parent's reach names it. **It polls a
|
|
34
33
|
// delegated unit that went silent** through `backlogrun-recovery.md`, named only from
|
|
35
|
-
// `backlogrun-child.md`, so the reach names that too
|
|
34
|
+
// `backlogrun-child.md`, so the reach names that too.
|
|
36
35
|
const REACHED_POINT_OF_USE: ReadonlySet<string> = new Set([
|
|
37
36
|
'retrospective.md',
|
|
38
37
|
'backlogrun-recovery.md',
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
// The character cap a Bash result is truncated at, read from the settings file rather than restated
|
|
2
|
-
//
|
|
3
|
-
// a middle-truncated preview and the file is then read a second time
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// nothing. Split out of `entry-read-set.ts` in joshuafolkken/kit#2161 to keep that file under its
|
|
7
|
-
// line ceiling.
|
|
1
|
+
// The character cap a Bash result is truncated at, read from the settings file rather than restated.
|
|
2
|
+
// Every entry-read document is larger than it, so a `cat` of one hands back
|
|
3
|
+
// a middle-truncated preview and the file is then read a second time. A number copied into code would
|
|
4
|
+
// be a second declaration of the cap and would drift the first time the settings changed; the
|
|
5
|
+
// harness's own default stands in only where the file declares nothing.
|
|
8
6
|
|
|
9
7
|
import path from 'node:path'
|
|
10
8
|
import { document_section } from './document-section'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path'
|
|
2
2
|
|
|
3
3
|
// Where `capped-print.ts` writes the parts of an over-cap output, and how a path is recognized as one
|
|
4
|
-
// of them
|
|
4
|
+
// of them. Both halves live here so the writer and the investigation guard,
|
|
5
5
|
// which must not count a read of a part as reading the Issue's subject, share one spelling of the
|
|
6
6
|
// shape — kept free of the writer's own imports, since the guard runs as a hook on every tool call.
|
|
7
7
|
|
|
@@ -6,7 +6,7 @@ import { bash_output_cap_reader } from './bash-output-cap'
|
|
|
6
6
|
import { capped_print_part } from './capped-print-part'
|
|
7
7
|
|
|
8
8
|
// Prints a command's output whole when it fits under the Bash output cap, and as part files when it
|
|
9
|
-
// does not
|
|
9
|
+
// does not. Past `BASH_MAX_OUTPUT_LENGTH` Claude Code saves the output and
|
|
10
10
|
// hands back a 2 KB preview, and the run spends a turn reading the saved file — 224 overflows and 132
|
|
11
11
|
// re-reads over one day's sessions, `doc:section` and `issue:read` the two most frequent `josh` sources.
|
|
12
12
|
//
|
|
@@ -1,32 +1,25 @@
|
|
|
1
1
|
// The byte ceiling for every agent-read document NO entry reads — the fallback budget, a ratchet.
|
|
2
2
|
//
|
|
3
|
-
// **This is
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
3
|
+
// **This is the secondary budget.** The primary one is the entry total (`entry-read-budget.ts`): a
|
|
4
|
+
// document a workflow entry reads is held by that entry's total and carries no ceiling here, so
|
|
5
|
+
// neither budget holds it twice. What is left for this list is the documents no entry reads — the
|
|
6
|
+
// reference documents a human browses, drawn by `document-reachability.ts` from `read:set`'s output
|
|
7
|
+
// rather than by a hand-written table.
|
|
8
8
|
//
|
|
9
|
-
// Agent-read documents (`.claude/skills/**/*.md`, `prompts/**/*.md` and the
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// ceiling, when the list names a file that no longer exists, or when an unreached file has no entry
|
|
15
|
-
// here.
|
|
9
|
+
// Agent-read documents (`.claude/skills/**/*.md`, `prompts/**/*.md` and the `docs/josh-commands*.md`
|
|
10
|
+
// references) swell when nothing holds their size — a PR that adds a few lines at a time goes unseen.
|
|
11
|
+
// This list is that hold for the unreached ones: `document-byte-budget.test.ts` fails
|
|
12
|
+
// `pnpm josh gate` when such a document grows past its recorded ceiling, when the list names a file
|
|
13
|
+
// that no longer exists, or when an unreached file has no entry here.
|
|
16
14
|
//
|
|
17
15
|
// THE RECORDED CEILING IS BLOCK-QUANTIZED — this is what stops parallel command-adding lanes from
|
|
18
|
-
// serializing on this file
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
// diff. This replaced the earlier exact-size-plus-512-slack ratchet, whose tight slack forced
|
|
26
|
-
// `docs/josh-commands.md` — pinned at its ceiling — to bump on every command addition, the
|
|
27
|
-
// serialization point #2231 removed. It also retired the bespoke `JOSH_COMMANDS_CEILING_BYTES` hard
|
|
28
|
-
// cap and its per-bump changelog comment: the uniform block ratchet now holds that document like any
|
|
29
|
-
// other, so the second cap was a second line to bump for no added hold.
|
|
16
|
+
// serializing on this file. Each entry's `bytes` is not the document's exact size but the smallest
|
|
17
|
+
// multiple of `BLOCK_BYTES` at or above it, and that value IS the ceiling. A document that grows
|
|
18
|
+
// within its current block needs no edit here, so most command-adding PRs leave this file untouched
|
|
19
|
+
// rather than bumping a shared line; a document that crosses a block boundary bumps to the next
|
|
20
|
+
// multiple — the same value from every lane, an identical change git auto-merges, not a hand-picked
|
|
21
|
+
// slack unit two branches fight over. Growth is still bounded: the block is the whole of a document's
|
|
22
|
+
// headroom, so it cannot swell without a visible, deterministic bump in the diff.
|
|
30
23
|
//
|
|
31
24
|
// HOW TO RAISE (or LOWER) A CEILING — this file is the only place, on purpose. When the gate reports a
|
|
32
25
|
// document over its ceiling, copy the exact value the message names (the next block multiple) into
|
|
@@ -65,39 +58,25 @@ function block_ceiling(size: number): number {
|
|
|
65
58
|
// unreached file, so the definition cannot rot as documents move on or off the execution path.
|
|
66
59
|
const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
|
|
67
60
|
{ path: '.claude/skills/dependency-update/SKILL.md', bytes: 8192 },
|
|
68
|
-
|
|
69
|
-
{ path: '.claude/skills/epic-commands/
|
|
70
|
-
{ path: '.claude/skills/epic-commands/
|
|
71
|
-
{ path: '.claude/skills/epic-commands/execution-waves.md', bytes: 12_288 },
|
|
61
|
+
{ path: '.claude/skills/epic-commands/SKILL.md', bytes: 16_384 },
|
|
62
|
+
{ path: '.claude/skills/epic-commands/epic-bundle.md', bytes: 8192 },
|
|
63
|
+
{ path: '.claude/skills/epic-commands/execution-waves.md', bytes: 8192 },
|
|
72
64
|
{ path: '.claude/skills/verify-ui/SKILL.md', bytes: 8192 },
|
|
65
|
+
{ path: '.claude/skills/workflow-commands/backlogrun-handoff-report.md', bytes: 4096 },
|
|
73
66
|
{ path: '.claude/skills/workflow-commands/fullrun-steps.md', bytes: 8192 },
|
|
74
67
|
{ path: '.claude/skills/workflow-commands/into-target.md', bytes: 4096 },
|
|
75
68
|
{ path: '.claude/skills/workflow-commands/issue-comments.md', bytes: 8192 },
|
|
76
69
|
{ path: '.claude/skills/workflow-commands/issue-fold-existing.md', bytes: 4096 },
|
|
77
|
-
{ path: '.claude/skills/workflow-commands/needs-human-review.md', bytes:
|
|
70
|
+
{ path: '.claude/skills/workflow-commands/needs-human-review.md', bytes: 4096 },
|
|
78
71
|
{ path: '.claude/skills/workflow-commands/observation-filing.md', bytes: 12_288 },
|
|
79
|
-
// joshuafolkken/kit#3176 moved the ledger out of `observation-filing.md`, read only when it appends.
|
|
80
72
|
{ path: '.claude/skills/workflow-commands/observation-ledger.md', bytes: 12_288 },
|
|
81
|
-
// `pre-gate-cut.md` left this per-document budget in joshuafolkken/kit#2289: it became a point-of-use
|
|
82
|
-
// document, so its bytes are now held by every entry's total read (`entry-read-budget.ts`) and the
|
|
83
|
-
// two budgets must not hold it twice — the reachability line moved it from `unreached` to
|
|
84
|
-
// `point-of-use`.
|
|
85
73
|
{ path: '.claude/skills/workflow-commands/prerequisite.md', bytes: 8192 },
|
|
86
|
-
{ path: '.claude/skills/workflow-commands/target-repository.md', bytes:
|
|
74
|
+
{ path: '.claude/skills/workflow-commands/target-repository.md', bytes: 4096 },
|
|
87
75
|
{ path: '.claude/skills/workflow-commands/working-tree-hold.md', bytes: 8192 },
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
// here out of `backlogrun-steps.md`, so a run reads it only when it asks about those commands.
|
|
91
|
-
// joshuafolkken/kit#3277 moved the run, lane and session commands to `docs/josh-commands-run.md`.
|
|
92
|
-
// joshuafolkken/kit#3280 moved the issue, epic, backlog and review commands to
|
|
93
|
-
// `docs/josh-commands-backlog.md`.
|
|
94
|
-
// joshuafolkken/kit#3278 moved `josh latest` and `josh overrides` — commands a person types — from
|
|
95
|
-
// the automation page to `docs/josh-commands.md`, which grew one block and the automation page shrank one.
|
|
96
|
-
{ path: 'docs/josh-commands-automation.md', bytes: 49_152 },
|
|
97
|
-
{ path: 'docs/josh-commands-run.md', bytes: 57_344 },
|
|
76
|
+
{ path: 'docs/josh-commands-automation.md', bytes: 53_248 },
|
|
77
|
+
{ path: 'docs/josh-commands-run.md', bytes: 65_536 },
|
|
98
78
|
{ path: 'docs/josh-commands-backlog.md', bytes: 57_344 },
|
|
99
|
-
{ path: 'docs/josh-commands.md', bytes:
|
|
100
|
-
// joshuafolkken/kit#3279 moved the label sections here out of `docs/josh-commands-backlog.md`.
|
|
79
|
+
{ path: 'docs/josh-commands.md', bytes: 45_056 },
|
|
101
80
|
{ path: 'docs/labels-and-run-states.md', bytes: 8192 },
|
|
102
81
|
{ path: 'prompts/coding-standards.md', bytes: 8192 },
|
|
103
82
|
{ path: 'prompts/collaboration-workflow.md', bytes: 8192 },
|
|
@@ -105,34 +84,25 @@ const DOCUMENT_BYTE_BUDGET: ReadonlyArray<DocumentBudget> = [
|
|
|
105
84
|
{ path: 'prompts/collaboration-workflow/gh-rest.md', bytes: 8192 },
|
|
106
85
|
{ path: 'prompts/collaboration-workflow/glossary.md', bytes: 4096 },
|
|
107
86
|
{ path: 'prompts/collaboration-workflow/issue-citation.md', bytes: 4096 },
|
|
108
|
-
|
|
109
|
-
{ path: 'prompts/collaboration-workflow/issue-template.md', bytes: 8192 },
|
|
87
|
+
{ path: 'prompts/collaboration-workflow/issue-template.md', bytes: 12_288 },
|
|
110
88
|
{ path: 'prompts/collaboration-workflow/operating-rules.md', bytes: 12_288 },
|
|
111
|
-
// #3177 moved the rationale to `docs/maintainers/output-bounds-rationale.md`.
|
|
112
89
|
{ path: 'prompts/collaboration-workflow/output-bounds.md', bytes: 4096 },
|
|
113
90
|
{ path: 'prompts/collaboration-workflow/overview.md', bytes: 4096 },
|
|
114
|
-
// #3178 replaced the review-chain restatement with a pointer to `chain-rule.md`.
|
|
115
91
|
{ path: 'prompts/collaboration-workflow/plan-comment.md', bytes: 8192 },
|
|
116
|
-
{ path: 'prompts/collaboration-workflow/principles.md', bytes:
|
|
92
|
+
{ path: 'prompts/collaboration-workflow/principles.md', bytes: 16_384 },
|
|
117
93
|
{ path: 'prompts/collaboration-workflow/proposal-request.md', bytes: 4096 },
|
|
118
|
-
// #3178 dropped the restatements `report:lint` and `chain-rule.md` already carry.
|
|
119
94
|
{ path: 'prompts/collaboration-workflow/report-format.md', bytes: 16_384 },
|
|
120
|
-
// #3177 cut it to the four questions; the history and lists moved to `docs/maintainers/residency-rationale.md`.
|
|
121
95
|
{ path: 'prompts/collaboration-workflow/residency.md', bytes: 8192 },
|
|
122
|
-
|
|
123
|
-
// #3179 adds the `index-mutation` / `destructive-command` / `protected-file` entries.
|
|
124
|
-
{ path: 'prompts/collaboration-workflow/rule-delivery.md', bytes: 20_480 },
|
|
96
|
+
{ path: 'prompts/collaboration-workflow/rule-delivery.md', bytes: 4096 },
|
|
125
97
|
{ path: 'prompts/collaboration-workflow/shell-body.md', bytes: 8192 },
|
|
126
|
-
// #3177 moved the measurements and rejected mechanisms to `docs/maintainers/turn-batching-rationale.md`.
|
|
127
98
|
{ path: 'prompts/collaboration-workflow/turn-batching.md', bytes: 8192 },
|
|
128
99
|
{ path: 'prompts/collaboration-workflow/upstream-interrupt.md', bytes: 12_288 },
|
|
129
100
|
{ path: 'prompts/collaboration-workflow/wip-cap.md', bytes: 12_288 },
|
|
130
101
|
{ path: 'prompts/refactoring.md', bytes: 8192 },
|
|
131
|
-
// #3180 moved the history and the lint-settled proofs to `docs/maintainers/`.
|
|
132
102
|
{ path: 'prompts/review-rubric.md', bytes: 16_384 },
|
|
133
103
|
{ path: 'prompts/review.md', bytes: 16_384 },
|
|
134
104
|
{ path: 'prompts/sonar-hotspot-handling.md', bytes: 8192 },
|
|
135
|
-
{ path: 'prompts/testing-guide.md', bytes:
|
|
105
|
+
{ path: 'prompts/testing-guide.md', bytes: 16_384 },
|
|
136
106
|
]
|
|
137
107
|
|
|
138
108
|
// The recorded ceiling for one path, or undefined when it carries no budget entry.
|
|
@@ -142,7 +112,7 @@ function recorded_bytes_for(relative_path: string): number | undefined {
|
|
|
142
112
|
|
|
143
113
|
// The bytes an entry has left before its ceiling — the recorded ceiling minus the document's current
|
|
144
114
|
// size. Negative when the document is already over. `josh bytes` prints it as the headroom before an
|
|
145
|
-
// edit, the same number `josh lines` prints for code lines
|
|
115
|
+
// edit, the same number `josh lines` prints for code lines.
|
|
146
116
|
function remaining_bytes(recorded_bytes: number, current_bytes: number): number {
|
|
147
117
|
return recorded_bytes - current_bytes
|
|
148
118
|
}
|
|
@@ -169,9 +139,8 @@ function over_budget_message(
|
|
|
169
139
|
|
|
170
140
|
// The failure message the staleness test raises. A recorded ceiling more than a block above the
|
|
171
141
|
// document's actual size is a stale-loose ratchet: the document shrank across a block boundary and
|
|
172
|
-
// its record was never lowered, so the ceiling no longer holds the reduction
|
|
173
|
-
//
|
|
174
|
-
// block multiple to lower the record to.
|
|
142
|
+
// its record was never lowered, so the ceiling no longer holds the reduction. It names the file,
|
|
143
|
+
// its recorded ceiling, its actual size, and the block multiple to lower the record to.
|
|
175
144
|
function stale_budget_message(
|
|
176
145
|
relative_path: string,
|
|
177
146
|
recorded_bytes: number,
|
|
@@ -7,7 +7,7 @@ import { entry_read_budget } from './entry-read-budget'
|
|
|
7
7
|
// The byte-ceiling check the gate's `document-byte-budget.test.ts` runs, made reachable on the fast
|
|
8
8
|
// between-edits path — `josh lint:related` calls it over the files it already resolved so a mandated
|
|
9
9
|
// documentation update that grows a document past its ceiling is caught in seconds rather than after
|
|
10
|
-
// the 80–90-second gate
|
|
10
|
+
// the 80–90-second gate. The ceiling and its message are
|
|
11
11
|
// `document-byte-budget.ts`'s alone: this adds no budget of its own, so the fast path can never hold
|
|
12
12
|
// a different line from the gate, and widening one can never loosen the other.
|
|
13
13
|
//
|
|
@@ -53,8 +53,8 @@ function over_budget_messages(
|
|
|
53
53
|
.filter((message): message is string => message !== undefined)
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
// The entry-total counterpart: an entry over its recorded ceiling. This is the primary budget
|
|
57
|
-
//
|
|
56
|
+
// The entry-total counterpart: an entry over its recorded ceiling. This is the primary budget,
|
|
57
|
+
// so an edit to a covered document — which grows an entry's total, not a
|
|
58
58
|
// per-document ceiling — is caught here on the same fast path. Stale ceilings are left to the gate's
|
|
59
59
|
// `entry-read-budget.test.ts`, exactly as the per-document staleness is: this path blocks growth.
|
|
60
60
|
function entry_over_budget_message(root: string, entry: string): string | undefined {
|
|
@@ -107,7 +107,7 @@ function check_files(root: string, absolute_files: ReadonlyArray<string>): numbe
|
|
|
107
107
|
// resolved change. `lint:related`'s own fallback lints a superset of the change, so the byte check
|
|
108
108
|
// widens to the whole budget rather than an empty file list — otherwise the fallback would report
|
|
109
109
|
// success on a tree it never read for bytes, and the green record the caller then writes would vouch
|
|
110
|
-
// for a byte dimension it never checked
|
|
110
|
+
// for a byte dimension it never checked.
|
|
111
111
|
function check_all(root: string): number {
|
|
112
112
|
const absolute_files = document_byte_budget.DOCUMENT_BYTE_BUDGET.map((entry) =>
|
|
113
113
|
path.join(root, entry.path),
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
// Where each agent-read document sits on the execution path, derived from `read:set` — never
|
|
2
|
-
// hand-listed
|
|
2
|
+
// hand-listed.
|
|
3
3
|
//
|
|
4
|
-
// **The per-document byte ceiling
|
|
4
|
+
// **The per-document byte ceiling cannot tell an entry read from a reference document.** A
|
|
5
5
|
// document a run reads on every entry costs it every session; one nothing routes to costs it nothing.
|
|
6
|
-
//
|
|
7
|
-
// budgeted as tightly as the workflow text a run actually reads. This splits the corpus so the
|
|
6
|
+
// This splits the corpus so the
|
|
8
7
|
// primary budget (`entry-read-budget.ts`) can be the total each entry reads, and the per-document
|
|
9
8
|
// ceiling falls back to the documents no entry reaches.
|
|
10
9
|
//
|
|
@@ -13,8 +12,8 @@
|
|
|
13
12
|
// `CLAUDE.md` every entry loads. A document `read:set` never enumerates is `unreached`, and a
|
|
14
13
|
// hand-written table of which is which would be the clone `CLAUDE.md` prohibits, drifting the first
|
|
15
14
|
// time a trigger table row moved. `CLAUDE.md` is resident by construction rather than by the graph,
|
|
16
|
-
// because it is loaded on every request whatever the entry
|
|
17
|
-
//
|
|
15
|
+
// because it is loaded on every request whatever the entry (a bare reachability walk would drop it to
|
|
16
|
+
// "off-path", which is wrong).
|
|
18
17
|
//
|
|
19
18
|
// **The corpus is passed in, never imported here.** This module sits on the runtime path
|
|
20
19
|
// (`lint-related` → `document-byte-check` → here), so it may not import `ai-document-fixture` — a test
|
|
@@ -26,7 +25,7 @@ import { entry_read_set } from './entry-read-set'
|
|
|
26
25
|
|
|
27
26
|
// The always-resident rule document. It is not an entry read — every request carries it — so it is
|
|
28
27
|
// named here rather than derived from a trigger table, and the entry-total budget adds it to every
|
|
29
|
-
// entry's total so its growth is held
|
|
28
|
+
// entry's total so its growth is held.
|
|
30
29
|
const RESIDENT_BASE: ReadonlyArray<string> = ['CLAUDE.md']
|
|
31
30
|
const WORKFLOW_DIRECTORY = '.claude/skills/workflow-commands'
|
|
32
31
|
|
|
@@ -104,7 +103,7 @@ function documents_labelled(
|
|
|
104
103
|
|
|
105
104
|
// The documents an entry reads — resident plus point-of-use. The entry-total budget governs these;
|
|
106
105
|
// the per-document ceiling falls back to the unreached rest, so neither holds a document the other
|
|
107
|
-
// does
|
|
106
|
+
// does. Both sides come from `read:set`, so no corpus is needed — which is
|
|
108
107
|
// what keeps the runtime caller (`document-byte-check`) free of the fixture the corpus lives in.
|
|
109
108
|
function covered_documents(root: string = process.cwd()): Array<string> {
|
|
110
109
|
return [...new Set([...resident_documents(root), ...point_of_use_documents()])].toSorted(
|
|
@@ -4,10 +4,10 @@ import { bash_output_cap_reader } from './bash-output-cap'
|
|
|
4
4
|
import { document_section } from './document-section'
|
|
5
5
|
import { document_section_cli } from './document-section-cli'
|
|
6
6
|
|
|
7
|
-
// `josh doc:read <file>` — a Bash-cap-safe read path for a whole document
|
|
7
|
+
// `josh doc:read <file>` — a Bash-cap-safe read path for a whole document.
|
|
8
8
|
//
|
|
9
9
|
// **A `cat` of a document larger than the Bash output cap is a truncated preview, then a second read.**
|
|
10
|
-
// `read:set` measured one entry paying for the same five files twice this way
|
|
10
|
+
// `read:set` measured one entry paying for the same five files twice this way:
|
|
11
11
|
// the shell hands back a middle-truncated preview, so the file is read again with the `Read` tool. This
|
|
12
12
|
// command is the path that avoids it — it never emits an over-cap document through the shell at all.
|
|
13
13
|
//
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Pulling machine-checkable references out of the distributed documents, so a few structural scans
|
|
2
|
-
// can replace the ~140 per-phrase marker suites the documents used to carry
|
|
2
|
+
// can replace the ~140 per-phrase marker suites the documents used to carry.
|
|
3
3
|
// Every function here is a pure string extractor: it takes document text and returns the references
|
|
4
4
|
// it names, which is what lets the scans that call it be checked on a synthetic string with a
|
|
5
5
|
// deliberately broken reference in it.
|
|
@@ -18,12 +18,20 @@ const LABEL_PATTERN = /(?:labels\[\]=|\/labels\/|labels -f name=)([a-z][a-z0-9:_
|
|
|
18
18
|
// quotes — `` `backlogrun-progress.md` → "The hand-off" ``. The code span is optional and a section
|
|
19
19
|
// number may sit between the arrow and the heading (`` `SKILL.md` → §1, "…" ``): both forms are in
|
|
20
20
|
// the documents, as is a name linked to its file (`` [`residency.md`](./residency.md) →「…」 ``), and a
|
|
21
|
-
// pattern that skipped them let a broken reference of each form through
|
|
21
|
+
// pattern that skipped them would let a broken reference of each form through.
|
|
22
22
|
// The backreference pairs the code span's backticks, and the lookbehind keeps a bare name from
|
|
23
23
|
// starting mid-path — inside a URL or after an unpaired backtick.
|
|
24
24
|
const SECTION_PATTERN =
|
|
25
25
|
/(?<![\w./:`-])(?<tick>`?)(?<file>[\w./-]+\.md)\k<tick>\s*→\s*(?:§\w+,\s*)?["「](?<heading>[^"」]+)["」]/gu
|
|
26
26
|
|
|
27
|
+
// A reference to a heading of the same document, which names no file: a quoted heading followed by
|
|
28
|
+
// `above` or `below`, or an arrow with no file name before it — `→ "The hand-off"`. A broken one
|
|
29
|
+
// sends the reader after a section that is not there as surely as a cross-document one does.
|
|
30
|
+
// A bare arrow is read only once every `file.md →` form is dropped, so a
|
|
31
|
+
// cross-document reference is never re-read as a reference to the document it sits in.
|
|
32
|
+
const ADJACENT_PATTERN = /["「](?<heading>[^"「」]+)["」]\s+(?:above|below)\b/gu
|
|
33
|
+
const BARE_ARROW_PATTERN = /→\s*(?:§\w+,\s*)?["「](?<heading>[^"「」]+)["」]/gu
|
|
34
|
+
|
|
27
35
|
// A markdown link's `(target)`, dropped before the section scan so a linked name sits right before its
|
|
28
36
|
// arrow — the link text already carries the file the reference names.
|
|
29
37
|
const LINK_TARGET_PATTERN = /\]\([^)\s]*\)/gu
|
|
@@ -79,6 +87,20 @@ function section_references(text: string): Array<SectionReference> {
|
|
|
79
87
|
.filter((reference) => !is_placeholder_file(reference.file))
|
|
80
88
|
}
|
|
81
89
|
|
|
90
|
+
function headings_matching(text: string, pattern: RegExp): Array<string> {
|
|
91
|
+
return matches(text, pattern).map(({ groups }) => groups?.['heading'] ?? '')
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function adjacent_references(text: string): Array<string> {
|
|
95
|
+
return headings_matching(text, ADJACENT_PATTERN)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function bare_arrow_references(text: string): Array<string> {
|
|
99
|
+
const unfiled = text.replaceAll(LINK_TARGET_PATTERN, '').replaceAll(SECTION_PATTERN, '')
|
|
100
|
+
|
|
101
|
+
return headings_matching(unfiled, BARE_ARROW_PATTERN)
|
|
102
|
+
}
|
|
103
|
+
|
|
82
104
|
function link_targets(text: string): Array<string> {
|
|
83
105
|
return matches(text, LINK_PATTERN)
|
|
84
106
|
.map((match) => match[1] ?? '')
|
|
@@ -105,6 +127,8 @@ function reference_forms(title: string): Array<string> {
|
|
|
105
127
|
}
|
|
106
128
|
|
|
107
129
|
const document_scan = {
|
|
130
|
+
adjacent_references,
|
|
131
|
+
bare_arrow_references,
|
|
108
132
|
command_references,
|
|
109
133
|
label_references,
|
|
110
134
|
link_targets,
|