@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 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { refactor_scan } from './refactor-scan'
|
|
4
4
|
|
|
5
5
|
// The `josh refactor:scan` entry point. It takes no arguments: the scope is the changed files, or
|
|
6
|
-
// `scripts/` when nothing changed, decided the same way for every run
|
|
6
|
+
// `scripts/` when nothing changed, decided the same way for every run.
|
|
7
7
|
|
|
8
8
|
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
9
9
|
process.exitCode = await refactor_scan.run_scan()
|
|
@@ -5,7 +5,7 @@ import { refactor_lint, type CategoryResult } from './refactor-lint'
|
|
|
5
5
|
import { refactor_targets } from './refactor-targets'
|
|
6
6
|
|
|
7
7
|
// `josh refactor:scan` — the command `prompts/refactoring.md` §4.1–§4.3 now point to instead of
|
|
8
|
-
// describing the search by hand
|
|
8
|
+
// describing the search by hand. It selects the target files, expands the
|
|
9
9
|
// scope along the import graph, asks the project's own eslint which refactoring candidates the scope
|
|
10
10
|
// holds, and answers whether any high- or medium-priority candidate remains.
|
|
11
11
|
//
|
|
@@ -16,7 +16,7 @@ import { refactor_targets } from './refactor-targets'
|
|
|
16
16
|
|
|
17
17
|
// The convergence vocabulary. `clear` is what §4.3's self-reported "no high- or medium-priority
|
|
18
18
|
// candidate left" loop exit becomes once a command answers it: a token a caller can read, not a claim.
|
|
19
|
-
// `error` is the third answer
|
|
19
|
+
// `error` is the third answer: the eslint run itself did not complete, so the
|
|
20
20
|
// scope's state is unknown — kept distinct from `clear` so a failed scan is never read as converged.
|
|
21
21
|
const CLEAR = 'clear'
|
|
22
22
|
const CANDIDATES = 'candidates'
|
|
@@ -4,7 +4,7 @@ import { changed_paths } from '#scripts/git/changed-paths'
|
|
|
4
4
|
import { line_targets } from '#scripts/lines/line-targets'
|
|
5
5
|
|
|
6
6
|
// The target-file selection of `josh refactor:scan` — the priority `prompts/refactoring.md` §4.1
|
|
7
|
-
// used to spell out in prose
|
|
7
|
+
// used to spell out in prose. The scope is the same reading every scoped
|
|
8
8
|
// command decides from — the branch diff plus the untracked files (`changed-paths.ts`) — and only
|
|
9
9
|
// when that is empty does it fall back to `scripts/`, so a run on a clean `main` still has something
|
|
10
10
|
// to scan rather than reporting nothing.
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url'
|
|
2
2
|
import { git_spawn_sync } from '#scripts/git/git-spawn-sync'
|
|
3
|
+
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
3
4
|
import { github_release } from './github-release'
|
|
4
5
|
import { github_release_environment } from './github-release-environment'
|
|
5
6
|
|
|
7
|
+
const KNOWN_FLAGS: ReadonlyArray<string> = []
|
|
8
|
+
const COMMAND_NAME = 'release:github'
|
|
9
|
+
const ARGUMENT_START = 2
|
|
10
|
+
const SUCCESS_EXIT_CODE = 0
|
|
11
|
+
|
|
6
12
|
// A release published without the tag list would pick its previous tag from nothing, so a failed
|
|
7
13
|
// `git tag` stops the run rather than reading as "no tags".
|
|
8
14
|
function local_tags(): Array<string> {
|
|
@@ -12,13 +18,29 @@ function local_tags(): Array<string> {
|
|
|
12
18
|
return output.split('\n')
|
|
13
19
|
}
|
|
14
20
|
|
|
15
|
-
|
|
21
|
+
// **No argument reaches the publish**. The command reads only the
|
|
22
|
+
// environment, so a `--help` it ignored would create a real GitHub Release; a help request prints
|
|
23
|
+
// the usage and any other argument is refused, both before the environment is read.
|
|
24
|
+
async function run_argv(argv: ReadonlyArray<string>): Promise<number> {
|
|
25
|
+
const answer = cli_flags.answer_help_or_unknown(
|
|
26
|
+
argv.slice(ARGUMENT_START),
|
|
27
|
+
KNOWN_FLAGS,
|
|
28
|
+
COMMAND_NAME,
|
|
29
|
+
)
|
|
30
|
+
if (answer !== undefined) return answer
|
|
31
|
+
|
|
16
32
|
const { token, tag, settings } = github_release_environment.read_release_input(process.env)
|
|
17
33
|
|
|
18
34
|
console.info(await github_release.publish(fetch, token, tag, { ...settings, tags: local_tags() }))
|
|
35
|
+
|
|
36
|
+
return SUCCESS_EXIT_CODE
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
40
|
+
process.exitCode = await run_argv(argv)
|
|
19
41
|
}
|
|
20
42
|
|
|
21
|
-
if (process.argv[1] === fileURLToPath(import.meta.url)) await main()
|
|
43
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv)
|
|
22
44
|
|
|
23
|
-
const github_release_cli = { local_tags }
|
|
45
|
+
const github_release_cli = { local_tags, run_argv }
|
|
24
46
|
export { github_release_cli }
|
|
@@ -85,7 +85,7 @@ async function is_release_over(source: RunSource, tag: string): Promise<boolean>
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
// A lower tag whose publication failed, or finished while no release run is left at work on it,
|
|
88
|
-
// never gains a release
|
|
88
|
+
// never gains a release, so waiting on it would hold every later one.
|
|
89
89
|
async function is_release_lost(source: RunSource, tag: string): Promise<boolean> {
|
|
90
90
|
if (source.workflow === undefined) return false
|
|
91
91
|
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { git_command } from '#scripts/git/git-command'
|
|
4
|
+
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
4
5
|
import { error_text } from '#scripts/lib/error-message'
|
|
5
6
|
import { release_history } from './release-history'
|
|
6
7
|
import { release_plan, type ReleasePlan } from './release-plan'
|
|
7
8
|
import { release_publish } from './release-publish'
|
|
8
9
|
|
|
9
|
-
// `pnpm josh release` — the one place that decides a version
|
|
10
|
+
// `pnpm josh release` — the one place that decides a version.
|
|
10
11
|
//
|
|
11
12
|
// It does three things and no more: count the merges main has taken since the version last changed,
|
|
12
13
|
// report and stop when that count is zero, and otherwise raise the version by that many minors, open
|
|
13
14
|
// a pull request, merge it and watch for the tag.
|
|
14
15
|
//
|
|
15
|
-
// **It never touches the root checkout
|
|
16
|
+
// **It never touches the root checkout**. The count is read from
|
|
16
17
|
// `origin/<default>`, and the version bump / commit / push happen in a dedicated work tree
|
|
17
18
|
// `release_publish` cuts for the release — so a release can run beside a `backlogrun` (which keeps the
|
|
18
19
|
// root on the default branch) and can start even when the root is dirty or on another branch.
|
|
19
20
|
|
|
20
21
|
const DRY_RUN_FLAG = '--dry-run'
|
|
22
|
+
const KNOWN_FLAGS: ReadonlyArray<string> = [DRY_RUN_FLAG]
|
|
23
|
+
const COMMAND_NAME = 'release'
|
|
21
24
|
const ARGUMENT_START = 2
|
|
22
25
|
const SUCCESS_EXIT_CODE = 0
|
|
23
26
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -73,9 +76,23 @@ function is_dry_run_requested(argv: ReadonlyArray<string>): boolean {
|
|
|
73
76
|
return argv.slice(ARGUMENT_START).includes(DRY_RUN_FLAG)
|
|
74
77
|
}
|
|
75
78
|
|
|
79
|
+
// **Only a known argument reaches the release**. The command publishes,
|
|
80
|
+
// so a `--help` it did not read once started a real release; a help request now prints the usage, and
|
|
81
|
+
// anything else unknown is refused, both before the first fetch.
|
|
82
|
+
async function run_argv(argv: ReadonlyArray<string>): Promise<number> {
|
|
83
|
+
const answer = cli_flags.answer_help_or_unknown(
|
|
84
|
+
argv.slice(ARGUMENT_START),
|
|
85
|
+
KNOWN_FLAGS,
|
|
86
|
+
COMMAND_NAME,
|
|
87
|
+
)
|
|
88
|
+
if (answer !== undefined) return answer
|
|
89
|
+
|
|
90
|
+
return await run(is_dry_run_requested(argv))
|
|
91
|
+
}
|
|
92
|
+
|
|
76
93
|
async function main(): Promise<void> {
|
|
77
94
|
try {
|
|
78
|
-
process.exit(await
|
|
95
|
+
process.exit(await run_argv(process.argv))
|
|
79
96
|
} catch (error) {
|
|
80
97
|
console.error(error_text.message_of(error))
|
|
81
98
|
process.exit(FAILURE_EXIT_CODE)
|
|
@@ -84,6 +101,6 @@ async function main(): Promise<void> {
|
|
|
84
101
|
|
|
85
102
|
if (process.argv[1] === fileURLToPath(import.meta.url)) void main()
|
|
86
103
|
|
|
87
|
-
const release_cli = { is_dry_run_requested, run, DRY_RUN_FLAG }
|
|
104
|
+
const release_cli = { is_dry_run_requested, run, run_argv, DRY_RUN_FLAG }
|
|
88
105
|
|
|
89
106
|
export { release_cli }
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { git_command } from '#scripts/git/git-command'
|
|
2
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
2
3
|
import { package_with_version_schema } from '#scripts/lib/schemas'
|
|
3
4
|
import { version_targets } from '#scripts/version/version-targets'
|
|
4
5
|
import { release_plan, type ReleasePlan, type VersionedCommit } from './release-plan'
|
|
5
6
|
|
|
6
7
|
// Reading main's history for the two numbers a release is made of: where the version last changed,
|
|
7
|
-
// and how many merges have landed since
|
|
8
|
+
// and how many merges have landed since.
|
|
8
9
|
|
|
9
10
|
const { PACKAGE_JSON } = version_targets
|
|
10
11
|
|
|
11
12
|
// How far back the search for "the commit that last changed the version" goes, counted in commits
|
|
12
|
-
// that touched `package.json`. Once children stop bumping
|
|
13
|
+
// that touched `package.json`. Once children stop bumping that file still
|
|
13
14
|
// changes for every dependency update, so the base can sit several entries down — but a repository
|
|
14
15
|
// that has taken thirty `package.json` commits without a single release has a different problem, and
|
|
15
16
|
// guessing past that point would be worse than saying so.
|
|
@@ -18,8 +19,7 @@ const BASE_SEARCH_LIMIT = 30
|
|
|
18
19
|
// **Which ref the history is read from.** `josh release` runs on a pulled default branch, so `HEAD`
|
|
19
20
|
// is main there and the default is right. A caller on a feature branch names the ref it means —
|
|
20
21
|
// `origin/main` — because `--first-parent` from a branch tip walks that branch rather than main, and
|
|
21
|
-
// the count would silently omit every merge main took after the branch was cut
|
|
22
|
-
// (joshuafolkken/kit#1486).
|
|
22
|
+
// the count would silently omit every merge main took after the branch was cut.
|
|
23
23
|
const DEFAULT_TIP = 'HEAD'
|
|
24
24
|
|
|
25
25
|
// The reads this module makes, named so a test can answer them without a git repository. Production
|
|
@@ -42,11 +42,7 @@ const git_reader: HistoryReader = {
|
|
|
42
42
|
function parse_version(content: string | undefined): string | undefined {
|
|
43
43
|
if (content === undefined) return undefined
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
return package_with_version_schema.parse(JSON.parse(content)).version
|
|
47
|
-
} catch {
|
|
48
|
-
return undefined
|
|
49
|
-
}
|
|
45
|
+
return json_value.parse_with(content, package_with_version_schema)?.version
|
|
50
46
|
}
|
|
51
47
|
|
|
52
48
|
async function read_version_at(
|
|
@@ -90,7 +86,7 @@ async function read_base(
|
|
|
90
86
|
|
|
91
87
|
// The version `package.json` carries at a git revision. `josh release` reads it from
|
|
92
88
|
// `origin/<default>` rather than from the checkout's own `package.json`, so the number it raises is
|
|
93
|
-
// main's latest even when the run happens in a work tree cut for the release
|
|
89
|
+
// main's latest even when the run happens in a work tree cut for the release.
|
|
94
90
|
async function read_current_version(
|
|
95
91
|
tip: string = DEFAULT_TIP,
|
|
96
92
|
reader: HistoryReader = git_reader,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import semver from 'semver'
|
|
2
2
|
|
|
3
|
-
// What a release is, decided from main's history alone
|
|
3
|
+
// What a release is, decided from main's history alone.
|
|
4
4
|
//
|
|
5
5
|
// **A version is a property of main's history, not of a branch.** `bump-version.ts` reads the local
|
|
6
6
|
// `package.json` and increments it, so two branches cut from the same version both claim the same
|
|
@@ -51,7 +51,7 @@ function previous_version_of(
|
|
|
51
51
|
// **The newest commit whose `package.json` version differs from the version immediately before it.**
|
|
52
52
|
//
|
|
53
53
|
// **A commit that touched `package.json` without moving the version is skipped**, which is what makes
|
|
54
|
-
// this right once children stop bumping
|
|
54
|
+
// this right once children stop bumping: a dependency update rewrites the
|
|
55
55
|
// file every time and must not be mistaken for a release.
|
|
56
56
|
//
|
|
57
57
|
// **Both sides have to be readable for this to be a version change.** An unreadable neighbor makes
|
|
@@ -96,7 +96,7 @@ function short_sha(sha: string): string {
|
|
|
96
96
|
|
|
97
97
|
// **The count is the line a person reads**, which is why it is built here rather than at each caller:
|
|
98
98
|
// the release command prints it, and so does anything else that wants to say how much is waiting to
|
|
99
|
-
// ship
|
|
99
|
+
// ship.
|
|
100
100
|
function format_pending_line(pending: number): string {
|
|
101
101
|
return `${PENDING_ICON} unreleased merges on main: ${String(pending)}`
|
|
102
102
|
}
|
|
@@ -9,13 +9,12 @@ import { version_targets } from '#scripts/version/version-targets'
|
|
|
9
9
|
import { z } from 'zod'
|
|
10
10
|
import { release_tag } from './release-tag'
|
|
11
11
|
|
|
12
|
-
// The stage lines `pnpm josh release` prints, and the two stages it waits for after the tag
|
|
13
|
-
// (joshuafolkken/kit#3193).
|
|
12
|
+
// The stage lines `pnpm josh release` prints, and the two stages it waits for after the tag.
|
|
14
13
|
//
|
|
15
14
|
// **The tag starts the distribution, it does not finish it.** `publish.yml` runs off the tag:
|
|
16
15
|
// `publish-npm` puts the version on npm and `create-release` opens the GitHub Release once the
|
|
17
|
-
// publishing jobs pass.
|
|
18
|
-
//
|
|
16
|
+
// publishing jobs pass. Stopping at the tag would call the release published ahead of both, so the
|
|
17
|
+
// command waits for each, prints one line per stage reached, and prints the completion line only
|
|
19
18
|
// when every stage has — a stage that times out is named with ❌ and the run exits non-zero.
|
|
20
19
|
|
|
21
20
|
const { PACKAGE_JSON } = version_targets
|
|
@@ -11,8 +11,7 @@ import { release_tag } from './release-tag'
|
|
|
11
11
|
import { release_worktree } from './release-worktree'
|
|
12
12
|
|
|
13
13
|
// The write half of `pnpm josh release`: the branch, the commit, the pull request, the merge, the
|
|
14
|
-
// wait for the tag
|
|
15
|
-
// (`release-progress.ts`, joshuafolkken/kit#3193).
|
|
14
|
+
// wait for the tag and the watch on what the tag publishes (`release-progress.ts`).
|
|
16
15
|
//
|
|
17
16
|
// **The merge goes through the same gate every other pull request does.** `wait_for_pr_success` is
|
|
18
17
|
// the merge gate `pnpm josh followup` waits on, and it is called here rather than reimplemented —
|
|
@@ -57,7 +56,7 @@ function existing_branch_message(branch_name: string): string {
|
|
|
57
56
|
return `\`${branch_name}\` already exists — a previous release attempt got as far as opening it. Finish or delete that pull request and branch, then run \`pnpm josh release\` again.`
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
// **A remote that cannot be asked is refused, not read as "no branch there"
|
|
59
|
+
// **A remote that cannot be asked is refused, not read as "no branch there"**.
|
|
61
60
|
// `pnpm josh release` pushes, opens a pull request, merges it and waits for a tag, so it cannot
|
|
62
61
|
// finish without the remote in any case: refusing here is the failure the run was going to have
|
|
63
62
|
// anyway, moved in front of the version write and the commit — which is the whole point of this
|
|
@@ -72,9 +71,9 @@ function unreachable_remote_message(branch_name: string): string {
|
|
|
72
71
|
// it and reach `push`, which then fails with git's non-fast-forward message: the raw error this
|
|
73
72
|
// guard exists to replace, and now after two writes rather than before them.
|
|
74
73
|
//
|
|
75
|
-
// **`git branch --list --remotes`
|
|
76
|
-
// short names carry the remote — `origin/x`, never `x` — so
|
|
77
|
-
//
|
|
74
|
+
// **`git branch --list --remotes` cannot answer it, which is why origin is asked directly.** Its
|
|
75
|
+
// short names carry the remote — `origin/x`, never `x` — so an unprefixed pattern matches nothing and
|
|
76
|
+
// reports "absent" for every branch that has ever existed. The
|
|
78
77
|
// remote-tracking refs it reads are stale anyway, since nothing in this workflow prunes them, so
|
|
79
78
|
// `git_remote_branch.ask` puts the question to origin itself.
|
|
80
79
|
async function is_release_branch_taken(branch_name: string): Promise<boolean> {
|
|
@@ -93,7 +92,7 @@ async function refuse_existing_branch(branch_name: string): Promise<void> {
|
|
|
93
92
|
throw new Error(existing_branch_message(branch_name))
|
|
94
93
|
}
|
|
95
94
|
|
|
96
|
-
// **The leftovers go before the guard asks
|
|
95
|
+
// **The leftovers go before the guard asks**. A run cut off before its
|
|
97
96
|
// `finally`, or a `worktree add` that failed after creating its branch, leaves a local
|
|
98
97
|
// `release/v<version>` that the guard would otherwise refuse as a release already opened.
|
|
99
98
|
async function clear_the_way(branch_name: string): Promise<void> {
|
|
@@ -101,7 +100,7 @@ async function clear_the_way(branch_name: string): Promise<void> {
|
|
|
101
100
|
await refuse_existing_branch(branch_name)
|
|
102
101
|
}
|
|
103
102
|
|
|
104
|
-
// **No `checkout -b` and no branch guard here
|
|
103
|
+
// **No `checkout -b` and no branch guard here**. The work tree is already
|
|
105
104
|
// sitting on the release branch — `release_worktree.create` cut it that way — and the guard ran
|
|
106
105
|
// before that creation, because `worktree_add` makes the branch local and `branch_exists` would then
|
|
107
106
|
// report every release as already taken. This runs after `process.chdir` into the work tree, so the
|
|
@@ -167,7 +166,7 @@ function release_running_message(target: string): string {
|
|
|
167
166
|
return `Another \`pnpm josh release\` is running in this repository (lock \`${target}\`); wait for it to finish, then run it again.`
|
|
168
167
|
}
|
|
169
168
|
|
|
170
|
-
// **One release at a time per repository, held for the whole run
|
|
169
|
+
// **One release at a time per repository, held for the whole run**.
|
|
171
170
|
// `clear_leftover` removes an unpushed, commit-less release branch, which is also what a live run
|
|
172
171
|
// looks like while it installs dependencies — so it may only run once no other release is alive. The
|
|
173
172
|
// lock answers that: a run cut off before its `finally` leaves a record whose owner is gone, which
|
|
@@ -4,12 +4,11 @@ import { git_followup_pending } from '#scripts/followup/git-followup-pending'
|
|
|
4
4
|
import { path_decision } from '#scripts/josh/path-decision'
|
|
5
5
|
import { release_plan } from './release-plan'
|
|
6
6
|
|
|
7
|
-
// **Whether a release is owed is a command's answer, not a judgement
|
|
7
|
+
// **Whether a release is owed is a command's answer, not a judgement**.
|
|
8
8
|
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// this package saw one of them.
|
|
9
|
+
// A release is one command a person types, and nothing fails when nobody types it — CI green, every
|
|
10
|
+
// pull request merged, every Issue closed — so merges can pile up on main that no consumer of this
|
|
11
|
+
// package ever sees.
|
|
13
12
|
//
|
|
14
13
|
// **`pnpm josh release --dry-run` cannot be the check.** It refuses off the default branch and on a
|
|
15
14
|
// dirty working tree, and it counts against `HEAD`; every position a run asks the question from is
|
|
@@ -37,8 +36,8 @@ const FAILURE_EXIT_CODE = 1
|
|
|
37
36
|
const NOTHING_PENDING_REASON = 'main has taken no merge since the version last changed'
|
|
38
37
|
const RELEASE_HINT = 'run `pnpm josh release` on the default branch of the primary checkout'
|
|
39
38
|
// **Not `skip`.** An unreadable version, a fetch that could not run or a base the search cannot
|
|
40
|
-
// resolve is not "nothing is waiting to ship", and reporting it as one
|
|
41
|
-
//
|
|
39
|
+
// resolve is not "nothing is waiting to ship", and reporting it as one lets a release go missing
|
|
40
|
+
// quietly.
|
|
42
41
|
const UNKNOWN_REASON = 'the unreleased-merge count could not be read — report unknown, never skip'
|
|
43
42
|
|
|
44
43
|
type ReleaseScope = typeof REQUIRED_SCOPE | typeof SKIPPED_SCOPE | typeof UNKNOWN_SCOPE
|
|
@@ -48,9 +47,8 @@ interface Decision {
|
|
|
48
47
|
reason: string
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
// **The threshold is one, and the position carries the rest.** A release per invocation
|
|
52
|
-
//
|
|
53
|
-
// version larger and its contents harder to trace afterwards — so anything above zero is owed. What
|
|
50
|
+
// **The threshold is one, and the position carries the rest.** A release per invocation keeps each
|
|
51
|
+
// version small and its contents traceable, so anything above zero is owed. What
|
|
54
52
|
// keeps this from firing per child of a batch is where the question is asked, which belongs to the
|
|
55
53
|
// procedure rather than to this command.
|
|
56
54
|
function decide(pending: number | undefined): Decision {
|
|
@@ -6,12 +6,11 @@ import { poll, type PollOptions } from '#scripts/lib/poll'
|
|
|
6
6
|
//
|
|
7
7
|
// Merging is what starts the distribution chain: `ci.yml`'s `notify-auto-tag` dispatches, `auto-tag.yml`
|
|
8
8
|
// creates `v<version>`, and `publish.yml` / `production.yml` run off that tag. Every link after the
|
|
9
|
-
// merge can fail silently
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// the person walks away believing something shipped when nothing did.
|
|
9
|
+
// merge can fail silently — a later push to main cancels the release commit's CI run, so nothing
|
|
10
|
+
// dispatches and nothing is tagged. A release a person types has no next cycle to pick it up, so the
|
|
11
|
+
// person would walk away believing something shipped when nothing did.
|
|
13
12
|
//
|
|
14
|
-
// So this waits for the tag and **reports its absence as a failure
|
|
13
|
+
// So this waits for the tag and **reports its absence as a failure**.
|
|
15
14
|
|
|
16
15
|
const HTTP_OK = 200
|
|
17
16
|
const TAG_POLL_INTERVAL_MS = 15_000
|
|
@@ -50,8 +49,7 @@ async function tag_exists(version: string): Promise<boolean> {
|
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
// The poll budget for one watched stage, read from that stage's environment variable. Every stage
|
|
53
|
-
// `josh release` waits on — the tag, npm and the GitHub Release — is tuned the same way
|
|
54
|
-
// (joshuafolkken/kit#3193).
|
|
52
|
+
// `josh release` waits on — the tag, npm and the GitHub Release — is tuned the same way.
|
|
55
53
|
function poll_options_for(
|
|
56
54
|
timeout_environment: string,
|
|
57
55
|
sleeper?: (duration_ms: number) => Promise<void>,
|
|
@@ -79,7 +77,7 @@ async function wait_for_tag(
|
|
|
79
77
|
|
|
80
78
|
// **The failure text says what did not happen rather than what went wrong**, because the command
|
|
81
79
|
// cannot know which link broke — only that the tag it was waiting for is not there, and that nothing
|
|
82
|
-
// downstream of the tag can have run. **The tag is not the release
|
|
80
|
+
// downstream of the tag can have run. **The tag is not the release**: npm and
|
|
83
81
|
// the GitHub Release follow it, so the success line names only the tag.
|
|
84
82
|
function format_result(version: string, is_tagged: boolean): string {
|
|
85
83
|
if (is_tagged) return `🏷 Tag ${tag_name(version)} created`
|
|
@@ -6,7 +6,7 @@ import { lane_install } from '#scripts/lane/lane-install'
|
|
|
6
6
|
import { lane_leftover } from '#scripts/lane/lane-leftover'
|
|
7
7
|
import { lane_paths } from '#scripts/lane/lane-paths'
|
|
8
8
|
|
|
9
|
-
// The dedicated linked work tree `pnpm josh release` runs inside
|
|
9
|
+
// The dedicated linked work tree `pnpm josh release` runs inside. The whole
|
|
10
10
|
// point is that the release never touches the root checkout: it is cut fresh from
|
|
11
11
|
// `origin/<default>` as the `release/v<version>` branch, the version bump / commit / push all happen
|
|
12
12
|
// there, and it is removed whichever way the run ends. That lets a release run beside a `backlogrun`
|
|
@@ -35,8 +35,8 @@ async function remove(directory: string, branch_name: string): Promise<void> {
|
|
|
35
35
|
await git_worktree.branch_delete(branch_name)
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
// **The dependency install is not optional, and disabling the hook is not the way around it
|
|
39
|
-
//
|
|
38
|
+
// **The dependency install is not optional, and disabling the hook is not the way around it**.
|
|
39
|
+
// The release commit goes through lefthook's pre-commit, which runs
|
|
40
40
|
// `pnpm exec` / `pnpm josh`, and a sibling work tree has no `node_modules` above it — so the tree
|
|
41
41
|
// needs its own, installed the same way a lane's is. A failed install cleans up the tree it created
|
|
42
42
|
// rather than leaving debris, then reports what git printed.
|
|
@@ -54,7 +54,7 @@ async function install_or_clean(directory: string, branch_name: string): Promise
|
|
|
54
54
|
// add --no-track -b release/v<version> <dir> origin/<default>`, which `worktree_add` already spells
|
|
55
55
|
// when it is given a start point.
|
|
56
56
|
//
|
|
57
|
-
// **A failed add takes back the branch it made
|
|
57
|
+
// **A failed add takes back the branch it made**. `git worktree add -b`
|
|
58
58
|
// creates the branch before it looks at the path, so an add refused for a path that already exists
|
|
59
59
|
// still leaves `release/v<version>` behind — and the next run's branch guard then refuses that name
|
|
60
60
|
// as a release already opened. The guard ran before this call and found no such branch, so one
|
|
@@ -80,7 +80,7 @@ async function create(branch_name: string): Promise<string> {
|
|
|
80
80
|
return directory
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
// **A run that never reached its `finally` leaves its tree and branch behind**
|
|
83
|
+
// **A run that never reached its `finally` leaves its tree and branch behind**
|
|
84
84
|
// — a Ctrl-C, a closed terminal — and every later release then fails on them until a person removes
|
|
85
85
|
// both by hand. They are cleared here only when clearing loses nothing: a release branch origin does
|
|
86
86
|
// not have and that carries no commit beyond `origin/<default>`. Uncommitted edits in the tree are
|
|
@@ -3,13 +3,11 @@ import { repo_setting, type RepoSettingStatus } from './repo-setting'
|
|
|
3
3
|
// GitHub's repository-level "Allow auto-merge" setting, as reported by the `allow_auto_merge` field
|
|
4
4
|
// of `GET /repos/{owner}/{repo}`.
|
|
5
5
|
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// joshuafolkken/kit#802. The setting is off by default, so distributing the workflow without
|
|
12
|
-
// reporting it would hand every consumer a workflow that never merges anything.
|
|
6
|
+
// `.github/workflows/dependabot-auto-merge.yml` is a distributed file, so a synced consumer runs
|
|
7
|
+
// `gh pr merge --auto` on every github-actions patch and minor bump. That command needs this
|
|
8
|
+
// setting: without it the step fails with `Auto-merge is not allowed for this repository`, and the
|
|
9
|
+
// pull request sits green and unmerged. The setting is off by default, so distributing the workflow
|
|
10
|
+
// without reporting it would hand every consumer a workflow that never merges anything.
|
|
13
11
|
type AutoMergeStatus = RepoSettingStatus
|
|
14
12
|
|
|
15
13
|
const SETTING_LABEL = 'Repository auto-merge'
|
|
@@ -19,8 +17,8 @@ const WORKFLOW_PATH = '.github/workflows/dependabot-auto-merge.yml'
|
|
|
19
17
|
|
|
20
18
|
// The remediation for `disabled`, addressed at the repository the report actually resolved. kit
|
|
21
19
|
// prints it and never runs it: changing a repository setting is outward-facing, needs admin scope,
|
|
22
|
-
// and is the maintainer's call — the same line
|
|
23
|
-
// `
|
|
20
|
+
// and is the maintainer's call — the same line drawn for `automated-security-fixes`, which is why
|
|
21
|
+
// `josh doctor --fix` does not enable this either.
|
|
24
22
|
function enable_command(repo: string | undefined): string {
|
|
25
23
|
return `gh api -X PATCH repos/${repo_setting.command_target(repo)} -f ${ALLOW_AUTO_MERGE_FIELD}=true`
|
|
26
24
|
}
|
|
@@ -2,7 +2,7 @@ import { auto_merge_setting_logic, type AutoMergeStatus } from './auto-merge-set
|
|
|
2
2
|
import { repo_setting } from './repo-setting'
|
|
3
3
|
|
|
4
4
|
// Read the repository's "Allow auto-merge" setting. Never throws and never propagates a non-zero
|
|
5
|
-
// exit: an unreadable answer is a reported status, not a command failure
|
|
5
|
+
// exit: an unreadable answer is a reported status, not a command failure.
|
|
6
6
|
//
|
|
7
7
|
// The whole repository object is requested rather than a `--jq` projection, because a projection
|
|
8
8
|
// cannot distinguish a field that is `false` from a field the response never carried — and that
|
|
@@ -3,16 +3,16 @@ import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
|
3
3
|
|
|
4
4
|
// The shared half of every "report a GitHub repository setting kit cannot write" check.
|
|
5
5
|
//
|
|
6
|
-
// Two such checks exist — `automated-security-fixes`
|
|
7
|
-
//
|
|
6
|
+
// Two such checks exist — `automated-security-fixes` and `allow_auto_merge`
|
|
7
|
+
// — and they agree on everything that is not wording: the same bounded
|
|
8
8
|
// `gh api` call, the same rule that an answer which cannot be read is never reported as a negative
|
|
9
9
|
// answer, and the same blank-line-separated report block. That agreement is the contract, so it
|
|
10
10
|
// lives here once rather than being re-derived per setting.
|
|
11
11
|
type RepoSettingStatus = 'enabled' | 'disabled' | 'unreadable'
|
|
12
12
|
|
|
13
13
|
// Bounded, unlike the repository lookup: these calls only decide what a report *says*, never what
|
|
14
|
-
// gets written, so a timeout degrades to `could not be read` and costs nothing
|
|
15
|
-
//
|
|
14
|
+
// gets written, so a timeout degrades to `could not be read` and costs nothing, and keeps
|
|
15
|
+
// `josh doctor` prompt.
|
|
16
16
|
const GH_TIMEOUT_MS = 5000
|
|
17
17
|
|
|
18
18
|
// A literal `<owner>/<repo>` would be unusable when pasted into a shell, where `<` redirects — but
|
|
@@ -2,7 +2,7 @@ import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
|
2
2
|
import { REPOSITORY_LABELS, type LabelDefinition } from '#scripts/issue/issue-labels'
|
|
3
3
|
|
|
4
4
|
// Creates the labels kit's workflow and the distributed `pr-classification.yml` rely on, and only
|
|
5
|
-
// those the repository is missing
|
|
5
|
+
// those the repository is missing. The one place labels are created: `josh
|
|
6
6
|
// start` provisions a new repository through it and `josh sync` brings every existing one up to date.
|
|
7
7
|
//
|
|
8
8
|
// Labels already present are left as they are, so a repository that recolored one keeps its choice
|
|
@@ -3,11 +3,11 @@ import { z } from 'zod'
|
|
|
3
3
|
|
|
4
4
|
// The status checks kit's distributed workflows report, keyed by the workflow that reports them —
|
|
5
5
|
// the single source `josh ruleset:check` and `josh doctor` compare a repository's required status
|
|
6
|
-
// checks against
|
|
6
|
+
// checks against. Each name is the job's `name:`, the string a ruleset's
|
|
7
7
|
// required check is matched by; `required-checks-logic.test.ts` reads it back off the workflows.
|
|
8
8
|
//
|
|
9
|
-
// `E2E` belongs here even though `josh followup` deliberately does not wait on it
|
|
10
|
-
//
|
|
9
|
+
// `E2E` belongs here even though `josh followup` deliberately does not wait on it:
|
|
10
|
+
// a ruleset counts a skipped job as passing, and the job is skipped when the
|
|
11
11
|
// project has no E2E suite, so requiring it never blocks a merge — it only refuses a red one.
|
|
12
12
|
interface WorkflowChecks {
|
|
13
13
|
workflow: string
|
|
@@ -2,7 +2,7 @@ import { repo_setting } from './repo-setting'
|
|
|
2
2
|
import type { RequiredSource } from './required-checks-logic'
|
|
3
3
|
|
|
4
4
|
// What one read of a repository's required status checks found, against what kit's distributed
|
|
5
|
-
// workflows report
|
|
5
|
+
// workflows report.
|
|
6
6
|
interface RequiredChecksReport {
|
|
7
7
|
repo: string | undefined
|
|
8
8
|
branch: string | undefined
|
|
@@ -7,7 +7,7 @@ import { required_checks_report, type RequiredChecksReport } from './required-ch
|
|
|
7
7
|
import { ruleset_check } from './ruleset-check'
|
|
8
8
|
|
|
9
9
|
// `josh ruleset:check [--apply]` — say whether the default branch requires every status check kit's
|
|
10
|
-
// distributed workflows report, and with `--apply` add the missing ones
|
|
10
|
+
// distributed workflows report, and with `--apply` add the missing ones.
|
|
11
11
|
// Changing a repository setting is outward-facing, so the write happens only on the flag a person
|
|
12
12
|
// typed; `josh sync` and `josh doctor` never pass it. Exits non-zero while anything is left to do.
|
|
13
13
|
|
|
@@ -8,7 +8,7 @@ import { required_checks_logic, type ApiRead, type RequiredSource } from './requ
|
|
|
8
8
|
import { required_checks_report, type RequiredChecksReport } from './required-checks-report'
|
|
9
9
|
|
|
10
10
|
// Read a repository's required status checks on its default branch and compare them with the checks
|
|
11
|
-
// kit's distributed workflows report
|
|
11
|
+
// kit's distributed workflows report. Every read degrades to `unreadable`
|
|
12
12
|
// rather than throwing; the one write, `apply_missing`, runs only on `josh ruleset:check --apply`.
|
|
13
13
|
|
|
14
14
|
function read_api(api_path: string): string | undefined {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Where a fixed-shape failure points its reader. `report:lint`, `test:declared
|
|
2
|
+
// --match` and the live-evidence check each said what was missing but not where the shape is written,
|
|
3
|
+
// so the reader grepped for it. **The document and its headings are named once, here**, and every
|
|
4
|
+
// failure builds its pointer from them — a renamed heading then fails this module's test rather than
|
|
5
|
+
// sending the reader to a section that no longer exists.
|
|
6
|
+
|
|
7
|
+
const REPORT_FORMAT_PATH = 'prompts/collaboration-workflow/report-format.md'
|
|
8
|
+
const SUMMARY_RULES_HEADING = '作業前サマリはいつ・どう出すか'
|
|
9
|
+
const SUMMARY_TEMPLATE_HEADING = '作業前サマリ(セッション向け・`JOSH_SESSION_LANG` の言語)'
|
|
10
|
+
const COMPLETION_REPORT_HEADING = '完了報告(セッション向け)'
|
|
11
|
+
|
|
12
|
+
// The heading goes in single quotes in the runnable form: the template heading carries backticks,
|
|
13
|
+
// which a double-quoted shell argument would run as a command substitution.
|
|
14
|
+
function pointer(heading: string): string {
|
|
15
|
+
return `${REPORT_FORMAT_PATH} → "${heading}" (read it: pnpm josh doc:section ${REPORT_FORMAT_PATH} '${heading}')`
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const report_format_reference = {
|
|
19
|
+
COMPLETION_REPORT_HEADING,
|
|
20
|
+
pointer,
|
|
21
|
+
REPORT_FORMAT_PATH,
|
|
22
|
+
SUMMARY_RULES_HEADING,
|
|
23
|
+
SUMMARY_TEMPLATE_HEADING,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { report_format_reference }
|
|
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
4
4
|
import { report_lint } from './report-lint'
|
|
5
5
|
|
|
6
6
|
// `josh report:lint` — read a two-layer work summary candidate from stdin and print `ok`, or the
|
|
7
|
-
// mechanical violations one per line, exiting non-zero so it works as a gate
|
|
7
|
+
// mechanical violations one per line, exiting non-zero so it works as a gate.
|
|
8
8
|
|
|
9
9
|
const SUCCESS_EXIT_CODE = 0
|
|
10
10
|
const FAILURE_EXIT_CODE = 1
|
|
@@ -27,7 +27,7 @@ function run(summary: string): number {
|
|
|
27
27
|
return SUCCESS_EXIT_CODE
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
console.error(violations.join('\n'))
|
|
30
|
+
console.error(report_lint.with_reference(violations).join('\n'))
|
|
31
31
|
|
|
32
32
|
return FAILURE_EXIT_CODE
|
|
33
33
|
}
|