@joshuafolkken/kit 1.1229.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 +24 -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 +27 -16
- package/.claude/skills/workflow-commands/latest-gate.md +18 -29
- 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/.github/workflows/publish.yml +2 -0
- package/.vscode/tasks.json +14 -0
- package/CLAUDE.md +10 -61
- package/README.md +38 -57
- 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-FIVDHQGT.js → chunk-43G45XJF.js} +18 -20
- package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TW4MQUL.js} +284 -362
- package/dist/hooks/{chunk-5VMKCCC4.js → chunk-76RK6E3H.js} +13 -11
- package/dist/hooks/{chunk-RNWHN5BP.js → chunk-DZWZ3DKY.js} +4 -4
- package/dist/hooks/{chunk-5VNDSNG3.js → chunk-FZ6FUSBM.js} +1 -1
- package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GG72ANKI.js} +1 -1
- package/dist/hooks/{chunk-6HJJXRBX.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-TQNPDZNH.js → chunk-NZBHG6FW.js} +7 -5
- package/dist/hooks/chunk-NZN2UFI6.js +2409 -0
- package/dist/hooks/{chunk-F56MFS4B.js → chunk-R6CRQEAL.js} +4 -4
- package/dist/hooks/chunk-SYSRHRWU.js +1589 -0
- package/dist/hooks/{chunk-55HHG5PX.js → chunk-TLJYAGZK.js} +799 -903
- 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 +213 -197
- 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 -201
- package/dist/josh.js +540 -137
- 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 +4 -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 +162 -0
- package/scripts/gate/core-budget.ts +134 -91
- package/scripts/gate/gate-ledger.ts +114 -0
- package/scripts/gate/gate-log.ts +7 -9
- package/scripts/gate/gate-plan.ts +103 -35
- package/scripts/gate/gate-report.ts +39 -21
- 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 +313 -0
- 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 +60 -53
- 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 +12 -8
- 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 +35 -0
- 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 +49 -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 +75 -15
- package/scripts/issue/issue-file-fold.ts +155 -0
- package/scripts/issue/issue-file.ts +14 -6
- package/scripts/issue/issue-fold-cli.ts +14 -9
- package/scripts/issue/issue-fold.ts +23 -8
- package/scripts/issue/issue-labels.ts +46 -37
- 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 +165 -0
- package/scripts/issue/issue-release.ts +58 -0
- 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 +32 -34
- 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 +33 -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 +11 -5
- package/scripts/josh/josh-commands-lane.ts +16 -5
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-maintenance.ts +2 -2
- 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 +10 -10
- 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 +20 -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 +44 -30
- 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 +25 -24
- package/scripts/lane/lane-output.ts +4 -3
- package/scripts/lane/lane-paths.ts +22 -8
- package/scripts/lane/lane-phase.ts +33 -0
- package/scripts/lane/lane-reap.ts +2 -2
- package/scripts/lane/lane-registry.ts +27 -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 +140 -0
- 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-environment.ts +1 -0
- package/scripts/release/github-release-runs.ts +115 -0
- package/scripts/release/github-release.ts +13 -67
- 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 +68 -37
- 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 +10 -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 +172 -43
- 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 +62 -48
- 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 -33
- package/scripts/run/wake/run-wake-describe.ts +76 -29
- 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 +13 -21
- 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 -328
- 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 +129 -98
- 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/templates/workflows/github-release.yml +4 -0
- package/dist/hooks/chunk-NV2JRZZO.js +0 -6385
- package/dist/hooks/chunk-RKUAD3I6.js +0 -90
- package/dist/hooks/chunk-WPALEIRX.js +0 -18
- package/scripts/backlog/backlog-restructure.ts +0 -152
- package/scripts/rules/issue-fold-rule.ts +0 -72
- package/scripts/rules/wip-cap.ts +0 -63
- package/scripts/run/run-issue-number.ts +0 -19
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
1
2
|
import path from 'node:path'
|
|
2
3
|
import { git_spawn } from '#scripts/git/git-spawn'
|
|
3
4
|
|
|
4
|
-
// The no-argument half of
|
|
5
|
+
// The no-argument half of `josh lines`. `josh lines <path>` answers for a file someone
|
|
5
6
|
// already named; a file near the limit that nobody has named yet is invisible until the gate reports
|
|
6
7
|
// it. This enumerates the repository's own lint-target files so the no-argument scan can report every
|
|
7
8
|
// one of them near the limit at once, before the first edit rather than after it.
|
|
@@ -51,13 +52,16 @@ function split_names(output: string): ReadonlyArray<string> {
|
|
|
51
52
|
|
|
52
53
|
// The names resolve against the repository `root`, never the process cwd: `--full-name` prints them
|
|
53
54
|
// relative to the root wherever the command runs, so resolving against cwd would double the prefix
|
|
54
|
-
// and drop every file when the command is invoked from a subdirectory.
|
|
55
|
+
// and drop every file when the command is invoked from a subdirectory. `--cached` still lists a file
|
|
56
|
+
// deleted from the working tree but not yet staged, so a path no longer on disk is dropped — every
|
|
57
|
+
// consumer reads or lints the file, and a deletion in flight would otherwise fail them.
|
|
55
58
|
async function lint_target_files(root: string): Promise<ReadonlyArray<string>> {
|
|
56
59
|
const output = await git_spawn.read([...LS_FILES_FLAGS, WHOLE_TREE_PATHSPEC])
|
|
57
60
|
|
|
58
61
|
return split_names(output)
|
|
59
62
|
.filter((name) => is_lint_target(name))
|
|
60
63
|
.map((name) => path.resolve(root, name))
|
|
64
|
+
.filter((file_path) => existsSync(file_path))
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
const line_targets = {
|
|
@@ -5,7 +5,7 @@ import { git_command } from '#scripts/git/git-command'
|
|
|
5
5
|
import { line_budget, type FileBudget, type LineBudget } from './line-budget'
|
|
6
6
|
import { line_targets } from './line-targets'
|
|
7
7
|
|
|
8
|
-
// `josh lines` —
|
|
8
|
+
// `josh lines` — ask before writing. `pnpm josh lint` reports the
|
|
9
9
|
// file line limit only once it has been broken, and by then the writing is finished and the splitting
|
|
10
10
|
// that follows is rework. This answers the same question before the first edit: how many code lines
|
|
11
11
|
// each target file already has, and how many are left.
|
|
@@ -33,7 +33,7 @@ const NONE_NEAR = 'no files near the limit'
|
|
|
33
33
|
// at all. It deliberately does not name eslint, because the last of those is not eslint's doing.
|
|
34
34
|
const NOT_A_FILE = 'not counted: not a regular file'
|
|
35
35
|
const NOT_COUNTED = 'not counted: no line count for this path'
|
|
36
|
-
// The third reason, and the one that replaced a wrong number
|
|
36
|
+
// The third reason, and the one that replaced a wrong number. This project's
|
|
37
37
|
// eslint enforces no `max-lines` here, so there is nothing to report a budget against — and the
|
|
38
38
|
// alternative to saying so is quoting kit's limit for someone else's project, which is the defect. It
|
|
39
39
|
// names no cause because there are several: the rule is turned off for this path, no configuration
|
|
@@ -63,7 +63,7 @@ function row(relative_path: string, entry: FileBudget): string {
|
|
|
63
63
|
// The threshold is printed with the rows rather than left implicit: a reader who sees "near the limit"
|
|
64
64
|
// on one file and nothing on the next needs the boundary to know which side a third one is on.
|
|
65
65
|
//
|
|
66
|
-
// **It is read off the budgets rather than from a limit of this command's own
|
|
66
|
+
// **It is read off the budgets rather than from a limit of this command's own**.
|
|
67
67
|
// Each file's limit is whatever that project's eslint enforces for it, so there is a line count to
|
|
68
68
|
// print here only where every counted file agrees on one; where they do not — or where none was
|
|
69
69
|
// resolved — the boundary is stated as the share it has always been, and each row carries its own
|
|
@@ -6,7 +6,7 @@ import { lane_cache_run } from '#scripts/lane/lane-cache-run'
|
|
|
6
6
|
import { buffered_process, FAIL_EXIT_CODE } from '#scripts/lib/buffered-process'
|
|
7
7
|
|
|
8
8
|
const ARGV_START = 2
|
|
9
|
-
// `--no-progress` turns off cspell's per-file `N/1607 <path> cached` line
|
|
9
|
+
// `--no-progress` turns off cspell's per-file `N/1607 <path> cached` line.
|
|
10
10
|
// Those lines ran to 1,607 of them — the whole output past the 8,000-character tool cap — so a gate
|
|
11
11
|
// that failed on one unknown word buried the failure under progress and a run could read only the
|
|
12
12
|
// first of several failures. The summary and the issue lines it prints are untouched; only the
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { FAIL_EXIT_CODE, type BufferedProcessResult } from '#scripts/lib/buffered-process'
|
|
2
|
+
import type { ESLint } from 'eslint'
|
|
3
|
+
|
|
4
|
+
// `import/no-cycle` reads other files, and the lint cache keys a verdict on the linted file's own
|
|
5
|
+
// content. So once a cycle is closed by editing one side of it, the untouched side keeps its cached
|
|
6
|
+
// `Dependency cycle detected` until its own content changes (joshuafolkken/kit#3641). The opposite
|
|
7
|
+
// error cannot happen: a new cycle always contains the file that gained the import, and that file is
|
|
8
|
+
// re-linted.
|
|
9
|
+
//
|
|
10
|
+
// A lint run therefore re-reads a cached red that names the rule: the files reported for it are
|
|
11
|
+
// linted once more without the cache, and their fresh results replace the cached ones. A run that
|
|
12
|
+
// reports no cycle never reaches this, so the green path costs what it did.
|
|
13
|
+
//
|
|
14
|
+
// That holds for a run narrowed to one change's files as much as for the whole tree: the change can
|
|
15
|
+
// hold both sides of a cycle, and the side a later edit leaves alone keeps its cached report.
|
|
16
|
+
//
|
|
17
|
+
// The cached run is asked again through the Node API rather than read off the first run's report:
|
|
18
|
+
// that report is the stylish text, and taking a file out of it means re-deriving its problem
|
|
19
|
+
// counts. The second asking is answered from the cache the first one just wrote.
|
|
20
|
+
const NO_CYCLE_RULE = 'import/no-cycle'
|
|
21
|
+
const FORMATTER = 'stylish'
|
|
22
|
+
const UNCACHED_SUFFIX = '.uncached'
|
|
23
|
+
|
|
24
|
+
interface Linters {
|
|
25
|
+
cached: ESLint
|
|
26
|
+
fresh: ESLint
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface CycleRecheckOptions {
|
|
30
|
+
cache_file: string
|
|
31
|
+
// What the run linted — the whole tree, or one change's files — so the cached run is asked the
|
|
32
|
+
// question it was asked the first time.
|
|
33
|
+
patterns: ReadonlyArray<string>
|
|
34
|
+
// What the fixture test varies: the directory linted and the configuration it is linted with.
|
|
35
|
+
eslint_options?: ESLint.Options
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// The exit code is eslint's "finished and reported problems", not any failure: a run that could not
|
|
39
|
+
// finish — a configuration that does not load, a rule that threw — exits 2 and may name the rule
|
|
40
|
+
// too, and asking it again throws the same error here, ahead of both buffered reports.
|
|
41
|
+
function is_cycle_reported(result: BufferedProcessResult): boolean {
|
|
42
|
+
return result.exit_code === FAIL_EXIT_CODE && result.output.includes(NO_CYCLE_RULE)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function has_cycle_message(result: ESLint.LintResult): boolean {
|
|
46
|
+
return result.messages.some((message) => message.ruleId === NO_CYCLE_RULE)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function cached_options(options: CycleRecheckOptions): ESLint.Options {
|
|
50
|
+
return {
|
|
51
|
+
...options.eslint_options,
|
|
52
|
+
cache: true,
|
|
53
|
+
cacheStrategy: 'content',
|
|
54
|
+
cacheLocation: options.cache_file,
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// A linter that runs without a cache deletes the cache file it would have used, and that defaults to
|
|
59
|
+
// the very file the lint run keeps. So the uncached linter is pointed at a sibling path nothing
|
|
60
|
+
// ever writes: the re-reading must not cost the next run its whole cache.
|
|
61
|
+
function fresh_options(options: CycleRecheckOptions): ESLint.Options {
|
|
62
|
+
return {
|
|
63
|
+
...options.eslint_options,
|
|
64
|
+
cache: false,
|
|
65
|
+
cacheLocation: `${options.cache_file}${UNCACHED_SUFFIX}`,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// `eslint` is loaded here, only past the cycle report: it is an optional peer a basic-profile
|
|
70
|
+
// consumer may not have, and this module is imported by the entry of every `josh lint`, which has to
|
|
71
|
+
// reach its skip notice there.
|
|
72
|
+
async function create_linters(options: CycleRecheckOptions): Promise<Linters> {
|
|
73
|
+
const eslint = await import('eslint')
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
cached: new eslint.ESLint(cached_options(options)),
|
|
77
|
+
fresh: new eslint.ESLint(fresh_options(options)),
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function lint_fresh(
|
|
82
|
+
linter: ESLint,
|
|
83
|
+
cached: ReadonlyArray<ESLint.LintResult>,
|
|
84
|
+
): Promise<Map<string, ESLint.LintResult>> {
|
|
85
|
+
const suspects = cached.filter((result) => has_cycle_message(result))
|
|
86
|
+
if (suspects.length === 0) return new Map()
|
|
87
|
+
const fresh = await linter.lintFiles(suspects.map((result) => result.filePath))
|
|
88
|
+
|
|
89
|
+
return new Map(fresh.map((result) => [result.filePath, result]))
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async function report(
|
|
93
|
+
linter: ESLint,
|
|
94
|
+
results: Array<ESLint.LintResult>,
|
|
95
|
+
): Promise<Pick<BufferedProcessResult, 'output' | 'exit_code'>> {
|
|
96
|
+
const formatter = await linter.loadFormatter(FORMATTER)
|
|
97
|
+
const is_failed = results.some((result) => result.errorCount > 0)
|
|
98
|
+
|
|
99
|
+
return { output: await formatter.format(results), exit_code: is_failed ? FAIL_EXIT_CODE : 0 }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async function verify(
|
|
103
|
+
result: BufferedProcessResult,
|
|
104
|
+
options: CycleRecheckOptions,
|
|
105
|
+
): Promise<BufferedProcessResult> {
|
|
106
|
+
if (!is_cycle_reported(result)) return result
|
|
107
|
+
const started_at = performance.now()
|
|
108
|
+
const linters = await create_linters(options)
|
|
109
|
+
const cached = await linters.cached.lintFiles([...options.patterns])
|
|
110
|
+
const fresh = await lint_fresh(linters.fresh, cached)
|
|
111
|
+
const verified = await report(
|
|
112
|
+
linters.fresh,
|
|
113
|
+
cached.map((entry) => fresh.get(entry.filePath) ?? entry),
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
return { ...verified, elapsed_ms: result.elapsed_ms + performance.now() - started_at }
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const cycle_recheck = { verify }
|
|
120
|
+
|
|
121
|
+
export type { CycleRecheckOptions }
|
|
122
|
+
export { cycle_recheck, NO_CYCLE_RULE }
|
package/scripts/lint/format.ts
CHANGED
|
@@ -19,8 +19,7 @@ async function run_step(args: ReadonlyArray<string>, directory: string): Promise
|
|
|
19
19
|
|
|
20
20
|
// prettier first, deliberately: `eslint --fix` exits 1 whenever a non-autofixable error remains, so
|
|
21
21
|
// putting it first would mean one unused variable anywhere in the tree stops prettier from running.
|
|
22
|
-
// A basic project without Prettier or ESLint is skipped with the same reason `josh lint` prints
|
|
23
|
-
// (joshuafolkken/kit#2693, joshuafolkken/kit#2606).
|
|
22
|
+
// A basic project without Prettier or ESLint is skipped with the same reason `josh lint` prints.
|
|
24
23
|
async function run_unless_skipped(
|
|
25
24
|
check: string,
|
|
26
25
|
reason: string | undefined,
|
|
@@ -8,22 +8,35 @@ import {
|
|
|
8
8
|
FAIL_EXIT_CODE,
|
|
9
9
|
type BufferedProcessResult,
|
|
10
10
|
} from '#scripts/lib/buffered-process'
|
|
11
|
+
import { cycle_recheck, type CycleRecheckOptions } from './cycle-recheck'
|
|
11
12
|
|
|
12
13
|
const PRETTIER_ARGS = ['exec', 'prettier', '--check', '.'] as const
|
|
13
14
|
// This — not the `lint:eslint` map entry — is the eslint invocation `josh gate` reaches, so the
|
|
14
|
-
// cache flags come from the same constant the ignore rules are asserted against
|
|
15
|
-
//
|
|
15
|
+
// cache flags come from the same constant the ignore rules are asserted against.
|
|
16
|
+
// A copy here would keep writing the old location the day that constant
|
|
16
17
|
// moves, with every test still green.
|
|
17
|
-
const
|
|
18
|
+
const WHOLE_TREE = '.'
|
|
19
|
+
const ESLINT_ARGS = ['exec', 'eslint', WHOLE_TREE, ...ESLINT_CACHE_FLAGS] as const
|
|
20
|
+
const WHOLE_TREE_RECHECK: CycleRecheckOptions = {
|
|
21
|
+
cache_file: ESLINT_CACHE_FILE,
|
|
22
|
+
patterns: [WHOLE_TREE],
|
|
23
|
+
}
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// What one eslint run is made of: the child's arguments, and what re-reading a cached cycle report
|
|
26
|
+
// (joshuafolkken/kit#3641) needs to ask the same question again — the cache file and the targets.
|
|
27
|
+
interface EslintRun {
|
|
28
|
+
args: ReadonlyArray<string>
|
|
29
|
+
recheck: CycleRecheckOptions
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// The finished report is re-read before it is returned, inside the lane's cache sharing, because
|
|
33
|
+
// the re-reading uses that same cache file.
|
|
34
|
+
async function run_eslint(eslint: EslintRun): Promise<BufferedProcessResult> {
|
|
35
|
+
return await lane_cache_run.run(eslint.recheck.cache_file, async () => {
|
|
36
|
+
const result = await buffered_process.run_buffered_process(eslint.args)
|
|
37
|
+
|
|
38
|
+
return await cycle_recheck.verify(result, eslint.recheck)
|
|
39
|
+
})
|
|
27
40
|
}
|
|
28
41
|
|
|
29
42
|
function write_output(result: BufferedProcessResult): void {
|
|
@@ -46,13 +59,12 @@ async function run_prettier(
|
|
|
46
59
|
|
|
47
60
|
async function run_checked_eslint(
|
|
48
61
|
directory: string,
|
|
49
|
-
|
|
50
|
-
cache_file: string,
|
|
62
|
+
eslint: EslintRun,
|
|
51
63
|
): Promise<BufferedProcessResult> {
|
|
52
64
|
const reason = project_checks.eslint_skip_reason(directory)
|
|
53
65
|
if (reason !== undefined) return skipped('eslint', reason)
|
|
54
66
|
|
|
55
|
-
return await run_eslint(
|
|
67
|
+
return await run_eslint(eslint)
|
|
56
68
|
}
|
|
57
69
|
|
|
58
70
|
function lint_exit_code(prettier: BufferedProcessResult, eslint: BufferedProcessResult): number {
|
|
@@ -63,19 +75,22 @@ function lint_exit_code(prettier: BufferedProcessResult, eslint: BufferedProcess
|
|
|
63
75
|
|
|
64
76
|
// The two checks are run from here whether they were pointed at the whole tree or at one change's
|
|
65
77
|
// files, so `josh lint:related` reaches prettier and eslint through the same buffering, the same
|
|
66
|
-
// "one failure does not abort the other" reading, and the same exit code
|
|
78
|
+
// "one failure does not abort the other" reading, and the same exit code —
|
|
67
79
|
// and through the same basic-project skip, so a narrowed run never reaches a tool the whole-tree
|
|
68
|
-
// run would have skipped
|
|
80
|
+
// run would have skipped. The skip reasons answer nothing for a full
|
|
69
81
|
// project, so the one path serves both profiles.
|
|
82
|
+
//
|
|
83
|
+
// A narrowed run re-reads a cached cycle report too (joshuafolkken/kit#3641): one change's files can
|
|
84
|
+
// hold both sides of a cycle, and closing it by editing one leaves the other's cached report standing.
|
|
70
85
|
async function run_lint_checks(
|
|
71
86
|
prettier_args: ReadonlyArray<string>,
|
|
72
87
|
eslint_args: ReadonlyArray<string>,
|
|
73
|
-
|
|
88
|
+
recheck: CycleRecheckOptions,
|
|
74
89
|
): Promise<number> {
|
|
75
90
|
const directory = process.cwd()
|
|
76
91
|
const [prettier, eslint] = await Promise.all([
|
|
77
92
|
run_prettier(directory, prettier_args),
|
|
78
|
-
run_checked_eslint(directory, eslint_args,
|
|
93
|
+
run_checked_eslint(directory, { args: eslint_args, recheck }),
|
|
79
94
|
])
|
|
80
95
|
|
|
81
96
|
write_output(prettier)
|
|
@@ -85,7 +100,7 @@ async function run_lint_checks(
|
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
async function run_lint_parallel_checks(): Promise<number> {
|
|
88
|
-
return await run_lint_checks(PRETTIER_ARGS, ESLINT_ARGS)
|
|
103
|
+
return await run_lint_checks(PRETTIER_ARGS, ESLINT_ARGS, WHOLE_TREE_RECHECK)
|
|
89
104
|
}
|
|
90
105
|
|
|
91
106
|
// `process.exitCode` rather than `process.exit()`: both reports are buffered and written here in
|
|
@@ -5,12 +5,14 @@ import {
|
|
|
5
5
|
type ScopeInputs,
|
|
6
6
|
type ScopeVocabulary,
|
|
7
7
|
} from '#scripts/git/changed-file-scope'
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
ESLINT_RELATED_CACHE_FILE,
|
|
10
|
+
ESLINT_RELATED_CACHE_FLAGS,
|
|
11
|
+
} from '#scripts/josh/josh-command-types'
|
|
12
|
+
import type { CycleRecheckOptions } from './cycle-recheck'
|
|
9
13
|
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// `pnpm josh time`, that came to 47–188 seconds per run — 18% of #1292's 1,043-second
|
|
13
|
-
// implementation phase, spent re-reading files the change never touched.
|
|
14
|
+
// `josh lint` reads the whole repository on every call, and an implementation loop calls it after
|
|
15
|
+
// every few edits — re-reading files the change never touched.
|
|
14
16
|
//
|
|
15
17
|
// **This narrowing is added in front of the whole check, never in place of it.** `josh gate` still
|
|
16
18
|
// runs `josh lint` over everything before the commit: a formatting rule can be broken by a file the
|
|
@@ -96,17 +98,14 @@ function prettier_arguments(files: ReadonlyArray<string>): ReadonlyArray<string>
|
|
|
96
98
|
return [...PRETTIER_ARGS, ...files]
|
|
97
99
|
}
|
|
98
100
|
|
|
99
|
-
// The cache file is this command's own rather than the gate's, because the two run at the same time
|
|
100
|
-
//
|
|
101
|
+
// The cache file is this command's own rather than the gate's, because the two run at the same time.
|
|
102
|
+
// `josh gate` lints the whole tree beside the review while an
|
|
101
103
|
// implementation loop calls this command between edits, and each eslint run rewrites its cache file
|
|
102
|
-
// whole from the copy it loaded at start-up — so on one file the run that finished last
|
|
103
|
-
// the other's entries, and a narrowed run finishing during a whole-tree run
|
|
104
|
-
// its pre-gate state.
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
// sharing let a narrowed run warm the gate's cache, since eslint leaves the entries a run did not
|
|
108
|
-
// visit alone; that holds for pruning and says nothing about two writers. It is the same judgement
|
|
109
|
-
// joshuafolkken/kit#1332 made for the edit hook, applied to the second place it was needed.
|
|
104
|
+
// whole from the copy it loaded at start-up — so on one file the run that finished last would
|
|
105
|
+
// discard the other's entries, and a narrowed run finishing during a whole-tree run would roll the
|
|
106
|
+
// cache back to its pre-gate state. Sharing would let a narrowed run warm the gate's cache only for
|
|
107
|
+
// pruning, which says nothing about two writers. It is the same judgement the edit hook's own cache
|
|
108
|
+
// file makes.
|
|
110
109
|
//
|
|
111
110
|
// **What is narrowed is still only the target list, never the gate.** `josh gate` runs `josh lint`
|
|
112
111
|
// over the whole tree before any commit; this file decides which files a repeat call reads.
|
|
@@ -114,8 +113,19 @@ function eslint_arguments(files: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
|
114
113
|
return [...ESLINT_ARGS, ...files, ...ESLINT_RELATED_CACHE_FLAGS, ...ESLINT_SCOPED_FLAGS]
|
|
115
114
|
}
|
|
116
115
|
|
|
116
|
+
// What re-reading a cached cycle report (`cycle-recheck.ts`) needs to ask the narrowed run's question
|
|
117
|
+
// again: the same targets, the same cache file, and the Node API's spelling of `--no-warn-ignored`.
|
|
118
|
+
function cycle_recheck_options(files: ReadonlyArray<string>): CycleRecheckOptions {
|
|
119
|
+
return {
|
|
120
|
+
cache_file: ESLINT_RELATED_CACHE_FILE,
|
|
121
|
+
patterns: files,
|
|
122
|
+
eslint_options: { warnIgnored: false },
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
117
126
|
const lint_related_scope = {
|
|
118
127
|
COMMAND_LABEL,
|
|
128
|
+
cycle_recheck_options,
|
|
119
129
|
NOTHING_LINTABLE_REASON,
|
|
120
130
|
describe_scope,
|
|
121
131
|
eslint_arguments,
|
|
@@ -4,13 +4,12 @@ import { fileURLToPath } from 'node:url'
|
|
|
4
4
|
import { document_byte_check } from '#scripts/document/document-byte-check'
|
|
5
5
|
import { scoped_green } from '#scripts/gate/scoped-green'
|
|
6
6
|
import { changed_file_scope, type ChangedFileScope } from '#scripts/git/changed-file-scope'
|
|
7
|
-
import { ESLINT_RELATED_CACHE_FILE } from '#scripts/josh/josh-command-types'
|
|
8
7
|
import { review_stamps } from '#scripts/review/review-stamps'
|
|
9
8
|
import { lint_parallel } from './lint-parallel'
|
|
10
9
|
import { lint_related_scope } from './lint-related-scope'
|
|
11
10
|
|
|
12
|
-
// `josh lint:related` — the lint check an implementation loop runs between edits
|
|
13
|
-
//
|
|
11
|
+
// `josh lint:related` — the lint check an implementation loop runs between edits.
|
|
12
|
+
// The narrowing itself is `lint-related-scope.ts` over the shared
|
|
14
13
|
// decision in `changed-file-scope.ts`; this is the process around it — how the run reaches the same
|
|
15
14
|
// two child processes `josh lint` runs.
|
|
16
15
|
|
|
@@ -37,20 +36,20 @@ async function lint_exit_code(scope: ChangedFileScope): Promise<number> {
|
|
|
37
36
|
return await lint_parallel.run_lint_checks(
|
|
38
37
|
lint_related_scope.prettier_arguments(scope.files),
|
|
39
38
|
lint_related_scope.eslint_arguments(scope.files),
|
|
40
|
-
|
|
39
|
+
lint_related_scope.cycle_recheck_options(scope.files),
|
|
41
40
|
)
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
// The byte check over the same scope the lint just ran: the resolved file list when narrowed, and
|
|
45
44
|
// the whole budget when lint fell back to the whole tree — so the byte check is a superset in the
|
|
46
|
-
// fallback exactly as lint is, never an empty list that would pass silently
|
|
45
|
+
// fallback exactly as lint is, never an empty list that would pass silently.
|
|
47
46
|
function byte_check_exit_code(scope: ChangedFileScope, root: string): number {
|
|
48
47
|
if (scope.mode === 'all') return document_byte_check.check_all(root)
|
|
49
48
|
|
|
50
49
|
return document_byte_check.check_files(root, scope.files)
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
// The lint result folded together with the fast byte-ceiling check
|
|
52
|
+
// The lint result folded together with the fast byte-ceiling check: the
|
|
54
53
|
// same check the gate's `document-byte-budget.test.ts` runs, brought forward to this between-edits
|
|
55
54
|
// path so a mandated documentation update over its ceiling surfaces in seconds. It reads no change
|
|
56
55
|
// of its own — it takes the files this run already resolved, so the git contract is the lint
|
|
@@ -68,7 +67,7 @@ async function scoped_exit_code(scope: ChangedFileScope, root: string): Promise<
|
|
|
68
67
|
// whole one, and a fallback says which of the two it was rather than looking like a narrow run
|
|
69
68
|
// that found nothing.
|
|
70
69
|
//
|
|
71
|
-
// **A green run leaves a record of the tree it was green on
|
|
70
|
+
// **A green run leaves a record of the tree it was green on**, so
|
|
72
71
|
// `josh review:brief` can tell a tree this check has read from one it has not. What the record means,
|
|
73
72
|
// and the three states in which it is withheld, are `scoped-green.ts`.
|
|
74
73
|
async function run_related_lint(command_arguments: ReadonlyArray<string>): Promise<number> {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// The public surface a downstream distribution package imports to stamp the workflows it writes.
|
|
2
2
|
// Exported rather than left internal because the alternative is every distributor re-implementing
|
|
3
3
|
// the header, and a second implementation that spells the token differently or stacks a duplicate
|
|
4
|
-
// silently breaks the check that reads it
|
|
4
|
+
// silently breaks the check that reads it.
|
|
5
5
|
export { managed_marker_logic } from './managed-marker-logic'
|
|
@@ -4,8 +4,7 @@ import { is_workflow_destination } from '#scripts/claude/workflow-destination'
|
|
|
4
4
|
// answer has to survive being copied on: a consumer of a consumer receives `ci.yml` from kit and
|
|
5
5
|
// `dast.yml` from app-kit, and neither distributor knows what the other manages. So the answer is
|
|
6
6
|
// written into the artifact rather than kept in a list beside it — every distributor stamps its own
|
|
7
|
-
// output, and the auto-merge workflow reads the stamp off the very file it is asking about
|
|
8
|
-
// (joshuafolkken/kit#844).
|
|
7
|
+
// output, and the auto-merge workflow reads the stamp off the very file it is asking about.
|
|
9
8
|
//
|
|
10
9
|
// A list cannot reach that far. kit's write time is the only moment kit controls, and at that moment
|
|
11
10
|
// it knows nothing of what app-kit distributes; whichever sync ran last would decide the list, and
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
|
|
1
3
|
type NotifyTarget = 'pr' | 'issue' | 'both'
|
|
2
4
|
|
|
3
5
|
interface GitNotifyConfig {
|
|
@@ -35,14 +37,13 @@ function parse_notify_mentions(raw_mentions: string | undefined): Array<string>
|
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
// The `\n` escape the inline `--notify-message` form needs is expanded by `cli_body` at the point the
|
|
38
|
-
// flag is read, not here
|
|
40
|
+
// flag is read, not here. Expanding again would rewrite a literal backslash-n
|
|
39
41
|
// that `--notify-message-file` legitimately carries — a file already holds real newlines, so an
|
|
40
42
|
// escape sequence in one is the author's text rather than a quoting workaround.
|
|
41
43
|
//
|
|
42
|
-
// **Trimming
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
// produced. `trim` survives only as the emptiness test, where the whitespace is being counted rather
|
|
44
|
+
// **Trimming happens with the expansion, and for the same reason.** Trimming here, after the
|
|
45
|
+
// expansion, would make `--notify-message "…\n"` lose the newline its own escape had just produced.
|
|
46
|
+
// `trim` survives only as the emptiness test, where the whitespace is being counted rather
|
|
46
47
|
// than removed.
|
|
47
48
|
function resolve_notify_message(raw_message: string | undefined): string {
|
|
48
49
|
if (raw_message === undefined || raw_message.trim().length === 0) return DEFAULT_NOTIFY_MESSAGE
|
|
@@ -66,7 +67,7 @@ function build_notify_config(input: {
|
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
// **`notes` is what the run has to say about itself beyond the message it was handed**, and today
|
|
69
|
-
// that is the managed config-file report
|
|
70
|
+
// that is the managed config-file report. It is a separate field rather than
|
|
70
71
|
// text folded into `message`, because the message is the person's own completion summary and the
|
|
71
72
|
// notes are the command's — folding them together would leave a caller unable to tell which half it
|
|
72
73
|
// wrote. **A run with nothing to note adds no line at all**, blank separator included, so the
|
|
@@ -87,7 +88,8 @@ function build_completion_comment_body(input: {
|
|
|
87
88
|
notes?: ReadonlyArray<string>
|
|
88
89
|
}): string {
|
|
89
90
|
const base_lines = [`✅ ${input.message}`]
|
|
90
|
-
const issue_lines =
|
|
91
|
+
const issue_lines =
|
|
92
|
+
input.issue_number === undefined ? [] : [`Issue: ${issue_cite.plain(input.issue_number)}`]
|
|
91
93
|
const pr_lines = input.pr_url === undefined ? [] : [`PR: ${input.pr_url}`]
|
|
92
94
|
const note_lines = note_section(input.notes)
|
|
93
95
|
const mention_lines = input.mentions.length === 0 ? [] : ['', input.mentions.join(' ')]
|