@joshuafolkken/kit 1.1050.0 → 1.1128.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/settings.json +9 -8
- package/.claude/skills/epic-commands/SKILL.md +5 -7
- package/.claude/skills/workflow-commands/SKILL.md +20 -12
- package/.claude/skills/workflow-commands/background-commands.md +36 -84
- package/.claude/skills/workflow-commands/backlogrun-child.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +8 -6
- package/.claude/skills/workflow-commands/backlogrun-progress.md +30 -33
- package/.claude/skills/workflow-commands/backlogrun-steps.md +12 -12
- package/.claude/skills/workflow-commands/backlogrun.md +2 -2
- package/.claude/skills/workflow-commands/chain-rule.md +4 -2
- package/.claude/skills/workflow-commands/delegation.md +3 -3
- package/.claude/skills/workflow-commands/followup-reference.md +1 -1
- package/.claude/skills/workflow-commands/followup.md +7 -3
- package/.claude/skills/workflow-commands/fullrun-steps.md +3 -2
- package/.claude/skills/workflow-commands/fullrun.md +8 -6
- package/.claude/skills/workflow-commands/halfrun.md +19 -21
- package/.claude/skills/workflow-commands/issue-comments.md +1 -1
- package/.claude/skills/workflow-commands/issue-fold-existing.md +10 -10
- package/.claude/skills/workflow-commands/issue-scout.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +9 -4
- package/.claude/skills/workflow-commands/latest-gate.md +8 -16
- package/.claude/skills/workflow-commands/needs-human-review.md +1 -1
- package/.claude/skills/workflow-commands/observation-filing.md +3 -3
- package/.claude/skills/workflow-commands/pre-gate-cut.md +4 -8
- package/.claude/skills/workflow-commands/prerequisite.md +1 -1
- package/.claude/skills/workflow-commands/prrun.md +36 -0
- package/.claude/skills/workflow-commands/retrospective.md +1 -1
- package/.claude/skills/workflow-commands/split-assessment.md +4 -18
- package/.claude/skills/workflow-commands/working-tree-hold.md +22 -2
- package/.codex/hooks.json +16 -20
- package/.github/actions/setup-node/action.yml +33 -0
- package/.github/actions/setup-pnpm/action.yml +93 -0
- package/.github/dependabot.yml +5 -1
- package/.github/workflows/auto-tag.yml +2 -3
- package/.github/workflows/ci.yml +31 -134
- package/.github/workflows/dependabot-auto-merge.yml +1 -0
- package/.github/workflows/pr-classification.yml +6 -44
- package/.github/workflows/production.yml +1 -0
- package/.github/workflows/publish.yml +43 -47
- package/.github/workflows/sonar-qube.yml +41 -4
- package/.pnpmfile.mjs +29 -0
- package/AGENTS.md +5 -2
- package/CLAUDE.md +33 -27
- package/GEMINI.md +5 -2
- package/README.md +66 -20
- package/SECURITY.md +37 -6
- package/cspell/index.yaml +6 -1
- package/dist/CLAUDE.basic.md +6 -6
- package/dist/CLAUDE.md +33 -27
- package/dist/CLAUDE.static.md +6 -6
- package/dist/config-merge/index.js +48 -12
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-7VPDUBRN.js → chunk-4JZDP5X5.js} +152 -155
- package/dist/hooks/{chunk-HJIISEAC.js → chunk-5SD2YM7Z.js} +5 -13
- package/dist/hooks/{chunk-NAS4C7GP.js → chunk-77J7IEQM.js} +2 -2
- package/dist/hooks/{chunk-DMQN45FN.js → chunk-7HVB7SZG.js} +3 -3
- package/dist/hooks/{chunk-RLDX5SOC.js → chunk-AIOIOMPX.js} +4413 -1970
- package/dist/hooks/{chunk-5BK3K7V4.js → chunk-M7QKEKWO.js} +873 -2049
- package/dist/hooks/{chunk-WQ4OSBSS.js → chunk-MKVGBQPA.js} +2 -2
- package/dist/hooks/{chunk-EJDX2TOB.js → chunk-NXYMNPUQ.js} +7 -88
- package/dist/hooks/{chunk-NJQOBE6L.js → chunk-QVLT52OV.js} +2 -7
- package/dist/hooks/{chunk-GQ7KP45M.js → chunk-XYUIQOW3.js} +2 -2
- package/dist/hooks/codex-hook-adapter.js +12 -48
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +2 -2
- package/dist/hooks/inputs.json +280 -0
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +9 -9
- package/dist/hooks/session-lang.js +0 -1
- package/dist/hooks/stop-guard.js +192 -333
- package/dist/josh.js +240 -148
- package/dist/managed-marker/index.js +2 -1
- package/dist/version/index.js +70 -78
- package/eslint/rules/promise.js +5 -0
- package/eslint/rules/unicorn.js +3 -2
- package/package.json +26 -5
- package/pnpm-workspace.yaml +5 -7
- package/prompts/collaboration-workflow/glossary.md +17 -0
- package/prompts/collaboration-workflow/issue-citation.md +5 -5
- package/prompts/collaboration-workflow/issue-template.md +1 -1
- package/prompts/collaboration-workflow/operating-rules.md +5 -5
- package/prompts/collaboration-workflow/overview.md +13 -1
- package/prompts/collaboration-workflow/principles.md +9 -0
- package/prompts/collaboration-workflow/report-format.md +1 -1
- package/prompts/collaboration-workflow/residency.md +3 -3
- package/prompts/collaboration-workflow/rule-delivery.md +1 -1
- package/prompts/collaboration-workflow/turn-batching.md +3 -3
- package/prompts/collaboration-workflow/upstream-interrupt.md +1 -1
- package/prompts/collaboration-workflow/wip-cap.md +25 -22
- package/prompts/collaboration-workflow.md +6 -8
- package/prompts/review-rubric.md +1 -1
- package/prompts/review.md +3 -3
- package/prompts/sonar-hotspot-handling.md +11 -3
- package/prompts/testing-guide.md +3 -3
- package/scripts/adopt/adopt-toolkits.ts +0 -2
- package/scripts/adopt/adopt.ts +0 -2
- package/scripts/agent/agent-argv.ts +0 -2
- package/scripts/agent/agent-diagnostics.ts +1 -1
- package/scripts/agent/agent-role-profile.ts +0 -7
- package/scripts/agent/claude-agent-argv.ts +0 -2
- package/scripts/agent/codex-agent-argv.ts +1 -1
- package/scripts/agent/codex-hooks.ts +92 -0
- package/scripts/agent/interactive-ask.ts +1 -1
- package/scripts/auto-ok/auto-ok-cli.ts +6 -16
- package/scripts/backlog/backlog-arrival.ts +30 -10
- package/scripts/backlog/backlog-budget-cli.ts +15 -16
- package/scripts/backlog/backlog-budget.ts +0 -2
- package/scripts/backlog/backlog-defect-priority.ts +2 -2
- package/scripts/backlog/backlog-drive-cli.ts +10 -8
- package/scripts/backlog/backlog-drive-named-offer.ts +16 -3
- package/scripts/backlog/backlog-drive-named.ts +2 -1
- package/scripts/backlog/backlog-drive.ts +76 -16
- package/scripts/backlog/backlog-named.ts +0 -3
- package/scripts/backlog/backlog-next.ts +9 -15
- package/scripts/backlog/backlog-offer-cli.ts +6 -19
- package/scripts/backlog/backlog-plan-cli.ts +1 -7
- package/scripts/backlog/backlog-plan.ts +30 -19
- package/scripts/backlog/backlog-pool.ts +3 -6
- package/scripts/backlog/backlog-rank.ts +2 -2
- package/scripts/backlog/backlog-ready.ts +39 -10
- package/scripts/backlog/backlog-scope.ts +1 -3
- package/scripts/backlog/backlog-stalled-detect.ts +2 -2
- package/scripts/backlog/backlog-stalled.ts +0 -1
- package/scripts/backlog/backlog-waves.ts +5 -2
- package/scripts/behavior/behavior-cli.ts +1 -1
- package/scripts/build/build-codex-hooks.ts +26 -0
- package/scripts/build/build-hooks.ts +85 -9
- package/scripts/build/hook-bundle-stamp.ts +111 -0
- package/scripts/cases/cases-cli.ts +1 -1
- package/scripts/cases/cases-logic.ts +1 -1
- package/scripts/ci/composite-actions.ts +30 -0
- package/scripts/ci/pr-classification.ts +3 -3
- package/scripts/claude/workflow-destination.ts +10 -1
- package/scripts/clone/clone-fingerprint.ts +0 -1
- package/scripts/clone/clone-scan-cli.ts +1 -1
- package/scripts/clone/clone-scan.ts +1 -1
- package/scripts/config-merge/json-format.ts +0 -1
- package/scripts/config-merge/parse-jsonc.ts +33 -3
- package/scripts/config-merge/patch-json-key.ts +13 -6
- package/scripts/config-merge/patch-yaml-list.ts +1 -1
- package/scripts/cost-runtime/codex-usage.ts +2 -9
- package/scripts/cost-runtime/cost-attribute.ts +0 -1
- package/scripts/cost-runtime/cost-cli.ts +3 -10
- package/scripts/cost-runtime/cost-corpus.ts +0 -2
- package/scripts/cost-runtime/cost-format.ts +0 -3
- package/scripts/cost-runtime/cost-pricing.ts +0 -1
- package/scripts/cost-runtime/cost-tokens.ts +0 -1
- package/scripts/delegation/delegation-cli.ts +1 -1
- package/scripts/delegation/delegation-policy.ts +0 -1
- package/scripts/delegation/duplicate-read-guard.ts +0 -8
- package/scripts/delegation/fanout-cli.ts +1 -1
- package/scripts/delegation/fanout.ts +0 -2
- package/scripts/delegation/investigation-reads.ts +1 -164
- package/scripts/discovery/repo-map-logic.ts +0 -1
- package/scripts/discovery/repo-party-cli.ts +1 -1
- package/scripts/doctor/doctor-consumer.ts +6 -10
- package/scripts/doctor/doctor-io.ts +9 -13
- package/scripts/doctor/doctor-logic.ts +0 -4
- package/scripts/doctor/doctor.ts +14 -9
- package/scripts/document/backlogrun-parent-read-set.ts +12 -1
- package/scripts/document/document-byte-budget.ts +5 -5
- package/scripts/document/document-byte-check.ts +0 -1
- package/scripts/document/document-read-cli.ts +0 -2
- package/scripts/document/document-section-cli.ts +1 -1
- package/scripts/document/document-section.ts +0 -3
- package/scripts/document/edit-files-cli.ts +0 -1
- package/scripts/document/entry-read-budget.ts +21 -7
- package/scripts/document/entry-read-set.ts +32 -8
- package/scripts/document/lane-child-read-set.ts +8 -6
- package/scripts/document/read-files-cli.ts +0 -4
- package/scripts/document/read-set-cli.ts +0 -2
- package/scripts/document/read-set-point-of-use.ts +9 -3
- package/scripts/document/read-set-pricing.ts +0 -1
- package/scripts/document/read-set-trim.ts +4 -2
- package/scripts/epic/epic-add.ts +1 -1
- package/scripts/epic/epic-audit-cli.ts +1 -4
- package/scripts/epic/epic-audit-orphans.ts +1 -3
- package/scripts/epic/epic-audit-rationale.ts +0 -1
- package/scripts/epic/epic-audit-report.ts +0 -2
- package/scripts/epic/epic-audit.ts +8 -22
- package/scripts/epic/epic-bundle-cli.ts +1 -1
- package/scripts/epic/epic-bundle-evidence.ts +0 -1
- package/scripts/epic/epic-bundle-referenced.ts +1 -5
- package/scripts/epic/epic-bundle.ts +0 -4
- package/scripts/epic/epic-busy.ts +4 -5
- package/scripts/epic/epic-candidate-confirm.ts +0 -5
- package/scripts/epic/epic-classify.ts +2 -2
- package/scripts/epic/epic-cli-argv.ts +0 -1
- package/scripts/epic/epic-close-comment.ts +1 -1
- package/scripts/epic/epic-close.ts +5 -2
- package/scripts/epic/epic-cross-repo.ts +2 -4
- package/scripts/epic/epic-decision.ts +0 -1
- package/scripts/epic/epic-fetch.ts +2 -2
- package/scripts/epic/epic-index.ts +2 -3
- package/scripts/epic/epic-issue.ts +1 -15
- package/scripts/epic/epic-lane-offer.ts +9 -8
- package/scripts/epic/epic-nested.ts +1 -1
- package/scripts/epic/epic-next-read.ts +1 -3
- package/scripts/epic/epic-next-views.ts +0 -1
- package/scripts/epic/epic-next.ts +1 -10
- package/scripts/epic/epic-parse.ts +0 -1
- package/scripts/epic/epic-promote.ts +0 -9
- package/scripts/epic/epic-rank.ts +2 -2
- package/scripts/epic/epic-read.ts +1 -2
- package/scripts/epic/epic-reconcile.ts +1 -1
- package/scripts/epic/epic-reference.ts +1 -13
- package/scripts/epic/epic-relation-recheck.ts +1 -1
- package/scripts/epic/epic-relations.ts +1 -1
- package/scripts/epic/epic-remove.ts +1 -1
- package/scripts/epic/epic-report.ts +0 -1
- package/scripts/epic/epic-run.ts +2 -3
- package/scripts/epic/epic-shape.ts +1 -1
- package/scripts/epic/epic-solo-stale.ts +107 -0
- package/scripts/epic/epic-solo.ts +3 -2
- package/scripts/epic/epic-triage.ts +1 -1
- package/scripts/epic/epic-validate.ts +1 -1
- package/scripts/epic/epic.ts +1 -1
- package/scripts/exports/unused-members-cli.ts +53 -0
- package/scripts/{git → followup}/followup-issue-number.ts +1 -6
- package/scripts/{git → followup}/git-followup-cleanup.ts +2 -1
- package/scripts/{git → followup}/git-followup-finish.ts +1 -3
- package/scripts/{git → followup}/git-followup-flush.ts +2 -2
- package/scripts/{git → followup}/git-followup-issue-close.ts +2 -2
- package/scripts/{git → followup}/git-followup-label.ts +4 -4
- package/scripts/followup/git-followup-merged.ts +112 -0
- package/scripts/{git → followup}/git-followup-pending.ts +1 -1
- package/scripts/{git → followup}/git-followup-workflow.ts +19 -11
- package/scripts/{git → followup}/git-pr-followup-wrapup.ts +9 -3
- package/scripts/{git → followup}/git-pr-followup.ts +53 -16
- package/scripts/gate/core-budget.ts +3 -9
- package/scripts/gate/gate-plan.ts +7 -4
- package/scripts/gate/gate-report.ts +0 -6
- package/scripts/gate/gate-tree.ts +1 -1
- package/scripts/gate/pre-commit-type-check.ts +0 -6
- package/scripts/gate/project-checks.ts +7 -8
- package/scripts/gate/scoped-green.ts +0 -1
- package/scripts/gate/type-check-step.ts +1 -1
- package/scripts/gate/verification-gate.ts +0 -2
- package/scripts/gh/fix-gh-packages.ts +15 -12
- package/scripts/gh/gh-spawn.ts +2 -2
- package/scripts/{git → gh}/git-ai-review-scan.ts +1 -5
- package/scripts/{git → gh}/git-gh-check.ts +2 -1
- package/scripts/{git → gh}/git-gh-exec.ts +1 -1
- package/scripts/{git → gh}/git-gh-failure.ts +1 -1
- package/scripts/{git → gh}/git-gh-helpers.ts +0 -1
- package/scripts/{git → gh}/git-gh-issue-list.ts +13 -10
- package/scripts/{git → gh}/git-gh-issue-read.ts +1 -1
- package/scripts/{git → gh}/git-gh-issue-rest.ts +6 -3
- package/scripts/{git → gh}/git-gh-issue-write.ts +4 -1
- package/scripts/{git → gh}/git-gh-pr-auto-merge.ts +4 -1
- package/scripts/{git → gh}/git-gh-pr-read.ts +24 -0
- package/scripts/{git → gh}/git-gh-pr-rest.ts +5 -2
- package/scripts/{git → gh}/git-gh-pr-review.ts +2 -2
- package/scripts/{git → gh}/git-gh-pr-rollup.ts +1 -3
- package/scripts/{git → gh}/git-gh-pr.ts +3 -1
- package/scripts/{git → gh}/git-pr-ai-review.ts +2 -5
- package/scripts/{git → gh}/git-pr-checks-eval.ts +0 -10
- package/scripts/{git → gh}/git-pr-checks-parse.ts +4 -20
- package/scripts/{git → gh}/git-pr-checks.ts +2 -1
- package/scripts/{git → gh}/git-pr-coderabbit.ts +2 -5
- package/scripts/{git → gh}/git-pr-confirmation.ts +1 -3
- package/scripts/{git → gh}/git-pr-managed-config.ts +2 -3
- package/scripts/{git → gh}/git-pr.ts +3 -3
- package/scripts/git/changed-file-scope.ts +0 -1
- package/scripts/git/git-branch.ts +3 -6
- package/scripts/git/git-command.ts +6 -1
- package/scripts/git/git-commit.ts +1 -1
- package/scripts/git/git-common-directory.ts +80 -24
- package/scripts/git/git-error.ts +66 -9
- package/scripts/git/git-issue.ts +1 -1
- package/scripts/git/git-preflight.ts +2 -2
- package/scripts/git/git-prompt.ts +6 -31
- package/scripts/git/git-push.ts +1 -1
- package/scripts/git/git-spawn-sync.ts +65 -0
- package/scripts/git/git-spawn.ts +5 -4
- package/scripts/git/git-staging.ts +1 -0
- package/scripts/git/git-status.ts +1 -1
- package/scripts/git/git-workflow.ts +1 -1
- package/scripts/git/gone-branch.ts +1 -0
- package/scripts/git/listing-cutoff.ts +1 -1
- package/scripts/git/main-merge.ts +1 -1
- package/scripts/git/main-sync.ts +19 -1
- package/scripts/git/parse-json-array.ts +0 -3
- package/scripts/git/repository-lock.ts +16 -16
- package/scripts/git/{git-stash.ts → stash/git-stash.ts} +1 -1
- package/scripts/git/{stash-pop-args.ts → stash/stash-pop-args.ts} +2 -7
- package/scripts/git/{stash-pop-cli.ts → stash/stash-pop-cli.ts} +0 -1
- package/scripts/git/{stash-sweep-lock.ts → stash/stash-sweep-lock.ts} +3 -3
- package/scripts/hooks/codex-hook-adapter.ts +0 -1
- package/scripts/hooks/edited-cspell.ts +1 -1
- package/scripts/hooks/format-edited-file.ts +2 -0
- package/scripts/hooks/pre-push-unit.ts +0 -4
- package/scripts/hooks/pretool-guard.ts +22 -4
- package/scripts/hooks/reserved-run.ts +1 -1
- package/scripts/hooks/step-zero-notice.ts +76 -0
- package/scripts/hooks/stop-guard.ts +47 -21
- package/scripts/init/claude-plugin-config.ts +4 -5
- package/scripts/init/hook-command-rewrite.ts +16 -8
- package/scripts/init/hook-launch.ts +41 -15
- package/scripts/init/init-basic.ts +2 -5
- package/scripts/init/init-file-action.ts +54 -0
- package/scripts/init/init-logic-migrate.ts +35 -17
- package/scripts/init/init-logic-secretlint.ts +1 -1
- package/scripts/init/init-logic.ts +10 -19
- package/scripts/init/init.ts +11 -71
- package/scripts/init/kit-written-paths.ts +2 -0
- package/scripts/init/project-profile.ts +9 -17
- package/scripts/init/start-exec.ts +1 -1
- package/scripts/init/start-setup-pr.ts +6 -6
- package/scripts/init/start-steps.ts +3 -1
- package/scripts/issue/behavior-change-lint.ts +0 -1
- package/scripts/issue/defect-rate-cli.ts +64 -23
- package/scripts/issue/defect-rate.ts +1 -2
- package/scripts/{git → issue}/git-next-issues.ts +3 -3
- package/scripts/issue/issue-backlinks-cli.ts +1 -5
- package/scripts/issue/issue-backlinks.ts +7 -14
- package/scripts/issue/issue-cite-cli.ts +2 -6
- package/scripts/issue/issue-cite.ts +12 -8
- package/scripts/issue/issue-classification.ts +1 -9
- package/scripts/issue/issue-closing-pr.ts +4 -4
- package/scripts/issue/issue-comment-cli.ts +2 -2
- package/scripts/issue/issue-file-cli.ts +5 -5
- package/scripts/issue/issue-file.ts +7 -14
- package/scripts/issue/issue-fold-cli.ts +1 -1
- package/scripts/issue/issue-fold-existing-cli.ts +1 -1
- package/scripts/{git → issue}/issue-labels.ts +8 -0
- package/scripts/issue/issue-lint-cli.ts +1 -1
- package/scripts/issue/issue-merged.ts +2 -2
- package/scripts/{git → issue}/issue-rank.ts +1 -1
- package/scripts/issue/issue-read-cli.ts +8 -47
- package/scripts/issue/issue-read.ts +0 -2
- package/scripts/issue/issue-report-failures.ts +80 -0
- package/scripts/issue/issue-scout-cli.ts +1 -7
- package/scripts/issue/issue-scout-closed.ts +2 -2
- package/scripts/issue/issue-scout.ts +0 -2
- package/scripts/issue/issue-state-cli.ts +5 -46
- package/scripts/issue/issue-state.ts +1 -5
- package/scripts/issue/markdown-section.ts +21 -6
- package/scripts/issue/measure-rerun-cli.ts +74 -15
- package/scripts/issue/reproduction-measure.ts +1 -1
- package/scripts/josh/cli-body.ts +1 -1
- package/scripts/josh/file-map-stamp.ts +0 -3
- package/scripts/josh/josh-command-map.ts +2 -0
- package/scripts/josh/josh-commands-ai.ts +9 -102
- package/scripts/josh/josh-commands-backlog.ts +5 -1
- package/scripts/josh/josh-commands-development.ts +8 -1
- package/scripts/josh/josh-commands-issue.ts +2 -2
- package/scripts/josh/josh-commands-maintenance.ts +7 -0
- package/scripts/josh/josh-commands-project.ts +7 -1
- package/scripts/josh/josh-commands-run.ts +114 -0
- package/scripts/josh/josh-commands-versioning.ts +8 -0
- package/scripts/josh/josh-commands-workflow.ts +3 -3
- package/scripts/josh/path-decision.ts +0 -3
- package/scripts/josh/process-owner.ts +16 -0
- package/scripts/josh/run-github-prerequisite.ts +3 -6
- package/scripts/josh/session-language-cli.ts +0 -1
- package/scripts/lane/lane-await.ts +46 -19
- package/scripts/lane/lane-capacity.ts +6 -3
- package/scripts/lane/lane-child-invocation.ts +20 -7
- package/scripts/lane/lane-cli.ts +1 -4
- package/scripts/lane/lane-close.ts +5 -4
- package/scripts/lane/lane-dispatch.ts +3 -4
- package/scripts/lane/lane-environment.ts +0 -9
- package/scripts/lane/lane-handoff.ts +38 -0
- package/scripts/lane/lane-launch-cli.ts +31 -27
- package/scripts/lane/lane-open.ts +0 -3
- package/scripts/lane/lane-output.ts +0 -1
- package/scripts/lane/lane-registry.ts +9 -0
- package/scripts/lane/openai-lane-ship.ts +2 -0
- package/scripts/lane/openai-lane-supervisor-decision.ts +2 -1
- package/scripts/lane/openai-lane-supervisor.ts +6 -4
- package/scripts/lane/openai-review-broker.ts +7 -1
- package/scripts/lib/bounded-pool.ts +1 -0
- package/scripts/lib/cli-flags.ts +31 -2
- package/scripts/lib/error-message.ts +12 -1
- package/scripts/lib/json-value.ts +5 -4
- package/scripts/lib/poll.ts +3 -1
- package/scripts/lib/timed-fetch.ts +15 -0
- package/scripts/lib/timeouts.ts +13 -0
- package/scripts/{yaml → lib}/yaml-document.ts +3 -1
- package/scripts/{bytes → lines}/bytes-command.ts +0 -2
- package/scripts/lines/line-targets.ts +0 -11
- package/scripts/lines/lines-command.ts +5 -4
- package/scripts/lint/lint-related-scope.ts +0 -1
- package/scripts/lint/lint-related.ts +1 -1
- package/scripts/{git → notify}/telegram-notify.ts +2 -2
- package/scripts/{git → notify}/telegram-test.ts +4 -4
- package/scripts/observations/observation-ledger-home.ts +0 -1
- package/scripts/observations/observation-ledger-line.ts +0 -1
- package/scripts/observations/observation-ledger-migrate.ts +1 -1
- package/scripts/observations/observations-flush-landing.ts +3 -3
- package/scripts/observations/observations-flush.ts +2 -2
- package/scripts/overrides/lockfile-overrides.ts +1 -1
- package/scripts/overrides/overrides-logic.ts +1 -1
- package/scripts/package/package-scout-cli.ts +2 -7
- package/scripts/package/package-scout.ts +0 -2
- package/scripts/propagate/propagate-git-failure.ts +0 -1
- package/scripts/propagate/propagate-git.ts +3 -10
- package/scripts/propagate/propagate-publish.ts +2 -3
- package/scripts/propagate/propagate-run.ts +0 -2
- package/scripts/propagate/propagate-steps.ts +3 -5
- package/scripts/propagate/propagate-targets.ts +0 -4
- package/scripts/propagate/propagate.ts +0 -4
- package/scripts/refactor/import-graph.ts +0 -1
- package/scripts/refactor/refactor-lint.ts +0 -2
- package/scripts/refactor/refactor-scan.ts +2 -2
- package/scripts/refactor/refactor-targets.ts +0 -1
- package/scripts/registry-migration/migrate-logic.ts +28 -21
- package/scripts/registry-migration/migrate.ts +25 -14
- package/scripts/release/github-release-cli.ts +19 -6
- package/scripts/release/github-release-environment.ts +46 -0
- package/scripts/release/github-release.ts +151 -94
- package/scripts/release/release-history.ts +0 -1
- package/scripts/release/release-plan.ts +0 -1
- package/scripts/release/release-publish.ts +38 -5
- package/scripts/release/release-scope-cli.ts +1 -2
- package/scripts/release/release-tag.ts +2 -4
- package/scripts/release/release-worktree.ts +97 -2
- package/scripts/repo/auto-merge-setting-logic.ts +1 -4
- package/scripts/repo/repo-setting.ts +1 -1
- package/scripts/repo/repository-labels.ts +3 -3
- package/scripts/repo/required-checks-logic.ts +206 -0
- package/scripts/repo/required-checks-report.ts +71 -0
- package/scripts/repo/ruleset-check-cli.ts +53 -0
- package/scripts/repo/ruleset-check.ts +147 -0
- package/scripts/report/report-lint-cli.ts +0 -4
- package/scripts/review/disposition-cli.ts +1 -1
- package/scripts/review/live-evidence.ts +1 -1
- package/scripts/review/review-attest-cli.ts +0 -6
- package/scripts/review/review-attest.ts +4 -16
- package/scripts/review/review-brief-cli.ts +23 -6
- package/scripts/review/review-brief.ts +21 -8
- package/scripts/review/review-checkout.ts +3 -2
- package/scripts/review/review-diff-parts.ts +89 -0
- package/scripts/review/review-diff-write.ts +97 -0
- package/scripts/review/review-finding-ledger.ts +0 -1
- package/scripts/review/review-record-cli.ts +10 -17
- package/scripts/review/review-record.ts +0 -1
- package/scripts/review/review-round2-cli.ts +1 -1
- package/scripts/review/review-stamps.ts +0 -3
- package/scripts/review/review-tree.ts +14 -2
- package/scripts/rules/decision-oracle-stage.ts +18 -0
- package/scripts/rules/decision-oracle.ts +10 -7
- package/scripts/rules/delivered-rules.ts +9 -1
- package/scripts/rules/destructive-command.ts +119 -0
- package/scripts/rules/direct-filing.ts +1 -1
- package/scripts/rules/early-heartbeat.ts +4 -3
- package/scripts/rules/file-body.ts +0 -3
- package/scripts/rules/filing-cap.ts +0 -2
- package/scripts/rules/gh-api.ts +7 -2
- package/scripts/rules/git-argv.ts +18 -7
- package/scripts/rules/git-force.ts +0 -2
- package/scripts/rules/implementation-cut.ts +0 -1
- package/scripts/rules/index-guard.ts +71 -0
- package/scripts/rules/issue-citation.ts +50 -25
- package/scripts/rules/lane-background.ts +15 -7
- package/scripts/rules/lane-park.ts +22 -6
- package/scripts/rules/last-prompt.ts +1 -0
- package/scripts/rules/oracle-consulted.ts +1 -1
- package/scripts/rules/oracle-firing.ts +1 -0
- package/scripts/rules/oracle-list-cli.ts +0 -3
- package/scripts/rules/permission-guards.ts +14 -0
- package/scripts/rules/protected-files.ts +74 -0
- package/scripts/rules/reply-language.ts +1 -1
- package/scripts/rules/rule-body-guard.ts +0 -3
- package/scripts/rules/rule-value-cli.ts +0 -1
- package/scripts/rules/shell-body-trigger.ts +0 -1
- package/scripts/rules/shell-segments.ts +0 -1
- package/scripts/rules/stop-rules.ts +20 -9
- package/scripts/rules/tail-commands.ts +1 -1
- package/scripts/rules/test-declared-commit.ts +1 -1
- package/scripts/rules/third-party-write.ts +0 -1
- package/scripts/rules/worktree-guard.ts +26 -9
- package/scripts/run/run-carry-args.ts +8 -12
- package/scripts/run/run-carry-cli.ts +0 -2
- package/scripts/run/run-carry-stash.ts +2 -2
- package/scripts/run/run-carry-streak.ts +1 -1
- package/scripts/run/run-cut-args.ts +1 -6
- package/scripts/run/run-cut-cli.ts +0 -7
- package/scripts/run/run-cut.ts +8 -54
- package/scripts/run/run-ending-cli.ts +2 -6
- package/scripts/run/run-ending.ts +1 -4
- package/scripts/run/run-entry-cli.ts +133 -25
- package/scripts/run/run-entry-stop.ts +104 -0
- package/scripts/run/run-entry.ts +0 -1
- package/scripts/run/run-event-cli.ts +0 -2
- package/scripts/run/run-event-follow.ts +1 -0
- package/scripts/run/run-event-render.ts +1 -1
- package/scripts/run/run-event-scope.ts +53 -4
- package/scripts/run/run-event-stream-emit.ts +7 -2
- package/scripts/run/run-event-stream.ts +0 -3
- package/scripts/run/run-event-watch.ts +1 -0
- package/scripts/run/run-halfrun-resume.ts +20 -7
- package/scripts/run/run-headless.ts +2 -2
- package/scripts/run/run-hold-cli.ts +33 -10
- package/scripts/run/run-hold.ts +29 -6
- package/scripts/run/run-issue-number.ts +1 -1
- package/scripts/run/run-liveness-cli.ts +2 -6
- package/scripts/run/run-liveness.ts +2 -3
- package/scripts/run/run-merge-cli.ts +7 -23
- package/scripts/run/run-merge-steps.ts +5 -5
- package/scripts/run/run-merge.ts +1 -1
- package/scripts/run/run-next-cli.ts +1 -1
- package/scripts/run/run-parent-cut-hook.ts +4 -2
- package/scripts/run/run-preflight.ts +2 -9
- package/scripts/run/run-prep-cli.ts +6 -3
- package/scripts/run/run-prep-locate.ts +1 -1
- package/scripts/run/run-progress-args.ts +20 -4
- package/scripts/run/run-progress-cli.ts +35 -36
- package/scripts/run/run-progress-clock.ts +10 -35
- package/scripts/run/run-progress-config.ts +0 -4
- package/scripts/run/run-progress-read.ts +1 -2
- package/scripts/run/run-progress.ts +1 -2
- package/scripts/run/run-prrun-resume.ts +117 -0
- package/scripts/run/run-report-cli.ts +1 -2
- package/scripts/run/run-report.ts +0 -1
- package/scripts/run/run-retrospective.ts +1 -1
- package/scripts/run/run-review-cli.ts +0 -3
- package/scripts/run/run-review-steps.ts +2 -0
- package/scripts/run/run-review.ts +0 -2
- package/scripts/run/run-ship-cli.ts +29 -19
- package/scripts/run/run-ship-detach.ts +1 -0
- package/scripts/run/run-ship-next.ts +106 -0
- package/scripts/run/run-ship-preflight.ts +1 -1
- package/scripts/run/run-ship-probe.ts +4 -1
- package/scripts/run/run-ship-return.ts +8 -3
- package/scripts/run/run-ship-review-steps.ts +18 -4
- package/scripts/run/run-ship-review.ts +11 -0
- package/scripts/run/run-ship-scoped.ts +1 -0
- package/scripts/run/run-ship-steps.ts +1 -1
- package/scripts/run/run-ship.ts +0 -1
- package/scripts/run/run-stage-read.ts +62 -0
- package/scripts/run/run-stage.ts +160 -0
- package/scripts/run/run-status-cli.ts +3 -16
- package/scripts/run/run-step-cli.ts +21 -14
- package/scripts/run/run-step.ts +1 -1
- package/scripts/run/run-stop-notify.ts +1 -3
- package/scripts/run/run-stranded-cli.ts +0 -4
- package/scripts/run/run-stranded-detect.ts +2 -2
- package/scripts/run/run-tail-cli.ts +17 -11
- package/scripts/run/run-tail.ts +2 -0
- package/scripts/run/run-tidy-lanes.ts +6 -2
- package/scripts/run/run-tidy-stashes.ts +12 -12
- package/scripts/run/run-wake-cli.ts +4 -13
- package/scripts/run/run-wake-loop.ts +2 -2
- package/scripts/run/run-wake.ts +2 -4
- package/scripts/run/run-watcher-guard-cli.ts +0 -4
- package/scripts/run/run-watcher-guard.ts +18 -12
- package/scripts/run/run-watcher-hook.ts +1 -1
- package/scripts/safe-chain/ci-installer-pin.ts +11 -5
- package/scripts/safe-chain/pack-hook.ts +92 -0
- package/scripts/safe-chain/project-config.ts +1 -1
- package/scripts/security/security-audit-provision-logic.ts +0 -1
- package/scripts/security/security-audit-provision.ts +3 -2
- package/scripts/security/security-audit.ts +0 -1
- package/scripts/security/security-updates-logic.ts +0 -1
- package/scripts/sonar/sonar-hotspots-cli.ts +10 -52
- package/scripts/sonar/sonar-hotspots.ts +0 -1
- package/scripts/sonar/sonar-new-code-cli.ts +150 -0
- package/scripts/sonar/sonar-new-code.ts +79 -0
- package/scripts/sonar/sonar-project.ts +97 -0
- package/scripts/split/split-assess-cli.ts +1 -1
- package/scripts/split/split-assess.ts +2 -5
- package/scripts/sync/managed-config-scope-cli.ts +1 -1
- package/scripts/sync/skill-migration.ts +0 -1
- package/scripts/sync/sync-ai-files.ts +4 -0
- package/scripts/sync/sync-hook-safety.ts +2 -3
- package/scripts/sync/sync.ts +1 -8
- package/scripts/sync/template-source-logic.ts +0 -1
- package/scripts/sync/workflow-pin-logic.ts +16 -28
- package/scripts/test/test-declared-changed.ts +13 -16
- package/scripts/test/test-declared-logic.ts +0 -1
- package/scripts/test/test-declared.ts +3 -9
- package/scripts/test/test-red-commit.ts +2 -2
- package/scripts/test/test-red.ts +14 -7
- package/scripts/test/test-type-logic.ts +1 -1
- package/scripts/test/unit-worker-share.ts +7 -16
- package/scripts/time-runtime/time-batch-guard.ts +1 -2
- package/scripts/time-runtime/time-bundle-call.ts +0 -1
- package/scripts/time-runtime/time-bundles.ts +0 -4
- package/scripts/time-runtime/time-density-hook.ts +0 -2
- package/scripts/time-runtime/time-followup-stage.ts +1 -1
- package/scripts/time-runtime/time-format.ts +0 -73
- package/scripts/time-runtime/time-round-trips.ts +0 -4
- package/scripts/time-runtime/time-single-check.ts +1 -1
- package/scripts/time-runtime/time-spans.ts +1 -1
- package/scripts/time-runtime/time-transcript-line.ts +1 -2
- package/scripts/ui/ui-routes-cli.ts +0 -5
- package/scripts/ui/ui-routes.ts +0 -5
- package/scripts/version/effective-upstream.ts +2 -2
- package/scripts/version/latest-corepack.ts +7 -9
- package/scripts/version/latest-scope-cli.ts +0 -2
- package/scripts/version/latest-update.ts +0 -2
- package/scripts/version/npm-registry.ts +2 -2
- package/scripts/version/publishable-range-check.ts +1 -1
- package/scripts/version/release-hold.ts +0 -4
- package/scripts/version/running-binary.ts +2 -2
- package/scripts/version/version-check-logic.ts +0 -2
- package/scripts/version/version-commands.ts +11 -1
- package/scripts/version/version-remote.ts +3 -3
- package/scripts/version/version-targets.ts +4 -4
- package/templates/CLAUDE.basic.md +6 -6
- package/templates/sonar-project.properties +28 -1
- package/templates/workflows/ci.yml +16 -82
- package/templates/workflows/dependabot-auto-merge.yml +6 -3
- package/templates/workflows/github-release.yml +79 -0
- package/tsconfig.sonar.json +4 -22
- package/prompts/collaboration-workflow/cross-repo-epic.md +0 -5
- package/prompts/collaboration-workflow/epic-audit.md +0 -5
- package/prompts/collaboration-workflow/epic-bundle.md +0 -5
- package/scripts/init/plugin-install-hint.ts +0 -47
- package/scripts/version/parse-json.ts +0 -13
- /package/scripts/{git → followup}/git-followup-stages.ts +0 -0
- /package/scripts/{git → gh}/git-gh-api-path.ts +0 -0
- /package/scripts/{git → gh}/git-gh-command.ts +0 -0
- /package/scripts/{git → gh}/git-gh-issue.ts +0 -0
- /package/scripts/{git → gh}/git-gh-pr-snapshot.ts +0 -0
- /package/scripts/{git → gh}/git-gh-reachability.ts +0 -0
- /package/scripts/{git → gh}/git-gh-repo.ts +0 -0
- /package/scripts/{git → gh}/git-gh-rest-state.ts +0 -0
- /package/scripts/{git → gh}/git-pr-checks-watch.ts +0 -0
- /package/scripts/{git → gh}/git-pr-error.ts +0 -0
- /package/scripts/{git → gh}/git-pr-messages.ts +0 -0
- /package/scripts/{git → gh}/github-issue-url.ts +0 -0
- /package/scripts/git/{stash-orphans.ts → stash/stash-orphans.ts} +0 -0
- /package/scripts/{git → issue}/issue-reference.ts +0 -0
- /package/scripts/{git → lib}/animation-helpers.ts +0 -0
- /package/scripts/{git → lib}/git-animation.ts +0 -0
- /package/scripts/{git → notify}/git-notify.ts +0 -0
- /package/scripts/{git → notify}/telegram-test-logic.ts +0 -0
|
@@ -62,6 +62,7 @@ const POINT_OF_USE_BY_ENTRY: ReadonlyMap<string, ReadonlySet<string>> = new Map(
|
|
|
62
62
|
['kickoff', DEFERRED_DECISIONS],
|
|
63
63
|
['fullrun', DEFERRED_DECISIONS],
|
|
64
64
|
['halfrun', DEFERRED_DECISIONS],
|
|
65
|
+
['prrun', DEFERRED_DECISIONS],
|
|
65
66
|
['backlogrun', new Set([...DEFERRED_DECISIONS, 'fullrun.md', 'split-assessment.md'])],
|
|
66
67
|
])
|
|
67
68
|
|
|
@@ -74,9 +75,14 @@ function is_point_of_use(entry: string, file: string): boolean {
|
|
|
74
75
|
return (POINT_OF_USE_BY_ENTRY.get(entry) ?? NO_PER_ENTRY_FILES).has(file)
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
// **Only the global files the entry reaches, plus the ones this entry names in its own row**
|
|
79
|
+
// (joshuafolkken/kit#3078). `cited` is every document the entry's path names; a global file outside it
|
|
80
|
+
// is one this entry never opens — a `kickoff` never issues `followup` — so charging it made every
|
|
81
|
+
// entry's total the same figure and the per-entry ratchet measured nothing.
|
|
82
|
+
function point_of_use_files(entry: string, cited: ReadonlySet<string>): Array<string> {
|
|
83
|
+
const reached = [...POINT_OF_USE_FILES].filter((file) => cited.has(file))
|
|
84
|
+
|
|
85
|
+
return [...reached, ...(POINT_OF_USE_BY_ENTRY.get(entry) ?? NO_PER_ENTRY_FILES)]
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
const read_set_point_of_use = {
|
|
@@ -24,6 +24,8 @@ interface TrimSpec {
|
|
|
24
24
|
unused_skill_sections: ReadonlyArray<string>
|
|
25
25
|
// The point-of-use documents this role's parent owns; empty when the role owns them all.
|
|
26
26
|
skipped_point_of_use: ReadonlySet<string>
|
|
27
|
+
// The point-of-use documents this role reaches that its base entry's path does not name.
|
|
28
|
+
reached_point_of_use: ReadonlySet<string>
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
function subtract(left: Cost, right: Cost): Cost {
|
|
@@ -59,7 +61,7 @@ function reduce_skill(file: FileCost, saving: Cost): FileCost {
|
|
|
59
61
|
// **`whole` and `scoped` both carry the own-files cost identically**, so the `SKILL.md` saving lands
|
|
60
62
|
// on each by the same amount — there is no need to re-derive the referenced-section split.
|
|
61
63
|
function costed(root: string, spec: TrimSpec): ReadSetCost {
|
|
62
|
-
const base = entry_read_set.costed(root, spec.base_entry)
|
|
64
|
+
const base = entry_read_set.costed(root, spec.base_entry, spec.reached_point_of_use)
|
|
63
65
|
const saving = unused_skill_cost(root, spec.unused_skill_sections)
|
|
64
66
|
|
|
65
67
|
return {
|
|
@@ -72,7 +74,7 @@ function costed(root: string, spec: TrimSpec): ReadSetCost {
|
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
const read_set_trim = { costed
|
|
77
|
+
const read_set_trim = { costed }
|
|
76
78
|
|
|
77
79
|
export type { TrimSpec }
|
|
78
80
|
export { read_set_trim }
|
package/scripts/epic/epic-add.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { backlog_ready } from '#scripts/backlog/backlog-ready'
|
|
2
|
-
import { git_gh_command } from '#scripts/
|
|
2
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
3
3
|
import { epic_add_plan, type AddPlan } from './epic-add-plan'
|
|
4
4
|
import type { InsertPosition } from './epic-chains'
|
|
5
5
|
import { epic_decision } from './epic-decision'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { git_gh_command } from '#scripts/
|
|
3
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
4
4
|
import { issue_read } from '#scripts/issue/issue-read'
|
|
5
5
|
import { epic_audit_logic, type AuditFinding, type ReferenceState } from './epic-audit'
|
|
6
6
|
import { epic_audit_checks, type AuditChild } from './epic-audit-checks'
|
|
@@ -356,16 +356,13 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
356
356
|
}
|
|
357
357
|
|
|
358
358
|
const epic_audit_cli = {
|
|
359
|
-
USAGE,
|
|
360
359
|
UNREADABLE_REPO,
|
|
361
360
|
parse_epic_number: epic_issue.parse_epic_number,
|
|
362
361
|
attach_bodies,
|
|
363
362
|
resolve_reference_states,
|
|
364
363
|
outside_references,
|
|
365
|
-
read_order_comments,
|
|
366
364
|
audit,
|
|
367
365
|
run,
|
|
368
|
-
main,
|
|
369
366
|
}
|
|
370
367
|
|
|
371
368
|
if (process.argv[1] === fileURLToPath(import.meta.url)) await main(process.argv.slice(ARGV_OFFSET))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { git_gh_command } from '#scripts/
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import { cutoff_of, PAGE_CEILING_CAUSE, type ScanCutoff } from '#scripts/git/listing-cutoff'
|
|
3
3
|
import { parse_json_array_safe } from '#scripts/git/parse-json-array'
|
|
4
4
|
import { z } from 'zod'
|
|
@@ -129,8 +129,6 @@ function locally_tracked(snapshot: EpicSnapshot): Array<number> {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
const epic_audit_orphans = {
|
|
132
|
-
PARENT_MARKERS,
|
|
133
|
-
ORPHAN_SEARCH,
|
|
134
132
|
claimed_numbers,
|
|
135
133
|
claims_parent,
|
|
136
134
|
find_claiming_issues,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { markdown_section } from '#scripts/issue/markdown-section'
|
|
1
2
|
import { epic_graph, type EpicChild, type IssueReference } from './epic-graph'
|
|
2
3
|
|
|
3
4
|
// Reading an epic's children against each other.
|
|
@@ -39,8 +40,10 @@ const REPO_NAME_DOT = '.'
|
|
|
39
40
|
const NO_KNOWN_REPOS: ReadonlySet<string> = new Set()
|
|
40
41
|
// Where a child states what it must deliver. Both spellings, because the bodies are written in
|
|
41
42
|
// whichever language the session was in.
|
|
42
|
-
const ACCEPTANCE_HEADINGS:
|
|
43
|
-
|
|
43
|
+
const ACCEPTANCE_HEADINGS: ReadonlySet<string> = new Set([
|
|
44
|
+
'## 受け入れ条件',
|
|
45
|
+
'## Acceptance criteria',
|
|
46
|
+
])
|
|
44
47
|
|
|
45
48
|
type FindingLevel = 'error' | 'warning'
|
|
46
49
|
|
|
@@ -163,29 +166,14 @@ function parse_references(text: string, repo = ''): Array<number> {
|
|
|
163
166
|
}
|
|
164
167
|
|
|
165
168
|
function is_acceptance_heading(line: string): boolean {
|
|
166
|
-
return ACCEPTANCE_HEADINGS.
|
|
169
|
+
return ACCEPTANCE_HEADINGS.has(line.trim())
|
|
167
170
|
}
|
|
168
171
|
|
|
169
|
-
|
|
170
|
-
return line.trimStart().startsWith(HEADING_PREFIX)
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// The lines under the acceptance-criteria heading, up to the next `##`. Shaped like the other
|
|
174
|
-
// section readers in this repository, for the same reason: a regex spanning the block backtracks.
|
|
175
|
-
function section_lines(lines: ReadonlyArray<string>): Array<string> {
|
|
176
|
-
const start = lines.findIndex((line) => is_acceptance_heading(line))
|
|
177
|
-
if (start === -1) return []
|
|
178
|
-
const rest = lines.slice(start + 1)
|
|
179
|
-
const end = rest.findIndex((line) => is_heading(line))
|
|
180
|
-
|
|
181
|
-
return end === -1 ? rest : rest.slice(0, end)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// The acceptance-criteria section of a child's body, or an empty string.
|
|
172
|
+
// The acceptance-criteria section of a child's body, up to the next unfenced `##`, or an empty string.
|
|
185
173
|
function acceptance_section(body: string | undefined): string {
|
|
186
174
|
if (body === undefined) return ''
|
|
187
175
|
|
|
188
|
-
return
|
|
176
|
+
return markdown_section.section_lines_matching(body, is_acceptance_heading).join('\n')
|
|
189
177
|
}
|
|
190
178
|
|
|
191
179
|
// Everything `node` depends on, directly or through a chain. Walked iteratively so a graph that
|
|
@@ -226,13 +214,11 @@ function depends_on(
|
|
|
226
214
|
// a `#` lives in `prefix_before`, so the pattern on its own matches the tail of `owner/repo#12` —
|
|
227
215
|
// the very reading this module exists to prevent.
|
|
228
216
|
const epic_audit_logic = {
|
|
229
|
-
ACCEPTANCE_HEADINGS,
|
|
230
217
|
unique_references,
|
|
231
218
|
known_repos,
|
|
232
219
|
parse_issue_references,
|
|
233
220
|
parse_references,
|
|
234
221
|
acceptance_section,
|
|
235
|
-
collect_blockers,
|
|
236
222
|
depends_on,
|
|
237
223
|
}
|
|
238
224
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
|
-
import { git_gh_command } from '#scripts/
|
|
3
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
4
4
|
import { cutoff_of, type ScanCutoff } from '#scripts/git/listing-cutoff'
|
|
5
5
|
import { parse_json_array_or_undefined } from '#scripts/git/parse-json-array'
|
|
6
6
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { git_gh_command } from '#scripts/
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
3
3
|
import { epic_audit_logic } from './epic-audit'
|
|
4
4
|
import type { BacklogIssue } from './epic-bundle'
|
|
@@ -181,11 +181,7 @@ async function referenced_candidates(
|
|
|
181
181
|
|
|
182
182
|
const epic_bundle_referenced = {
|
|
183
183
|
REFERENCED_LOOKUP_LIMIT,
|
|
184
|
-
LOOKUP_CONCURRENCY,
|
|
185
184
|
referenced_lookups,
|
|
186
|
-
is_failed_read,
|
|
187
|
-
to_backlog_issue,
|
|
188
|
-
is_usable_candidate,
|
|
189
185
|
collect_referenced,
|
|
190
186
|
fetch_referenced,
|
|
191
187
|
referenced_candidates,
|
|
@@ -294,12 +294,8 @@ const epic_bundle = {
|
|
|
294
294
|
names_in_body,
|
|
295
295
|
NO_SIGNAL_REASON,
|
|
296
296
|
already_tracked_reason,
|
|
297
|
-
SPREAD_REASON,
|
|
298
|
-
has_mutual_reference,
|
|
299
297
|
has_recorded_dependency,
|
|
300
298
|
is_strong_signal,
|
|
301
|
-
find_candidates,
|
|
302
|
-
candidate_epics,
|
|
303
299
|
decide_bundle,
|
|
304
300
|
bundle_dependency_links,
|
|
305
301
|
bundle_children,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { git_gh_command } from '#scripts/
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
|
+
import { read_json_listing } from '#scripts/git/parse-json-array'
|
|
3
|
+
import { open_issue_schema, type OpenIssueData } from '#scripts/git/schemas'
|
|
2
4
|
import {
|
|
3
5
|
ALREADY_DONE_LABEL,
|
|
4
6
|
has_any_label,
|
|
5
7
|
IN_PROGRESS_LABEL,
|
|
6
8
|
NEEDS_DECISION_LABEL,
|
|
7
|
-
} from '#scripts/
|
|
8
|
-
import { read_json_listing } from '#scripts/git/parse-json-array'
|
|
9
|
-
import { open_issue_schema, type OpenIssueData } from '#scripts/git/schemas'
|
|
9
|
+
} from '#scripts/issue/issue-labels'
|
|
10
10
|
|
|
11
11
|
// How much of a repository's parallelism is already spoken for — asked of the *repository*, never of
|
|
12
12
|
// the epic (joshuafolkken/kit#925), and counted rather than treated as a yes/no since
|
|
@@ -194,7 +194,6 @@ const epic_busy = {
|
|
|
194
194
|
unreadable_message,
|
|
195
195
|
truncated_message,
|
|
196
196
|
busy_reason,
|
|
197
|
-
format_holders,
|
|
198
197
|
is_parked,
|
|
199
198
|
parse_listing,
|
|
200
199
|
read_repository,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
has_label_name,
|
|
4
4
|
IN_PROGRESS_LABEL,
|
|
5
5
|
NEEDS_DECISION_LABEL,
|
|
6
|
-
} from '#scripts/
|
|
6
|
+
} from '#scripts/issue/issue-labels'
|
|
7
7
|
import { epic_graph, type EpicChild, type IssueReference } from './epic-graph'
|
|
8
8
|
import { epic_nested } from './epic-nested'
|
|
9
9
|
import {
|
|
@@ -44,7 +44,7 @@ function resolve_by_state(blocker: EpicChild): DependencyVerdict {
|
|
|
44
44
|
// Case-insensitive, through the shared comparison rather than `Array.includes`. GitHub keeps the
|
|
45
45
|
// casing a label was created with and treats `Epic` and `epic` as one label, so a repository that
|
|
46
46
|
// predates these scripts can answer with either spelling — and a child read by eye against the
|
|
47
|
-
// lowercase string is one this classification never sees (`scripts/
|
|
47
|
+
// lowercase string is one this classification never sees (`scripts/issue/issue-labels.ts`).
|
|
48
48
|
function has_label(child: EpicChild, label: string): boolean {
|
|
49
49
|
return has_label_name(child.labels, label)
|
|
50
50
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { git_gh_command } from '#scripts/
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
2
|
import { read_json_listing } from '#scripts/git/parse-json-array'
|
|
3
3
|
import { rest_comment_schema, type RestCommentData } from '#scripts/git/schemas'
|
|
4
4
|
import { epic_parse, type ExternalChild } from './epic-parse'
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { git_gh_command } from '#scripts/
|
|
2
|
-
import { EPIC_LABEL } from '#scripts/git/issue-labels'
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
3
2
|
import { cutoff_cause, cutoff_of, type ScanCutoff } from '#scripts/git/listing-cutoff'
|
|
4
3
|
import {
|
|
5
4
|
parse_json_array_or_undefined,
|
|
6
5
|
parse_json_object_safe,
|
|
7
6
|
} from '#scripts/git/parse-json-array'
|
|
8
7
|
import { epic_child_schema, epic_issue_schema, type EpicChildData } from '#scripts/git/schemas'
|
|
8
|
+
import { EPIC_LABEL } from '#scripts/issue/issue-labels'
|
|
9
9
|
import { error_text } from '#scripts/lib/error-message'
|
|
10
10
|
import { epic_close_comment } from './epic-close-comment'
|
|
11
11
|
import { epic_parse, type ExternalChild } from './epic-parse'
|
|
@@ -296,6 +296,7 @@ async function close_parents_of(
|
|
|
296
296
|
const closed: Array<number> = []
|
|
297
297
|
|
|
298
298
|
for (const epic of parents_of(open_epics, child_number)) {
|
|
299
|
+
// eslint-disable-next-line no-await-in-loop -- each close updates the evaluated set the next one reads
|
|
299
300
|
const number = await close_if_unseen(epic, child_number, evaluated)
|
|
300
301
|
if (number !== undefined) closed.push(number)
|
|
301
302
|
}
|
|
@@ -311,6 +312,7 @@ async function close_next_level(
|
|
|
311
312
|
const next: Array<number> = []
|
|
312
313
|
|
|
313
314
|
for (const child_number of frontier) {
|
|
315
|
+
// eslint-disable-next-line no-await-in-loop -- each close updates the evaluated set the next one reads
|
|
314
316
|
next.push(...(await close_parents_of(open_epics, child_number, evaluated)))
|
|
315
317
|
}
|
|
316
318
|
|
|
@@ -328,6 +330,7 @@ async function cascade_close(
|
|
|
328
330
|
|
|
329
331
|
for (let depth = 0; depth < MAX_CASCADE_DEPTH; depth++) {
|
|
330
332
|
if (frontier.length === 0) return
|
|
333
|
+
// eslint-disable-next-line no-await-in-loop -- the cascade closes one level before reading the next
|
|
331
334
|
frontier = await close_next_level(open_epics, frontier, evaluated)
|
|
332
335
|
}
|
|
333
336
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { repo_map_logic } from '#scripts/discovery/repo-map-logic'
|
|
2
2
|
import { repo_origin } from '#scripts/discovery/repo-origin'
|
|
3
|
-
import { git_gh_api_path } from '#scripts/
|
|
4
|
-
import { git_gh_exec } from '#scripts/
|
|
3
|
+
import { git_gh_api_path } from '#scripts/gh/git-gh-api-path'
|
|
4
|
+
import { git_gh_exec } from '#scripts/gh/git-gh-exec'
|
|
5
5
|
import { propagate_publish } from '#scripts/propagate/propagate-publish'
|
|
6
6
|
import { derive_versions_endpoint } from '#scripts/version/version-command-config'
|
|
7
7
|
import { load } from 'js-yaml'
|
|
@@ -336,11 +336,9 @@ function is_same_owner_repo(repo: string, current_owner: string): boolean {
|
|
|
336
336
|
|
|
337
337
|
const epic_cross_repo = {
|
|
338
338
|
publishes_nothing,
|
|
339
|
-
read_manifest,
|
|
340
339
|
read_default_branch_version,
|
|
341
340
|
reset_publish_cache,
|
|
342
341
|
package_name_for,
|
|
343
|
-
is_published,
|
|
344
342
|
resolve_cross_repo,
|
|
345
343
|
owner_of,
|
|
346
344
|
is_same_owner_repo,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { git_gh_command } from '#scripts/
|
|
2
|
-
import type { IssueReadFailure } from '#scripts/
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
2
|
+
import type { IssueReadFailure } from '#scripts/gh/git-gh-issue-read'
|
|
3
3
|
import { epic_cross_repo } from './epic-cross-repo'
|
|
4
4
|
import type { EpicChild, IssueReference } from './epic-graph'
|
|
5
5
|
import { epic_issue, type EpicIssue } from './epic-issue'
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { git_gh_command } from '#scripts/
|
|
2
|
-
import { EPIC_LABEL, has_any_label } from '#scripts/git/issue-labels'
|
|
1
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
3
2
|
import { cutoff_of, type ScanCutoff } from '#scripts/git/listing-cutoff'
|
|
4
3
|
import { parse_json_array_or_undefined } from '#scripts/git/parse-json-array'
|
|
5
4
|
import type { OpenIssueData } from '#scripts/git/schemas'
|
|
5
|
+
import { EPIC_LABEL, has_any_label } from '#scripts/issue/issue-labels'
|
|
6
6
|
import { z } from 'zod'
|
|
7
7
|
import { epic_parse } from './epic-parse'
|
|
8
8
|
|
|
@@ -200,7 +200,6 @@ const epic_index = {
|
|
|
200
200
|
build_epic_index,
|
|
201
201
|
build_tracking_index,
|
|
202
202
|
fetch_epics,
|
|
203
|
-
opted_in_epic_numbers,
|
|
204
203
|
reachable_epic_numbers,
|
|
205
204
|
withheld_children,
|
|
206
205
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { git_gh_issue_rest } from '#scripts/
|
|
1
|
+
import { git_gh_issue_rest } from '#scripts/gh/git-gh-issue-rest'
|
|
2
2
|
import { parse_json_object_safe } from '#scripts/git/parse-json-array'
|
|
3
3
|
import { blocked_by_schema } from '#scripts/git/schemas'
|
|
4
4
|
import { z } from 'zod'
|
|
@@ -77,18 +77,6 @@ function blocker_references_of(
|
|
|
77
77
|
)
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
// The same blockers as bare numbers, for the callers that predate the qualified read: the planner and
|
|
81
|
-
// the bundler. A projection of the read above rather than a second unwrapping of the connection.
|
|
82
|
-
//
|
|
83
|
-
// **The number alone is lossy, and those callers inherit that.** A blocker in another repository
|
|
84
|
-
// collapses to its number here and can then match a local issue that happens to share it —
|
|
85
|
-
// joshuafolkken/kit#1130 carries the case, which is `epic:bundle` reading a false relation and
|
|
86
|
-
// recording one onto the wrong issue. It predates joshuafolkken/kit#1126 rather than being introduced
|
|
87
|
-
// by it, and threading the repository through the bundler is its own change with its own reach.
|
|
88
|
-
function blockers_of(issue: EpicIssue): Array<number> {
|
|
89
|
-
return blocker_references_of(issue).map((blocker) => blocker.number)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
80
|
function label_names(issue: EpicIssue): Array<string> {
|
|
93
81
|
return issue.labels.map((label) => label.name)
|
|
94
82
|
}
|
|
@@ -157,9 +145,7 @@ function parse_epic_reference(raw = ''): EpicReference | undefined {
|
|
|
157
145
|
const epic_issue = {
|
|
158
146
|
CLOSED,
|
|
159
147
|
blocker_references_of,
|
|
160
|
-
UNKNOWN_STATE,
|
|
161
148
|
parse_epic_issue,
|
|
162
|
-
blockers_of,
|
|
163
149
|
label_names,
|
|
164
150
|
normalize_state,
|
|
165
151
|
is_open,
|
|
@@ -9,6 +9,7 @@ import { epic_graph, type EpicChild } from './epic-graph'
|
|
|
9
9
|
import { epic_rank } from './epic-rank'
|
|
10
10
|
import type { EpicVerdict } from './epic-report'
|
|
11
11
|
import { epic_solo } from './epic-solo'
|
|
12
|
+
import { epic_solo_stale } from './epic-solo-stale'
|
|
12
13
|
import { epic_triage, type TriageVerdict } from './epic-triage'
|
|
13
14
|
|
|
14
15
|
// Which children a repository has room to start right now (joshuafolkken/kit#1491).
|
|
@@ -168,6 +169,7 @@ async function collect(
|
|
|
168
169
|
for (const pool of pools) {
|
|
169
170
|
if (children.length >= wanted) break
|
|
170
171
|
|
|
172
|
+
// eslint-disable-next-line no-await-in-loop -- pools are asked in order until enough children are found
|
|
171
173
|
const answer = await ask_pool(pool, wanted - children.length)
|
|
172
174
|
|
|
173
175
|
children.push(...answer.children)
|
|
@@ -228,7 +230,13 @@ async function offer_for_repo(
|
|
|
228
230
|
|
|
229
231
|
if (triage !== undefined) return triage
|
|
230
232
|
|
|
231
|
-
const read = await
|
|
233
|
+
const { read, notice } = await epic_solo_stale.release(
|
|
234
|
+
await epic_busy.read_repository(request.repo),
|
|
235
|
+
request.repo,
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
if (notice !== undefined) console.error(notice)
|
|
239
|
+
|
|
232
240
|
const free = free_lanes(read, request.limit)
|
|
233
241
|
|
|
234
242
|
if (free === NO_LANES) {
|
|
@@ -245,15 +253,8 @@ async function offer_for_repo(
|
|
|
245
253
|
}
|
|
246
254
|
|
|
247
255
|
const epic_lane_offer = {
|
|
248
|
-
is_held,
|
|
249
|
-
free_lanes,
|
|
250
|
-
wanted_of,
|
|
251
256
|
combine_verdicts,
|
|
252
|
-
candidates_in,
|
|
253
|
-
unseen_candidates,
|
|
254
257
|
dedupe_pools,
|
|
255
|
-
withheld_message,
|
|
256
|
-
collect,
|
|
257
258
|
offer_for_repo,
|
|
258
259
|
}
|
|
259
260
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EPIC_LABEL, has_label_name } from '#scripts/
|
|
1
|
+
import { EPIC_LABEL, has_label_name } from '#scripts/issue/issue-labels'
|
|
2
2
|
import type { EpicChild } from './epic-graph'
|
|
3
3
|
|
|
4
4
|
// Whether a task-list row points at another epic (joshuafolkken/kit#1476).
|
|
@@ -118,6 +118,7 @@ async function read_snapshots(
|
|
|
118
118
|
const notices: Array<string> = []
|
|
119
119
|
|
|
120
120
|
for (const reference of unique_references(references, current_repo)) {
|
|
121
|
+
// eslint-disable-next-line no-await-in-loop -- the first refusal ends the read, so later reads are not spent
|
|
121
122
|
const outcome = await read_one(reference, current_repo)
|
|
122
123
|
|
|
123
124
|
if (outcome.refusal !== undefined) return { reads, notices, refusal: outcome.refusal }
|
|
@@ -129,11 +130,8 @@ async function read_snapshots(
|
|
|
129
130
|
|
|
130
131
|
const epic_next_read = {
|
|
131
132
|
FOREIGN_EPIC,
|
|
132
|
-
epic_repo_of,
|
|
133
133
|
childless,
|
|
134
134
|
unique_references,
|
|
135
|
-
is_childless,
|
|
136
|
-
read_one,
|
|
137
135
|
read_snapshots,
|
|
138
136
|
}
|
|
139
137
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { repo_discovery } from '#scripts/discovery/repo-discovery'
|
|
4
|
-
import { git_gh_command } from '#scripts/
|
|
4
|
+
import { git_gh_command } from '#scripts/gh/git-gh-command'
|
|
5
5
|
import { PROJECT_ROOT } from '#scripts/init/init-paths'
|
|
6
6
|
import { josh_environment_file } from '#scripts/josh/josh-environment-file'
|
|
7
7
|
import { lane_capacity } from '#scripts/lane/lane-capacity'
|
|
@@ -441,27 +441,18 @@ async function main(argv: ReadonlyArray<string>): Promise<void> {
|
|
|
441
441
|
}
|
|
442
442
|
|
|
443
443
|
const epic_next = {
|
|
444
|
-
USAGE,
|
|
445
444
|
EXTERNAL_NOTICE,
|
|
446
445
|
FOREIGN_EPIC,
|
|
447
|
-
body_anomaly,
|
|
448
|
-
unreadable_anomaly,
|
|
449
446
|
is_order_declared,
|
|
450
447
|
repo_verdict,
|
|
451
|
-
offer_children,
|
|
452
|
-
report_offer,
|
|
453
448
|
UNCHECKED_EXCLUSION,
|
|
454
449
|
split_at_flag,
|
|
455
|
-
parse_references,
|
|
456
450
|
parse_options,
|
|
457
|
-
note_external,
|
|
458
451
|
refuse_reads,
|
|
459
452
|
views_of,
|
|
460
453
|
run_epics,
|
|
461
454
|
decide,
|
|
462
455
|
report,
|
|
463
|
-
run,
|
|
464
|
-
main,
|
|
465
456
|
}
|
|
466
457
|
|
|
467
458
|
// `.env` is read here rather than through the dispatcher's `tsx_arguments`: declaring any would
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { epic_body } from './epic-body'
|
|
2
2
|
import { epic_parse } from './epic-parse'
|
|
3
3
|
|
|
4
|
-
// Promoting an existing issue into an epic.
|
|
5
|
-
//
|
|
6
|
-
// The discussion that concluded "this is really several issues" is almost always *inside* an
|
|
7
|
-
// existing issue, and that discussion is usually the split rationale itself. Creating a separate
|
|
8
|
-
// epic leaves two issues tracking one topic, so the promotion appends the epic's sections to the
|
|
9
|
-
// body rather than replacing it (joshuafolkken/kit#865).
|
|
10
|
-
|
|
11
|
-
const EPIC_SECTION_MARKER = '## Progress'
|
|
12
4
|
const PROMOTED_HEADING = '## Split into children'
|
|
13
5
|
|
|
14
6
|
interface PromoteInput {
|
|
@@ -90,7 +82,6 @@ function find_tracking_error(body: string, children: ReadonlyArray<number>): str
|
|
|
90
82
|
}
|
|
91
83
|
|
|
92
84
|
const epic_promote = {
|
|
93
|
-
EPIC_SECTION_MARKER,
|
|
94
85
|
PROMOTED_HEADING,
|
|
95
86
|
has_conflicting_tracking,
|
|
96
87
|
conflict_reason,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { issue_rank } from '#scripts/
|
|
1
|
+
import { issue_rank } from '#scripts/issue/issue-rank'
|
|
2
2
|
import { epic_graph, type EpicChild } from './epic-graph'
|
|
3
3
|
|
|
4
4
|
// `issue-rank.ts`'s keys over graph children (joshuafolkken/kit#2928), for both offer paths that hand
|
|
@@ -32,6 +32,6 @@ function rank(
|
|
|
32
32
|
}))
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
const epic_rank = {
|
|
35
|
+
const epic_rank = { rank }
|
|
36
36
|
|
|
37
37
|
export { epic_rank }
|