@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
|
@@ -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
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { report_format_reference } from './report-format-reference'
|
|
2
|
+
|
|
1
3
|
// The mechanical half of the two-layer work summary (`CLAUDE.md` Step 0, single-sourced in
|
|
2
4
|
// `prompts/collaboration-workflow/report-format.md`) is a fixed shape, yet only an advisory echo in
|
|
3
5
|
// the `UserPromptSubmit` hook ever mentions it and nothing reads the summary an agent actually
|
|
4
6
|
// wrote. This checks the half a machine can: the labels are present, the overview lines stay inside
|
|
5
7
|
// their length, nothing wraps the summary in a code fence, and no file path or CLI flag leaks into
|
|
6
8
|
// the overview. The judgement half — whether the subject is concrete — is deliberately left out,
|
|
7
|
-
// because a machine cannot answer it
|
|
9
|
+
// because a machine cannot answer it.
|
|
10
|
+
|
|
11
|
+
const TEMPLATE_HEADING = report_format_reference.SUMMARY_TEMPLATE_HEADING
|
|
8
12
|
|
|
9
13
|
// The session-facing labels are Japanese because that is the form the summary is written in
|
|
10
14
|
// (`JOSH_SESSION_LANG` defaults to `ja`); `report-format.md`'s template is the single source and the
|
|
@@ -33,7 +37,7 @@ const CLI_FLAG_PATTERN = /(?:^|\s)--[a-z]/u
|
|
|
33
37
|
const BOLD_MARKER = '**'
|
|
34
38
|
const LEADING_LABEL_PUNCTUATION = /^[\s::]+/u
|
|
35
39
|
|
|
36
|
-
// The case-based test declaration
|
|
40
|
+
// The case-based test declaration: the changes section carries a first tier
|
|
37
41
|
// of fixed-vocabulary cases — each non-applicable one crossed out with a reason — and a second tier
|
|
38
42
|
// of at-least-three "if it breaks" conditions. This checks the mechanical half: the two tier markers
|
|
39
43
|
// are present, an N/A cross-out carries a reason, and the second tier holds enough conditions (or the
|
|
@@ -235,8 +239,18 @@ function lint_report(summary: string): ReadonlyArray<string> {
|
|
|
235
239
|
]
|
|
236
240
|
}
|
|
237
241
|
|
|
242
|
+
// The violations followed by one line naming where the summary's shape is written
|
|
243
|
+
// — the violations say what is wrong, the pointer where the right shape is.
|
|
244
|
+
// A clean summary stays empty, so `ok` is still the only output of a pass.
|
|
245
|
+
function with_reference(violations: ReadonlyArray<string>): ReadonlyArray<string> {
|
|
246
|
+
if (violations.length === 0) return violations
|
|
247
|
+
|
|
248
|
+
return [...violations, `→ the template: ${report_format_reference.pointer(TEMPLATE_HEADING)}`]
|
|
249
|
+
}
|
|
250
|
+
|
|
238
251
|
const report_lint = {
|
|
239
252
|
lint_report,
|
|
253
|
+
with_reference,
|
|
240
254
|
REQUIRED_LABELS,
|
|
241
255
|
MAX_OVERVIEW_CHARS,
|
|
242
256
|
CASE_LABEL,
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { disposition } from './disposition-logic'
|
|
4
4
|
|
|
5
|
-
// `josh disposition <path...>` — the machine half of the three-way review disposition
|
|
6
|
-
//
|
|
5
|
+
// `josh disposition <path...>` — the machine half of the three-way review disposition.
|
|
6
|
+
// It prints `runtime` when any named path reaches a runtime path — a
|
|
7
7
|
// runtime code path, a distributed artifact a consumer reads, or the verification guarding either —
|
|
8
8
|
// and `non-runtime` when every path is inert. `prompts/review.md` → "Three-way disposition after the
|
|
9
9
|
// cap" leaves the run one judgement after this: whether the finding is a confirmed defect.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { review_level } from './review-level'
|
|
2
2
|
|
|
3
3
|
// Whether a review finding reaches a runtime path — the half of the three-way disposition a machine
|
|
4
|
-
// can answer
|
|
4
|
+
// can answer. `prompts/review.md` → "Three-way disposition after the cap"
|
|
5
5
|
// routes a non-High finding to branch 2 (file it) only when it is a **confirmed defect that reaches a
|
|
6
6
|
// runtime code path**. "Reaches" is read exactly as the review-level rubric reads it — a runtime code
|
|
7
7
|
// path, a distributed artifact a consumer reads, or the verification guarding either — which is the
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import { git_command } from '#scripts/git/git-command'
|
|
3
3
|
import { reproduction_measure } from '#scripts/issue/reproduction-measure'
|
|
4
|
+
import { report_format_reference } from '#scripts/report/report-format-reference'
|
|
4
5
|
import { test_declared_logic, type Verdict } from '#scripts/test/test-declared-logic'
|
|
5
6
|
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// recent defects (#2402, #2419, #2393) all came through that gap. **This is the seam where it closes**:
|
|
7
|
+
// Lint, types and unit tests green and a review that found nothing prove the code is right in
|
|
8
|
+
// isolation, never that the feature works where it runs. **This is the seam where that gap closes**:
|
|
9
9
|
// a runtime change merges only once its pull request carries the acceptance criteria run for real —
|
|
10
10
|
// the command and the output it actually printed, in the evidence section `EVIDENCE_HEADING` names.
|
|
11
11
|
//
|
|
@@ -15,6 +15,9 @@ import { test_declared_logic, type Verdict } from '#scripts/test/test-declared-l
|
|
|
15
15
|
// reproduction-section parser, so a prose "confirmed it works" is refused here exactly as it is there.
|
|
16
16
|
|
|
17
17
|
const EVIDENCE_HEADING = '## 実機証跡'
|
|
18
|
+
// The shape the section needs and where it is written down, so a refusal
|
|
19
|
+
// names the format instead of leaving the reader to search for it.
|
|
20
|
+
const EVIDENCE_FORMAT = `under ${EVIDENCE_HEADING}, a backticked command followed by a fenced block holding the output it actually printed (prose such as "confirmed" is not accepted) — format: ${report_format_reference.pointer(report_format_reference.COMPLETION_REPORT_HEADING)}`
|
|
18
21
|
|
|
19
22
|
function verdict_for(paths: ReadonlyArray<string>, body: string | undefined = ''): Verdict {
|
|
20
23
|
if (test_declared_logic.runtime_files(paths).length === 0) return 'exempt'
|
|
@@ -49,12 +52,12 @@ async function check(branch_name: string): Promise<Verdict> {
|
|
|
49
52
|
function refusal_message(): string {
|
|
50
53
|
return [
|
|
51
54
|
`Merge refused: this pull request changes runtime code but its body has no ${EVIDENCE_HEADING} section.`,
|
|
52
|
-
'Run the acceptance criteria for real, then add the section:
|
|
53
|
-
|
|
55
|
+
'Run the acceptance criteria for real, then add the section:',
|
|
56
|
+
EVIDENCE_FORMAT,
|
|
54
57
|
'Update the body with `gh api -X PATCH repos/{owner}/{repo}/pulls/<N> -F body=@<path>`, then re-run.',
|
|
55
58
|
].join('\n')
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
const live_evidence = { EVIDENCE_HEADING, check, refusal_message, verdict_for }
|
|
61
|
+
const live_evidence = { EVIDENCE_FORMAT, EVIDENCE_HEADING, check, refusal_message, verdict_for }
|
|
59
62
|
|
|
60
63
|
export { live_evidence }
|
|
@@ -3,8 +3,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
3
3
|
import { review_attest, type AttestVerdict } from './review-attest'
|
|
4
4
|
import { review_checkout } from './review-checkout'
|
|
5
5
|
|
|
6
|
-
// `josh review:attest` — the two halves of the checkout contract `josh review:brief` opens
|
|
7
|
-
// (joshuafolkken/kit#1522).
|
|
6
|
+
// `josh review:attest` — the two halves of the checkout contract `josh review:brief` opens.
|
|
8
7
|
//
|
|
9
8
|
// **`josh review:attest <nonce>` is run by the review**, from the checkout it actually read. It
|
|
10
9
|
// compares that checkout against the one the brief described and exits non-zero when they differ, so
|
|
@@ -6,7 +6,7 @@ import { stamp_file } from '#scripts/josh/stamp-file'
|
|
|
6
6
|
import { json_value } from '#scripts/lib/json-value'
|
|
7
7
|
import { review_checkout, type ReviewCheckout } from './review-checkout'
|
|
8
8
|
|
|
9
|
-
// The record that says which checkout a `/code-review` actually read
|
|
9
|
+
// The record that says which checkout a `/code-review` actually read.
|
|
10
10
|
//
|
|
11
11
|
// **The root cause is not ours to fix.** `/code-review` is forked by the harness and inherits the
|
|
12
12
|
// session's working directory; nothing in this repository decides that. What *is* ours is the
|
|
@@ -242,7 +242,7 @@ function is_written_since(source: string, taken_at: string): boolean {
|
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
// **Whether the last briefed review of this branch finished
|
|
245
|
+
// **Whether the last briefed review of this branch finished**. A ship resumed
|
|
246
246
|
// after a stop re-issues round 1, and without this answer it briefed the whole change again — the
|
|
247
247
|
// files the finished review had just read, re-read at full cost. It is asked before `record_target`
|
|
248
248
|
// mints the next nonce, since that call drops the record it reads. The branch must match: the pointer
|
|
@@ -265,7 +265,7 @@ function is_reviewed_on(checkout: ReviewCheckout, findings_path: string, root?:
|
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
// Whether a record written at `written_at` belongs to the brief the pointer names rather than an earlier
|
|
268
|
-
// one
|
|
268
|
+
// one: that brief writes it right after minting the pointer. ISO timestamps
|
|
269
269
|
// order as strings.
|
|
270
270
|
function is_briefed_since(written_at: string, root?: string): boolean {
|
|
271
271
|
const pointer = read_pointer(root)
|